Go to the documentation of this file.
27 #ifndef _AK_PLATFORM_FUNCS_H_
28 #define _AK_PLATFORM_FUNCS_H_
36 #include <kernel/eventflag.h>
65 #define AK_DECLARE_THREAD_ROUTINE( FuncName ) void* FuncName(void* lpParameter)
66 #define AK_THREAD_RETURN( _param_ ) return (_param_);
67 #define AK_THREAD_ROUTINE_PARAMETER lpParameter
68 #define AK_GET_THREAD_ROUTINE_PARAMETER_PTR(type) reinterpret_cast<type*>( AK_THREAD_ROUTINE_PARAMETER )
70 #define AK_RETURN_THREAD_OK 0x00000000
71 #define AK_RETURN_THREAD_ERROR 0x00000001
72 #define AK_DEFAULT_STACK_SIZE (128*1024)
73 #define AK_THREAD_DEFAULT_SCHED_POLICY SCE_KERNEL_SCHED_FIFO
74 #define AK_THREAD_PRIORITY_NORMAL SCE_KERNEL_PRIO_FIFO_DEFAULT
75 #define AK_THREAD_PRIORITY_ABOVE_NORMAL SCE_KERNEL_PRIO_FIFO_HIGHEST
76 #define AK_THREAD_PRIORITY_BELOW_NORMAL SCE_KERNEL_PRIO_FIFO_LOWEST
78 #define AK_THREAD_AFFINITY_ALL 63 // from binary 111111 setting the 6 available core to true. (ex: 4 << 1)
79 #define AK_THREAD_AFFINITY_DEFAULT AK_THREAD_AFFINITY_ALL
82 #define AK_RELEASE_GPU_OFFLINE_FRAME sce::Gnm::submitDone();
85 #define AK_NULL_THREAD NULL
87 #define AK_INFINITE (AK_UINT_MAX)
89 #define AkMax(x1, x2) (((x1) > (x2))? (x1): (x2))
90 #define AkMin(x1, x2) (((x1) < (x2))? (x1): (x2))
91 #define AkClamp(x, min, max) ((x) < (min)) ? (min) : (((x) > (max) ? (max) : (x)))
103 fputs( in_pszMsg, stderr );
108 fputws( in_pszMsg, stderr );
112 template <
int MaxSize = 0>
116 va_start(args, in_pszFmt);
117 vfwprintf(stderr, in_pszFmt, args);
122 template <
int MaxSize = 0>
126 va_start(args, in_pszFmt);
127 vfprintf(stderr, in_pszFmt, args);
134 template <
int MaxSize = 0>
137 template <
int MaxSize = 0>
155 int ret = sceKernelCreateEventFlag(
158 SCE_KERNEL_EVF_ATTR_MULTI,
178 sceKernelDeleteEventFlag(io_event);
188 SCE_KERNEL_EVF_WAITMODE_OR | SCE_KERNEL_EVF_WAITMODE_CLEAR_ALL,
196 AKVERIFY( sceKernelSetEventFlag( in_event, 1 ) == 0 );
208 int ret = sceKernelCreateSema(
222 AKVERIFY(sceKernelDeleteSema(io_semaphore) == SCE_OK);
228 AKVERIFY(sceKernelWaitSema(in_semaphore, 1,
NULL) == SCE_OK);
234 AKVERIFY(sceKernelSignalSema(in_semaphore, in_count) == SCE_OK);
263 #define AkExitThread( _result ) return _result;
280 const char * in_szThreadName )
287 AKVERIFY(!scePthreadAttrInit(&attr));
290 AKVERIFY(!scePthreadAttrSetdetachstate(&attr, SCE_PTHREAD_CREATE_JOINABLE));
291 AKVERIFY(!scePthreadAttrSetinheritsched(&attr, SCE_PTHREAD_EXPLICIT_SCHED));
296 if( scePthreadAttrSetschedpolicy( &attr, sched_policy ) )
298 AKASSERT( !
"AKCreateThread invalid sched policy, will automatically set it to FIFO scheduling" );
300 AKVERIFY( !scePthreadAttrSetschedpolicy( &attr, sched_policy ));
303 int minPriority, maxPriority;
304 minPriority = SCE_KERNEL_PRIO_FIFO_HIGHEST;
305 maxPriority = SCE_KERNEL_PRIO_FIFO_LOWEST;
309 if( in_threadProperties.
nPriority >= minPriority && in_threadProperties.
nPriority <= maxPriority )
311 SceKernelSchedParam schedParam;
312 AKVERIFY( scePthreadAttrGetschedparam(&attr, &schedParam) == 0 );
313 schedParam.sched_priority = in_threadProperties.
nPriority;
314 AKVERIFY( scePthreadAttrSetschedparam(&attr, &schedParam) == 0 );
318 int threadError = scePthreadCreate(out_pThread, &attr, pStartRoutine, pParams, in_szThreadName);
320 AKVERIFY(!scePthreadAttrDestroy(&attr));
322 if( threadError != 0 )
346 return scePthreadSelf();
352 usleep( in_ulMilliseconds * 1000 );
361 uint64_t uTime = sceKernelGetProcessTimeCounter();
362 *out_piLastTime = (
AkInt64)uTime;
368 *out_piFreq = (
AkInt64)sceKernelGetProcessTimeCounterFrequency();
388 char* io_pszAnsiString )
393 memset (&state,
'\0',
sizeof (state));
395 return (
AkInt32)wcsrtombs(io_pszAnsiString,
396 &in_pszUnicodeString,
405 void* io_pvUnicodeStringBuffer )
410 memset (&state,
'\0',
sizeof (state));
412 return (
AkInt32)mbsrtowcs((
wchar_t*)io_pvUnicodeStringBuffer,
420 void* io_pvUnicodeStringBuffer )
422 return AkCharToWideChar( in_pszUtf8String, in_uiOutBufferSize, (
wchar_t*)io_pvUnicodeStringBuffer );
428 size_t uSizeCopy =
AkMin( in_uDestMaxNumChars - 1, wcslen( in_pSrc ) + 1 );
429 wcsncpy( in_pDest, in_pSrc, uSizeCopy );
430 in_pDest[uSizeCopy] =
'\0';
436 size_t uSizeCopy =
AkMin( in_uDestMaxNumChars - 1, strlen( in_pSrc ) + 1 );
437 strncpy( in_pDest, in_pSrc, uSizeCopy );
438 in_pDest[uSizeCopy] =
'\0';
444 size_t uAvailableSize = ( in_uDestMaxNumChars - wcslen( in_pDest ) - 1 );
445 wcsncat( in_pDest, in_pSrc,
AkMin( uAvailableSize, wcslen( in_pSrc ) ) );
451 size_t uAvailableSize = ( in_uDestMaxNumChars - strlen( in_pDest ) - 1 );
452 strncat( in_pDest, in_pSrc,
AkMin( uAvailableSize, strlen( in_pSrc ) ) );
455 inline int SafeStrFormat(
wchar_t * in_pDest,
size_t in_uDestMaxNumChars,
const wchar_t* in_pszFmt, ...)
458 va_start(args, in_pszFmt);
459 int r = vswprintf(in_pDest, in_uDestMaxNumChars, in_pszFmt, args);
464 inline int SafeStrFormat(
char * in_pDest,
size_t in_uDestMaxNumChars,
const char* in_pszFmt, ...)
467 va_start(args, in_pszFmt);
468 int r = vsnprintf(in_pDest, in_uDestMaxNumChars, in_pszFmt, args);
474 #define AkAlloca( _size_ ) alloca( _size_ )
486 #define CONVERT_WIDE_TO_OSCHAR( _wstring_, _oscharstring_ ) \
487 _oscharstring_ = (AkOSChar*)AkAlloca( (1 + wcslen( _wstring_ )) * sizeof(AkOSChar) ); \
488 AKPLATFORM::AkWideCharToChar( _wstring_ , (AkUInt32)(1 + wcslen( _wstring_ )), (AkOSChar*)( _oscharstring_ ) )
499 #define CONVERT_CHAR_TO_OSCHAR( _astring_, _oscharstring_ ) ( _oscharstring_ ) = (AkOSChar*)( _astring_ )
509 #define CONVERT_OSCHAR_TO_WIDE( _osstring_, _wstring_ ) \
510 _wstring_ = (wchar_t*)AkAlloca((1+strlen(_osstring_)) * sizeof(wchar_t)); \
511 AKPLATFORM::AkCharToWideChar( _osstring_, (AkUInt32)(1 + strlen(_osstring_ )), _wstring_ )
521 #define CONVERT_OSCHAR_TO_CHAR( _osstring_, _astring_ ) _astring_ = (char*)_osstring_
527 return ( wcslen( in_pStr ) );
534 return ( strlen( in_pszString ) );
538 #define AK_OSPRINTF snprintf
548 return ( strcmp( in_pszString1, in_pszString2 ) );
559 return ( strncmp(in_pszString1, in_pszString2, in_MaxCountSize) );
565 return in_pathLen >= 1 && in_pszPath[0] ==
'/';
568 #define AK_UTF8_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::SafeStrCpy( in_pdDest, in_pSrc, in_MaxSize )
569 #define AK_UTF16_TO_WCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::SafeStrCpy( in_pdDest, in_pSrc, in_MaxSize )
570 #define AK_WCHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::SafeStrCpy( in_pdDest, in_pSrc, in_MaxSize )
571 #define AK_UTF16_TO_OSCHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkWideCharToChar( in_pSrc, in_MaxSize, in_pdDest )
572 #define AK_UTF16_TO_CHAR( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkWideCharToChar( in_pSrc, in_MaxSize, in_pdDest )
573 #define AK_CHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkCharToWideChar( in_pSrc, in_MaxSize, in_pdDest )
574 #define AK_OSCHAR_TO_UTF16( in_pdDest, in_pSrc, in_MaxSize ) AKPLATFORM::AkCharToWideChar( in_pSrc, in_MaxSize, in_pdDest )
577 #define AK_PATH_SEPARATOR "/"
578 #define AK_HOST_PATH_SEPARATOR "\\"
579 #define AK_LIBRARY_PREFIX ""
580 #define AK_DYNAMIC_LIBRARY_EXTENSION ".prx"
582 #define AK_FILEHANDLE_TO_UINTPTR(_h) ((AkUIntPtr)_h)
583 #define AK_SET_FILEHANDLE_TO_UINTPTR(_h,_u) _h = (AkFileHandle)_u
586 #endif // _AK_PLATFORM_FUNCS_H_
AKRESULT AkCreateSemaphore(AkSemaphore &out_semaphore, AkUInt32 in_initialCount)
Platform Independent Helper.
size_t AkUtf16StrLen(const AkUtf16 *in_pStr)
Definition of data structures for AkAudioObject.
@ AK_Fail
The operation failed.
int nPriority
Thread priority.
void AkClearEvent(AkEvent &out_event)
Platform Independent Helper.
AkForceInline void AkClearSemaphore(AkSemaphore &io_semaphore)
Platform Independent Helper.
Platform-dependent helpers.
void AkWaitForEvent(AkEvent &in_event)
Platform Independent Helper.
AkForceInline void UpdatePerformanceFrequency()
Platform Independent Helper.
AKRESULT
Standard function call result.
void OutputDebugMsg(const char *in_pszMsg)
Output a debug message on the console (Ansi string)
int SafeStrFormat(wchar_t *in_pDest, size_t in_uDestMaxNumChars, const wchar_t *in_pszFmt,...)
AkThreadID CurrentThread()
Returns the calling thread's ID.
bool IsAbsolutePath(const AkOSChar *in_pszPath, size_t in_pathLen)
Detects whether the string represents an absolute path to a file.
float AkReal32
32-bit floating point
@ AK_Success
The operation was successful.
int32_t AkInt32
Signed 32-bit integer.
void AkCreateThread(AkThreadRoutine pStartRoutine, void *pParams, const AkThreadProperties &in_threadProperties, AkThread *out_pThread, const char *)
Platform Independent Helper.
void OutputDebugMsgV(const char *in_pszFmt,...)
Output a debug message on the console (variadic function).
void PerformanceCounter(AkInt64 *out_piLastTime)
Platform Independent Helper.
void AkDestroySemaphore(AkSemaphore &io_semaphore)
Platform Independent Helper.
void AkDestroyEvent(AkEvent &io_event)
Platform Independent Helper.
AkForceInline bool AkIsValidThread(AkThread *in_pThread)
Platform Independent Helper.
#define AKASSERT(Condition)
AkForceInline void AkSleep(AkUInt32 in_ulMilliseconds)
Platform Independent Helper.
AkForceInline void AkClearThread(AkThread *in_pThread)
Platform Independent Helper.
AkForceInline void AkGetDefaultThreadProperties(AkThreadProperties &out_threadProperties)
Platform Independent Helper.
int OsStrNCmp(const AkOSChar *in_pszString1, const AkOSChar *in_pszString2, size_t in_MaxCountSize)
SceKernelCpumask dwAffinityMask
Affinity mask.
double AkReal64
64-bit floating point
AKRESULT AkCreateEvent(AkEvent &out_event)
Platform Independent Helper.
AkForceInline void SafeStrCpy(wchar_t *in_pDest, const wchar_t *in_pSrc, size_t in_uDestMaxNumChars)
Safe unicode string copy.
int64_t AkInt64
Signed 64-bit integer.
void AkWaitForSemaphore(AkSemaphore &in_semaphore)
Platform Independent Helper - Semaphore wait, aka Operation P. Decrements value of semaphore,...
size_t uStackSize
Thread stack size.
void PerformanceFrequency(AkInt64 *out_piFreq)
Platform Independent Helper.
int uSchedPolicy
Thread scheduling policy.
AkForceInline AkInt32 AkCharToWideChar(const char *in_pszAnsiString, AkUInt32 in_uiOutBufferSize, void *io_pvUnicodeStringBuffer)
String conversion helper.
uint32_t AkUInt32
Unsigned 32-bit integer.
void AkReleaseSemaphore(AkSemaphore &in_semaphore, AkUInt32 in_count)
Platform Independent Helper - Semaphore signal, aka Operation V. Increments value of semaphore by an ...
AkForceInline void SafeStrCat(wchar_t *in_pDest, const wchar_t *in_pSrc, size_t in_uDestMaxNumChars)
Safe unicode string concatenation.
AkForceInline AKRESULT AkCreateNamedEvent(AkEvent &out_event, const char *in_szName)
AkForceInline AkInt32 AkWideCharToChar(const wchar_t *in_pszUnicodeString, AkUInt32 in_uiOutBufferSize, char *io_pszAnsiString)
String conversion helper.
AkForceInline void AkWaitForSingleThread(AkThread *in_pThread)
Platform Independent Helper.
void AkSignalEvent(const AkEvent &in_event)
Platform Independent Helper.
AkForceInline AkInt32 AkUtf8ToWideChar(const char *in_pszUtf8String, AkUInt32 in_uiOutBufferSize, void *io_pvUnicodeStringBuffer)
String conversion helper.
AkForceInline void AkCloseThread(AkThread *in_pThread)
Platform Independent Helper.
AkForceInline int OsStrCmp(const AkOSChar *in_pszString1, const AkOSChar *in_pszString2)
AkForceInline size_t OsStrLen(const AkOSChar *in_pszString)
AkForceInline AkReal32 Elapsed(const AkInt64 &in_iNow, const AkInt64 &in_iStart)
Returns a time range in milliseconds, using the sound engine's updated count->milliseconds ratio.
Tell us about your project. We're here to help.
Register your project and we'll help you get started with no strings attached!
Get started with Wwise