From e51fd6ff7fe4bd8e56f27afcf1f3b7057948ed75 Mon Sep 17 00:00:00 2001 From: GrapheneCt Date: Sat, 13 Mar 2021 17:42:49 -0500 Subject: Add ScePafThread functions --- include/user/paf/thread.h | 232 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 include/user/paf/thread.h (limited to 'include/user/paf') diff --git a/include/user/paf/thread.h b/include/user/paf/thread.h new file mode 100644 index 0000000..481db69 --- /dev/null +++ b/include/user/paf/thread.h @@ -0,0 +1,232 @@ +/* + Vita Development Suite Libraries +*/ + +#ifndef _VDSUITE_USER_PAF_THREAD_H +#define _VDSUITE_USER_PAF_THREAD_H + +#include + +namespace paf { + namespace thread { + + class DefaultThreadPriority + { + public: + + DefaultThreadPriority(); + + static DefaultThreadPriority *Get(); + + SceVoid Set(); + + SceInt32 priority1; + SceInt32 priority2; + SceInt32 priority3; + + }; + + class ThreadOpt + { + public: + + ThreadOpt(); + + SceUInt32 attr; + SceInt32 cpuAffinityMask; + SceKernelMemBlockType stackMemoryType; + + }; + + class Thread + { + public: + + enum Error { + SCE_PAF_ERROR_THREADING_THREAD_ALREADY_STARTED = 0x80AF0702 + }; + + + Thread(SceInt32 initPriority, SceSize stackSize, const char *pName, const ThreadOpt *opt = SCE_NULL); + + virtual ~Thread(); + + virtual SceVoid EntryFunction() = 0; + + static SceInt32 InternalThreadEntry(SceSize argSize, void *pArgBlock); + + static SceVoid SetMainThreadUID(SceInt32 threadNum = 0); + + static SceUID GetMainThreadUID(SceInt32 threadNum = 0); + + static SceBool IsMainThread(SceInt32 threadNum = 0); + + static SceVoid Sleep(SceUInt32 msec); + + SceInt32 Start(); + + SceVoid Join(); + + SceVoid ChangePriority(SceInt32 priority); + + SceUID Self(); + + SceBool IsStarted(); + + //related to unk variable, unk set to SCE_FALSE by default + //ScePafThread_F95B2895 set unk to SCE_TRUE + //ScePafThread_4CE6D88B get unk + + private: + + SceUChar8 m_work[0x14]; + + }; + + class Sema + { + public: + + Sema(const char *pName, SceInt32 initCount, SceInt32 maxCount); + + ~Sema(); + + SceVoid Wait(); + + SceVoid Signal(); + + private: + + SceUID m_uid; + + }; + + class Mutex + { + public: + + Mutex(const char *pName, SceBool isFifo); + + ~Mutex(); + + SceVoid Lock(); + + SceBool TryLock(); + + SceVoid Unlock(); + + private: + + SceInt64 m_work[4]; + + }; + + class Mutex2 + { + public: + + Mutex2(const char *pName, SceBool isFifo); + + ~Mutex2(); + + SceVoid Lock(); + + SceBool TryLock(); + + SceVoid Unlock(); + + private: + + SceInt64 m_work[4]; + + }; + + class Cond + { + public: + + Cond(SceKernelLwMutexWork *pLwMutex, const char *pName, SceBool isFifo); + + ~Cond(); + + SceBool Wait(SceUInt32 timeoutMsec = 0); + + SceVoid Notify(); + + SceVoid NotifyAll(); + + private: + + SceInt32 m_work[5]; + + }; + + class RWLock + { + public: + + RWLock(const char *pName); + + ~RWLock(); + + SceVoid LockShared(); + + SceVoid UnlockShared(); + + SceVoid LockExclusive(); + + SceVoid UnlockExclusive(); + + private: + + SceInt32 m_work[0x8]; + + }; + + class Queue + { + public: + + typedef void(*QueueEntryFunction)(void *pArgBlock); + + Queue(const char *pName); + + ~Queue(); + + SceVoid WaitDone(); + + SceVoid Push(const char *pName, QueueEntryFunction entry, void *pArgBlock); + + SceVoid Execute(); + + SceUInt32 Size(); + + private: + + SceUChar8 m_work[0x30]; + + }; + + class SyncCall + { + public: + + typedef void(*SyncCallEntryFunction)(void *pArgBlock); + + SyncCall(const char *pName); + + ~SyncCall(); + + SceVoid Push(SyncCallEntryFunction entry, void *pArgBlock); + + SceVoid Execute(); + + private: + + SceUChar8 m_work[0x10]; + + }; + } +} + +#endif /* _VDSUITE_USER_PAF_THREAD_H */ -- cgit v1.2.3