libSceVrTracker (#174)

* libSceVrTracker

* Merge branch 'trunk' of https://github.com/Ordinary205/fpPS4 into trunk

* +

* +

---------

Co-authored-by: red-prig <vdpasha@mail.ru>
This commit is contained in:
Ordinary205 2024-01-20 22:10:40 +04:00 committed by GitHub
parent 373a2e019a
commit 5679192cb5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 295 additions and 0 deletions

View File

@ -7,9 +7,264 @@ interface
uses
ps4_program,
ps4_libSceCamera,
ps4_time,
Classes,
SysUtils;
const
SCE_VR_TRACKER_MAX_LED_NUM=2;
//SceVrTrackerDeviceType
SCE_VR_TRACKER_DEVICE_HMD =0;
SCE_VR_TRACKER_DEVICE_DUALSHOCK4=1;
SCE_VR_TRACKER_DEVICE_MOVE =2;
SCE_VR_TRACKER_DEVICE_GUN =3;
//SceVrTrackerUpdateMotionSensorDataOperationMode
SCE_VR_TRACKER_UPDATE_MOTION_SENSORDATA_OPERATION_MODE_DEVICE_TYPE=0;
SCE_VR_TRACKER_UPDATE_MOTION_SENSORDATA_OPERATION_MODE_HANDLE =1;
//SceVrTrackerResultType
SCE_VR_TRACKER_RESULT_PREDICTED=0;
//SceVrTrackerOrientationType
SCE_VR_TRACKER_ORIENTATION_ABSOLUTE=0;
SCE_VR_TRACKER_ORIENTATION_RELATIVE=1;
//SceVrTrackerUsageType
SCE_VR_TRACKER_USAGE_DEFAULT =0;
SCE_VR_TRACKER_USAGE_OPTIMIZED_FOR_HMD_USER=1;
//SceVrTrackerDebugMarkerType
SCE_VR_TRACKER_DEBUG_MARKER_UNSPECIFIED =0;
SCE_VR_TRACKER_DEBUG_MARKER_DEFAULT_UPDATE=1;
SCE_VR_TRACKER_DEBUG_MARKER_FINAL_UPDATE =2;
SCE_VR_TRACKER_DEBUG_MARKER_OTHER =3;
//SceVrTrackerRecalibrateNecessityType
SCE_VR_TRACKER_RECALIBRATE_NECESSITY_NOTHING =0;
SCE_VR_TRACKER_RECALIBRATE_NECESSITY_POSITION=4;
//SceVrTrackerPlayareaBrightnessRiskType
SCE_VR_TRACKER_PLAYAREA_BRIGHTNESS_RISK_LOW =0;
SCE_VR_TRACKER_PLAYAREA_BRIGHTNESS_RISK_HIGH=5;
SCE_VR_TRACKER_PLAYAREA_BRIGHTNESS_RISK_MAX =10;
//SceVrTrackerLedColor
SCE_VR_TRACKER_LED_COLOR_BLUE =0;
SCE_VR_TRACKER_LED_COLOR_RED =1;
SCE_VR_TRACKER_LED_COLOR_CYAN =2;
SCE_VR_TRACKER_LED_COLOR_MAGENTA=3;
SCE_VR_TRACKER_LED_COLOR_YELLOW =4;
SCE_VR_TRACKER_LED_COLOR_GREEN =2;
//SceVrTrackerStatus
SCE_VR_TRACKER_STATUS_NOT_STARTED =0;
SCE_VR_TRACKER_STATUS_TRACKING =1;
SCE_VR_TRACKER_STATUS_NOT_TRACKING=2;
SCE_VR_TRACKER_STATUS_CALIBRATING =3;
//SceVrTrackerQuality
SCE_VR_TRACKER_QUALITY_NONE =0;
SCE_VR_TRACKER_QUALITY_NOT_VISIBLE=3;
SCE_VR_TRACKER_QUALITY_PARTIAL =6;
SCE_VR_TRACKER_QUALITY_FULL =9;
//SceVrTrackerLedAdjustmentStatus
SCE_VR_TRACKER_LED_ADJUSTMENT_NOT_USED=0;
SCE_VR_TRACKER_LED_ADJUSTMENT_USED =1;
//SceVrTrackerHmdRearTrackingStatus
SCE_VR_TRACKER_REAR_TRACKING_NOT_READY=0;
SCE_VR_TRACKER_REAR_TRACKING_READY =1;
//SceVrTrackerPreferenceType
SCE_VR_TRACKER_PREFERENCE_FAR_POSITION =0;
SCE_VR_TRACKER_PREFERENCE_STABLE_POSITION=1;
//SceVrTrackerCameraMetaCheckMode
SCE_VR_TRACKER_CAMERA_META_CHECK_ENABLE =0;
SCE_VR_TRACKER_CAMERA_META_CHECK_DISABLE=1;
//SceVrTrackerDevicePermitType
SCE_VR_TRACKER_DEVICE_PERMIT_ALL =0;
SCE_VR_TRACKER_DEVICE_PERMIT_HMD_ONLY=1;
//SceVrTrackerRobustnessLevel
SCE_VR_TRACKER_ROBUSTNESS_LEVEL_HIGH =0;
SCE_VR_TRACKER_ROBUSTNESS_LEVEL_LOW =3;
SCE_VR_TRACKER_ROBUSTNESS_LEVEL_MEDIUM=6;
SCE_VR_TRACKER_ROBUSTNESS_LEVEL_LEGACY=99;
SCE_VR_TRACKER_ERROR_ARGUMENT_INVALID=-2128214010; //0x81260806;
type
pSceFQuaternion=^SceFQuaternion;
SceFQuaternion=packed record
x,y,z,w:Single;
end;
pSceVrTrackerDeviceType=^SceVrTrackerDeviceType;
SceVrTrackerDeviceType=Integer;
pSceVrTrackerPreferenceType=^SceVrTrackerPreferenceType;
SceVrTrackerPreferenceType=Integer;
pSceVrTrackerCameraMetaCheckMode=^SceVrTrackerCameraMetaCheckMode;
SceVrTrackerCameraMetaCheckMode=Integer;
pSceVrTrackerDevicePermitType=^SceVrTrackerDevicePermitType;
SceVrTrackerDevicePermitType=Integer;
pSceVrTrackerRobustnessLevel=^SceVrTrackerRobustnessLevel;
SceVrTrackerRobustnessLevel=Integer;
pSceVrTrackerGpuSubmitParam=^SceVrTrackerGpuSubmitParam;
SceVrTrackerGpuSubmitParam=packed record
sizeOfThis :Integer;
padTrackingPreference :SceVrTrackerPreferenceType;
cameraMetaCheckMode :SceVrTrackerCameraMetaCheckMode;
trackingDevicePermitType:SceVrTrackerDevicePermitType;
robustnessLevel :SceVrTrackerRobustnessLevel;
reserved00 :array[0..9] of DWORD;
reserved01 :DWORD;
cameraFrameData :SceCameraFrameData;
end;
pSceVrTrackerResultType=^SceVrTrackerResultType;
SceVrTrackerResultType=Integer;
pSceVrTrackerOrientationType=^SceVrTrackerOrientationType;
SceVrTrackerOrientationType=Integer;
pSceVrTrackerUsageType=^SceVrTrackerUsageType;
SceVrTrackerUsageType=Integer;
pSceVrTrackerDebugMarkerType=^SceVrTrackerDebugMarkerType;
SceVrTrackerDebugMarkerType=Integer;
pSceVrTrackerGetResultParam=^SceVrTrackerGetResultParam;
SceVrTrackerGetResultParam=packed record
sizeOfThis :Integer;
handle :Integer;
resultType :SceVrTrackerResultType;
reserved00 :DWORD;
predictionTime :QWORD;
orientationType:SceVrTrackerOrientationType;
reserved01 :DWORD;
usageType :SceVrTrackerUsageType;
userFrameNumber:DWORD;
debugMarkerType:SceVrTrackerDebugMarkerType;
reserved02 :array[0..1] of DWORD;
end;
pSceVrTrackerRecalibrateNecessityType=^SceVrTrackerRecalibrateNecessityType;
SceVrTrackerRecalibrateNecessityType=Integer;
pSceVrTrackerPlayareaBrightnessRiskType=^SceVrTrackerPlayareaBrightnessRiskType;
SceVrTrackerPlayareaBrightnessRiskType=Integer;
pSceVrTrackerLedColor=^SceVrTrackerLedColor;
SceVrTrackerLedColor=Integer;
pSceVrTrackerStatus=^SceVrTrackerStatus;
SceVrTrackerStatus=Integer;
pSceVrTrackerQuality=^SceVrTrackerQuality;
SceVrTrackerQuality=Integer;
pSceVrTrackerHmdRearTrackingStatus=^SceVrTrackerHmdRearTrackingStatus;
SceVrTrackerHmdRearTrackingStatus=Integer;
pSceVrTrackerPoseData=^SceVrTrackerPoseData;
SceVrTrackerPoseData=packed record
position :SceFVector3;
reserved00 :array[0..0] of DWORD;
orientation:SceFQuaternion;
reserved01 :array[0..7] of DWORD;
end;
pSceVrTrackerHmdInfo=^SceVrTrackerHmdInfo;
SceVrTrackerHmdInfo=packed record
devicePose :SceVrTrackerPoseData;
leftEyePose :SceVrTrackerPoseData;
rightEyePose :SceVrTrackerPoseData;
headPose :SceVrTrackerPoseData;
rearTrackingStatus :SceVrTrackerHmdRearTrackingStatus;
reserved00 :array[0..2] of DWORD;
sensorReadSystemTimestamp:QWORD;
reserved01 :array[0..9] of DWORD;
end;
pSceVrTrackerPadInfo=^SceVrTrackerPadInfo;
SceVrTrackerPadInfo=packed record
devicePose:SceVrTrackerPoseData;
reserved:array[0..63] of DWORD;
end;
pSceVrTrackerMoveInfo=^SceVrTrackerMoveInfo;
SceVrTrackerMoveInfo=packed record
devicePose:SceVrTrackerPoseData;
reserved:array[0..63] of DWORD;
end;
pSceVrTrackerLedAdjustmentStatus=^SceVrTrackerLedAdjustmentStatus;
SceVrTrackerLedAdjustmentStatus=Integer;
pSceVrTrackerLedResult=^SceVrTrackerLedResult;
SceVrTrackerLedResult=packed record
x,y,rx,ry:single;
reserved:array[0..3] of DWORD;
end;
pSceVrTrackerResultData=^SceVrTrackerResultData;
SceVrTrackerResultData=packed record
handle :Integer;
connected :DWORD;
reserved00 :array[0..1] of DWORD;
timestamp :QWORD;
deviceTimestamp :QWORD;
recalibrateNecessity :SceVrTrackerRecalibrateNecessityType;
playareaBrightnessRisk :SceVrTrackerPlayareaBrightnessRiskType;
reserved01 :array[0..1] of QWORD;
ledColor :SceVrTrackerLedColor;
status :SceVrTrackerStatus;
positionQuality :SceVrTrackerQuality;
orientationQuality :SceVrTrackerQuality;
velocity :SceFVector3;
acceleration :SceFVector3;
angularVelocity :SceFVector3;
angularAcceleration :SceFVector3;
cameraOrientation :SceFQuaternion;
union :packed record
Case Byte of
0:(hmdInfo :SceVrTrackerHmdInfo);
1:(padInfo :SceVrTrackerPadInfo);
2:(moveInfo :SceVrTrackerMoveInfo);
3:(gunInfo :SceVrTrackerMoveInfo);
end;
userFrameNumber :DWORD;
ledAdjustmentStatus :SceVrTrackerLedAdjustmentStatus;
timestampOfLedResult :QWORD;
reserved04 :array[0..1] of DWORD;
numberOfLedResult :array[0..SCE_CAMERA_MAX_DEVICE_NUM-1] of Integer;
reserved05 :array[0..3] of DWORD;
led :array[0..SCE_CAMERA_MAX_DEVICE_NUM-1,0..SCE_VR_TRACKER_MAX_LED_NUM-1] of SceVrTrackerLedResult;
end;
pSceVrTrackerUpdateMotionSensorDataOperationMode=^SceVrTrackerUpdateMotionSensorDataOperationMode;
SceVrTrackerUpdateMotionSensorDataOperationMode=Integer;
pSceVrTrackerUpdateMotionSensorDataParam=^SceVrTrackerUpdateMotionSensorDataParam;
SceVrTrackerUpdateMotionSensorDataParam=packed record
sizeOfThis :DWORD;
deviceType :SceVrTrackerDeviceType;
operationMode:SceVrTrackerUpdateMotionSensorDataOperationMode;
handle :Integer;
reserved :array[0..3] of DWORD;
end;
implementation
function ps4_sceVrTrackerQueryMemory(param,pResult:Pointer):Integer; SysV_ABI_CDecl;
@ -27,6 +282,40 @@ begin
Result:=0;
end;
function ps4_sceVrTrackerRegisterDevice(const deviceType:SceVrTrackerDeviceType;
const handle:Integer):Integer; SysV_ABI_CDecl;
begin
Result:=0;
end;
function ps4_sceVrTrackerGpuSubmit(const param:pSceVrTrackerGpuSubmitParam):Integer; SysV_ABI_CDecl;
begin
Result:=0;
end;
function ps4_sceVrTrackerGetTime(time:pQWORD):Integer; SysV_ABI_CDecl;
begin
if (time=nil) then Exit(SCE_VR_TRACKER_ERROR_ARGUMENT_INVALID);
time^:=ps4_sceKernelGetProcessTime;
Result:=0;
end;
function ps4_sceVrTrackerGpuWaitAndCpuProcess():Integer; SysV_ABI_CDecl;
begin
Result:=0;
end;
function ps4_sceVrTrackerGetResult(const param:pSceVrTrackerGetResultParam;_result:pSceVrTrackerResultData):Integer; SysV_ABI_CDecl;
begin
Result:=0;
end;
function ps4_sceVrTrackerUpdateMotionSensorData(const param:pSceVrTrackerUpdateMotionSensorDataParam):Integer; SysV_ABI_CDecl;
begin
Result:=0;
end;
function Load_libSceVrTracker(Const name:RawByteString):TElf_node;
var
lib:PLIBRARY;
@ -37,6 +326,12 @@ begin
lib^.set_proc($2BBCA162BB0804F7,@ps4_sceVrTrackerQueryMemory);
lib^.set_proc($424465EE90114FD3,@ps4_sceVrTrackerInit);
lib^.set_proc($201BF83F7AB5A50D,@ps4_sceVrTrackerTerm);
lib^.set_proc($B0887C1B071EBDA4,@ps4_sceVrTrackerRegisterDevice);
lib^.set_proc($4D57A00CC2DA041F,@ps4_sceVrTrackerGpuSubmit);
lib^.set_proc($5E8796CD796B9CCC,@ps4_sceVrTrackerGetTime);
lib^.set_proc($011860A57BF0A11D,@ps4_sceVrTrackerGpuWaitAndCpuProcess);
lib^.set_proc($EFA381BEBAD05D47,@ps4_sceVrTrackerGetResult);
lib^.set_proc($F5FBC73146ECA26E,@ps4_sceVrTrackerUpdateMotionSensorData);
end;
initialization