diff --git a/fpPS4.lpi b/fpPS4.lpi index df663402..23cfa5f3 100644 --- a/fpPS4.lpi +++ b/fpPS4.lpi @@ -1575,6 +1575,11 @@ + + + + + diff --git a/gui/game_run.pas b/gui/game_run.pas index f4c23993..71eba170 100644 --- a/gui/game_run.pas +++ b/gui/game_run.pas @@ -83,6 +83,7 @@ uses ps4_libSceNpGameIntent, ps4_libSceNpWebApi, ps4_libSceNpWebApi2, + ps4_libSceNpSns, ps4_libSceRemoteplay, ps4_libSceScreenShot, ps4_libSceSaveData, diff --git a/src/np/ps4_libscenpgameintent.pas b/src/np/ps4_libscenpgameintent.pas index ced7eb96..c8e0dc20 100644 --- a/src/np/ps4_libscenpgameintent.pas +++ b/src/np/ps4_libscenpgameintent.pas @@ -10,6 +10,9 @@ uses implementation +uses + ps4_libSceUserService; + const SCE_NP_GAME_INTENT_TYPE_MAX_SIZE=(32+1); SCE_NP_GAME_INTENT_DATA_MAX_SIZE=(16*1024+1); @@ -30,7 +33,7 @@ type pSceNpGameIntentInfo=^SceNpGameIntentInfo; SceNpGameIntentInfo=packed record size :QWORD; - userId :Integer; + userId :SceUserServiceUserId; intentType:array[0..SCE_NP_GAME_INTENT_TYPE_MAX_SIZE-1] of AnsiChar; padding :array[0..6] of Byte; reserved :array[0..255] of Byte; diff --git a/src/np/ps4_libscenpsns.pas b/src/np/ps4_libscenpsns.pas new file mode 100644 index 00000000..f9ff6dcf --- /dev/null +++ b/src/np/ps4_libscenpsns.pas @@ -0,0 +1,103 @@ +unit ps4_libSceNpSns; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +uses + subr_dynlib; + +implementation + +uses + ps4_libSceUserService; + +const + SCE_NP_SNS_FACEBOOK_ERROR_UNKNOWN =-2141903359; // 0x80552601 + SCE_NP_SNS_FACEBOOK_ERROR_INVALID_ARGUMENT =-2141903358; // 0x80552602 + SCE_NP_SNS_FACEBOOK_ERROR_OUT_OF_MEMORY =-2141903357; // 0x80552603 + SCE_NP_SNS_FACEBOOK_ERROR_EXCEEDS_MAX =-2141903356; // 0x80552604 + SCE_NP_SNS_FACEBOOK_ERROR_UGM_RESTRICTION =-2141903355; // 0x80552605 + SCE_NP_SNS_FACEBOOK_ERROR_ABORTED =-2141903354; // 0x80552606 + SCE_NP_SNS_FACEBOOK_ERROR_ACCOUNT_NOT_BOUND =-2141903353; // 0x80552607 + SCE_NP_SNS_FACEBOOK_ERROR_CANCELED_BY_SYSTEM=-2141903352; // 0x80552608 + SCE_NP_SNS_FACEBOOK_ERROR_SUB_ACCOUNT =-2141903351; // 0x80552609 + +const + SCE_NP_SNS_FACEBOOK_MAX_REQUEST_NUM =16; + SCE_NP_SNS_FACEBOOK_PERMISSIONS_LENGTH_MAX =1023; + SCE_NP_SNS_FACEBOOK_ACCESS_TOKEN_LENGTH_MAX=4096; + +type + pSceNpSnsFacebookAccessTokenParam=^SceNpSnsFacebookAccessTokenParam; + SceNpSnsFacebookAccessTokenParam=packed record + size :QWORD; //sizeof(SceNpSnsFacebookAccessTokenParam) + userId :SceUserServiceUserId; + _align :Integer; + fbAppId :QWORD; + permissions:array[0..SCE_NP_SNS_FACEBOOK_PERMISSIONS_LENGTH_MAX] of AnsiChar; + reserved :array[0..31] of Byte; + end; + + pSceNpSnsFacebookAccessTokenResult=^SceNpSnsFacebookAccessTokenResult; + SceNpSnsFacebookAccessTokenResult=packed record + expiration :QWORD; //(sec) + accessToken:array[0..SCE_NP_SNS_FACEBOOK_ACCESS_TOKEN_LENGTH_MAX] of AnsiChar; + reserved :array[0..38] of Byte; + end; + +function ps4_sceNpSnsFacebookCreateRequest():Integer; +begin + Result:=1; +end; + +function ps4_sceNpSnsFacebookDeleteRequest(reqId:Integer):Integer; +begin + Result:=0; +end; + +function ps4_sceNpSnsFacebookAbortRequest(reqId:Integer):Integer; +begin + Result:=0; +end; + +function ps4_sceNpSnsFacebookGetAccessToken( + reqId :Integer; + param :pSceNpSnsFacebookAccessTokenParam; + pres :pSceNpSnsFacebookAccessTokenResult + ):Integer; +begin + if (param=nil) or (pres=nil) then + begin + Exit(SCE_NP_SNS_FACEBOOK_ERROR_INVALID_ARGUMENT); + end; + + pres^:=Default(SceNpSnsFacebookAccessTokenResult); + pres^.accessToken[0]:='0'; + + Result:=0; +end; + +function Load_libSceNpSns(name:pchar):p_lib_info; +var + lib:TLIBRARY; +begin + Result:=obj_new_int('libSceNpSns'); + + lib:=Result^.add_lib('libSceNpSns'); + + lib.set_proc($3A84E37F197CFF02,@ps4_sceNpSnsFacebookCreateRequest); + lib.set_proc($A53BC0295D624241,@ps4_sceNpSnsFacebookDeleteRequest); + lib.set_proc($FCB25B17D6FF5A1A,@ps4_sceNpSnsFacebookAbortRequest); + lib.set_proc($56DC92F172C1A8D1,@ps4_sceNpSnsFacebookGetAccessToken); +end; + +var + stub:t_int_file; + +initialization + RegisteredInternalFile(stub,'libSceNpSns.prx',@Load_libSceNpSns); + +end. + diff --git a/src/ps4_libscegamelivestreaming.pas b/src/ps4_libscegamelivestreaming.pas index 305a4ef2..3f89804a 100644 --- a/src/ps4_libscegamelivestreaming.pas +++ b/src/ps4_libscegamelivestreaming.pas @@ -6,7 +6,8 @@ unit ps4_libSceGameLiveStreaming; interface uses - subr_dynlib; + subr_dynlib, + ps4_libSceUserService; const SCE_GAME_LIVE_STREAMING_MAX_SOCIAL_FEEDBACK_PRESET_TEXT_LENGTH=32; @@ -49,13 +50,13 @@ type isOnAir :Boolean; _align :array[0..2] of Byte; spectatorCounts:DWORD; - userId :Integer; + userId :SceUserServiceUserId; reserved :array[0..59] of Byte; end; pSceGameLiveStreamingStatus2=^SceGameLiveStreamingStatus2; SceGameLiveStreamingStatus2=packed record - userId :Integer; + userId :SceUserServiceUserId; isOnAir :Boolean; _align :array[0..2] of Byte; spectatorCounts :DWORD; diff --git a/src/ps4_libsceime.pas b/src/ps4_libsceime.pas index 5892f039..1dbfcab9 100644 --- a/src/ps4_libsceime.pas +++ b/src/ps4_libsceime.pas @@ -16,7 +16,8 @@ uses atomic, mpmc_queue, Classes, - SysUtils; + SysUtils, + ps4_libSceUserService; const SCE_IME_ERROR_BUSY =-2135162879; // 0x80BC0001 @@ -634,7 +635,7 @@ type pSceImeKeyboardInfo=^SceImeKeyboardInfo; SceImeKeyboardInfo=packed record - userId :Integer; + userId :SceUserServiceUserId; device :Integer; //SceImeKeyboardDeviceType _type :Integer; //SceImeKeyboardType repeatDelay:DWORD; @@ -645,7 +646,7 @@ type pSceImeKeyboardResourceIdArray=^SceImeKeyboardResourceIdArray; SceImeKeyboardResourceIdArray=packed record - userId :Integer; + userId :SceUserServiceUserId; resourceId:array[0..SCE_IME_KEYBOARD_MAX_NUMBER-1] of DWORD; end; @@ -654,7 +655,7 @@ type character :WideChar; status :DWORD; _type :Integer; //SceImeKeyboardType - userId :Integer; + userId :SceUserServiceUserId; resourceId:DWORD; _align :Integer; timestamp :QWORD; //SceRtcTick @@ -1134,7 +1135,7 @@ begin end; function ps4_sceImeKeyboardOpen( - userId:Integer; + userId:SceUserServiceUserId; param:pSceImeKeyboardParam ):Integer; begin @@ -1207,7 +1208,7 @@ begin Result:=0; end; -function ps4_sceImeKeyboardGetResourceId(userId:Integer;resourceIdArray:pSceImeKeyboardResourceIdArray):Integer; +function ps4_sceImeKeyboardGetResourceId(userId:SceUserServiceUserId;resourceIdArray:pSceImeKeyboardResourceIdArray):Integer; begin if (keyboard_init=0) then Exit(SCE_IME_ERROR_NOT_OPENED); if (resourceIdArray=nil) then Exit(SCE_IME_ERROR_INVALID_ADDRESS); diff --git a/src/ps4_libsceremoteplay.pas b/src/ps4_libsceremoteplay.pas index 40cfe1f4..eff11390 100644 --- a/src/ps4_libsceremoteplay.pas +++ b/src/ps4_libsceremoteplay.pas @@ -10,6 +10,9 @@ uses implementation +uses + ps4_libSceUserService; + const SCE_REMOTEPLAY_HEAP_SIZE=6*1024; @@ -33,7 +36,7 @@ const SCE_REMOTEPLAY_CONNECTION_STATUS_DISCONNECT=0; SCE_REMOTEPLAY_CONNECTION_STATUS_CONNECT =1; -function ps4_sceRemoteplayGetConnectionStatus(userId:Integer;pStatus:PInteger):Integer; +function ps4_sceRemoteplayGetConnectionStatus(userId:SceUserServiceUserId;pStatus:PInteger):Integer; begin if (pStatus<>nil) then begin