From 2c2739d7a1dfeb1f58f496a313bbdce62db2570e Mon Sep 17 00:00:00 2001 From: psxdev Date: Tue, 3 Oct 2017 00:17:46 +0200 Subject: [PATCH] initial --- README.md | 10 ++++----- core/libkernels.mk | 2 ++ core/stub.mk | 6 +++++ include/sce/gnmdriver.h | 6 +++++ include/sce/kernel.h | 3 +++ include/sce/pad.h | 16 +++++-------- include/sce/systemservice.h | 4 ++++ include/sce/types/kernel.h | 4 ++++ include/sce/types/pad.h | 40 +++++++++++++++++++++++++++++++++ include/sce/types/userservice.h | 6 +++++ include/sce/types/videoout.h | 27 ++++++++++++++++++++++ include/sce/userservice.h | 7 ++++++ include/sce/videoout.h | 18 +++++++++++++++ 13 files changed, 133 insertions(+), 16 deletions(-) create mode 100644 include/sce/gnmdriver.h create mode 100644 include/sce/systemservice.h create mode 100644 include/sce/types/pad.h create mode 100644 include/sce/types/userservice.h create mode 100644 include/sce/types/videoout.h create mode 100644 include/sce/userservice.h create mode 100644 include/sce/videoout.h diff --git a/README.md b/README.md index 54f3a5a..56641a8 100644 --- a/README.md +++ b/README.md @@ -62,22 +62,22 @@ development will be as convenient as a local installation. With the benefit that do not have to build ps4sdk yourself. However, the image is a bit large due to the clang tool-chain. ```bash -# Make sure newest container is used -docker pull ps4dev/ps4sdk +# Make sure newest container is used (only do this as needed because you will pull a new one for every commit) +docker pull ps4dev/elf-loader # Run docker for interactive development # It should not be used to store data (-rm will auto remove it after exit) # See volumes/-v on how to mount your code into the container -docker run (-v ... ) -rm -i -t ps4dev/ps4sdk bash +docker run (-v ... ) --rm -i -t ps4dev/ps4sdk bash ``` From there, you can clone the elf-loader and examples into your volume, build and use them. A stand alone elf-loader container is also available (but currently a bit large): ```bash -# Make sure newest container is used +# Make sure newest container is used (only do this as needed) docker pull ps4dev/elf-loader # Run the elf loader (listens on port 5350) -docker run -p 5350:5350 -rm ps4dev/elf-loader& +docker run -p 5350:5350 --rm ps4dev/elf-loader& # Stop elf loader docker kill $(docker ps -q -f ancestor=ps4dev/elf-loader) ``` diff --git a/core/libkernels.mk b/core/libkernels.mk index d73a2c0..0409214 100644 --- a/core/libkernels.mk +++ b/core/libkernels.mk @@ -267,7 +267,9 @@ sceKernelAddUserEvent \ sceKernelAllocateDirectMemory \ sceKernelCreateEqueue \ sceKernelDeleteEqueue \ +sceKernelWaitEqueue \ sceKernelDlsym \ +sceKernelGetDirectMemorySize \ sceKernelGetCurrentCpu \ sceKernelGetModuleInfo \ sceKernelGetModuleList \ diff --git a/core/stub.mk b/core/stub.mk index 8758468..398f7de 100644 --- a/core/stub.mk +++ b/core/stub.mk @@ -21,6 +21,12 @@ $(eval $(call generateModule, libSceNet, sceNetAccept sceNetBind sceNetConnect s $(eval $(call generateModule, libScePad, scePadClose scePadInit scePadOpen scePadRead scePadReadState)) $(eval $(call generateModule, libSceSysmodule, sceSysmoduleIsLoaded sceSysmoduleLoadModule sceSysmoduleUnloadModule)) $(eval $(call generateModule, libSceUsbd, sceUsbdBulkTransfer sceUsbdCheckConnected sceUsbdClearHalt sceUsbdClose sceUsbdControlTransfer sceUsbdExit sceUsbdFreeConfigDescriptor sceUsbdFreeDeviceList sceUsbdGetActiveConfigDescriptor sceUsbdGetConfigDescriptor sceUsbdGetConfigDescriptorByValue sceUsbdGetDeviceDescriptor sceUsbdGetDeviceList sceUsbdInit sceUsbdInterruptTransfer sceUsbdOpen sceUsbdOpenDeviceWithVidPid sceUsbdResetDevice sceUsbdSetInterfaceAltSetting)) +$(eval $(call generateModule, libSceUserService, sceUserServiceInitialize sceUserServiceTerminate sceUserServiceGetLoginUserIdList sceUserServiceGetEvent sceUserServiceGetInitialUser sceUserServiceGetUserName sceUserServiceGetUserColor)) +$(eval $(call generateModule, libSceVideoOut, sceVideoOutOpen sceVideoOutClose sceVideoOutRegisterBuffers sceVideoOutUnregisterBuffers sceVideoOutSubmitFlip sceVideoOutSetBufferAttribute sceVideoOutSetFlipRate sceVideoOutAddFlipEvent sceVideoOutGetFlipStatus)) +$(eval $(call generateModule, libSceGnmDriver, sceGnmFlushGarlic)) +$(eval $(call generateModule, libSceSystemService, sceSystemServiceHideSplashScreen)) + + # no need to touch, generates non-module libs $(eval $(call generateLibraryLarge, kern_function, libps4Kernel, none, $(kerns))) diff --git a/include/sce/gnmdriver.h b/include/sce/gnmdriver.h new file mode 100644 index 0000000..4d71139 --- /dev/null +++ b/include/sce/gnmdriver.h @@ -0,0 +1,6 @@ +#pragma once +#include + + +int sceGnmFlushGarlic(); + diff --git a/include/sce/kernel.h b/include/sce/kernel.h index de9ce86..768dea8 100644 --- a/include/sce/kernel.h +++ b/include/sce/kernel.h @@ -28,6 +28,9 @@ int sceKernelCreateEqueue(SceKernelEqueue *eq, const char *name); int sceKernelDeleteEqueue(SceKernelEqueue eq); int sceKernelAddUserEvent(SceKernelEqueue eq, int id); int sceKernelAddReadEvent(SceKernelEqueue eq, int fd, size_t size, void *data); +int sceKernelWaitEqueue(SceKernelEqueue eq, SceKernelEvent *ev, int num, int *out, SceKernelUseconds *timo); + +size_t sceKernelGetDirectMemorySize(); /* more interresting wrappers */ int sceKernelAllocateDirectMemory(off_t searchStart, off_t searchEnd, size_t length, size_t alignment, int type, off_t *physicalAddressDestination); diff --git a/include/sce/pad.h b/include/sce/pad.h index 45b9070..1264d9e 100644 --- a/include/sce/pad.h +++ b/include/sce/pad.h @@ -1,18 +1,12 @@ #pragma once #include -#include +#include +#include int scePadInit(void); -int scePadOpen(int userID, int, int, void *); +int scePadOpen(SceUserServiceUserId userId,int type,int index,uint8_t *param); int scePadClose(int handle); -int scePadRead(int handle, void *data, int count); -int scePadReadState(int handle, void *data); +int scePadRead(int handle, ScePadData *data, int count); +int scePadReadState(int handle, ScePadData *data); -/* unreversed */ -int64_t scePadResetOrientation(); -int64_t scePadSetAngularVelocityDeadbandState(); -int64_t scePadSetLightBar(); -int64_t scePadSetMotionSensorState(); -int64_t scePadSetTiltCorrectionState(); -int64_t scePadSetVibration(); diff --git a/include/sce/systemservice.h b/include/sce/systemservice.h new file mode 100644 index 0000000..86e180a --- /dev/null +++ b/include/sce/systemservice.h @@ -0,0 +1,4 @@ +#pragma once + +#include +int sceSystemServiceHideSplashScreen(); diff --git a/include/sce/types/kernel.h b/include/sce/types/kernel.h index b40ae1c..eb55c79 100644 --- a/include/sce/types/kernel.h +++ b/include/sce/types/kernel.h @@ -2,11 +2,14 @@ #include #include +#include #ifndef MAP_TYPE #define MAP_TYPE 0x0f #endif + + typedef struct SceKernelModuleSegmentInfo { void *address; @@ -34,3 +37,4 @@ typedef void *ScePthreadMutexattr; typedef uint32_t SceKernelModule; typedef uint64_t SceKernelEqueue; +typedef struct kevent SceKernelEvent; diff --git a/include/sce/types/pad.h b/include/sce/types/pad.h new file mode 100644 index 0000000..88f6396 --- /dev/null +++ b/include/sce/types/pad.h @@ -0,0 +1,40 @@ +#pragma once + +#include + +typedef struct vec_float3 +{ + float x; + float y; + float z; +}vec_float3; + +typedef struct vec_float4 +{ + float x; + float y; + float z; + float w; +}vec_float4; + +typedef struct ScePadData { + unsigned int buttons; + uint8_t lx; + uint8_t ly; + uint8_t rx; + uint8_t ry; + uint8_t l2; + uint8_t r2; + uint16_t padding; + vec_float4 quat; + vec_float3 vel; + vec_float3 acell; + uint8_t touch[24]; + uint8_t connected; + uint64_t timestamp; + uint8_t ext[16]; + uint8_t count; + uint8_t unknown[15]; +}ScePadData; + + diff --git a/include/sce/types/userservice.h b/include/sce/types/userservice.h new file mode 100644 index 0000000..88daca9 --- /dev/null +++ b/include/sce/types/userservice.h @@ -0,0 +1,6 @@ +#pragma once + +#include + + +typedef int SceUserServiceUserId; diff --git a/include/sce/types/videoout.h b/include/sce/types/videoout.h new file mode 100644 index 0000000..5725270 --- /dev/null +++ b/include/sce/types/videoout.h @@ -0,0 +1,27 @@ +#pragma once + +#include + + +typedef struct SceVideoOutBufferAttribute { + int32_t format; + int32_t tmode; + int32_t aspect; + uint32_t width; + uint32_t height; + uint32_t pixelPitch; + uint64_t reserved[2]; +} SceVideoOutBufferAttribute; + +typedef struct SceVideoOutFlipStatus { + uint64_t num; + uint64_t ptime; + uint64_t stime; + int64_t flipArg; + uint64_t reserved[2]; + int32_t numGpuFlipPending; + int32_t numFlipPending; + int32_t currentBuffer; + uint32_t reserved1; +} SceVideoOutFlipStatus; + diff --git a/include/sce/userservice.h b/include/sce/userservice.h new file mode 100644 index 0000000..651a6ac --- /dev/null +++ b/include/sce/userservice.h @@ -0,0 +1,7 @@ +#pragma once + +#include +#include +int sceUserServiceInitialize(int *params); +int sceUserServiceTerminate(); +int sceUserServiceGetInitialUser(SceUserServiceUserId *userId); diff --git a/include/sce/videoout.h b/include/sce/videoout.h new file mode 100644 index 0000000..a8f8347 --- /dev/null +++ b/include/sce/videoout.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include +#include +#include + + + +int sceVideoOutOpen(SceUserServiceUserId userId, int type, int index, const void *param); +int sceVideoOutClose(int handle); +int sceVideoOutRegisterBuffers(int handle, int initialIndex, void * const *addr, int numBuf, const SceVideoOutBufferAttribute *attr); +int sceVideoOutUnregisterBuffers(int handle, int indexAttr); +int sceVideoOutSubmitFlip(int handle, int indexBuf, unsigned int flipMode, int64_t flipArg); +void sceVideoOutSetBufferAttribute(SceVideoOutBufferAttribute *attr, unsigned int format, unsigned int tmode,unsigned int aspect, unsigned int width, unsigned int height, unsigned int pixelPitch); +int sceVideoOutSetFlipRate(int handle, int flipRate); +int sceVideoOutAddFlipEvent(SceKernelEqueue eq, int handle, void *data); +int sceVideoOutGetFlipStatus(int handle, SceVideoOutFlipStatus *status);