mirror of
https://github.com/IllusionMan1212/vitasdk-odin.git
synced 2026-10-24 02:12:38 +00:00
initial
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "vita-headers"]
|
||||||
|
path = vita-headers
|
||||||
|
url = https://github.com/vitasdk/vita-headers.git
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package avconfig
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import avconfig "system:SceAVConfig_stub"
|
||||||
|
|
||||||
|
/** Color Space Mode values to specify to ::sceAVConfigSetDisplayColorSpaceMode */
|
||||||
|
SceAVConfigColorSpaceMode :: enum c.int {
|
||||||
|
DEFAULT = 0, //!< Default
|
||||||
|
HIGH_CONTRAST = 1 //!< High Contrast Mode
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "sceAVConfig")
|
||||||
|
foreign avconfig {
|
||||||
|
/**
|
||||||
|
* Get the maximum brightness.
|
||||||
|
*
|
||||||
|
* @param[out] maxBrightness - Maximum brightness.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetDisplayMaxBrightness :: proc(maxBrightness: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the screen brightness.
|
||||||
|
*
|
||||||
|
* @param brightness - Brightness that the screen will be set to (range 21-65536, 0 turns off the screen).
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetDisplayBrightness :: proc(brightness: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the shutter volume.
|
||||||
|
*
|
||||||
|
* @param[out] volume - shutter volume.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetShutterVol :: proc(volume: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the system volume.
|
||||||
|
*
|
||||||
|
* @param[out] volume - System volume.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetSystemVol :: proc(volume: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the system volume.
|
||||||
|
*
|
||||||
|
* @param volume - volume that the device will be set to (range 0-30).
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetSystemVol :: proc(volume: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns on mute.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
MuteOn :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the color space mode on runtime.
|
||||||
|
*
|
||||||
|
* @param[in] csm - see ::SceAVConfigColorSpaceMode()
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - This does not change color_space_mode in the registry.
|
||||||
|
*/
|
||||||
|
SetDisplayColorSpaceMode :: proc(csm: c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,440 @@
|
|||||||
|
package appmgr
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import appmgr "system:SceAppMgr_stub"
|
||||||
|
|
||||||
|
foreign appmgr {
|
||||||
|
/**
|
||||||
|
* Save data on savedata0: partition
|
||||||
|
*
|
||||||
|
* @param[in] data - Data to save
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrSaveDataDataSave :: proc(data: ^SceAppMgrSaveDataData) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove data on savedata0: partition
|
||||||
|
*
|
||||||
|
* @param[in] data - Data to remove
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrSaveDataDataRemove :: proc(data: ^SceAppMgrSaveDataDataDelete) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a savedata slot
|
||||||
|
*
|
||||||
|
* @param[in] data - Slot data
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrSaveDataSlotCreate :: proc(data: ^SceAppMgrSaveDataSlot) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current param of a savedata slot
|
||||||
|
*
|
||||||
|
* @param[out] data - Slot data
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrSaveDataSlotGetParam :: proc(data: ^SceAppMgrSaveDataSlot) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set current param of a savedata slot
|
||||||
|
*
|
||||||
|
* @param[in] data - Slot data
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrSaveDataSlotSetParam :: proc(data: ^SceAppMgrSaveDataSlot) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a savedata slot
|
||||||
|
*
|
||||||
|
* @param[in] data - Slot data
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrSaveDataSlotDelete :: proc(data: ^SceAppMgrSaveDataSlotDelete) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Process ID by Title ID
|
||||||
|
*
|
||||||
|
* @param[out] pid - Process ID
|
||||||
|
* @param[in] name - Title ID
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetIdByName :: proc(pid: ^sce.UID, name: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Title ID by Process ID
|
||||||
|
*
|
||||||
|
* @param[in] pid - Process ID
|
||||||
|
* @param[out] name - Title ID
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetNameById :: proc(pid: sce.UID, name: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy other apps
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrDestroyOtherApp :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy an application by Title ID
|
||||||
|
*
|
||||||
|
* @param[in] name - Title ID of the application
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrDestroyAppByName :: proc(name: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy an application by Application ID
|
||||||
|
*
|
||||||
|
* @param[in] appId - Application ID of the application
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrDestroyAppByAppId :: proc(appId: sce.Int32) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get PID of an application for Shell
|
||||||
|
*
|
||||||
|
* @param[in] appId - Application ID of the application
|
||||||
|
*
|
||||||
|
* @return The PID on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetProcessIdByAppIdForShell :: proc(appId: sce.Int32) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of running applications
|
||||||
|
*
|
||||||
|
* @param[out] appIds - Array of running application IDs
|
||||||
|
* @param[in] count - Max number of running applications to search
|
||||||
|
*
|
||||||
|
* @return Number of running applications.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetRunningAppIdListForShell :: proc(appIds: ^sce.Int32, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an application state
|
||||||
|
*
|
||||||
|
* @param[out] appState - State of the application
|
||||||
|
* @param[in] len - sizeof(SceAppMgrState)
|
||||||
|
* @param[in] version - Version (?)
|
||||||
|
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceAppMgrGetAppState :: proc(appState: ^SceAppMgrAppState, len: sce.Size, version: c.uint32_t) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receive system event
|
||||||
|
*
|
||||||
|
* @param[out] systemEvent - Received system event
|
||||||
|
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrReceiveSystemEvent :: proc(systemEvent: ^SceAppMgrSystemEvent) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies app param to an array
|
||||||
|
*
|
||||||
|
* @param[out] param - pointer to a 1024 byte location to store the app param
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note App param example: type=LAUNCH_APP_BY_URI&uri=psgm:play?titleid=NPXS10031
|
||||||
|
*/
|
||||||
|
sceAppMgrGetAppParam :: proc(param: [^]c.char) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtains the BGM port, even when it is not in front
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
sceAppMgrAcquireBgmPort :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release acquired BGM port
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
sceAppMgrReleaseBgmPort :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set infobar state
|
||||||
|
*
|
||||||
|
* @param[in] visibility - Infobar visibility
|
||||||
|
* @param[in] color - Infobar color
|
||||||
|
* @param[in] transparency - Infobar transparency
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
sceAppMgrSetInfobarState :: proc(visibility: SceAppMgrInfoBarVisibility, color: SceAppMgrInfoBarColor, transparency: SceAppMgrInfoBarTransparency) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load and start a SELF executable
|
||||||
|
*
|
||||||
|
* @param[in] appPath - Path of the SELF file
|
||||||
|
* @param[in] argv - Args to pass to SELF module_start
|
||||||
|
* @param[in] optParam - Optional params
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note SELF file must be located in app0: partition.
|
||||||
|
*/
|
||||||
|
// TODO: no idea how argv is supposed to be changed to odin types. C type is `char *argv[]`
|
||||||
|
sceAppMgrLoadExec :: proc(appPath: cstring, argv: [][^]c.char, optParam: ^SceAppMgrExecOptParam) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start an application by URI
|
||||||
|
*
|
||||||
|
* @param[in] flags - Must be 0x20000
|
||||||
|
* @param[in] uri - Uri to launch
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note If flags != 0x20000, Livearea is opened.
|
||||||
|
*/
|
||||||
|
sceAppMgrLaunchAppByUri :: proc(flags: c.int, uri: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start an application by Title ID
|
||||||
|
*
|
||||||
|
* @param[in] name - Title ID of the application
|
||||||
|
* @param[in] param - The params passed to the application which can be retrieved with ::sceAppMgrGetAppParam
|
||||||
|
* @param[in] optParam - Optional params
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrLaunchAppByName2 :: proc(name: cstring, param: cstring, optParam: ^SceAppMgrLaunchAppOptParam) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start an Application by Title ID
|
||||||
|
*
|
||||||
|
* @param[in] flags - Usually 0x60000
|
||||||
|
* @param[in] name - Title ID of the application
|
||||||
|
* @param[in] param - The params passed to the application which can be retrieved with ::sceAppMgrGetAppParam
|
||||||
|
*
|
||||||
|
* @return 0 on success < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrLaunchAppByName :: proc(flags: c.int, name: cstring, param: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start an application by Title ID for Shell
|
||||||
|
*
|
||||||
|
* @param[in] name - Title ID of the application
|
||||||
|
* @param[in] param - The params passed to the application which can be retrieved with ::sceAppMgrGetAppParam
|
||||||
|
* @param[in] optParam - Optional params
|
||||||
|
*
|
||||||
|
* @return Application ID (?)
|
||||||
|
*/
|
||||||
|
sceAppMgrLaunchAppByName2ForShell :: proc(name: cstring, param: cstring, optParam: ^SceAppMgrLaunchAppOptParam) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount game data
|
||||||
|
*
|
||||||
|
* @param[in] app_path - example : "ux0:/app/${TITLEID}"
|
||||||
|
* @param[in] patch_path - example : "ux0:/patch/${TITLEID}", "invalid:"
|
||||||
|
* @param[in] rif_path - If NULL the system will automatically search the rif path. example : "ux0:/license/app/${TITLEID}/${HEX}.rif"
|
||||||
|
* @param[in] mount_point - Mountpoint output
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
sceAppMgrGameDataMount :: proc(app_path: cstring, patch_path: cstring, rif_path: cstring, mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount application data
|
||||||
|
*
|
||||||
|
* @param[in] id - App data ID
|
||||||
|
* @param[in] mount_point - Mountpoint to use
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note id: 100 (photo0), 101 (friends), 102 (messages), 103 (near), 105 (music), 108 (calendar)
|
||||||
|
*/
|
||||||
|
sceAppMgrAppDataMount :: proc(id: c.int, mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount application data by Title ID
|
||||||
|
*
|
||||||
|
* @param[in] id - App data ID
|
||||||
|
* @param[in] titleid - Application title ID
|
||||||
|
* @param[in] mount_point - Mountpoint to use
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note id: 106 (ad), 107 (ad)
|
||||||
|
*/
|
||||||
|
sceAppMgrAppDataMountById :: proc(id: c.int, titleid: cstring, mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get application params from SFO descriptor
|
||||||
|
*
|
||||||
|
* @param[in] pid - Process ID
|
||||||
|
* @param[in] param - Param ID in the SFO descriptor
|
||||||
|
* @param[out] string - Param data
|
||||||
|
* @param[in] length - Length of the param data
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note param: 6 (contentid) 8 (category), 9 (stitle/title?), 10 (title/stitle?), 12 (titleid)
|
||||||
|
*/
|
||||||
|
sceAppMgrAppParamGetString :: proc(pid: c.int, param: c.int, string: cstring, length: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get device info
|
||||||
|
*
|
||||||
|
* @param[in] dev - Device to get info about
|
||||||
|
* @param[out] max_size - Capacity of the device
|
||||||
|
* @param[out] free_size - Free space of the device
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note dev: ux0:
|
||||||
|
*/
|
||||||
|
sceAppMgrGetDevInfo :: proc(dev: cstring, max_size: ^c.uint64_t, free_size: ^c.uint64_t) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount application data (PSPEmu)
|
||||||
|
*
|
||||||
|
* @param[in] id - App data ID
|
||||||
|
* @param[in] mount_point - Mountpoint to use
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note id: 400 (ad), 401 (ad), 402 (ad)
|
||||||
|
*/
|
||||||
|
sceAppMgrMmsMount :: proc(id: c.int, mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount PSPEmu virtual memory stick
|
||||||
|
*
|
||||||
|
* @param[in] mount_point - Mountpoint to use
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note mount_point: ms
|
||||||
|
*/
|
||||||
|
sceAppMgrPspSaveDataRootMount :: proc(mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount working directory
|
||||||
|
*
|
||||||
|
* @param[in] id - Working directory ID
|
||||||
|
* @param[in] mount_point - Mountpoint to use
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note id: 200 (td), 201 (td), 203 (td), 204 (td), 206 (td)
|
||||||
|
*/
|
||||||
|
sceAppMgrWorkDirMount :: proc(id: c.int, mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mount working directory by Title ID
|
||||||
|
*
|
||||||
|
* @param[in] id - Working directory ID
|
||||||
|
* @param[in] titleid - Application Title ID
|
||||||
|
* @param[in] mount_point - Mountpoint to use
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note id: 205 (cache0), 207 (td)
|
||||||
|
*/
|
||||||
|
sceAppMgrWorkDirMountById :: proc(id: c.int, titleid: cstring, mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unmount a mountpoint
|
||||||
|
*
|
||||||
|
* @param[in] mount_point - Mountpoint to unmount
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note Unmount app0: for example to enable write access to ux0:app/TITLEID
|
||||||
|
*/
|
||||||
|
sceAppMgrUmount :: proc(mount_point: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert vs0 path string to a new one usable by applications
|
||||||
|
*
|
||||||
|
* @param[in] path - Path to convert
|
||||||
|
* @param[in] mount_point - Mountpoint to use
|
||||||
|
* @param[in] unk - Unknown
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrConvertVs0UserDrivePath :: proc(path: cstring, mount_point: cstring, unk: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get raw path for a given path
|
||||||
|
*
|
||||||
|
* @param[out] path - Path to convert
|
||||||
|
* @param[in] resolved_path - The input process path
|
||||||
|
* @param[in] resolved_path_size - The input process path length
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetRawPath :: proc(path: cstring, resolved_path: cstring, resolved_path_size: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the real/resolved path of app0: (where it's actually mounted)
|
||||||
|
*
|
||||||
|
* @param[in] appId - Use -2 for the current application
|
||||||
|
* @param[out] resolved_path - Buffer that will hold the resolved path. It should have enough room to hold 292 characters or it will buffer overflow (noname120).
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetRawPathOfApp0ByAppIdForShell :: proc(appId: c.int, resolved_path: [292]c.char) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get memory budget info for a running system application
|
||||||
|
*
|
||||||
|
* @param[out] info - Info related to the memory budget of the running application.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note This function will always return an error if used in a normal application.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetBudgetInfo :: proc(info: ^SceAppMgrBudgetInfo) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current coredump state for shell
|
||||||
|
*
|
||||||
|
* @param[out] state - state info output.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetCoredumpStateForShell :: proc(state: ^SceAppMgrCoredumpState) -> c.int ---
|
||||||
|
|
||||||
|
sceAppMgrDrmOpen :: proc(param: ^SceAppMgrDrmOpenParam) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get AppInfo via syscall directly
|
||||||
|
*
|
||||||
|
* @param[in] unk - unknown maybe titleid
|
||||||
|
* @param[out] state - The app state output buffer pointer
|
||||||
|
* @param[in] syscall_validity - The syscall validity buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceAppMgrGetAppInfo :: proc(unk: cstring, state: ^SceAppMgrAppState) -> sce.Int32 ---
|
||||||
|
|
||||||
|
_sceSharedFbOpen :: proc(index: c.int, sysver: c.int) -> sce.UID ---
|
||||||
|
sceSharedFbClose :: proc(fb_id: sce.UID) -> c.int ---
|
||||||
|
sceSharedFbBegin :: proc(fb_id: sce.UID, info: ^SceSharedFbInfo) -> c.int ---
|
||||||
|
sceSharedFbEnd :: proc(fb_id: sce.UID) -> c.int ---
|
||||||
|
sceSharedFbGetInfo :: proc(fb_id: sce.UID, info: ^SceSharedFbInfo) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
package appmgr
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import apputil "../AppUtil"
|
||||||
|
|
||||||
|
SCE_APPMGR_MAX_APP_NAME_LENGTH:: (31)
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAppMgrErrorCode :: enum i64 {
|
||||||
|
BUSY = 0x80802000, //!< Busy
|
||||||
|
STATE = 0x80802013, //!< Invalid state
|
||||||
|
NULL_POINTER = 0x80802016, //!< NULL pointer
|
||||||
|
INVALID = 0x8080201A, //!< Invalid param
|
||||||
|
TOO_LONG_ARGV = 0x8080201D, //!< argv is too long
|
||||||
|
INVALID_SELF_PATH = 0x8080201E, //!< Invalid SELF path
|
||||||
|
NOEXEC = 0x8080201F, //!< The process is not authorized to run this function
|
||||||
|
BGM_PORT_BUSY = 0x80803000, //!< BGM port was occupied and could not be secured
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrSystemEventType :: enum c.int {
|
||||||
|
ON_RESUME = 0x10000003,
|
||||||
|
ON_STORE_PURCHASE = 0x10000004,
|
||||||
|
ON_NP_MESSAGE_ARRIVED = 0x10000005,
|
||||||
|
ON_STORE_REDEMPTION = 0x10000006
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrInfoBarVisibility :: enum c.int {
|
||||||
|
INVISIBLE = 0,
|
||||||
|
VISIBLE = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrInfoBarColor :: enum c.int {
|
||||||
|
BLACK = 0,
|
||||||
|
WHITE = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrInfoBarTransparency :: enum c.int {
|
||||||
|
OPAQUE = 0,
|
||||||
|
TRANSLUCENT = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrApplicationMode :: enum c.int {
|
||||||
|
A = 2, //!< Application without physically contiguous memory access
|
||||||
|
B = 3, //!< Application with physically contiguous memory access
|
||||||
|
C = 4 //!< Application with physically contiguous memory and extra memory access
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrSystemEvent :: struct {
|
||||||
|
systemEvent: c.int, //!< One of ::SceAppMgrSystemEventType
|
||||||
|
reserved: [60]c.uint8_t, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppMgrSystemEvent) == 0x40)
|
||||||
|
|
||||||
|
SceAppMgrSaveDataData :: struct {
|
||||||
|
size: c.int, //!< Must be 0x4C
|
||||||
|
slotId: c.uint, //!< Save slot to use
|
||||||
|
slotParam: ^apputil.SceAppUtilSaveDataSlotParam, //!< Save slot params
|
||||||
|
reserved: [32]c.uint8_t, //!< Reserved data
|
||||||
|
files: ^apputil.SceAppUtilSaveDataFile, //!< Pointer to an array of files
|
||||||
|
fileNum: c.int, //!< Number of files to save
|
||||||
|
mountPoint: apputil.SceAppUtilSaveDataMountPoint, //!< Savedata mountpoint
|
||||||
|
requiredSizeKB: ^c.int, //!< Required size in KBs
|
||||||
|
unk_0x48: int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppMgrSaveDataData) == 0x4C)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrSaveDataDataDelete :: struct {
|
||||||
|
size: c.int, //!< Must be 0x44
|
||||||
|
slotId: c.uint, //!< Save slot to use
|
||||||
|
slotParam: ^apputil.SceAppUtilSaveDataSlotParam, //!< Save slot params
|
||||||
|
reserved: [32]c.uint8_t, //!< Reserved data
|
||||||
|
files: ^apputil.SceAppUtilSaveDataFile, //!< Pointer to an array of files
|
||||||
|
fileNum: c.int, //!< Number of files to delete
|
||||||
|
mountPoint: apputil.SceAppUtilSaveDataMountPoint, //!< Savedata mountpoint
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppMgrSaveDataDataDelete) == 0x44)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppMgrSaveDataSlot :: struct {
|
||||||
|
size: c.int, //!< Must be 0x418
|
||||||
|
slotId: c.uint, //!< Save slot to use
|
||||||
|
slotParam: apputil.SceAppUtilSaveDataSlotParam, //!< Save slot params
|
||||||
|
reserved: [116]c.uint8_t, //!< Reserved data
|
||||||
|
mountPoint: apputil.SceAppUtilSaveDataMountPoint, //!< Savedata mountpoint
|
||||||
|
reserved2: [0x40]c.uint8_t,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppMgrSaveDataSlot) == 0x418)
|
||||||
|
|
||||||
|
SceAppMgrSaveDataSlotDelete :: struct {
|
||||||
|
size: c.int, //!< Must be 0x18
|
||||||
|
slotId: c.uint, //!< Save slot to use
|
||||||
|
mountPoint: apputil.SceAppUtilSaveDataMountPoint, //!< Savedata mountpoint
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppMgrSaveDataSlotDelete) == 0x18)
|
||||||
|
|
||||||
|
SceAppMgrAppState :: struct {
|
||||||
|
systemEventNum: sce.UInt32,
|
||||||
|
appEventNum: sce.UInt32,
|
||||||
|
isSystemUiOverlaid: sce.Bool,
|
||||||
|
reserved: [116]sce.UInt8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppMgrAppState) == 0x80)
|
||||||
|
|
||||||
|
SceAppMgrBudgetInfo :: struct {
|
||||||
|
size: c.int, //!< Must be 0x88
|
||||||
|
app_mode: c.int, //!< One of ::SceAppMgrApplicationMode
|
||||||
|
unk0: c.int, //!< Unknown Data
|
||||||
|
total_user_rw_mem: c.uint, //!< Total amount of accessible USER_RW memory
|
||||||
|
free_user_rw: c.uint, //!< Free amount of accessible USER_RW memory
|
||||||
|
extra_mem_allowed: sce.Bool, //!< Flag for extra memory accessibility
|
||||||
|
unk1: c.int, //!< Unknown Data
|
||||||
|
total_extra_mem: c.uint, //!< Total amount of accessible extra memory
|
||||||
|
free_extra_mem: c.uint, //!< Free amount of accessible extra memory
|
||||||
|
unk2: [2]c.int, //!< Unknown Data
|
||||||
|
total_phycont_mem: c.uint, //!< Total amount of accessible physically contiguous memory
|
||||||
|
free_phycont_mem: c.uint, //!< Free amount of accessible physically contiguous memory
|
||||||
|
unk3: [10]c.int, //!< Unknown Data
|
||||||
|
total_cdram_mem: c.uint, //!< Total amount of accessible CDRAM memory
|
||||||
|
free_cdram_mem: c.uint, //!< Free amount of accessible CDRAM memory
|
||||||
|
reserved: [9]c.int, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppMgrBudgetInfo) == 0x88)
|
||||||
|
|
||||||
|
SceAppMgrExecOptParam :: struct{} // Missing struct
|
||||||
|
SceAppMgrLaunchAppOptParam :: struct{} // Missing struct
|
||||||
|
|
||||||
|
SceAppMgrLoadExecOptParam :: struct {
|
||||||
|
reserved: [64]c.int, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppMgrLoadExecOptParam) == 0x100)
|
||||||
|
|
||||||
|
SceAppMgrCoredumpState :: struct {
|
||||||
|
pid: sce.UID,
|
||||||
|
process_state: c.int,
|
||||||
|
progress: c.int, // 0-100
|
||||||
|
is_coredump_completed: c.int,
|
||||||
|
data_0x10: c.int,
|
||||||
|
path_len: sce.Size,
|
||||||
|
path: [0x400]c.char,
|
||||||
|
data_0x418: c.int,
|
||||||
|
data_0x41C: c.int,
|
||||||
|
data_0x420: c.int,
|
||||||
|
data_0x424: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppMgrCoredumpState) == 0x428)
|
||||||
|
|
||||||
|
|
||||||
|
// missing structs
|
||||||
|
SceAppMgrDrmOpenParam :: struct{}
|
||||||
|
SceAppMgrAppInfo :: struct{}
|
||||||
|
|
||||||
|
SceSharedFbInfo :: struct {
|
||||||
|
fb_base: rawptr,
|
||||||
|
fb_size: c.int,
|
||||||
|
fb_base2: rawptr,
|
||||||
|
unk0: [6]c.int,
|
||||||
|
stride: c.int,
|
||||||
|
width: c.int,
|
||||||
|
height: c.int,
|
||||||
|
unk1: c.int,
|
||||||
|
index: c.int,
|
||||||
|
unk2: [4]c.int,
|
||||||
|
vsync: c.int,
|
||||||
|
unk3: [3]c.int,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package apputil
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import apputil "system:SceAppUtil_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceAppUtil")
|
||||||
|
foreign apputil {
|
||||||
|
/**
|
||||||
|
* Initializes the AppUtil library. Call this before any of the other functions.
|
||||||
|
*
|
||||||
|
* @param[out] initParam - App init info. Must be initialized with zeros.
|
||||||
|
* @param[out] bootParam - App boot info. Must be initialized with zeros.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Init :: proc(initParam: ^SceAppUtilInitParam, bootParam: ^SceAppUtilBootParam) -> c.int ---
|
||||||
|
|
||||||
|
//! Shutdown AppUtil library
|
||||||
|
Shutdown :: proc() -> c.int ---
|
||||||
|
|
||||||
|
//! Receive app event
|
||||||
|
ReceiveAppEvent :: proc(eventParam: ^SceAppUtilAppEventParam) -> c.int ---
|
||||||
|
|
||||||
|
//! Parse received app event from LiveArea
|
||||||
|
AppEventParseLiveArea :: proc(eventParam: ^SceAppUtilAppEventParam, buffer: [^]c.char) -> c.int ---
|
||||||
|
|
||||||
|
//! Create savedata slot
|
||||||
|
SaveDataSlotCreate :: proc(slotId: c.uint, param: ^SceAppUtilSaveDataSlotParam, mountPoint: ^SceAppUtilSaveDataMountPoint) -> c.int ---
|
||||||
|
|
||||||
|
//! Delete savedata slot
|
||||||
|
SaveDataSlotDelete :: proc(slotId: c.uint, mountPoint: ^SceAppUtilSaveDataMountPoint) -> c.int ---
|
||||||
|
|
||||||
|
//! Set savedata slot param
|
||||||
|
SaveDataSlotSetParam :: proc(slotId: c.uint, param: ^SceAppUtilSaveDataSlotParam, mountPoint: ^SceAppUtilSaveDataMountPoint) -> c.int ---
|
||||||
|
|
||||||
|
//! Get savedata slot param
|
||||||
|
SaveDataSlotGetParam :: proc(slotId: c.uint, param: ^SceAppUtilSaveDataSlotParam, mountPoint: ^SceAppUtilSaveDataMountPoint) -> c.int ---
|
||||||
|
|
||||||
|
//!< Write savedata files and directories
|
||||||
|
SaveDataDataSave :: proc(slot: ^SceAppUtilSaveDataFileSlot, files: ^SceAppUtilSaveDataFile, fileNum: c.uint, mountPoint: ^SceAppUtilSaveDataMountPoint, requiredSizeKB: ^sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
//!< Delete savedata files
|
||||||
|
SaveDataDataRemove :: proc(slot: ^SceAppUtilSaveDataFileSlot, files: ^SceAppUtilSaveDataRemoveItem, fileNum: c.uint, mountPoint: ^SceAppUtilSaveDataMountPoint) -> c.int ---
|
||||||
|
|
||||||
|
//! Mount music data
|
||||||
|
MusicMount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
//! Unmount music data
|
||||||
|
MusicUmount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
//! Mount photo data
|
||||||
|
PhotoMount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
//! Unmount photo data
|
||||||
|
PhotoUmount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
//! Mount cache data
|
||||||
|
CacheMount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
//! Unmount cache data
|
||||||
|
CacheUmount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
//! Get system parameters for int type
|
||||||
|
SystemParamGetInt :: proc(paramId: c.uint, value: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
//! Get application parameters for string type
|
||||||
|
SystemParamGetString :: proc(paramId: c.uint, buf: [^]sce.Char8, bufSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
//! Get application parameters for int type
|
||||||
|
AppParamGetInt :: proc(paramId: SceAppUtilAppParamId, value: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
//! Save safe memory
|
||||||
|
SaveSafeMemory :: proc(buf: rawptr, bufSize: sce.Size, offset: sce.Off) -> c.int ---
|
||||||
|
|
||||||
|
//! Load safe memory
|
||||||
|
LoadSafeMemory :: proc(buf: rawptr, bufSize: sce.Size, offset: sce.Off) -> c.int ---
|
||||||
|
|
||||||
|
//! Launch PSN Store
|
||||||
|
StoreBrowse :: proc(param: ^SceAppUtilStoreBrowseParam) -> c.int ---
|
||||||
|
|
||||||
|
//! Get background download status
|
||||||
|
BgdlGetStatus :: proc(stat: ^SceAppUtilBgdlStatus) -> c.int ---
|
||||||
|
|
||||||
|
//! Launch web browser app
|
||||||
|
LaunchWebBrowser :: proc(param: ^SceAppUtilWebBrowserParam) -> c.int ---
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,176 @@
|
|||||||
|
package apputil
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceAppUtilSaveDataRemoveMode :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
NO_SLOT = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilSaveDataSaveMode :: enum c.int {
|
||||||
|
FILE = 0,
|
||||||
|
DIRECTORY = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAppUtilErrorCode :: enum i64 {
|
||||||
|
PARAMETER = 0x80100600,
|
||||||
|
NOT_INITIALIZED = 0x80100601,
|
||||||
|
NO_MEMORY = 0x80100602,
|
||||||
|
BUSY = 0x80100603,
|
||||||
|
NOT_MOUNTED = 0x80100604,
|
||||||
|
NO_PERMISSION = 0x80100605,
|
||||||
|
PASSCODE_MISMATCH = 0x80100606,
|
||||||
|
APPEVENT_PARSE_INVALID_DATA = 0x80100620,
|
||||||
|
SAVEDATA_SLOT_EXISTS = 0x80100640,
|
||||||
|
SAVEDATA_SLOT_NOT_FOUND = 0x80100641,
|
||||||
|
SAVEDATA_NO_SPACE_QUOTA = 0x80100642,
|
||||||
|
SAVEDATA_NO_SPACE_FS = 0x80100643,
|
||||||
|
DRM_NO_ENTITLEMENT = 0x80100660,
|
||||||
|
PHOTO_DEVICE_NOT_FOUND = 0x80100680,
|
||||||
|
MUSIC_DEVICE_NOT_FOUND = 0x80100685,
|
||||||
|
MOUNT_LIMIT_OVER = 0x80100686,
|
||||||
|
STACKSIZE_TOO_SHORT = 0x801006A0,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilBootAttribute :: distinct c.uint
|
||||||
|
SceAppUtilAppEventType :: distinct c.uint
|
||||||
|
SceAppUtilSaveDataSlotId :: distinct c.uint
|
||||||
|
SceAppUtilSaveDataSlotStatus :: distinct c.uint
|
||||||
|
SceAppUtilAppParamId :: distinct c.uint
|
||||||
|
SceAppUtilBgdlStatusType :: distinct c.uint
|
||||||
|
|
||||||
|
SceAppUtilBgdlStatus :: struct {
|
||||||
|
type: SceAppUtilBgdlStatusType,
|
||||||
|
addcontNumReady: sce.UInt32,
|
||||||
|
addcontNumNotReady: sce.UInt32,
|
||||||
|
licenseReady: sce.UInt32,
|
||||||
|
reserved: [28]sce.Char8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppUtilBgdlStatus) == 0x2C)
|
||||||
|
|
||||||
|
SceAppUtilInitParam :: struct {
|
||||||
|
workBufSize: sce.Size, //!< Buffer size
|
||||||
|
reserved: [60]c.uint8_t, //!< Reserved range
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppUtilInitParam) == 0x40)
|
||||||
|
|
||||||
|
SceAppUtilBootParam :: struct {
|
||||||
|
attr: SceAppUtilBootAttribute, //!< Boot attribute
|
||||||
|
appVersion: c.uint, //!< App version
|
||||||
|
reserved: [32]c.uint8_t, //!< Reserved range
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppUtilBootParam) == 0x28)
|
||||||
|
|
||||||
|
SceAppUtilSaveDataMountPoint :: struct {
|
||||||
|
data: [16]c.uint8_t,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppUtilSaveDataMountPoint) == 0x10)
|
||||||
|
|
||||||
|
SceAppUtilAppEventParam :: struct {
|
||||||
|
type: SceAppUtilAppEventType, //!< Event type
|
||||||
|
dat: [1024]c.uint8_t, //!< Event parameter
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppUtilAppEventParam) == 0x404)
|
||||||
|
|
||||||
|
SceAppUtilMountPoint :: struct {
|
||||||
|
data: [16]c.int8_t, //!< Mount point
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppUtilMountPoint) == 0x10)
|
||||||
|
|
||||||
|
SceAppUtilSaveDataSlotEmptyParam :: struct {
|
||||||
|
title: [^]sce.WChar16, //!< Title string
|
||||||
|
iconPath: cstring, //!< Path to icon
|
||||||
|
iconBuf: rawptr, //!< Icon buffer
|
||||||
|
iconBufSize: sce.Size, //!< Icon buffer size
|
||||||
|
reserved: [32]c.uint8_t, //!< Reserved range
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilSaveDataSlotEmptyParam) == 0x30)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilSaveDataSlot :: struct {
|
||||||
|
id: SceAppUtilSaveDataSlotId, //!< Slot id
|
||||||
|
status: SceAppUtilSaveDataSlotStatus, //!< Slot status
|
||||||
|
userParam: c.int, //!< Param for free usage
|
||||||
|
emptyParam: ^SceAppUtilSaveDataSlotEmptyParam, //!< Settings for empty slot
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilSaveDataSlot) == 0x10)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilSaveDataSlotParam :: struct {
|
||||||
|
status: SceAppUtilSaveDataSlotStatus, //!< Status
|
||||||
|
title: [32]sce.WChar16, //!< Title name
|
||||||
|
subTitle: [64]sce.WChar16, //!< Subtitle
|
||||||
|
detail: [256]sce.WChar16, //!< Detail info
|
||||||
|
iconPath: [64]c.char, //!< Icon path
|
||||||
|
userParam: c.int, //!< User param
|
||||||
|
sizeKB: sce.Size, //!< Data size (In KB)
|
||||||
|
modifiedTime: sce.DateTime, //!< Last modified time
|
||||||
|
reserved: [48]c.uint8_t, //!< Reserved range
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAppUtilSaveDataSlotParam) == 0x34C)
|
||||||
|
|
||||||
|
SceAppUtilSaveDataSaveItem :: struct {
|
||||||
|
dataPath: cstring, //!< Path to savedata
|
||||||
|
buf: rawptr, //!< Buffer of savedata file
|
||||||
|
pad: c.uint32_t, //!< Padding
|
||||||
|
offset: sce.Off, //!< Offset of savedata file
|
||||||
|
mode: c.int, //!< Savedata save mode (One of ::SceAppUtilSaveDataSaveMode)
|
||||||
|
reserved: [36]c.uint8_t, //!< Reserved range
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilSaveDataSaveItem) == 0x40)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilSaveDataFile :: struct {
|
||||||
|
filePath: cstring,
|
||||||
|
buf: rawptr,
|
||||||
|
bufSize: sce.Size,
|
||||||
|
offset: sce.Off,
|
||||||
|
mode: c.uint,
|
||||||
|
progDelta: c.uint,
|
||||||
|
reserved: [32]c.uint8_t,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilSaveDataFile) == 0x40)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilSaveDataFileSlot :: struct {
|
||||||
|
id: c.uint,
|
||||||
|
slotParam: ^SceAppUtilSaveDataSlotParam,
|
||||||
|
reserved: [32]c.uint8_t,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilSaveDataFileSlot) == 0x28)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilSaveDataRemoveItem :: struct {
|
||||||
|
dataPath: cstring, //!< Path to savedata data
|
||||||
|
mode: c.int, //!< Savedata remove mode (One of ::SceAppUtilSaveDataRemoveMode)
|
||||||
|
reserved: [36]c.uint8_t, //!< Reserved range
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilSaveDataRemoveItem) == 0x2C)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilStoreBrowseParam :: struct {
|
||||||
|
type: c.uint, //!< Store browse type
|
||||||
|
id: cstring, //!< Target id
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilStoreBrowseParam) == 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAppUtilWebBrowserParam :: struct {
|
||||||
|
str: cstring, //!< String that's passed to command specified by launchMode
|
||||||
|
strlen: sce.Size, //!< Length of str
|
||||||
|
launchMode: c.uint, //!< Browser mode
|
||||||
|
reserved: c.uint, //!< Reserved area
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAppUtilWebBrowserParam) == 0x10)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package atrac
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import atrac "system:SceAtrac_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceAtrac")
|
||||||
|
foreign atrac {
|
||||||
|
QueryDecoderGroupMemSize :: proc(atracType: sce.UInt32, pDecoderGroup: ^SceAtracDecoderGroup) -> c.int ---
|
||||||
|
CreateDecoderGroup :: proc(atracType: sce.UInt32, pDecoderGroup: ^SceAtracDecoderGroup, pvWorkMem: rawptr, initAudiodecFlag: c.int) -> c.int ---
|
||||||
|
DeleteDecoderGroup :: proc(atracType: sce.UInt32, termAudiodecFlag: c.int) -> c.int ---
|
||||||
|
GetDecoderGroupInfo :: proc(atracType: sce.UInt32, pCreatedDecoder: ^SceAtracDecoderGroup, pAvailableDecoder: ^SceAtracDecoderGroup) -> c.int ---
|
||||||
|
SetDataAndAcquireHandle :: proc(pucBuffer: [^]sce.UChar8, uiReadSize: sce.UInt32, uiBufferSize: sce.UInt32) -> c.int ---
|
||||||
|
ReleaseHandle :: proc(atracHandle: c.int) -> c.int ---
|
||||||
|
Decode :: proc(atracHandle: c.int, pOutputBuffer: rawptr, pOutputSamples: ^sce.UInt32, pDecoderStatus: ^sce.UInt32) -> c.int ---
|
||||||
|
GetStreamInfo :: proc(atracHandle: c.int, pStreamInfo: ^SceAtracStreamInfo) -> c.int ---
|
||||||
|
AddStreamData :: proc(atracHandle: c.int, addSize: sce.UInt32) -> c.int ---
|
||||||
|
IsSubBufferNeeded :: proc(atracHandle: c.int) -> c.int ---
|
||||||
|
GetSubBufferInfo :: proc(atracHandle: c.int, pReadPosition: ^sce.UInt32, pMinSubBufferSize: ^sce.UInt32, pDataSize: ^sce.UInt32) -> c.int ---
|
||||||
|
SetSubBuffer :: proc(atracHandle: c.int, pSubBuffer: [^]sce.UChar8, subBufferSize: sce.UInt32) -> c.int ---
|
||||||
|
SetLoopNum :: proc(atracHandle: c.int, loopNum: c.int) -> c.int ---
|
||||||
|
SetOutputSamples :: proc(atracHandle: c.int, outputSamples: sce.UInt32) -> c.int ---
|
||||||
|
ResetNextOutputPosition :: proc(atracHandle: c.int, resetSample: sce.UInt32) -> c.int ---
|
||||||
|
GetContentInfo :: proc(atracHandle: c.int, pContentInfo: ^SceAtracContentInfo) -> c.int ---
|
||||||
|
GetLoopInfo :: proc(atracHandle: c.int, pLoopNum: ^c.int, pLoopStatus: ^sce.UInt32) -> c.int ---
|
||||||
|
GetOutputSamples :: proc(atracHandle: c.int, pOutputSamples: ^sce.UInt32) -> c.int ---
|
||||||
|
GetNextOutputPosition :: proc(atracHandle: c.int, pNextOutputSample: ^sce.UInt32) -> c.int ---
|
||||||
|
GetRemainSamples :: proc(atracHandle: c.int, pRemainSamples: ^sce.Long64) -> c.int ---
|
||||||
|
GetOutputableSamples :: proc(atracHandle: c.int, pOutputableSamples: ^sce.Long64) -> c.int ---
|
||||||
|
GetDecoderStatus :: proc(atracHandle: c.int, pDecoderStatus: ^sce.UInt32) -> c.int ---
|
||||||
|
GetVacantSize :: proc(atracHandle: c.int, pVacantSize: ^sce.UInt32) -> c.int ---
|
||||||
|
GetInternalError :: proc(atracHandle: c.int, pInternalError: ^c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
package atrac
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import audiodec "../Audiodec"
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAtracErrorCode :: enum i64 {
|
||||||
|
INVALID_POINTER = 0x80630000,
|
||||||
|
INVALID_SIZE = 0x80630001,
|
||||||
|
INVALID_WORD_LENGTH = 0x80630002,
|
||||||
|
INVALID_TYPE = 0x80630003,
|
||||||
|
INVALID_TOTAL_CH = 0x80630004,
|
||||||
|
INVALID_ALIGNMENT = 0x80630005,
|
||||||
|
ALREADY_CREATED = 0x80630006,
|
||||||
|
NOT_CREATED = 0x80630007,
|
||||||
|
SHORTAGE_OF_CH = 0x80630008,
|
||||||
|
UNSUPPORTED_DATA = 0x80630009,
|
||||||
|
INVALID_DATA = 0x8063000A,
|
||||||
|
READ_SIZE_IS_TOO_SMALL = 0x8063000B,
|
||||||
|
INVALID_HANDLE = 0x8063000C,
|
||||||
|
READ_SIZE_OVER_BUFFER = 0x8063000D,
|
||||||
|
MAIN_BUFFER_SIZE_IS_TOO_SMALL = 0x8063000E,
|
||||||
|
SUB_BUFFER_SIZE_IS_TOO_SMALL = 0x8063000F,
|
||||||
|
DATA_SHORTAGE_IN_BUFFER = 0x80630010,
|
||||||
|
ALL_DATA_WAS_DECODED = 0x80630011,
|
||||||
|
INVALID_MAX_OUTPUT_SAMPLES = 0x80630012,
|
||||||
|
ADDED_DATA_IS_TOO_BIG = 0x80630013,
|
||||||
|
NEED_SUB_BUFFER = 0x80630014,
|
||||||
|
INVALID_SAMPLE = 0x80630015,
|
||||||
|
NO_NEED_SUB_BUFFER = 0x80630016,
|
||||||
|
INVALID_LOOP_STATUS = 0x80630017,
|
||||||
|
REMAIN_VALID_HANDLE = 0x80630018,
|
||||||
|
INVALID_LOOP_NUM = 0x80630030
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Memory alignment size */
|
||||||
|
SCE_ATRAC_ALIGNMENT_SIZE :: (audiodec.SCE_AUDIODEC_ALIGNMENT_SIZE)
|
||||||
|
|
||||||
|
/* The macro of rounding up the memory size */
|
||||||
|
//SCE_ATRAC_ROUND_UP(size) ((size + SCE_ATRAC_ALIGNMENT_SIZE - 1) & ~(SCE_ATRAC_ALIGNMENT_SIZE - 1))
|
||||||
|
|
||||||
|
/* The definition of ATRAC(TM) type */
|
||||||
|
SCE_ATRAC_TYPE_AT9 : c.uint : (0x2003)
|
||||||
|
|
||||||
|
/* Maximum number of total total channels */
|
||||||
|
SCE_ATRAC_AT9_MAX_TOTAL_CH :: (audiodec.SCE_AUDIODEC_AT9_MAX_CH_IN_LIBRARY)
|
||||||
|
|
||||||
|
/* The definition of wordLength */
|
||||||
|
SCE_ATRAC_WORD_LENGTH_16BITS :: (audiodec.SCE_AUDIODEC_WORD_LENGTH_16BITS)
|
||||||
|
|
||||||
|
/* Maximum number of channels per stream */
|
||||||
|
SCE_ATRAC_AT9_MAX_CH_IN_DECODER :: (audiodec.SCE_AUDIODEC_AT9_MAX_CH_IN_DECODER)
|
||||||
|
|
||||||
|
/* Maximum number of samples */
|
||||||
|
SCE_ATRAC_AT9_MAX_FRAME_SAMPLES :: (audiodec.SCE_AUDIODEC_AT9_MAX_SAMPLES)
|
||||||
|
|
||||||
|
/* Maximum number of output samples */
|
||||||
|
SCE_ATRAC_MAX_OUTPUT_SAMPLES :: (2048)
|
||||||
|
|
||||||
|
/* Maximum number of output frames */
|
||||||
|
SCE_ATRAC_AT9_MAX_OUTPUT_FRAMES :: (8)
|
||||||
|
|
||||||
|
/* Minimum number of loop samples */
|
||||||
|
SCE_ATRAC_AT9_MIN_LOOP_SAMPLES :: (3072)
|
||||||
|
|
||||||
|
/* The definition of ATRAC infinite loop */
|
||||||
|
SCE_ATRAC_INFINITE_LOOP_NUM : c.int : (-1)
|
||||||
|
|
||||||
|
/* The definition of ATRAC infinite samples */
|
||||||
|
SCE_ATRAC_INFINITE_SAMPLES : c.int : (-1)
|
||||||
|
|
||||||
|
/* The definition of ATRAC decoder status */
|
||||||
|
SceAtracDecoderStatus :: enum c.int {
|
||||||
|
ALL_DATA_WAS_DECODED = 0x00000001,
|
||||||
|
ALL_DATA_IS_ON_MEMORY = 0x00000002,
|
||||||
|
NONLOOP_PART_IS_ON_MEMORY = 0x00000004,
|
||||||
|
LOOP_PART_IS_ON_MEMORY = 0x00000008
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The definition of loop status */
|
||||||
|
SceAtracLoopStatus :: enum c.int {
|
||||||
|
NON_RESETABLE_PART = 0x00000000,
|
||||||
|
RESETABLE_PART = 0x00000001
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The structure for decoder group */
|
||||||
|
SceAtracDecoderGroup :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
wordLength: sce.UInt32,
|
||||||
|
totalCh: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAtracDecoderGroup) == 0xC)
|
||||||
|
|
||||||
|
/* Content information structure */
|
||||||
|
SceAtracContentInfo :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
atracType: sce.UInt32,
|
||||||
|
channel: sce.UInt32,
|
||||||
|
samplingRate: sce.UInt32,
|
||||||
|
endSample: sce.Int32,
|
||||||
|
loopStartSample: sce.Int32,
|
||||||
|
loopEndSample: sce.Int32,
|
||||||
|
bitRate: sce.UInt32,
|
||||||
|
fixedEncBlockSize: sce.UInt32,
|
||||||
|
fixedEncBlockSample: sce.UInt32,
|
||||||
|
frameSample: sce.UInt32,
|
||||||
|
loopBlockOffset: sce.UInt32,
|
||||||
|
loopBlockSize: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAtracContentInfo) == 0x34)
|
||||||
|
|
||||||
|
/* Stream information structure */
|
||||||
|
SceAtracStreamInfo :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
pWritePosition: ^sce.UChar8, // TODO: multipointer???
|
||||||
|
readPosition: sce.UInt32,
|
||||||
|
writableSize: sce.UInt32,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAtracStreamInfo) == 0x10)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package audioin
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import audioin "system:SceAudioIn_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceAudioIn")
|
||||||
|
foreign audioin {
|
||||||
|
//! Open port
|
||||||
|
OpenPort :: proc(portType: SceAudioInPortType, grain: c.int, freq: c.int, param: SceAudioInParam) -> c.int ---
|
||||||
|
|
||||||
|
//! Close port
|
||||||
|
ReleasePort :: proc(port: c.int) -> c.int ---
|
||||||
|
|
||||||
|
Input :: proc(port: c.int, destPtr: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
/* get status */
|
||||||
|
GetAdopt :: proc(portType: SceAudioInPortType) -> c.int ---
|
||||||
|
GetStatus :: proc(select: c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package audioin
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAudioInErrorCode :: enum i64 {
|
||||||
|
//! Undefined error
|
||||||
|
FATAL = 0x80260100,
|
||||||
|
//! Bad value of port number
|
||||||
|
INVALID_PORT = 0x80260101,
|
||||||
|
//! Invalid sample length
|
||||||
|
INVALID_SIZE = 0x80260102,
|
||||||
|
//! Invalid sample frequency
|
||||||
|
INVALID_SAMPLE_FREQ = 0x80260103,
|
||||||
|
//! Invalid port type
|
||||||
|
INVALID_PORT_TYPE = 0x80260104,
|
||||||
|
//! Invalid pointer value
|
||||||
|
INVALID_POINTER = 0x80260105,
|
||||||
|
//! Invalid port param
|
||||||
|
INVALID_PORT_PARAM = 0x80260106,
|
||||||
|
//! Cannot open no ports
|
||||||
|
PORT_FULL = 0x80260107,
|
||||||
|
//! Not enough memory
|
||||||
|
OUT_OF_MEMORY = 0x80260108,
|
||||||
|
//! Port is not opened
|
||||||
|
NOT_OPENED = 0x80260109,
|
||||||
|
//! Tried to input while busy
|
||||||
|
BUSY = 0x8026010A,
|
||||||
|
//! Invalid parameter
|
||||||
|
INVALID_PARAMETER = 0x8026010B
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAudioInPortType :: enum c.int {
|
||||||
|
VOICE = 0,
|
||||||
|
RAW = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAudioInParam :: enum c.int {
|
||||||
|
PARAM_FORMAT_S16_MONO = 0,
|
||||||
|
GETSTATUS_MUTE = 1
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
package audioout
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import audioout "system:SceAudio_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceAudioOut")
|
||||||
|
foreign audioout {
|
||||||
|
/**
|
||||||
|
* Initialize audio port
|
||||||
|
*
|
||||||
|
* @param[in] type - One of ::SceAudioOutPortType
|
||||||
|
* @param[in] len - Number of samples, between ::SCE_AUDIO_MIN_LEN and ::SCE_AUDIO_MAX_LEN (multiple of 64)
|
||||||
|
* @param[in] freq - Sampling frequency (in Hz), one of the followings :
|
||||||
|
* 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000
|
||||||
|
* @param[in] mode - One of ::SceAudioOutMode
|
||||||
|
*
|
||||||
|
* @return port number, < 0 on error.
|
||||||
|
* @note - The volume is initially set to its max value (::SCE_AUDIO_OUT_MAX_VOL)
|
||||||
|
*/
|
||||||
|
OpenPort :: proc(type: SceAudioOutPortType, len: c.int, freq: c.int, mode: SceAudioOutMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release an audio port
|
||||||
|
*
|
||||||
|
* @param[in] type - Port number returned by ::sceAudioOutOpenPort
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
ReleasePort :: proc(port: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output audio (blocking function)
|
||||||
|
*
|
||||||
|
* @param[in] port - Port number returned by ::sceAudioOutOpenPort
|
||||||
|
* @param[in] *buf : Pointer to audio data buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - if NULL is specified for *buf, the function will not return until the last
|
||||||
|
* output audio data has been output.
|
||||||
|
*/
|
||||||
|
Output :: proc(port: c.int, buf: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set volume of specified output audio port
|
||||||
|
*
|
||||||
|
* @param[in] port - Port number returned by ::sceAudioOutOpenPort
|
||||||
|
* @param[in] ch - Channel numbers as flags (see ::SceAudioOutChannelFlag)
|
||||||
|
* @param[in] *vol - Array to int specifying volume for each channel (Left channel first for stereo)
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetVolume :: proc(port: c.int, ch: SceAudioOutChannelFlag, vol: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change configuration of specified output port
|
||||||
|
*
|
||||||
|
* @param[in] port - Port number returned by ::sceAudioOutOpenPort
|
||||||
|
* @param[in] len - see ::sceAudioOutOpenPort()
|
||||||
|
* @param[in] freq - see ::sceAudioOutOpenPort()
|
||||||
|
* @param[in] mode - see ::sceAudioOutOpenPort()
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - If (-1) is specified for any argument (excepted for port), current configuration is used instead.
|
||||||
|
*/
|
||||||
|
SetConfig :: proc(port: c.int, len: sce.Size, freq: c.int, mode: SceAudioOutMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a parameter value of specified output port
|
||||||
|
*
|
||||||
|
* @param[in] port - Port number returned by ::sceAudioOutOpenPort
|
||||||
|
* @param[in] type - One of ::SceAudioOutConfigType
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetConfig :: proc(port: c.int, type: SceAudioOutConfigType) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set 'Automatic Level Control' mode on the BGM port
|
||||||
|
* ALC is also known as 'Dynamic Normalizer'
|
||||||
|
*
|
||||||
|
* @param[in] mode - One of ::SceAudioOutAlcMode
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetAlcMode :: proc(mode: SceAudioOutAlcMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of remaining samples to be output on the specified port
|
||||||
|
*
|
||||||
|
* @param[in] port - Port number returned by ::sceAudioOutOpenPort
|
||||||
|
*
|
||||||
|
* @return Number of samples on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetRestSample :: proc(port: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get status of port type
|
||||||
|
* Return different value on whether the port type is used for sound generation or not.
|
||||||
|
*
|
||||||
|
* @param[in] type - One of ::SceAudioOutPortType
|
||||||
|
*
|
||||||
|
* @return (1) if port is in use, (0) otherwise. < 0 on error.
|
||||||
|
*/
|
||||||
|
GetAdopt :: proc(type: SceAudioOutPortType) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
package audioout
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAudioOutErrorCode :: enum i64 {
|
||||||
|
NOT_OPENED = 0x80260001,
|
||||||
|
BUSY = 0x80260002,
|
||||||
|
INVALID_PORT = 0x80260003,
|
||||||
|
INVALID_POINTER = 0x80260004,
|
||||||
|
PORT_FULL = 0x80260005,
|
||||||
|
INVALID_SIZE = 0x80260006,
|
||||||
|
INVALID_FORMAT = 0x80260007,
|
||||||
|
INVALID_SAMPLE_FREQ = 0x80260008,
|
||||||
|
INVALID_VOLUME = 0x80260009,
|
||||||
|
INVALID_PORT_TYPE = 0x8026000A,
|
||||||
|
INVALID_FX_TYPE = 0x8026000B,
|
||||||
|
INVALID_CONF_TYPE = 0x8026000C,
|
||||||
|
OUT_OF_MEMORY = 0x8026000D
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAudioOutParam :: enum c.int {
|
||||||
|
FORMAT_S16_MONO = 0,
|
||||||
|
FORMAT_S16_STEREO = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAudioOutPortType :: enum c.int {
|
||||||
|
//! Used for main audio output, freq must be set to 48000 Hz
|
||||||
|
MAIN = 0,
|
||||||
|
//! Used for Background Music port
|
||||||
|
BGM = 1,
|
||||||
|
//! Used for voice chat port
|
||||||
|
VOICE = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAudioOutMode :: enum c.int {
|
||||||
|
MONO = 0,
|
||||||
|
STEREO = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_AUDIO_MIN_LEN :: 64 //!< Minimum granularity
|
||||||
|
SCE_AUDIO_MAX_LEN :: 65472 //!< Maximum granularity
|
||||||
|
|
||||||
|
SCE_AUDIO_OUT_MAX_VOL :: 32768 //!< Maximum output port volume
|
||||||
|
SCE_AUDIO_VOLUME_0DB :: SCE_AUDIO_OUT_MAX_VOL //!< Maximum output port volume
|
||||||
|
|
||||||
|
/** Flags to use as 'ch' argument for ::sceAudioOutSetVolume */
|
||||||
|
SceAudioOutChannelFlag :: enum c.int {
|
||||||
|
L_CH = 1, //!< Left Channel
|
||||||
|
R_CH = 2 //!< Right Channel
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Config type values to specify to ::sceAudioOutGetConfig */
|
||||||
|
SceAudioOutConfigType :: enum c.int {
|
||||||
|
LEN = 0,
|
||||||
|
FREQ = 1,
|
||||||
|
MODE = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Argument 'mode' to specify to ::sceAudioOutSetAlcMode */
|
||||||
|
SceAudioOutAlcMode :: enum c.int {
|
||||||
|
OFF = 0,
|
||||||
|
MODE1 = 1,
|
||||||
|
MODE_MAX = 2
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package audiodec
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import audiodec "system:SceAudiodec_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceAudiodec")
|
||||||
|
foreign audiodec {
|
||||||
|
InitLibrary :: proc(codecType: sce.UInt32, pInitParam: ^SceAudiodecInitParam) -> sce.Int32 ---
|
||||||
|
TermLibrary :: proc(codecType: sce.UInt32) -> sce.Int32 ---
|
||||||
|
CreateDecoder :: proc(pCtrl: ^SceAudiodecCtrl, codecType: sce.UInt32) -> sce.Int32 ---
|
||||||
|
DeleteDecoder :: proc(pCtrl: ^SceAudiodecCtrl) -> sce.Int32 ---
|
||||||
|
Decode :: proc(pCtrl: ^SceAudiodecCtrl) -> sce.Int32 ---
|
||||||
|
DecodeNFrames :: proc(pCtrl: ^SceAudiodecCtrl, nFrames: sce.UInt32) -> sce.Int32 ---
|
||||||
|
DecodeNStreams :: proc(pCtrls: []^SceAudiodecCtrl, nStreams: sce.UInt32) -> sce.Int32 ---
|
||||||
|
ClearContext :: proc(pCtrl: ^SceAudiodecCtrl) -> sce.Int32 ---
|
||||||
|
GetInternalError :: proc(pCtrl: ^SceAudiodecCtrl, pInternalError: ^sce.Int32) -> sce.Int32 ---
|
||||||
|
|
||||||
|
GetContextSize :: proc(pCtrl: ^SceAudiodecCtrl, codecType: sce.UInt32) -> sce.Int32 ---
|
||||||
|
CreateDecoderExternal :: proc(pCtrl: ^SceAudiodecCtrl, codecType: sce.UInt32, vaContext: sce.UIntVAddr, contextSize: sce.UInt32) -> sce.Int32 ---
|
||||||
|
DeleteDecoderExternal :: proc(pCtrl: ^SceAudiodecCtrl, pvaContext: ^sce.UIntVAddr) -> sce.Int32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
package audiodec
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
// TODO: this should be c.int
|
||||||
|
SceAudiodecErrorCode :: enum i64 {
|
||||||
|
ERROR_API_FAIL = 0x807F0000,
|
||||||
|
ERROR_INVALID_TYPE = 0x807F0001,
|
||||||
|
ERROR_INVALID_INIT_PARAM = 0x807F0002,
|
||||||
|
ERROR_ALREADY_INITIALIZED = 0x807F0003,
|
||||||
|
ERROR_OUT_OF_MEMORY = 0x807F0004,
|
||||||
|
ERROR_NOT_INITIALIZED = 0x807F0005,
|
||||||
|
ERROR_A_HANDLE_IN_USE = 0x807F0006,
|
||||||
|
ERROR_ALL_HANDLES_IN_USE = 0x807F0007,
|
||||||
|
ERROR_INVALID_PTR = 0x807F0008,
|
||||||
|
ERROR_INVALID_HANDLE = 0x807F0009,
|
||||||
|
ERROR_NOT_HANDLE_IN_USE = 0x807F000A,
|
||||||
|
ERROR_CH_SHORTAGE = 0x807F000B,
|
||||||
|
ERROR_INVALID_WORD_LENGTH = 0x807F000C,
|
||||||
|
ERROR_INVALID_SIZE = 0x807F000D,
|
||||||
|
ERROR_UNSUPPORTED = 0x807F000E,
|
||||||
|
ERROR_INVALID_NFRAMES = 0x807F000F,
|
||||||
|
ERROR_INVALID_NSTREAMS = 0x807F0010,
|
||||||
|
ERROR_DIFFERENT_TYPES = 0x807F0011,
|
||||||
|
ERROR_SAME_HANDLES = 0x807F0012,
|
||||||
|
ERROR_BUSY = 0x807F0013,
|
||||||
|
AT9_ERROR_INVALID_CONFIG = 0x807F2000,
|
||||||
|
MP3_ERROR_INVALID_CH = 0x807F2800,
|
||||||
|
MP3_ERROR_INVALID_MPEG_VERSION = 0x807F2801,
|
||||||
|
AAC_ERROR_INVALID_CH = 0x807F3000,
|
||||||
|
CELP_ERROR_INVALID_CONFIG = 0x807F3800
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_AUDIODEC_ALIGNMENT_SIZE : c.uint : 0x100
|
||||||
|
// TODO:
|
||||||
|
//#define SCE_AUDIODEC_ROUND_UP(size) ((size + SCE_AUDIODEC_ALIGNMENT_SIZE - 1) & ~(SCE_AUDIODEC_ALIGNMENT_SIZE - 1))
|
||||||
|
|
||||||
|
SCE_AUDIODEC_WORD_LENGTH_16BITS :: 16
|
||||||
|
|
||||||
|
SceAudiodecType :: enum c.uint {
|
||||||
|
AT9 = 0x1003,
|
||||||
|
MP3 = 0x1004,
|
||||||
|
AAC = 0x1005,
|
||||||
|
CELP = 0x1006,
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_AUDIODEC_AT9_MAX_CH_IN_LIBRARY :: 16
|
||||||
|
SCE_AUDIODEC_MP3_MAX_STREAMS :: 8
|
||||||
|
SCE_AUDIODEC_AAC_MAX_STREAMS :: 8
|
||||||
|
SCE_AUDIODEC_CELP_MAX_STREAMS :: 8
|
||||||
|
|
||||||
|
SCE_AUDIODEC_AT9_MAX_CH_IN_DECODER :: 2
|
||||||
|
SCE_AUDIODEC_MP3_MAX_CH_IN_DECODER :: 2
|
||||||
|
SCE_AUDIODEC_AAC_MAX_CH_IN_DECODER :: 2
|
||||||
|
SCE_AUDIODEC_CELP_MAX_CH_IN_DECODER :: 1
|
||||||
|
|
||||||
|
SCE_AUDIODEC_AT9_MAX_SAMPLES :: 256
|
||||||
|
SCE_AUDIODEC_MP3_MAX_SAMPLES :: 1152
|
||||||
|
SCE_AUDIODEC_AAC_MAX_SAMPLES :: 2048
|
||||||
|
SCE_AUDIODEC_CELP_MAX_SAMPLES :: 320
|
||||||
|
|
||||||
|
SCE_AUDIODEC_AT9_MAX_ES_SIZE :: 1024
|
||||||
|
SCE_AUDIODEC_MP3_MAX_ES_SIZE :: 1441
|
||||||
|
SCE_AUDIODEC_AAC_MAX_ES_SIZE :: 1536
|
||||||
|
SCE_AUDIODEC_CELP_MAX_ES_SIZE :: 24
|
||||||
|
|
||||||
|
SCE_AUDIODEC_AT9_EXTRA_ACCESS_SIZE :: 0
|
||||||
|
SCE_AUDIODEC_MP3_EXTRA_ACCESS_SIZE :: 0
|
||||||
|
SCE_AUDIODEC_AAC_EXTRA_ACCESS_SIZE :: 0
|
||||||
|
SCE_AUDIODEC_CELP_EXTRA_ACCESS_SIZE :: 0
|
||||||
|
|
||||||
|
SCE_AUDIODEC_AT9_MAX_NFRAMES :: 8
|
||||||
|
SCE_AUDIODEC_MP3_MAX_NFRAMES :: 1
|
||||||
|
SCE_AUDIODEC_AAC_MAX_NFRAMES :: 1
|
||||||
|
SCE_AUDIODEC_CELP_MAX_NFRAMES :: 1
|
||||||
|
|
||||||
|
SCE_AUDIODEC_AT9_MAX_NSTREAMS :: 6
|
||||||
|
SCE_AUDIODEC_MP3_MAX_NSTREAMS :: 6
|
||||||
|
SCE_AUDIODEC_AAC_MAX_NSTREAMS :: 6
|
||||||
|
SCE_AUDIODEC_CELP_MAX_NSTREAMS :: 7
|
||||||
|
|
||||||
|
SceAudiodecMpegVersion :: enum c.int {
|
||||||
|
VERSION_2_5 = 0,
|
||||||
|
VERSION_RESERVED = 1,
|
||||||
|
VERSION_2 = 2,
|
||||||
|
VERSION_1 = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_AUDIODEC_CELP_MPE :: 0
|
||||||
|
|
||||||
|
SCE_AUDIODEC_CELP_SAMPLING_RATE_8KHZ :: 8000
|
||||||
|
|
||||||
|
SceAudiodecCelpBitrate :: enum c.int {
|
||||||
|
BIT_RATE_3850BPS = 3850,
|
||||||
|
BIT_RATE_4650BPS = 4650,
|
||||||
|
BIT_RATE_5700BPS = 5700,
|
||||||
|
BIT_RATE_6600BPS = 6600,
|
||||||
|
BIT_RATE_7300BPS = 7300,
|
||||||
|
BIT_RATE_8700BPS = 8700,
|
||||||
|
BIT_RATE_9900BPS = 9900,
|
||||||
|
BIT_RATE_10700BPS = 10700,
|
||||||
|
BIT_RATE_11800BPS = 11800,
|
||||||
|
BIT_RATE_12200BPS = 12200,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAudiodecInitStreamParam :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
totalStreams: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInitStreamParam) == 8)
|
||||||
|
|
||||||
|
SceAudiodecInitChParam :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
totalCh: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInitChParam) == 8)
|
||||||
|
|
||||||
|
SceAudiodecInitParam :: struct #raw_union {
|
||||||
|
size: sce.UInt32,
|
||||||
|
at9: SceAudiodecInitChParam,
|
||||||
|
mp3: SceAudiodecInitStreamParam,
|
||||||
|
aac: SceAudiodecInitStreamParam,
|
||||||
|
celp: SceAudiodecInitStreamParam,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInitParam) == 8)
|
||||||
|
|
||||||
|
SceAudiodecInfoAt9 :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
configData: [4]sce.UInt8,
|
||||||
|
ch: sce.UInt32,
|
||||||
|
bitRate: sce.UInt32,
|
||||||
|
samplingRate: sce.UInt32,
|
||||||
|
superFrameSize: sce.UInt32,
|
||||||
|
framesInSuperFrame: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInfoAt9) == 0x1C)
|
||||||
|
|
||||||
|
SceAudiodecInfoMp3 :: struct {
|
||||||
|
size: sce.UInt32, //!< sizeof(SceAudiodecInfoMp3)
|
||||||
|
ch: sce.UInt32, //!< number of channels (mono: 1, stereo/joint stereo/two mono: 2)
|
||||||
|
version: sce.UInt32, //!< MPEG version (MPEG1: 3, MPEG2: 2, MPEG2.5: 0)
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInfoMp3) == 0xC)
|
||||||
|
|
||||||
|
SceAudiodecInfoAac :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
isAdts: sce.UInt32,
|
||||||
|
ch: sce.UInt32,
|
||||||
|
samplingRate: sce.UInt32,
|
||||||
|
isSbr: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInfoAac) == 0x14)
|
||||||
|
|
||||||
|
/** Information structure for CELP */
|
||||||
|
SceAudiodecInfoCelp :: struct {
|
||||||
|
size: sce.UInt32, //!< sizeof(SceAudiodecInfoCelp)
|
||||||
|
excitationMode: sce.UInt32, //!< Excitation mode
|
||||||
|
samplingRate: sce.UInt32, //!< Sampling rate
|
||||||
|
bitRate: sce.UInt32, //!< Bit rate (one of ::SceAudiodecCelpBitrate)
|
||||||
|
lostCount: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInfoCelp) == 0x14)
|
||||||
|
|
||||||
|
SceAudiodecInfo :: struct #raw_union {
|
||||||
|
size: sce.UInt32,
|
||||||
|
at9: SceAudiodecInfoAt9,
|
||||||
|
mp3: SceAudiodecInfoMp3,
|
||||||
|
aac: SceAudiodecInfoAac,
|
||||||
|
celp: SceAudiodecInfoCelp,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudiodecInfo) == 0x1C)
|
||||||
|
|
||||||
|
SceAudiodecCtrl :: struct {
|
||||||
|
size: sce.UInt32,
|
||||||
|
handle: sce.Int32,
|
||||||
|
pEs: ^sce.UInt8, //!< pointer to elementary stream
|
||||||
|
inputEsSize: sce.UInt32, //!< size of elementary stream used actually (in byte)
|
||||||
|
maxEsSize: sce.UInt32, //!< maximum size of elementary stream used (in byte)
|
||||||
|
pPcm: rawptr, //!< pointer to PCM
|
||||||
|
outputPcmSize: sce.UInt32, //!< size of PCM output actually (in byte)
|
||||||
|
maxPcmSize: sce.UInt32, //!< maximum size of PCM output (in byte)
|
||||||
|
wordLength: sce.UInt32, //!< PCM bit depth
|
||||||
|
pInfo: ^SceAudiodecInfo, //!< pointer to SceAudiodecInfo
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAudiodecCtrl) == 0x28)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package audioenc
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import audioenc "system:SceAudioenc_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceAudioenc")
|
||||||
|
foreign audioenc {
|
||||||
|
InitLibrary :: proc(codecType: c.int, pInitParam: ^SceAudioencInitParam) -> c.int ---
|
||||||
|
TermLibrary :: proc(codecType: c.uint) -> c.int ---
|
||||||
|
CreateEncoder :: proc(pCtrl: ^SceAudioencCtrl, codecType: c.int) -> c.int ---
|
||||||
|
DeleteEncoder :: proc(pCtrl: ^SceAudioencCtrl) -> c.int ---
|
||||||
|
Encode :: proc(pCtrl: ^SceAudioencCtrl) -> c.int ---
|
||||||
|
ClearContext :: proc(pCtrl: ^SceAudioencCtrl) -> c.int ---
|
||||||
|
GetOptInfo :: proc(pCtrl: ^SceAudioencCtrl) -> c.int ---
|
||||||
|
GetInternalError :: proc(pCtrl: ^SceAudioencCtrl, pInternalError: ^c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
package audioenc
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAudioencErrorCode :: enum i64 {
|
||||||
|
API_FAIL = 0x80860000,
|
||||||
|
INVALID_TYPE = 0x80860001,
|
||||||
|
INVALID_INIT_PARAM = 0x80860002,
|
||||||
|
ALREADY_INITIALIZED = 0x80860003,
|
||||||
|
OUT_OF_MEMORY = 0x80860004,
|
||||||
|
NOT_INITIALIZED = 0x80860005,
|
||||||
|
A_HANDLE_IN_USE = 0x80860006,
|
||||||
|
ALL_HANDLES_IN_USE = 0x80860007,
|
||||||
|
INVALID_PTR = 0x80860008,
|
||||||
|
INVALID_HANDLE = 0x80860009,
|
||||||
|
NOT_HANDLE_IN_USE = 0x8086000A,
|
||||||
|
CH_SHORTAGE = 0x8086000B,
|
||||||
|
INVALID_WORD_LENGTH = 0x8086000C,
|
||||||
|
INVALID_SIZE = 0x8086000D,
|
||||||
|
INVALID_ALIGNMENT = 0x8086000E,
|
||||||
|
UNSUPPORTED = 0x8086000F
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAudioencCelpErrorCode :: enum i64 {
|
||||||
|
INVALID_CONFIG = 0x80861001
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_AUDIOENC_WORD_LENGTH_16BITS :: 16 //!< Definition of wordlength
|
||||||
|
SCE_AUDIOENC_TYPE_CELP : c.uint : 0x2006 //!< Audio encoder type
|
||||||
|
SCE_AUDIOENC_CELP_MAX_STREAMS :: 1 //!< Max number of streams
|
||||||
|
SCE_AUDIOENC_CELP_MAX_SAMPLES :: 320 //!< Max number of samples
|
||||||
|
SCE_AUDIOENC_CELP_MAX_ES_SIZE :: 24 //!< Max elementary stream size
|
||||||
|
SCE_AUDIOENC_CELP_MPE :: (0) //!< CELP encoder default excitation mode
|
||||||
|
SCE_AUDIOENC_CELP_SAMPLING_RATE_8KHZ :: (8000) //!< CELP encoder default sampling rate
|
||||||
|
|
||||||
|
SceAudioencCelpBitrate :: enum c.int {
|
||||||
|
BIT_RATE_3850BPS = 3850,
|
||||||
|
BIT_RATE_4650BPS = 4650,
|
||||||
|
BIT_RATE_5700BPS = 5700,
|
||||||
|
BIT_RATE_6600BPS = 6600,
|
||||||
|
BIT_RATE_7300BPS = 7300,
|
||||||
|
BIT_RATE_8700BPS = 8700,
|
||||||
|
BIT_RATE_9900BPS = 9900,
|
||||||
|
BIT_RATE_10700BPS = 10700,
|
||||||
|
BIT_RATE_11800BPS = 11800,
|
||||||
|
BIT_RATE_12200BPS = 12200
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Initialization structure to provide to ::SceAudioencInitParam */
|
||||||
|
SceAudioencInitStreamParam :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceAudioencInitStreamParam)
|
||||||
|
totalStreams: c.uint, //!< Total number of audio streams
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudioencInitStreamParam) == 8)
|
||||||
|
|
||||||
|
/** Information structure for CELP */
|
||||||
|
SceAudioencInfoCelp :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceAudioencInfoCelp)
|
||||||
|
excitationMode: c.uint, //!< Excitation mode
|
||||||
|
samplingRate: c.uint, //!< Sampling rate
|
||||||
|
bitRate: c.uint, //!< Bit rate (one of ::SceAudioencCelpBitrate)
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudioencInfoCelp) == 0x10)
|
||||||
|
|
||||||
|
/** Optional information structure for CELP */
|
||||||
|
SceAudioencOptInfoCelp :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceAudioencOptInfoCelp)
|
||||||
|
header: [32]c.uint8_t, //!< Header buffer
|
||||||
|
headerSize: sce.Size, //!< Header size
|
||||||
|
encoderVersion: c.uint, //!< Encoder version
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudioencOptInfoCelp) == 0x2C)
|
||||||
|
|
||||||
|
/** Initialization structure to pass as argument to ::sceAudioencInitLibrary */
|
||||||
|
SceAudioencInitParam :: struct #raw_union {
|
||||||
|
size: sce.Size, //!< sizeof(SceAudioencInitParam)
|
||||||
|
celp: SceAudioencInitStreamParam, //!< See ::SceAudioencInitStreamParam
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudioencInitParam) == 8)
|
||||||
|
|
||||||
|
SceAudioencInfo :: struct #raw_union {
|
||||||
|
size: sce.Size, //!< sizeof(SceAudioencInfo)
|
||||||
|
celp: SceAudioencInfoCelp, //!< Information structure for CELP
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudioencInfo) == 0x10)
|
||||||
|
|
||||||
|
/** Audio encoder optional info */
|
||||||
|
SceAudioencOptInfo :: struct #raw_union {
|
||||||
|
size: sce.Size, //!< sizeof(SceAudioencOptInfo)
|
||||||
|
celp: SceAudioencOptInfoCelp, //!< Optional information structure for CELP
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAudioencOptInfo) == 0x2C)
|
||||||
|
|
||||||
|
SceAudioencCtrl :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceAudioencCtrl)
|
||||||
|
handle: c.int, //!< Encoder handle
|
||||||
|
pInputPcm: rawptr, //!< Pointer to elementary stream
|
||||||
|
inputPcmSize: sce.Size, //!< Size of elementary stream used actually (in byte)
|
||||||
|
maxPcmSize: sce.Size, //!< Max size of elementary stream used (in byte)
|
||||||
|
pOutputEs: rawptr, //!< Pointer to PCM
|
||||||
|
outputEsSize: sce.Size, //!< Size of PCM output actually (in byte)
|
||||||
|
maxEsSize: sce.Size, //!< Max size of PCM output (in byte)
|
||||||
|
wordLength: sce.Size, //!< PCM bit depth
|
||||||
|
pInfo: ^SceAudioencInfo, //!< Pointer to ::SceAudioencInfo
|
||||||
|
pOptInfo: ^SceAudioencOptInfo, //!< Pointer to ::SceAudioencOptInfo
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAudioencCtrl) == 0x2C)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
package avplayer
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import avplayer "system:SceAvPlayer_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceAvPlayer")
|
||||||
|
foreign avplayer {
|
||||||
|
/**
|
||||||
|
* @param[in] data - Init data for the video player
|
||||||
|
*
|
||||||
|
* @return The video player handle on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Init :: proc(data: ^SceAvPlayerInitData) -> SceAvPlayerHandle ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Pause :: proc(handle: SceAvPlayerHandle) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Resume :: proc(handle: SceAvPlayerHandle) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Start :: proc(handle: SceAvPlayerHandle) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Stop :: proc(handle: SceAvPlayerHandle) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
* @param[in] looping - A flag indicating whether the video playback should loop
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetLooping :: proc(handle: SceAvPlayerHandle, looping: sce.Bool) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if the video playback is active, SCE_FALSE otherwise.
|
||||||
|
*/
|
||||||
|
IsActive :: proc(handle: SceAvPlayerHandle) -> sce.Bool ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
* @param[in] filename - Full path to the file to play
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
AddSource :: proc(handle: SceAvPlayerHandle, filename: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Close :: proc(handle: SceAvPlayerHandle) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
* @param[out] info - Descriptor for the received data
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if new data is available, SCE_FALSE otherwise.
|
||||||
|
*/
|
||||||
|
GetAudioData :: proc(handle: SceAvPlayerHandle, info: ^SceAvPlayerFrameInfo) -> sce.Bool ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
* @param[out] info - Descriptor for the received data
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if new data is available, SCE_FALSE otherwise.
|
||||||
|
*/
|
||||||
|
GetVideoData :: proc(handle: SceAvPlayerHandle, info: ^SceAvPlayerFrameInfo) -> sce.Bool ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
*
|
||||||
|
* @return Current time on the video playback in milliseconds.
|
||||||
|
*/
|
||||||
|
CurrentTime :: proc(handle: SceAvPlayerHandle) -> c.uint64_t ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
* @param[in] offset - Offset to jump to on the video playback in milliseconds.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
JumpToTime :: proc(handle: SceAvPlayerHandle, offset: c.uint64_t) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
* @param[in] offset - One of ::SceAvPlayerTrickSpeeds.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetTrickSpeed :: proc(handle: SceAvPlayerHandle, speed: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param[in] handle - A player handle created with ::sceAvPlayerInit
|
||||||
|
* @param[in] id - Stream ID to get info for.
|
||||||
|
* @param[out] info - Info retrieved for the requested stream.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetStreamInfo :: proc(handle: SceAvPlayerHandle, id: c.uint32_t, info: ^SceAvPlayerStreamInfo) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
package avplayer
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceAvPlayerHandle :: distinct c.int
|
||||||
|
#assert(size_of(SceAvPlayerHandle) == 4)
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceAvPlayerErrorCode :: enum i64 {
|
||||||
|
INVALID_PARAM = 0x806A0001,
|
||||||
|
OUT_OF_MEMORY = 0x806A0003
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerTrickSpeeds :: enum c.int {
|
||||||
|
REWIND_32X = -3200, //!< Rewind 32x
|
||||||
|
REWIND_16X = -1600, //!< Rewind 16x
|
||||||
|
REWIND_8X = -800, //!< Rewind 8x
|
||||||
|
NORMAL = 100, //!< Normal Speed
|
||||||
|
FAST_FORWARD_2X = 200, //!< Fast Forward 2x
|
||||||
|
FAST_FORWARD_4X = 400, //!< Fast Forward 4x
|
||||||
|
FAST_FORWARD_8X = 800, //!< Fast Forward 8x
|
||||||
|
FAST_FORWARD_16X = 1600, //!< Fast Forward 16x
|
||||||
|
FAST_FORWARD_32X = 3200 //!< Fast Forward 32x
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerStreamType :: enum c.int {
|
||||||
|
VIDEO, //!< Video stream type
|
||||||
|
AUDIO, //!< Audio stream type
|
||||||
|
TIMEDTEXT //!< Timed text (subtitles) stream type
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerAlloc :: #type ^proc(arg: rawptr, alignment: c.uint32_t, size: c.uint32_t) -> rawptr
|
||||||
|
SceAvPlayerFree :: #type ^proc(arg: rawptr, ptr: rawptr)
|
||||||
|
SceAvPlayerAllocFrame :: #type ^proc(arg: rawptr, alignment: c.uint32_t, size: c.uint32_t) -> rawptr
|
||||||
|
SceAvPlayerFreeFrame :: #type ^proc(arg: rawptr, ptr: rawptr)
|
||||||
|
|
||||||
|
SceAvPlayerOpenFile :: #type ^proc(p: rawptr, filename: cstring) -> c.int
|
||||||
|
SceAvPlayerCloseFile :: #type ^proc(p: rawptr) -> c.int
|
||||||
|
SceAvPlayerReadOffsetFile :: #type ^proc(p: rawptr, buffer: [^]c.uint8_t, position: c.uint64_t, length: c.uint32_t) -> c.int
|
||||||
|
SceAvPlayerSizeFile :: #type ^proc(p: rawptr) -> c.uint64_t
|
||||||
|
|
||||||
|
SceAvPlayerEventCallback :: #type ^proc(p: rawptr, argEventId: c.int32_t, argSourceId: c.int32_t, argEventData: rawptr)
|
||||||
|
|
||||||
|
SceAvPlayerMemReplacement :: struct {
|
||||||
|
objectPointer: rawptr,
|
||||||
|
allocate: SceAvPlayerAlloc, //!< Memory allocator for generic data
|
||||||
|
deallocate: SceAvPlayerFree, //!< Memory deallocator for generic data
|
||||||
|
allocateTexture: SceAvPlayerAllocFrame, //!< Memory allocator for video frames
|
||||||
|
deallocateTexture: SceAvPlayerFreeFrame, //!< Memory deallocator for video frames
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAvPlayerMemReplacement) == 0x14)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerFileReplacement :: struct {
|
||||||
|
objectPointer: rawptr,
|
||||||
|
open: SceAvPlayerOpenFile, //!< File open
|
||||||
|
close: SceAvPlayerCloseFile, //!< File close
|
||||||
|
readOffset: SceAvPlayerReadOffsetFile, //!< File read from offset
|
||||||
|
size: SceAvPlayerSizeFile, //!< File size
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAvPlayerFileReplacement) == 0x14)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerEventReplacement:: struct {
|
||||||
|
objectPointer: rawptr,
|
||||||
|
eventCallback: SceAvPlayerEventCallback,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAvPlayerEventReplacement) == 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerInitData :: struct {
|
||||||
|
memoryReplacement: SceAvPlayerMemReplacement, //!< Memory allocator replacement
|
||||||
|
fileReplacement: SceAvPlayerFileReplacement, //!< File I/O replacement
|
||||||
|
eventReplacement: SceAvPlayerEventReplacement, //!< Event callback replacement
|
||||||
|
debugLevel: c.int32_t,
|
||||||
|
basePriority: c.uint32_t, //!< Base priority of the thread running the video player
|
||||||
|
numOutputVideoFrameBuffers: c.int32_t,
|
||||||
|
autoStart: sce.Bool, //!< Flag indicating whether the video player should start playback automatically
|
||||||
|
reserved: [3]c.uint8_t, //!< Reserved data
|
||||||
|
defaultLanguage: cstring,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAvPlayerInitData) == 0x48)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerAudio :: struct {
|
||||||
|
channelCount: c.uint16_t, //!< The number of audio channels of the audio frame.
|
||||||
|
reserved: [2]c.uint8_t, //!< Reserved data.
|
||||||
|
sampleRate: c.uint32_t, //!< The samplerate of the audio frame in Hz.
|
||||||
|
size: c.uint32_t, //!< The size of the audio frame in bytes.
|
||||||
|
languageCode: c.uint32_t, //!< The language code of the audio frame.
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAvPlayerAudio) == 0x10)
|
||||||
|
|
||||||
|
SceAvPlayerVideo :: struct {
|
||||||
|
width: c.uint32_t, //!< The width of the video frame in pixels.
|
||||||
|
height: c.uint32_t, //!< The height of the video frame in pixels.
|
||||||
|
aspectRatio: c.float, //!< The aspect ratio of the video frame.
|
||||||
|
languageCode: c.uint32_t, //!< The language code of the video frame.
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAvPlayerVideo) == 0x10)
|
||||||
|
|
||||||
|
SceAvPlayerTextPosition :: struct {
|
||||||
|
top: c.uint16_t,
|
||||||
|
left: c.uint16_t,
|
||||||
|
bottom: c.uint16_t,
|
||||||
|
right: c.uint16_t,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAvPlayerTextPosition) == 8)
|
||||||
|
|
||||||
|
SceAvPlayerTimedText :: struct {
|
||||||
|
languageCode: c.uint32_t, //!< The language code of the subtitles.
|
||||||
|
textSize: c.uint16_t, //!< The size of the subtitles.
|
||||||
|
fontSize: c.uint16_t, //!< The size of the subtitles.
|
||||||
|
position: SceAvPlayerTextPosition, //!< The position of the subtitles.
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAvPlayerTimedText) == 0x10)
|
||||||
|
|
||||||
|
SceAvPlayerStreamDetails :: struct #raw_union {
|
||||||
|
reserved: [4]c.uint32_t, //!< Reserved data.
|
||||||
|
audio: SceAvPlayerAudio, //!< Audio details.
|
||||||
|
video: SceAvPlayerVideo, //!< Video details.
|
||||||
|
subs: SceAvPlayerTimedText, //!< Subtitles details.
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAvPlayerStreamDetails) == 0x10)
|
||||||
|
|
||||||
|
SceAvPlayerFrameInfo :: struct {
|
||||||
|
pData: [^]c.uint8_t, //!< Pointer to the frame data.
|
||||||
|
reserved: c.uint32_t, //!< Reserved data
|
||||||
|
timeStamp: c.uint64_t, //!< Timestamp of the frame in milliseconds
|
||||||
|
details: SceAvPlayerStreamDetails, //!< The frame details.
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceAvPlayerFrameInfo) == 0x20)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceAvPlayerStreamInfo :: struct {
|
||||||
|
type: c.uint32_t, //!< Type of the stream (One of ::SceAvPlayerStreamType)
|
||||||
|
reserved: c.uint32_t, //!< Reserved data
|
||||||
|
details: SceAvPlayerStreamDetails, //!< The stream details.
|
||||||
|
duration: c.uint64_t, //!< Total duration of the stream in milliseconds.
|
||||||
|
startTime: c.uint64_t, //!< Starting time of the stream in milliseconds.
|
||||||
|
}
|
||||||
|
#assert(size_of(SceAvPlayerStreamInfo) == 0x28)
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package bgapputil
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import bgapputil "system:SceBgAppUtil_stub"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error Codes
|
||||||
|
*/
|
||||||
|
SceBgAppUtilErrorCode :: enum c.int {
|
||||||
|
SCE_BGAPP_UTIL_ERROR_INVALID_ARG = −2146409214 //0x80106502
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "sceBgAppUtil")
|
||||||
|
foreign bgapputil {
|
||||||
|
/**
|
||||||
|
* Start BG application (eboot2.bin)
|
||||||
|
*
|
||||||
|
* @param[in] mode - must be 1
|
||||||
|
*
|
||||||
|
* @return 0 on success, <0 otherwise.
|
||||||
|
*/
|
||||||
|
StartBgApp :: proc(mode: c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,407 @@
|
|||||||
|
package camera
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import camera "SceCamera_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceCamera")
|
||||||
|
foreign camera {
|
||||||
|
/**
|
||||||
|
* Open a camera device.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] pInfo - Pointer to an already set ::SceCameraInfo struct.
|
||||||
|
*
|
||||||
|
* @return SCE_OK, <0 on error.
|
||||||
|
*/
|
||||||
|
Open :: proc(devnum: c.int, pInfo: ^SceCameraInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close a camera device.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
*
|
||||||
|
* @return SCE_OK, <0 on error.
|
||||||
|
*/
|
||||||
|
CameraClose :: proc(devnum: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start camera streaming.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
*
|
||||||
|
* @return SCE_OK, <0 on error.
|
||||||
|
*/
|
||||||
|
Start :: proc(devnum: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop camera streaming.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
*
|
||||||
|
* @return SCE_OK, <0 on error.
|
||||||
|
*/
|
||||||
|
Stop :: proc(devnum: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read image data from current streaming.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] pRead - Pointer to an already set ::SceCameraRead.
|
||||||
|
*
|
||||||
|
* @return SCE_OK, <0 on error.
|
||||||
|
*/
|
||||||
|
Read :: proc(devnum: c.int, pRead: ^SceCameraRead) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if camera device is active.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
*
|
||||||
|
* @return 1 if camera is active, 0 if inactive , <0 on error.
|
||||||
|
*/
|
||||||
|
IsActive :: proc(devnum: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera saturation value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pLevel - Pointer to a variable where to save the result. (See ::SceCameraSaturation)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetSaturation :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera saturation value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] level - One of ::SceCameraSaturation.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetSaturation :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera brightness value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pLevel - Pointer to a variable where to save the result.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetBrightness :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera brightness value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] level - Brightness value.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*
|
||||||
|
* @note Brightness value must be between 0 and 255.
|
||||||
|
*/
|
||||||
|
SetBrightness :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera contrast value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pLevel - Pointer to a variable where to save the result.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetContrast :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera contrast value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] level - Contrast value.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*
|
||||||
|
* @note Contrast value must be between 0 and 255.
|
||||||
|
*/
|
||||||
|
SetContrast :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera sharpness value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pLevel - Pointer to a variable where to save the result. (See ::SceCameraSharpness)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetSharpness :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera sharpness value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] level - One of ::SceCameraSharpness.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetSharpness :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera reverse mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result. (See ::SceCameraReverse)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetReverse :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera reverse mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraReverse.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetReverse :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get active camera effects.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetEffect :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active a camera effect.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraEffect.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetEffect :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera exposure compensation value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pLevel - Pointer to a variable where to save the result (See ::SceCameraExposureCompensation).
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetEV :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera exposure compensation value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] level - One of ::SceCameraExposureCompensation.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetEV :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera zoom value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pLevel - Pointer to a variable where to save the result.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetZoom :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera zoom value.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] level - Camera zoom value.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetZoom :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera anti-flickering mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result. (See ::SceCameraAntiFlicker)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetAntiFlicker :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera exposure anti-flickering mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraAntiFlicker.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetAntiFlicker :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera ISO speed mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result. (See ::SceCameraISO)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetISO :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera ISO speed mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraISO.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetISO :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera gain mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result. (See ::SceCameraGain)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetGain :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera gain mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraGain.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetGain :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera white balance mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result. (See ::SceCameraWhiteBalance)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetWhiteBalance :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera white balance mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraWhiteBalance.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetWhiteBalance :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera backlight compensation mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result. (See ::SceCameraBacklight)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetBacklight :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera backlight mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraBacklight.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetBacklight :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get nightmode mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result. (See ::SceCameraNightmode)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetNightmode :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set camera nightmoge mode.
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - One of ::SceCameraNightmode.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetNightmode :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get exposure ceiling mode. (?)
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetExposureCeiling :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set exposure ceiling mode. (?)
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - Exposure ceiling mode value. (?)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetExposureCeiling :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get auto control hold mode. (?)
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pMode - Pointer to a variable where to save the result.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
GetAutoControlHold :: proc(devnum: c.int, pMode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set auto control hold mode. (?)
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[in] mode - Auto control hold mode value. (?)
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
SetAutoControlHold :: proc(devnum: c.int, mode: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get camera device location. (?)
|
||||||
|
*
|
||||||
|
* @param[in] devnum - One of ::SceCameraDevice.
|
||||||
|
* @param[out] pLocation - Pointer to a variable where to save the result.
|
||||||
|
*
|
||||||
|
* @return SCE_OK , <0 on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
GetDeviceLocation :: proc(devnum: c.int, pLocation: ^sce.FVector3) -> c.int ---
|
||||||
|
|
||||||
|
GetImageQuality :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
SetImageQuality :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
GetNoiseReduction :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
SetNoiseReduction :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
GetSharpnessOff :: proc(devnum: c.int, pLevel: ^c.int) -> c.int ---
|
||||||
|
SetSharpnessOff :: proc(devnum: c.int, level: c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
package camera
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
/** Camera error codes. */
|
||||||
|
SceCameraErrorCode :: enum i64 {
|
||||||
|
PARAM = 0x802E0000,
|
||||||
|
ALREADY_INIT = 0x802E0001,
|
||||||
|
NOT_INIT = 0x802E0002,
|
||||||
|
ALREADY_OPEN = 0x802E0003,
|
||||||
|
NOT_OPEN = 0x802E0004,
|
||||||
|
ALREADY_START = 0x802E0005,
|
||||||
|
NOT_START = 0x802E0006,
|
||||||
|
FORMAT_UNKNOWN = 0x802E0007,
|
||||||
|
RESOLUTION_UNKNOWN = 0x802E0008,
|
||||||
|
BAD_FRAMERATE = 0x802E0009,
|
||||||
|
TIMEOUT = 0x802E000A,
|
||||||
|
EXCLUSIVE = 0x802E000B,
|
||||||
|
ATTRIBUTE_UNKNOWN = 0x802E000C,
|
||||||
|
MAX_PROCESS = 0x802E000D,
|
||||||
|
NOT_ACTIVE = 0x802E000E,
|
||||||
|
ALREADY_READ = 0x802E000F,
|
||||||
|
NOT_MOUNTED = 0x802E0010,
|
||||||
|
DATA_RANGE_UNKNOWN = 0x802E0011,
|
||||||
|
OTHER_ALREADY_START = 0x802E0012,
|
||||||
|
FATAL = 0x802E00FF,
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera device types. */
|
||||||
|
SceCameraDevice :: enum c.int {
|
||||||
|
FRONT = 0, //!< Front camera
|
||||||
|
BACK = 1 //!< Retro camera
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera process priorities. */
|
||||||
|
SceCameraPriority :: enum c.int {
|
||||||
|
SHARE = 0, //!< Share mode
|
||||||
|
EXCLUSIVE = 1 //!< Exclusive mode
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera output formats. */
|
||||||
|
SceCameraFormat :: enum c.int {
|
||||||
|
INVALID = 0, //!< Invalid format
|
||||||
|
YUV422_PLANE = 1, //!< YUV422 planes
|
||||||
|
YUV422_PACKED = 2, //!< YUV422 pixels packed
|
||||||
|
YUV420_PLANE = 3, //!< YUV420 planes
|
||||||
|
ARGB = 4, //!< ARGB pixels
|
||||||
|
ABGR = 5, //!< ABGR pixels
|
||||||
|
RAW8 = 6 //!< 8 bit raw data
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera resolutions. */
|
||||||
|
SceCameraResolution :: enum c.int {
|
||||||
|
RESOLUTION_0_0 = 0, //!< Invalid resolution
|
||||||
|
RESOLUTION_640_480 = 1, //!< VGA resolution
|
||||||
|
RESOLUTION_320_240 = 2, //!< QVGA resolution
|
||||||
|
RESOLUTION_160_120 = 3, //!< QQVGA resolution
|
||||||
|
RESOLUTION_352_288 = 4, //!< CIF resolution
|
||||||
|
RESOLUTION_176_144 = 5, //!< QCIF resolution
|
||||||
|
RESOLUTION_480_272 = 6, //!< PSP resolution
|
||||||
|
RESOLUTION_640_360 = 8 //!< NGP resolution
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera framerates. */
|
||||||
|
SceCameraFrameRate :: enum c.int {
|
||||||
|
FRAMERATE_3_FPS = 3, //!< 3.75 fps
|
||||||
|
FRAMERATE_5_FPS = 5, //!< 5 fps
|
||||||
|
FRAMERATE_7_FPS = 7, //!< 7.5 fps
|
||||||
|
FRAMERATE_10_FPS = 10, //!< 10 fps
|
||||||
|
FRAMERATE_15_FPS = 15, //!< 15 fps
|
||||||
|
FRAMERATE_20_FPS = 20, //!< 20 fps
|
||||||
|
FRAMERATE_30_FPS = 30, //!< 30 fps
|
||||||
|
FRAMERATE_60_FPS = 60, //!< 60 fps
|
||||||
|
FRAMERATE_120_FPS = 120 //!< 120 fps (@note Resolution must be QVGA or lower)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera exposure compensations. */
|
||||||
|
SceCameraExposureCompensation :: enum c.int {
|
||||||
|
EV_NEGATIVE_20 = -20, //!< -2.0
|
||||||
|
EV_NEGATIVE_17 = -17, //!< -1.7
|
||||||
|
EV_NEGATIVE_15 = -15, //!< -1.5
|
||||||
|
EV_NEGATIVE_13 = -13, //!< -1.3
|
||||||
|
EV_NEGATIVE_10 = -10, //!< -1.0
|
||||||
|
EV_NEGATIVE_7 = -7, //!< -0.7
|
||||||
|
EV_NEGATIVE_5 = -5, //!< -0.5
|
||||||
|
EV_NEGATIVE_3 = -3, //!< -0.3
|
||||||
|
EV_POSITIVE_0 = 0, //!< +0.0
|
||||||
|
EV_POSITIVE_3 = 3, //!< +0.3
|
||||||
|
EV_POSITIVE_5 = 5, //!< +0.5
|
||||||
|
EV_POSITIVE_7 = 7, //!< +0.7
|
||||||
|
EV_POSITIVE_10 = 10, //!< +1.0
|
||||||
|
EV_POSITIVE_13 = 13, //!< +1.3
|
||||||
|
EV_POSITIVE_15 = 15, //!< +1.5
|
||||||
|
EV_POSITIVE_17 = 17, //!< +1.7
|
||||||
|
EV_POSITIVE_20 = 20 //!< +2.0
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera effects. */
|
||||||
|
SceCameraEffect :: enum c.int {
|
||||||
|
NORMAL = 0,
|
||||||
|
NEGATIVE = 1,
|
||||||
|
BLACKWHITE = 2,
|
||||||
|
SEPIA = 3,
|
||||||
|
BLUE = 4,
|
||||||
|
RED = 5,
|
||||||
|
GREEN = 6
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera reverse modes. */
|
||||||
|
SceCameraReverse :: enum c.int {
|
||||||
|
OFF = 0, //!< Reverse mode off
|
||||||
|
MIRROR = 1, //!< Mirror mode
|
||||||
|
FLIP = 2, //!< Flip mode
|
||||||
|
MIRROR_FLIP = (MIRROR | FLIP) //!< Mirror + Flip mode
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera saturations. */
|
||||||
|
SceCameraSaturation :: enum c.int {
|
||||||
|
SATURATION_0 = 0, //!< 0.0
|
||||||
|
SATURATION_5 = 5, //!< 0.5
|
||||||
|
SATURATION_10 = 10, //!< 1.0
|
||||||
|
SATURATION_20 = 20, //!< 2.0
|
||||||
|
SATURATION_30 = 30, //!< 3.0
|
||||||
|
SATURATION_40 = 40 //!< 4.0
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera sharpnesses. */
|
||||||
|
SceCameraSharpness :: enum c.int {
|
||||||
|
SHARPNESS_100 = 1, //!< 100%
|
||||||
|
SHARPNESS_200 = 2, //!< 200%
|
||||||
|
SHARPNESS_300 = 3, //!< 300%
|
||||||
|
SHARPNESS_400 = 4 //!< 400%
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera anti-flickering modes. */
|
||||||
|
SceCameraAntiFlicker :: enum c.int {
|
||||||
|
ANTIFLICKER_AUTO = 1, //!< Automatic mode
|
||||||
|
ANTIFLICKER_50HZ = 2, //!< 50 Hz mode
|
||||||
|
ANTIFLICKER_60HZ = 3 //!< 50 Hz mode
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera ISO speed modes. */
|
||||||
|
SceCameraISO :: enum c.int {
|
||||||
|
ISO_AUTO = 1, //!< Automatic mode
|
||||||
|
ISO_100 = 100, //!< ISO100/21�
|
||||||
|
ISO_200 = 200, //!< ISO200/24�
|
||||||
|
ISO_400 = 400 //!< ISO400/27�
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera gain modes. */
|
||||||
|
SceCameraGain :: enum c.int {
|
||||||
|
GAIN_AUTO = 0,
|
||||||
|
GAIN_1 = 1,
|
||||||
|
GAIN_2 = 2,
|
||||||
|
GAIN_3 = 3,
|
||||||
|
GAIN_4 = 4,
|
||||||
|
GAIN_5 = 5,
|
||||||
|
GAIN_6 = 6,
|
||||||
|
GAIN_7 = 7,
|
||||||
|
GAIN_8 = 8,
|
||||||
|
GAIN_9 = 9,
|
||||||
|
GAIN_10 = 10,
|
||||||
|
GAIN_11 = 11,
|
||||||
|
GAIN_12 = 12,
|
||||||
|
GAIN_13 = 13,
|
||||||
|
GAIN_14 = 14,
|
||||||
|
GAIN_15 = 15,
|
||||||
|
GAIN_16 = 16
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera white balance modes. */
|
||||||
|
SceCameraWhiteBalance :: enum c.int {
|
||||||
|
AUTO = 0, //!< Automatic mode
|
||||||
|
DAY = 1, //!< Daylight mode
|
||||||
|
CWF = 2, //!< Cool White Fluorescent mode
|
||||||
|
SLSA = 4 //!< Standard Light Source A mode
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera backlight modes. */
|
||||||
|
SceCameraBacklight :: enum c.int {
|
||||||
|
OFF = 0, //!< Disabled
|
||||||
|
ON = 1 //!< Enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the camera nightmode modes. */
|
||||||
|
SceCameraNightmode :: enum c.int {
|
||||||
|
OFF = 0, //!< Disabled
|
||||||
|
LESS10 = 1, //!< 10 lux or below
|
||||||
|
LESS100 = 2, //!< 100 lux or below
|
||||||
|
OVER100 = 3 //!< 100 lux or over
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCameraInfo :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceCameraInfo)
|
||||||
|
priority: c.uint16_t, //!< Process priority (one of ::SceCameraPriority)
|
||||||
|
format: c.uint16_t, //!< Output format (One or more ::SceCameraFormat)
|
||||||
|
resolution: c.uint16_t, //!< Resolution (one of ::SceCameraResolution)
|
||||||
|
framerate: c.uint16_t, //!< Framerate (one of ::SceCameraFrameRate)
|
||||||
|
width: c.uint16_t,
|
||||||
|
height: c.uint16_t,
|
||||||
|
range: c.uint16_t,
|
||||||
|
pad: c.uint16_t, //!< Structure padding
|
||||||
|
sizeIBase: sce.Size,
|
||||||
|
sizeUBase: sce.Size,
|
||||||
|
sizeVBase: sce.Size,
|
||||||
|
pIBase: rawptr,
|
||||||
|
pUBase: rawptr,
|
||||||
|
pVBase: rawptr,
|
||||||
|
pitch: c.uint16_t,
|
||||||
|
buffer: c.uint16_t,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceCameraInfo) == 0x30)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCameraRead :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceCameraRead)
|
||||||
|
mode: c.int,
|
||||||
|
pad: c.int,
|
||||||
|
status: c.int,
|
||||||
|
frame: c.uint64_t,
|
||||||
|
timestamp: c.uint64_t,
|
||||||
|
sizeIBase: sce.Size,
|
||||||
|
sizeUBase: sce.Size,
|
||||||
|
sizeVBase: sce.Size,
|
||||||
|
pIBase: rawptr,
|
||||||
|
pUBase: rawptr,
|
||||||
|
pVBase: rawptr,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceCameraRead) == 0x38)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package libkernel
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import libkernel "system:SceLibKernel_stub"
|
||||||
|
|
||||||
|
SceClibMspace :: distinct rawptr
|
||||||
|
|
||||||
|
SceClibMspaceStats :: struct {
|
||||||
|
capacity: sce.Size, //!< Capacity of the Mspace
|
||||||
|
unk: sce.Size, //!< Unknown, value is equal to capacity
|
||||||
|
peak_in_use: sce.Size, //!< Peak memory allocated
|
||||||
|
current_in_use: sce.Size, //!< Current memory allocated
|
||||||
|
}
|
||||||
|
#assert(size_of(SceClibMspaceStats) == 0x10)
|
||||||
|
|
||||||
|
@(link_prefix = "sceClib")
|
||||||
|
foreign libkernel {
|
||||||
|
Abort :: proc() ---
|
||||||
|
|
||||||
|
LookCtypeTable :: proc(ch: c.char) -> c.char ---
|
||||||
|
|
||||||
|
Tolower :: proc(ch: c.char) -> c.int ---
|
||||||
|
Toupper :: proc(ch: c.char) -> c.int ---
|
||||||
|
|
||||||
|
Printf :: proc(fmt: cstring, #c_vararg args: ..any) -> c.int ---
|
||||||
|
Dprintf :: proc(fd: sce.UID, fmt: cstring, #c_vararg args: ..any) -> c.int ---
|
||||||
|
|
||||||
|
Snprintf :: proc(dst: cstring, dst_max_size: sce.Size, fmt: cstring, #c_vararg args: ..any) -> c.int ---
|
||||||
|
Vsnprintf :: proc(dst: cstring, dst_max_size: sce.Size, fmt: cstring, args: c.va_list) -> c.int ---
|
||||||
|
|
||||||
|
Strncpy :: proc(dst: cstring, src: cstring, len: sce.Size) -> cstring ---
|
||||||
|
Strncat :: proc(dst: cstring, src: cstring, len: sce.Size) -> cstring ---
|
||||||
|
|
||||||
|
Strchr :: proc(s: cstring, ch: c.int) -> cstring ---
|
||||||
|
Strrchr :: proc(src: cstring, ch: c.int) -> cstring ---
|
||||||
|
Strstr :: proc(s1, s2: cstring) -> cstring ---
|
||||||
|
|
||||||
|
Strcmp :: proc(s1, s2: cstring) -> c.int ---
|
||||||
|
Strncmp :: proc(s1, s2: cstring, len: sce.Size) -> c.int ---
|
||||||
|
Strncasecmp :: proc(s1, s2: cstring, len: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
Strnlen :: proc(s1: cstring, max_len: sce.Size) -> sce.Size ---
|
||||||
|
|
||||||
|
Memset :: proc(dst: rawptr, ch: c.int, len: sce.Size) -> rawptr ---
|
||||||
|
Memcpy :: proc(dst: rawptr, src: rawptr, len: sce.Size) -> rawptr ---
|
||||||
|
Memcpy_safe :: proc(dst: rawptr, src: rawptr, len: sce.Size) -> rawptr ---
|
||||||
|
Memmove :: proc(dst: rawptr, src: rawptr, len: sce.Size) -> rawptr ---
|
||||||
|
|
||||||
|
Memcmp :: proc(s1: rawptr, s2: rawptr, len: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
Memchr :: proc(src: rawptr, ch: c.int, len: sce.Size) -> rawptr ---
|
||||||
|
|
||||||
|
MspaceCreate :: proc(memblock: rawptr, size: sce.Size) -> SceClibMspace ---
|
||||||
|
MspaceDestroy :: proc(mspace: SceClibMspace) ---
|
||||||
|
|
||||||
|
MspaceMallocUsableSize :: proc(ptr: rawptr) -> sce.Size ---
|
||||||
|
MspaceIsHeapEmpty :: proc(mspace: SceClibMspace) -> sce.Bool ---
|
||||||
|
|
||||||
|
MspaceMallocStats :: proc(mspace: SceClibMspace, stats: ^SceClibMspaceStats) ---
|
||||||
|
MspaceMallocStatsFast :: proc(mspace: SceClibMspace, stats: ^SceClibMspaceStats) ---
|
||||||
|
|
||||||
|
MspaceMalloc :: proc(mspace: SceClibMspace, size: sce.Size) -> rawptr ---
|
||||||
|
MspaceCalloc :: proc(mspace: SceClibMspace, num: sce.Size , size: sce.Size) -> rawptr ---
|
||||||
|
MspaceRealloc :: proc(mspace: SceClibMspace, ptr: rawptr, size: sce.Size) -> rawptr ---
|
||||||
|
MspaceReallocalign :: proc(mspace: SceClibMspace, ptr: rawptr, size: sce.Size, alignment: sce.Size) -> rawptr ---
|
||||||
|
MspaceMemalign :: proc(mspace: SceClibMspace, alignment: sce.Size, size: sce.Size) -> rawptr ---
|
||||||
|
MspaceFree :: proc(mspace: SceClibMspace, ptr: rawptr) ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package commondialog
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceClib "../Clib"
|
||||||
|
|
||||||
|
foreign import commondialog "system:SceCommonDialog_stub"
|
||||||
|
|
||||||
|
_sceCommonDialogSetMagicNumber :: #force_inline proc "c" (param: ^SceCommonDialogParam) {
|
||||||
|
param := param
|
||||||
|
param.magic = SCE_COMMON_DIALOG_MAGIC_NUMBER + (cast(^sce.UInt32)¶m)^
|
||||||
|
}
|
||||||
|
|
||||||
|
sceCommonDialogConfigParamInit :: #force_inline proc "c" (param: ^SceCommonDialogConfigParam) {
|
||||||
|
sceClib.Memset(param, 0x0, size_of(SceCommonDialogConfigParam))
|
||||||
|
param.language = sce.SceSystemParamLang.MAX_VALUE
|
||||||
|
param.enterButtonAssign = sce.SceSystemParamEnterButtonAssign.MAX_VALUE
|
||||||
|
param.sdkVersion = sce.PSP2_SDK_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
sceMsgDialogParamInit :: #force_inline proc "c" (param: ^SceMsgDialogParam) {
|
||||||
|
sceClib.Memset(param, 0x0, size_of(SceMsgDialogParam))
|
||||||
|
_sceCommonDialogSetMagicNumber(¶m.commonParam)
|
||||||
|
param.sdkVersion = sce.PSP2_SDK_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
sceNetCheckDialogParamInit :: #force_inline proc "c" (param: ^SceNetCheckDialogParam) {
|
||||||
|
sceClib.Memset(param, 0x0, size_of(SceNetCheckDialogParam))
|
||||||
|
_sceCommonDialogSetMagicNumber(¶m.commonParam)
|
||||||
|
param.sdkVersion = sce.PSP2_SDK_VERSION
|
||||||
|
param.defaultAgeRestriction = SCE_NETCHECK_DIALOG_INITIAL_AGE_RESTRICTION
|
||||||
|
}
|
||||||
|
|
||||||
|
foreign commondialog {
|
||||||
|
sceCommonDialogSetConfigParam :: proc(configParam: ^SceCommonDialogConfigParam) -> c.int ---
|
||||||
|
sceCommonDialogUpdate :: proc(updateParam: ^SceCommonDialogUpdateParam) -> c.int ---
|
||||||
|
|
||||||
|
sceMsgDialogInit :: proc(#by_ptr param: SceMsgDialogParam) -> c.int ---
|
||||||
|
sceMsgDialogGetStatus :: proc() -> SceCommonDialogStatus ---
|
||||||
|
sceMsgDialogAbort :: proc() -> c.int ---
|
||||||
|
sceMsgDialogGetResult :: proc(result: ^SceMsgDialogResult) -> c.int ---
|
||||||
|
sceMsgDialogTerm :: proc() -> c.int ---
|
||||||
|
sceMsgDialogClose :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Increases the rate of the progress bar in the message dialog
|
||||||
|
*
|
||||||
|
* @param target - Target progress bar
|
||||||
|
* @param delta - Progress rate to increase (%)
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - If NULL is provided as FrameBuf pointer, output is blacked out.
|
||||||
|
*/
|
||||||
|
sceMsgDialogProgressBarInc :: proc(target: SceMsgDialogProgressBarTarget, delta: sce.UInt32) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the progress rate of the progress bar in the message dialog immediately
|
||||||
|
*
|
||||||
|
* @param target - Target progress bar
|
||||||
|
* @param delta - Progress rate to increase (%)
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - If NULL is provided as FrameBuf pointer, output is blacked out.
|
||||||
|
*/
|
||||||
|
sceMsgDialogProgressBarSetValue :: proc(target: SceMsgDialogProgressBarTarget, rate: sce.UInt32) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the string displayed in the progress bar of the message dialog immediately
|
||||||
|
*
|
||||||
|
* @param target - Target progress bar
|
||||||
|
* @param barMsg - The string displayed in the progress bar
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - If NULL is provided as FrameBuf pointer, output is blacked out.
|
||||||
|
*/
|
||||||
|
sceMsgDialogProgressBarSetMsg :: proc(target: SceMsgDialogProgressBarTarget, barMsg: cstring) -> c.int ---
|
||||||
|
|
||||||
|
sceNetCheckDialogInit :: proc(param: ^SceNetCheckDialogParam) -> sce.Int32 ---
|
||||||
|
sceNetCheckDialogGetStatus :: proc() -> SceCommonDialogStatus ---
|
||||||
|
sceNetCheckDialogAbort :: proc() -> sce.Int32 ---
|
||||||
|
sceNetCheckDialogGetResult :: proc(result: ^SceNetCheckDialogResult) -> sce.Int32 ---
|
||||||
|
sceNetCheckDialogGetPS3ConnectInfo :: proc(info: ^SceNetCheckDialogPS3ConnectInfo) -> sce.Int32 ---
|
||||||
|
sceNetCheckDialogTerm :: proc() -> sce.Int32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,353 @@
|
|||||||
|
package commondialog
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceGxm "../Gxm"
|
||||||
|
import sceNet "../Net"
|
||||||
|
import scePspnet "../PspnetAdhoc"
|
||||||
|
|
||||||
|
SCE_COMMON_DIALOG_MAGIC_NUMBER :: 0xC0D1A109
|
||||||
|
|
||||||
|
/* Errors */
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceCommonDialogErrorCode :: enum i64 {
|
||||||
|
BUSY = 0x80020401,
|
||||||
|
NULL = 0x80020402,
|
||||||
|
INVALID_ARGUMENT = 0x80020403,
|
||||||
|
NOT_RUNNING = 0x80020404,
|
||||||
|
NOT_SUPPORTED = 0x80020405,
|
||||||
|
ILLEGAL_CALLER_THREAD = 0x80020406,
|
||||||
|
NOT_CONFIGURED = 0x80020407,
|
||||||
|
NOT_AVAILABLE = 0x80020408,
|
||||||
|
NOT_FINISHED = 0x80020410,
|
||||||
|
NOT_IN_USE = 0x80020411,
|
||||||
|
INVALID_COLOR_FORMAT = 0x80020420,
|
||||||
|
INVALID_SURFACE_RESOLUTION = 0x80020421,
|
||||||
|
INVALID_SURFACE_STRIDE = 0x80020422,
|
||||||
|
INVALID_SURFACE_TYPE = 0x80020423,
|
||||||
|
WITHIN_SCENE = 0x80020424,
|
||||||
|
IME_IN_USE = 0x80020430,
|
||||||
|
INVALID_LANGUAGE = 0x80020431,
|
||||||
|
INVALID_ENTER_BUTTON_ASSIGN = 0x80020432,
|
||||||
|
INVALID_INFOBAR_PARAM = 0x80020433,
|
||||||
|
INVALID_BG_COLOR = 0x80020434,
|
||||||
|
INVALID_DIMMER_COLOR = 0x80020435,
|
||||||
|
GXM_IS_UNINITIALIZED = 0x80020436,
|
||||||
|
UNEXPECTED_FATAL = 0x8002047F
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCommonDialogConfigParam :: struct {
|
||||||
|
sdkVersion: sce.UInt32,
|
||||||
|
language: sce.SceSystemParamLang,
|
||||||
|
enterButtonAssign: sce.SceSystemParamEnterButtonAssign,
|
||||||
|
reserved: [32]sce.UInt8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCommonDialogConfigParam) == 0x2C)
|
||||||
|
|
||||||
|
SceCommonDialogStatus :: enum c.int {
|
||||||
|
NONE = 0,
|
||||||
|
RUNNING = 1,
|
||||||
|
FINISHED = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCommonDialogResult :: enum c.int {
|
||||||
|
OK,
|
||||||
|
USER_CANCELED,
|
||||||
|
ABORTED
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCommonDialogRenderTargetInfo :: struct {
|
||||||
|
depthSurfaceData: sce.PVoid,
|
||||||
|
colorSurfaceData: sce.PVoid,
|
||||||
|
surfaceType: sceGxm.SceGxmColorSurfaceType,
|
||||||
|
colorFormat: sceGxm.SceGxmColorFormat,
|
||||||
|
width: sce.UInt32,
|
||||||
|
height: sce.UInt32,
|
||||||
|
strideInPixels: sce.UInt32,
|
||||||
|
reserved: [32]sce.UInt8,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceCommonDialogRenderTargetInfo) == 0x3C)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCommonDialogUpdateParam :: struct {
|
||||||
|
renderTarget: SceCommonDialogRenderTargetInfo,
|
||||||
|
displaySyncObject: ^sceGxm.SceGxmSyncObject,
|
||||||
|
reserved: [32]sce.UInt8,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceCommonDialogUpdateParam) == 0x60)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCommonDialogInfobarParam :: struct {
|
||||||
|
visibility: sce.Int32,
|
||||||
|
color: sce.Int32,
|
||||||
|
transparency: sce.Int32,
|
||||||
|
reserved: [32]sce.UInt8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCommonDialogInfobarParam) == 0x2C)
|
||||||
|
|
||||||
|
SceCommonDialogColor :: struct {
|
||||||
|
r: sce.UInt8,
|
||||||
|
g: sce.UInt8,
|
||||||
|
b: sce.UInt8,
|
||||||
|
a: sce.UInt8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCommonDialogColor) == 4)
|
||||||
|
|
||||||
|
SceCommonDialogBgColor :: SceCommonDialogColor
|
||||||
|
#assert(size_of(SceCommonDialogBgColor) == 4)
|
||||||
|
|
||||||
|
SceCommonDialogParam :: struct {
|
||||||
|
infobarParam: ^SceCommonDialogInfobarParam,
|
||||||
|
bgColor: ^SceCommonDialogColor,
|
||||||
|
dimmerColor: ^SceCommonDialogColor,
|
||||||
|
reserved: [60]sce.UInt8,
|
||||||
|
magic: sce.UInt32,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceCommonDialogParam) == 0x4C)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
SceMsgDialogErrorCode :: enum c.uint {
|
||||||
|
//! Illegal parameter
|
||||||
|
SCE_MSG_DIALOG_ERROR_PARAM = 0x80100A01
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Max length of a user message
|
||||||
|
SCE_MSG_DIALOG_USER_MSG_SIZE :: 512
|
||||||
|
|
||||||
|
SceMsgDialogMode :: enum c.int {
|
||||||
|
INVALID = 0,
|
||||||
|
USER_MSG = 1,
|
||||||
|
SYSTEM_MSG = 2,
|
||||||
|
ERROR_CODE = 3,
|
||||||
|
PROGRESS_BAR = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogSystemMessageType :: enum c.int {
|
||||||
|
INVALID = 0,
|
||||||
|
//! Displays "Please wait."
|
||||||
|
WAIT = 1,
|
||||||
|
//! Displays "There is not enough free space on the memory card."
|
||||||
|
NOSPACE = 2,
|
||||||
|
//! Displays "Move away from the source of interference, or adjust the compass by moving your PS Vita system as shown below."
|
||||||
|
MAGNETIC_CALIBRATION = 3,
|
||||||
|
//! Displays "Please wait." in a small message dialog
|
||||||
|
WAIT_SMALL = 5,
|
||||||
|
//! Displays "Please wait..." with a cancel button
|
||||||
|
WAIT_CANCEL = 6,
|
||||||
|
//! Displays "Cannot continue the application. No memory card is inserted."
|
||||||
|
NEED_MC_CONTINUE = 7,
|
||||||
|
//! Displays "Cannot perform this operation. No memory card is inserted."
|
||||||
|
NEED_MC_OPERATION = 8,
|
||||||
|
//! Displays "You must enable the microphone."
|
||||||
|
TRC_MIC_DISABLED = 100,
|
||||||
|
//! Displays "You must use Wi-Fi to do this."
|
||||||
|
TRC_WIFI_REQUIRED_OPERATION = 101,
|
||||||
|
//! Displays "You must use Wi-Fi to use this application."
|
||||||
|
TRC_WIFI_REQUIRED_APPLICATION = 102,
|
||||||
|
//! Displays "No content is available yet."
|
||||||
|
TRC_EMPTY_STORE = 103
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogButtonType :: enum c.int {
|
||||||
|
TYPE_OK = 0,
|
||||||
|
TYPE_YESNO = 1,
|
||||||
|
TYPE_NONE = 2,
|
||||||
|
TYPE_OK_CANCEL = 3,
|
||||||
|
TYPE_CANCEL = 4,
|
||||||
|
TYPE_3BUTTONS = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogButtonId :: enum c.int {
|
||||||
|
INVALID = 0,
|
||||||
|
OK = 1,
|
||||||
|
YES = 1,
|
||||||
|
NO = 2,
|
||||||
|
RETRY = 3,
|
||||||
|
BUTTON1 = 1,
|
||||||
|
BUTTON2 = 2,
|
||||||
|
BUTTON3 = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogProgressBarType :: enum c.int {
|
||||||
|
PERCENTAGE = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogProgressBarTarget :: enum c.int {
|
||||||
|
DEFAULT = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogEnvFlag :: enum c.int {
|
||||||
|
DEFAULT = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogFontSize :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
SMALL = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogButtonsParam :: struct {
|
||||||
|
msg1: cstring, //!< Text of the first button
|
||||||
|
fontSize1: sce.Int32, //!< Font size of the first button (one of ::SceMsgDialogFontSize)
|
||||||
|
msg2: cstring, //!< Text of the second button
|
||||||
|
fontSize2: sce.Int32, //!< Font size of the second button (one of ::SceMsgDialogFontSize)
|
||||||
|
msg3: cstring, //!< Text of the third button
|
||||||
|
fontSize3: sce.Int32, //!< Font size of the third button (one of ::SceMsgDialogFontSize)
|
||||||
|
reserved: [32]sce.Char8, //!< Reserved range
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceMsgDialogButtonsParam) == 0x38)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogUserMessageParam :: struct {
|
||||||
|
buttonType: sce.Int32, //!< Type of button set (one of ::SceMsgDialogButtonType)
|
||||||
|
msg: cstring, //!< Displayed message
|
||||||
|
buttonParam: ^SceMsgDialogButtonsParam, //!< Buttons parameters
|
||||||
|
reserved: [28]sce.Char8, //!< Reserved range
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceMsgDialogUserMessageParam) == 0x28)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogSystemMessageParam :: struct {
|
||||||
|
sysMsgType: sce.Int32, //!< System message type (one of ::SceMsgDialogSystemMessageType)
|
||||||
|
value: sce.Int32, //!< Additional value
|
||||||
|
reserved: [32]sce.Char8, //!< Reserved range
|
||||||
|
}
|
||||||
|
#assert(size_of(SceMsgDialogSystemMessageParam) == 0x28)
|
||||||
|
|
||||||
|
SceMsgDialogErrorCodeParam :: struct {
|
||||||
|
errorCode: sce.Int32, //!< Displayed error code
|
||||||
|
reserved: [32]sce.Char8, //!< Reserved range
|
||||||
|
}
|
||||||
|
#assert(size_of(SceMsgDialogErrorCodeParam) == 0x24)
|
||||||
|
|
||||||
|
SceMsgDialogProgressBarParam :: struct {
|
||||||
|
barType: sce.Int32, //!< Progress bar type (one of ::SceMsgDialogProgressBarType)
|
||||||
|
sysMsgParam: SceMsgDialogSystemMessageParam, //!< Displayed system message
|
||||||
|
msg: cstring, //!< Displayed user message
|
||||||
|
reserved: [8]sce.Int32, //!< Reserved range
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceMsgDialogProgressBarParam) == 0x50)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogParam :: struct {
|
||||||
|
sdkVersion: sce.UInt32, //!< Required to use MsgDialog. Just use NULL
|
||||||
|
commonParam: SceCommonDialogParam, //!< Common parameter
|
||||||
|
mode: sce.Int32, //!< Mode of function (one of ::SceMsgDialogMode)
|
||||||
|
userMsgParam: ^SceMsgDialogUserMessageParam, //!< Parameter for user message
|
||||||
|
sysMsgParam: ^SceMsgDialogSystemMessageParam, //!< Parameter for system prepared message
|
||||||
|
errorCodeParam: ^SceMsgDialogErrorCodeParam, //!< Parameter for display error code
|
||||||
|
progBarParam: ^SceMsgDialogProgressBarParam, //!< Parameter for progress bar
|
||||||
|
flag: sce.Int32, //!< Settings for dialog environment (one of ::SceMsgDialogEnvFlag)
|
||||||
|
reserved: [32]sce.Char8, //!< Reserved range
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceMsgDialogParam) == 0x88)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceMsgDialogResult :: struct {
|
||||||
|
mode: sce.Int32, //!< Mode of function (one of ::SceMsgDialogMode)
|
||||||
|
result: sce.Int32, //!< Result of executing function
|
||||||
|
buttonId: sce.Int32, //!< Id of button user selected (one of ::SceMsgDialogButtonId)
|
||||||
|
reserved: [32]sce.Char8, //!< Reserved range
|
||||||
|
}
|
||||||
|
#assert(size_of(SceMsgDialogResult) == 0x2C)
|
||||||
|
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
SceNetCheckDialoErrorCode :: enum c.uint {
|
||||||
|
PARAM = 0x80100C01,
|
||||||
|
INVALID_MODE = 0x80100C02,
|
||||||
|
LACK_OF_LIBHTTP_POOL_SIZE = 0x80100C03,
|
||||||
|
LACK_OF_LIBSSL_POOL_SIZE = 0x80100C04,
|
||||||
|
LATEST_PATCH_PKG_EXIST = 0x80100C05,
|
||||||
|
SIGN_OUT = 0x80100C06,
|
||||||
|
INVALID_PSPADHOC_PARAM = 0x80100C07,
|
||||||
|
INVALID_TIMEOUT_PARAM = 0x80100C08,
|
||||||
|
PSN_AGE_RESTRICTION = 0x80100C09
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_NETCHECK_DIALOG_LEAST_HTTP_POOL_SIZE :: (36 * 1024)
|
||||||
|
SCE_NETCHECK_DIALOG_LEAST_SSL_POOL_SIZE :: (96 * 1024)
|
||||||
|
SCE_NETCHECK_DIALOG_INITIAL_AGE_RESTRICTION :: (-1)
|
||||||
|
SCE_NETCHECK_DIALOG_COUNTRY_CODE_LEN :: (2)
|
||||||
|
SCE_NETCHECK_DIALOG_AGE_RESTRICTION_COUNT_MAX :: (200)
|
||||||
|
|
||||||
|
SceNetCheckDialogMode :: enum c.int {
|
||||||
|
INVALID = 0,
|
||||||
|
ADHOC_CONN = 1,
|
||||||
|
PSN = 2,
|
||||||
|
PSN_ONLINE = 3,
|
||||||
|
PS3_CONNECT = 4,
|
||||||
|
PSP_ADHOC_CONN = 5,
|
||||||
|
PSP_ADHOC_CREATE = 6,
|
||||||
|
PSP_ADHOC_JOIN = 7
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetCheckDialogPS3ConnectAction :: enum c.int {
|
||||||
|
ENTER = 0,
|
||||||
|
LEAVE = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNpCommunicationId :: struct {
|
||||||
|
data: [9]c.char,
|
||||||
|
term: c.char,
|
||||||
|
num: sce.UChar8,
|
||||||
|
dummy: c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNpCommunicationId) == 0xC)
|
||||||
|
|
||||||
|
SceNetCheckDialogPS3ConnectParam :: struct {
|
||||||
|
action: sce.Int32,
|
||||||
|
ssid: [32 + 1]c.char,
|
||||||
|
wpaKey: [64 + 1]c.char,
|
||||||
|
titleId: [9 + 1]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetCheckDialogPS3ConnectParam) == 0x70)
|
||||||
|
|
||||||
|
SceNetCheckDialogAgeRestriction :: struct {
|
||||||
|
countryCode: [SCE_NETCHECK_DIALOG_COUNTRY_CODE_LEN]c.char,
|
||||||
|
age: sce.Int8,
|
||||||
|
padding: sce.Int8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetCheckDialogAgeRestriction) == 4)
|
||||||
|
|
||||||
|
SceNetCheckDialogParam :: struct {
|
||||||
|
sdkVersion: sce.UInt32,
|
||||||
|
commonParam: SceCommonDialogParam,
|
||||||
|
mode: sce.Int32,
|
||||||
|
npCommunicationId: SceNpCommunicationId,
|
||||||
|
ps3ConnectParam: ^SceNetCheckDialogPS3ConnectParam,
|
||||||
|
groupName: ^scePspnet.SceNetAdhocctlGroupName,
|
||||||
|
timeoutUs: sce.UInt32,
|
||||||
|
defaultAgeRestriction: sce.Int8,
|
||||||
|
padding: [3]sce.Int8,
|
||||||
|
ageRestrictionCount: sce.Int32,
|
||||||
|
ageRestriction: ^SceNetCheckDialogAgeRestriction,
|
||||||
|
reserved: [104]sce.UInt8,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetCheckDialogParam) == 0xE0)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetCheckDialogResult :: struct {
|
||||||
|
result: sce.Int32,
|
||||||
|
psnModeSucceeded: sce.Bool,
|
||||||
|
reserved: [124]sce.UInt8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetCheckDialogResult) == 0x84)
|
||||||
|
|
||||||
|
SceNetCheckDialogPS3ConnectInfo :: struct {
|
||||||
|
inaddr: sceNet.SceNetInAddr,
|
||||||
|
nickname: [128]sce.UInt8,
|
||||||
|
macAddress: [6]sce.UInt8,
|
||||||
|
reserved: [6]sce.UInt8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetCheckDialogPS3ConnectInfo) == 0x90)
|
||||||
|
|
||||||
@@ -0,0 +1,299 @@
|
|||||||
|
package compat
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceIo "../Io"
|
||||||
|
|
||||||
|
foreign import compat "system:SceCompat_stub"
|
||||||
|
|
||||||
|
SceCompatCacheMode :: enum c.int {
|
||||||
|
NONE = 0,
|
||||||
|
INVALIDATE = 1,
|
||||||
|
WRITEBACK = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCompatPeripheralMode :: enum c.int {
|
||||||
|
POWER_IS_SUSPEND_REQUIRED = 1,
|
||||||
|
POWER_GET_BATTERY_LIFETIME = 2,
|
||||||
|
POWER_GET_BATTERY_PERCENT = 3,
|
||||||
|
HPREMOTE_IS_HEADPHONE_EXIST = 4
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCompatCdram :: struct {
|
||||||
|
cached_cdram: rawptr,
|
||||||
|
uncached_cdram: rawptr,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceCompatCdram) == 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceCtrlDataPsp :: struct {
|
||||||
|
TimeStamp: c.uint,
|
||||||
|
Buttons: c.uint,
|
||||||
|
Lx: c.uchar,
|
||||||
|
Ly: c.uchar,
|
||||||
|
Rx: c.uchar,
|
||||||
|
Ry: c.uchar,
|
||||||
|
Rsrv: [4]c.uchar,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCtrlDataPsp) == 0x10)
|
||||||
|
|
||||||
|
|
||||||
|
@(link_prefix = "sceCompat")
|
||||||
|
foreign compat {
|
||||||
|
/**
|
||||||
|
* Init compat
|
||||||
|
*
|
||||||
|
* @param[in] unk - Unknown, pass 0
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
InitEx :: proc(unk: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninit compat
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Uninit :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start compat
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Start :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop compat
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Stop :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate cdram with hole
|
||||||
|
*
|
||||||
|
* @param[out] cdram - A pointer to a ::SceCompatCdram structure.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
AllocCdramWithHole :: proc(cdram: ^SceCompatCdram) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Framebuffer init
|
||||||
|
*
|
||||||
|
* @param[in] framebuffer - Pointer to framebuffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
FrameBufferInit :: proc(framebuffer: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set suspend semaphores
|
||||||
|
*
|
||||||
|
* @param[in] semaid1 - Semaphore id 1
|
||||||
|
* @param[in] semaid2 - Semaphore id 2
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetSuspendSema :: proc(semaid1: sce.UID, semaid2: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Suspend/resume compat
|
||||||
|
*
|
||||||
|
* @param[in] unk - Unknown, pass 1
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SuspendResume :: proc(unk: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache operation
|
||||||
|
*
|
||||||
|
* @param[in] mode - One of ::SceCompatCacheMode
|
||||||
|
* @param[in] addr - Address
|
||||||
|
* @param[in] size - Size
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Cache :: proc(mode: SceCompatCacheMode, addr: rawptr, size: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for special request
|
||||||
|
*
|
||||||
|
* @param[in] unk - Unknown, pass 1
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
WaitSpecialRequest :: proc(unk: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interrupt code
|
||||||
|
*
|
||||||
|
* @param[in] intr_code - Interrupt code
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Interrupt :: proc(intr_code: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LCDC sync
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
LCDCSync :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get primary head
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetPrimaryHead :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get peripheral state
|
||||||
|
*
|
||||||
|
* @param[in] mode - One of ::SceCompatPeripheralMode
|
||||||
|
*
|
||||||
|
* @return state on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetPeripheralState :: proc(mode: SceCompatPeripheralMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get compat status
|
||||||
|
*
|
||||||
|
* @return status on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetStatus :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get update state
|
||||||
|
*
|
||||||
|
* @return state on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetUpdateState :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set update state
|
||||||
|
*
|
||||||
|
* @param[in] state - State
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetUpdateState :: proc(state: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set display config
|
||||||
|
*
|
||||||
|
* @param[in] unk0 - Unknown
|
||||||
|
* @param[in] unk1 - Unknown
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetDisplayConfig :: proc(unk0: c.int, unk1: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set RIF name
|
||||||
|
*
|
||||||
|
* @param[in] rif - RIF name (max. 36 chars)
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetRif :: proc(rif: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get PSP system software version
|
||||||
|
*
|
||||||
|
* @return version on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetPspSystemSoftwareVersion :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get color space setting availability
|
||||||
|
*
|
||||||
|
* @return 1 if true, 0 if false, < 0 on error.
|
||||||
|
*/
|
||||||
|
AvailableColorSpaceSetting :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if pocket station application is available
|
||||||
|
*
|
||||||
|
* @return 1 if true, 0 if false, < 0 on error.
|
||||||
|
*/
|
||||||
|
CheckPocketStation :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if current title is a pocket station game
|
||||||
|
*
|
||||||
|
* @return 1 if true, 0 if false, < 0 on error.
|
||||||
|
*/
|
||||||
|
IsPocketStationTitle :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for command and get request
|
||||||
|
*
|
||||||
|
* @param[in] mode - Mode
|
||||||
|
* @param[in] id - ID
|
||||||
|
*
|
||||||
|
* @return pointer to request in PspEmu RAM on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
WaitAndGetRequest :: proc(mode: c.int, id: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read from shared sram
|
||||||
|
*
|
||||||
|
* @param[in] location - Location
|
||||||
|
* @param[out] value - Pointer to a int buffer to hold the value
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
ReadShared32 :: proc(location: c.int, value: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write to shared sram
|
||||||
|
*
|
||||||
|
* @param[in] location - Location
|
||||||
|
* @param[in] value - Value
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
WriteShared32 :: proc(location: c.int, value: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write shared control
|
||||||
|
*
|
||||||
|
* @param[in] info - A pointer to a ::SceCtrlDataPsp structure.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
WriteSharedCtrl :: proc(pad_data: ^SceCtrlDataPsp) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get title list
|
||||||
|
*
|
||||||
|
* @param[out] buf - A 100 bytes buffer for the title list
|
||||||
|
* @param[in] length - Must be 100
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetTitleList :: proc(buf: rawptr, length: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Memory Card device information
|
||||||
|
*
|
||||||
|
* @param[out] info - A pointer to a ::SceIoDevInfo structure.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetDevInf :: proc(info: ^sceIo.SceIoDevInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current secure tick
|
||||||
|
*
|
||||||
|
* @param[out] tick - A pointer to a ::SceRtcTick structure.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetCurrentSecureTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
}
|
||||||
+275
@@ -0,0 +1,275 @@
|
|||||||
|
package ctrl
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import ctrl "system:SceCtrl_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceCtrl")
|
||||||
|
foreign ctrl {
|
||||||
|
/**
|
||||||
|
* Set the controller mode.
|
||||||
|
*
|
||||||
|
* @param[in] mode - One of ::SceCtrlPadInputMode.
|
||||||
|
*
|
||||||
|
* @return The previous mode, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlSetSamplingMode :: proc(mode: SceCtrlPadInputMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the controller extend mode.
|
||||||
|
*
|
||||||
|
* @param[in] mode - One of ::SceCtrlPadInputMode.
|
||||||
|
*
|
||||||
|
* @return The previous mode, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlSetSamplingModeExt :: proc(mode: SceCtrlPadInputMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current controller mode.
|
||||||
|
*
|
||||||
|
* @param[out] pMode - Return value, see ::SceCtrlPadInputMode.
|
||||||
|
*
|
||||||
|
* @return The current mode, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlGetSamplingMode :: proc(pMode: ^SceCtrlPadInputMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the controller state information (polling, positive logic).
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlPeekBufferPositive :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the wireless controller state information (polling, positive logic).
|
||||||
|
*
|
||||||
|
* This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0 - 5.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlPeekBufferPositive2 :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the controller state information (polling, positive logic).
|
||||||
|
*
|
||||||
|
* This function will return button presses, even if they're intercepted by common dialog/IME.
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlPeekBufferPositiveExt :: proc(port: c.int, pad_data: ^SceCtrlData, count: int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the wireless controller state information (polling, positive logic).
|
||||||
|
*
|
||||||
|
* This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER
|
||||||
|
* This function will return button presses, even if they're intercepted by common dialog/IME.
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0 - 5.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlPeekBufferPositiveExt2 :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the controller state information (polling, negative logic).
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlPeekBufferNegative :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the wireless controller state information (polling, negative logic).
|
||||||
|
*
|
||||||
|
* This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0-5.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlPeekBufferNegative2 :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the controller state information (blocking, positive logic).
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlReadBufferPositive :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the wireless controller state information (blocking, positive logic).
|
||||||
|
*
|
||||||
|
* This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0-5.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlReadBufferPositive2 :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the controller extended state information (blocking, positive logic).
|
||||||
|
*
|
||||||
|
* This function will return button presses, even if they're intercepted by common dialog/IME.
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlReadBufferPositiveExt :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the wireless controller extended state information (blocking, positive logic).
|
||||||
|
*
|
||||||
|
* This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER
|
||||||
|
* This function will return button presses, even if they're intercepted by common dialog/IME.
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0-5.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlReadBufferPositiveExt2 :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the controller state information (blocking, negative logic).
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlReadBufferNegative :: proc(port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the wireless controller state information (blocking, negative logic).
|
||||||
|
*
|
||||||
|
* This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0-5.
|
||||||
|
* @param[out] *pad_data - see ::SceCtrlData.
|
||||||
|
* @param[in] count - Buffers count. Up to 64 buffers can be requested.
|
||||||
|
*
|
||||||
|
* @return Buffers count, between 1 and 'count'. <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlReadBufferNegative2 :: proc(port: c.int, pad_data: ^SceCtrlData , count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set rules for button rapid fire
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[in] idx - rule index between 0-15
|
||||||
|
* @param[in] pRule - structure ::SceCtrlRapidFireRule.
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlSetRapidFire :: proc(port: c.int, idx: c.int, pRule: ^SceCtrlRapidFireRule) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear rules for button rapid fire
|
||||||
|
*
|
||||||
|
* @param[in] port - use 0.
|
||||||
|
* @param[in] idx - rule index between 0-15
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlClearRapidFire :: proc(port: c.int, idx: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Control the actuator (vibrate) on paired controllers.
|
||||||
|
*
|
||||||
|
* @param[in] port - use 1 for the first paired controller, etc.
|
||||||
|
* @param[in] state - see ::SceCtrlActuator
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlSetActuator :: proc(port: c.int, pState: ^SceCtrlActuator) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Control the light bar on paired controllers.
|
||||||
|
*
|
||||||
|
* @param[in] port - use 1 for the first paired controller, etc.
|
||||||
|
* @param[in] r - red intensity
|
||||||
|
* @param[in] g - green intensity
|
||||||
|
* @param[in] b - blue intensity
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlSetLightBar :: proc(port: c.int, r: sce.UInt8, g: sce.UInt8, b: sce.UInt8) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get controller port information.
|
||||||
|
*
|
||||||
|
* @param[out] info - see ::SceCtrlPortInfo
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
sceCtrlGetControllerPortInfo :: proc(info: ^SceCtrlPortInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get controller battery information.
|
||||||
|
*
|
||||||
|
* @param[in] port - use 1 for the first paired controller, etc.
|
||||||
|
* @param[out] batt - battery level, between 0-5, 0xEE charging, 0xEF charged
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
sceCtrlGetBatteryInfo :: proc(port: c.int, batt: ^sce.UInt8) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets intercept
|
||||||
|
*
|
||||||
|
* If true, allows the current thread to intercept controls. The use case
|
||||||
|
* might be, for example, a game plugin that wishes to capture input without
|
||||||
|
* having the input sent to the game thread.
|
||||||
|
* @param[in] intercept Boolean value
|
||||||
|
*
|
||||||
|
* @return 0, < 0 on error
|
||||||
|
*/
|
||||||
|
sceCtrlSetButtonIntercept :: proc(intercept: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets intercept
|
||||||
|
*
|
||||||
|
* @param[out] intercept Boolean value
|
||||||
|
*
|
||||||
|
* @return 0, < 0 on error
|
||||||
|
*/
|
||||||
|
sceCtrlGetButtonIntercept :: proc(intercept: ^int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if multi controller is supported
|
||||||
|
*
|
||||||
|
* @return 1 if yes, 0 if no
|
||||||
|
*/
|
||||||
|
sceCtrlIsMultiControllerSupported :: proc() -> c.int ---
|
||||||
|
}
|
||||||
+134
@@ -0,0 +1,134 @@
|
|||||||
|
package ctrl
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
// TODO: this should be a c.int
|
||||||
|
SceCtrlErrorCode :: enum i64 {
|
||||||
|
INVALID_ARG = 0x80340001,
|
||||||
|
PRIV_REQUIRED = 0x80340002,
|
||||||
|
NO_DEVICE = 0x80340020,
|
||||||
|
NOT_SUPPORTED = 0x80340021,
|
||||||
|
INVALID_MODE = 0x80340022,
|
||||||
|
FATAL = 0x803400FF,
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the digital controller buttons.
|
||||||
|
* @note - L1/R1/L3/R3 only can bind using ::sceCtrlPeekBufferPositiveExt2 and ::sceCtrlReadBufferPositiveExt2
|
||||||
|
* @note - Values bigger than 0x00010000 can be intercepted only with shell privileges
|
||||||
|
* @note - Vita's L Trigger and R Trigger are mapped to L1 and R1 when using ::sceCtrlPeekBufferPositiveExt2 and ::sceCtrlReadBufferPositiveExt2
|
||||||
|
*/
|
||||||
|
SceCtrlButtons :: enum c.int {
|
||||||
|
SELECT = 0x00000001, //!< Select button.
|
||||||
|
L3 = 0x00000002, //!< L3 button.
|
||||||
|
R3 = 0x00000004, //!< R3 button.
|
||||||
|
START = 0x00000008, //!< Start button.
|
||||||
|
UP = 0x00000010, //!< Up D-Pad button.
|
||||||
|
RIGHT = 0x00000020, //!< Right D-Pad button.
|
||||||
|
DOWN = 0x00000040, //!< Down D-Pad button.
|
||||||
|
LEFT = 0x00000080, //!< Left D-Pad button.
|
||||||
|
LTRIGGER = 0x00000100, //!< Left trigger.
|
||||||
|
L2 = LTRIGGER, //!< L2 button.
|
||||||
|
RTRIGGER = 0x00000200, //!< Right trigger.
|
||||||
|
R2 = RTRIGGER, //!< R2 button.
|
||||||
|
L1 = 0x00000400, //!< L1 button.
|
||||||
|
R1 = 0x00000800, //!< R1 button.
|
||||||
|
TRIANGLE = 0x00001000, //!< Triangle button.
|
||||||
|
CIRCLE = 0x00002000, //!< Circle button.
|
||||||
|
CROSS = 0x00004000, //!< Cross button.
|
||||||
|
SQUARE = 0x00008000, //!< Square button.
|
||||||
|
INTERCEPTED = 0x00010000, //!< Input not available because intercepted by another application
|
||||||
|
PSBUTTON = INTERCEPTED, //!< Playstation (Home) button.
|
||||||
|
HEADPHONE = 0x00080000, //!< Headphone plugged in.
|
||||||
|
VOLUP = 0x00100000, //!< Volume up button.
|
||||||
|
VOLDOWN = 0x00200000, //!< Volume down button.
|
||||||
|
POWER = 0x40000000, //!< Power button.
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the controller types. */
|
||||||
|
SceCtrlExternalInputMode :: enum c.int {
|
||||||
|
UNPAIRED = 0, //!< Unpaired controller
|
||||||
|
PHY = 1, //!< Physical controller for VITA
|
||||||
|
VIRT = 2, //!< Virtual controller for PSTV
|
||||||
|
DS3 = 4, //!< DualShock 3
|
||||||
|
DS4 = 8 //!< DualShock 4
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Controller mode. */
|
||||||
|
SceCtrlPadInputMode :: enum c.int {
|
||||||
|
/** Digital buttons only. */
|
||||||
|
DIGITAL = 0,
|
||||||
|
/** Digital buttons + Analog support. */
|
||||||
|
ANALOG = 1,
|
||||||
|
/** Same as ::SCE_CTRL_MODE_ANALOG, but with larger range for analog sticks. */
|
||||||
|
ANALOG_WIDE = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returned controller data */
|
||||||
|
SceCtrlData :: struct {
|
||||||
|
/** The current read frame. */
|
||||||
|
timeStamp: c.uint64_t,
|
||||||
|
/** Bit mask containing zero or more of ::SceCtrlButtons. */
|
||||||
|
buttons: c.uint,
|
||||||
|
/** Left analogue stick, X axis. */
|
||||||
|
lx: c.uchar,
|
||||||
|
/** Left analogue stick, Y axis. */
|
||||||
|
ly: c.uchar,
|
||||||
|
/** Right analogue stick, X axis. */
|
||||||
|
rx: c.uchar,
|
||||||
|
/** Right analogue stick, Y axis. */
|
||||||
|
ry: c.uchar,
|
||||||
|
/** Up button */
|
||||||
|
up: c.uint8_t,
|
||||||
|
/** Right button */
|
||||||
|
right: c.uint8_t,
|
||||||
|
/** Down button */
|
||||||
|
down: c.uint8_t,
|
||||||
|
/** Left button */
|
||||||
|
left: c.uint8_t,
|
||||||
|
/** Left trigger (L2) */
|
||||||
|
lt: c.uint8_t,
|
||||||
|
/** Right trigger (R2) */
|
||||||
|
rt: c.uint8_t,
|
||||||
|
/** Left button (L1) */
|
||||||
|
l1: c.uint8_t,
|
||||||
|
/** Right button (R1) */
|
||||||
|
r1: c.uint8_t,
|
||||||
|
/** Triangle button */
|
||||||
|
triangle: c.uint8_t,
|
||||||
|
/** Circle button */
|
||||||
|
circle: c.uint8_t,
|
||||||
|
/** Cross button */
|
||||||
|
cross: c.uint8_t,
|
||||||
|
/** Square button */
|
||||||
|
square: c.uint8_t,
|
||||||
|
/** Reserved. */
|
||||||
|
reserved: [4]c.uint8_t,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCtrlData) == 0x20)
|
||||||
|
|
||||||
|
/** Structure to pass as argument to ::sceCtrlSetRapidFire */
|
||||||
|
SceCtrlRapidFireRule :: struct {
|
||||||
|
Mask: c.uint,
|
||||||
|
Trigger: c.uint,
|
||||||
|
Target: c.uint,
|
||||||
|
Delay: c.uint,
|
||||||
|
Make: c.uint,
|
||||||
|
Break: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCtrlRapidFireRule) == 0x18)
|
||||||
|
|
||||||
|
/** Structure to pass as argument to ::sceCtrlSetActuator */
|
||||||
|
SceCtrlActuator :: struct {
|
||||||
|
small: c.uchar, //!< Vibration strength of the small motor
|
||||||
|
large: c.uchar, //!< Vibration strength of the large motor
|
||||||
|
unk: [6]c.uint8_t , //!< Unknown
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCtrlActuator) == 8)
|
||||||
|
|
||||||
|
/** Structure to pass as argument to ::sceCtrlGetControllerPortInfo */
|
||||||
|
SceCtrlPortInfo :: struct {
|
||||||
|
port: [5]c.uint8_t, //!< Controller type of each port (See ::SceCtrlExternalInputMode)
|
||||||
|
unk: [11]c.uint8_t, //!< Unknown
|
||||||
|
}
|
||||||
|
#assert(size_of(SceCtrlPortInfo) == 0x10)
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package deci4p
|
||||||
|
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import deci4p "system:SceDeci4pUserp_stub"
|
||||||
|
|
||||||
|
@(link_prefix="sceKernelDeci4p")
|
||||||
|
foreign deci4p {
|
||||||
|
Open :: proc(protoname: cstring, protonum: sce.UInt32, bufsize: sce.Size) -> sce.UID ---
|
||||||
|
Close :: proc(socketid: sce.UID) -> sce.Int32 ---
|
||||||
|
DisableWatchpoint :: proc() -> sce.Int32 ---
|
||||||
|
EnableWatchpoint :: proc() -> sce.Int32 ---
|
||||||
|
IsProcessAttached :: proc() -> sce.Int32 ---
|
||||||
|
Read :: proc(socketid: sce.UID, buffer: rawptr, size: sce.Size, reserved: sce.UInt32) -> sce.Int32 ---
|
||||||
|
RegisterCallback :: proc(socketid: sce.UID, cbid: sce.UID) -> sce.Int32 ---
|
||||||
|
Write :: proc(socketid: sce.UID, buffer: rawptr, size: sce.Size, reserved: sce.UInt32) -> sce.Int32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
package display
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import _display "system:SceDisplay_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceDisplay")
|
||||||
|
foreign _display {
|
||||||
|
/**
|
||||||
|
* Set/Update framebuffer parameters
|
||||||
|
*
|
||||||
|
* @param[in] pParam - Pointer to a ::SceDisplayFrameBuf structure.
|
||||||
|
* @param[in] sync - One of ::SceDisplaySetBufSync
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - If NULL is provided as pParam pointer, output is blacked out.
|
||||||
|
*/
|
||||||
|
SetFrameBuf :: proc(pParam: ^SceDisplayFrameBuf, sync: SceDisplaySetBufSync) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current framebuffer parameters
|
||||||
|
*
|
||||||
|
* @param[out] pParam - Pointer to a ::SceDisplayFrameBuf structure
|
||||||
|
* which will receive framebuffer parameters.
|
||||||
|
*
|
||||||
|
* @param[in] sync - One of ::SceDisplaySetBufSync
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetFrameBuf :: proc(pParam: ^SceDisplayFrameBuf, sync: SceDisplaySetBufSync) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary display index
|
||||||
|
*/
|
||||||
|
GetPrimaryHead :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current number of fps for the current screen mode.
|
||||||
|
*
|
||||||
|
* @param[out] pFps - Pointer to a float variable to store current number of fps.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
* @note - This function returns a theoretical value, this might not be the exact frame rate.
|
||||||
|
*/
|
||||||
|
GetRefreshRate :: proc(pFps: ^c.float) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get maximum framebuffer resolution
|
||||||
|
*
|
||||||
|
* @param[out] width - Maximum width
|
||||||
|
* @param[out] height - Maximum height
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetMaximumFrameBufResolution :: proc(width: ^c.int, height: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of vertical blank pulses up to now
|
||||||
|
*/
|
||||||
|
GetVcount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of vertical blank pulses up to now for a display
|
||||||
|
*
|
||||||
|
* @param[in] display - Display index
|
||||||
|
*/
|
||||||
|
GetVcountInternal :: proc(display: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start
|
||||||
|
*/
|
||||||
|
WaitVblankStart :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start with callback
|
||||||
|
*/
|
||||||
|
WaitVblankStartCB :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start after specified number of vertical periods
|
||||||
|
*
|
||||||
|
* @param[in] vcount - Number of vertical periods before waiting for vertical blank start
|
||||||
|
*/
|
||||||
|
WaitVblankStartMulti :: proc(vcount: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start with callback after specified number of vertical periods
|
||||||
|
*
|
||||||
|
* @param[in] vcount - Number of vertical periods before waiting for vertical blank start
|
||||||
|
*/
|
||||||
|
WaitVblankStartMultiCB :: proc(vcount: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start since last update of framebuffer
|
||||||
|
*/
|
||||||
|
WaitSetFrameBuf :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start with callback since last update of framebuffer
|
||||||
|
*/
|
||||||
|
WaitSetFrameBufCB :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start after specified number of vertical periods
|
||||||
|
* since last update of framebuffer.
|
||||||
|
*
|
||||||
|
* @param[in] vcount - Number of vertical periods before waiting for vertical blank start
|
||||||
|
*/
|
||||||
|
WaitSetFrameBufMulti :: proc(vcount: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for vertical blank start with callback after specified number of vertical periods
|
||||||
|
* since last update of framebuffer.
|
||||||
|
*
|
||||||
|
* @param[in] vcount - Number of vertical periods before waiting for vertical blank start
|
||||||
|
*/
|
||||||
|
WaitSetFrameBufMultiCB :: proc(vcount: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register callback to be used at each vertical blank start
|
||||||
|
*
|
||||||
|
* @param[in] uid - Callback UID
|
||||||
|
*/
|
||||||
|
RegisterVblankStartCallback :: proc(uid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister callback used at each vertical blank start
|
||||||
|
*
|
||||||
|
* @param[in] uid - Callback UID
|
||||||
|
*/
|
||||||
|
UnregisterVblankStartCallback :: proc(uid: sce.UID) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package display
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceDisplayErrorCode :: enum c.uint {
|
||||||
|
OK = 0,
|
||||||
|
INVALID_HEAD = 0x80290000,
|
||||||
|
INVALID_VALUE = 0x80290001,
|
||||||
|
INVALID_ADDR = 0x80290002,
|
||||||
|
INVALID_PIXELFORMAT = 0x80290003,
|
||||||
|
INVALID_PITCH = 0x80290004,
|
||||||
|
INVALID_RESOLUTION = 0x80290005,
|
||||||
|
INVALID_UPDATETIMING = 0x80290006,
|
||||||
|
NO_FRAME_BUFFER = 0x80290007,
|
||||||
|
NO_PIXEL_DATA = 0x80290008,
|
||||||
|
NO_OUTPUT_SIGNAL = 0x80290009
|
||||||
|
}
|
||||||
|
#assert(size_of(SceDisplayErrorCode) == 4)
|
||||||
|
|
||||||
|
SceDisplayPixelFormat :: enum c.uint {
|
||||||
|
A8B8G8R8 = 0x00000000,
|
||||||
|
A2B10G10R10 = 0x60800000,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceDisplayPixelFormat) == 4)
|
||||||
|
|
||||||
|
SceDisplaySetBufSync :: enum c.int {
|
||||||
|
/** Buffer change effective immediately */
|
||||||
|
SCE_DISPLAY_SETBUF_IMMEDIATE = 0,
|
||||||
|
/** Buffer change effective next frame */
|
||||||
|
SCE_DISPLAY_SETBUF_NEXTFRAME = 1,
|
||||||
|
__SCE_DISPLAY_SETBUF = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
#assert(size_of(SceDisplaySetBufSync) == 4)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Structure used with ::ksceDisplaySetFrameBuf to set/update framebuffer.
|
||||||
|
* Original screen resolution is 960x544, but the following resolutions
|
||||||
|
* can also be supplied as width and height :
|
||||||
|
* 480x272, 640x368, 720x408
|
||||||
|
*
|
||||||
|
* @note - This structure is returned by ::ksceDisplayGetFrameBuf
|
||||||
|
*/
|
||||||
|
SceDisplayFrameBuf :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceDisplayFrameBuf)
|
||||||
|
base: rawptr, //!< Pointer to framebuffer
|
||||||
|
pitch: c.uint, //!< pitch pixels
|
||||||
|
pixelformat: c.uint, //!< pixel format (one of ::SceDisplayPixelFormat)
|
||||||
|
width: c.uint, //!< framebuffer width
|
||||||
|
height: c.uint, //!< framebuffer height
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceDisplayFrameBuf) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
+114
@@ -0,0 +1,114 @@
|
|||||||
|
package dmac
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import "base:intrinsics"
|
||||||
|
|
||||||
|
foreign import dmac "system:SceKernelDmacMgr_stub"
|
||||||
|
foreign import dmac5 "system:SceSblSsMgr_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceDmac")
|
||||||
|
foreign dmac {
|
||||||
|
/**
|
||||||
|
* DMA memcpy
|
||||||
|
*
|
||||||
|
* @param[in] dst - Destination
|
||||||
|
* @param[in] src - Source
|
||||||
|
* @param[in] size - Size
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
Memcpy :: proc(dst: rawptr, src: rawptr, size: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DMA memset
|
||||||
|
*
|
||||||
|
* @param[in] dst - Destination
|
||||||
|
* @param[in] ch - The character
|
||||||
|
* @param[in] size - Size
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
Memset :: proc(dst: rawptr, ch: c.int, size: sce.Size) -> c.int ---
|
||||||
|
}
|
||||||
|
|
||||||
|
AesCbcEnc :: #force_inline proc(src: rawptr, dst: rawptr, length: sce.Size, key: rawptr, keysize: sce.Size, iv: rawptr) -> c.int {
|
||||||
|
param := SceSblDmac5EncDecParam{src = src, dst = dst, length = length, key = key, keysize = keysize, iv = iv}
|
||||||
|
|
||||||
|
return EncDec(
|
||||||
|
¶m,
|
||||||
|
1 | 8 | (((auto_cast keysize << 2) - 0x100) & 0x300)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
AesCbcDec :: #force_inline proc(src: rawptr, dst: rawptr, length: sce.Size, key: rawptr, keysize: sce.Size, iv: rawptr) -> c.int {
|
||||||
|
param := SceSblDmac5EncDecParam{src = src, dst = dst, length = length, key = key, keysize = keysize, iv = iv}
|
||||||
|
|
||||||
|
return EncDec(
|
||||||
|
¶m,
|
||||||
|
2 | 8 | (((auto_cast keysize << 2) - 0x100) & 0x300)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
AesCtrEnc :: #force_inline proc(src: rawptr, dst: rawptr, length: sce.Size, key: rawptr, keysize: sce.Size, iv: rawptr) -> c.int {
|
||||||
|
param := SceSblDmac5EncDecParam{src = src, dst = dst, length = length, key = key, keysize = keysize, iv = iv}
|
||||||
|
|
||||||
|
return EncDec(
|
||||||
|
¶m,
|
||||||
|
1 | 0x20 | (((auto_cast keysize << 2) - 0x100) & 0x300)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
AesCtrDec :: #force_inline proc(src: rawptr, dst: rawptr, length: sce.Size, key: rawptr, keysize: sce.Size, iv: rawptr) -> c.int {
|
||||||
|
param := SceSblDmac5EncDecParam{src = src, dst = dst, length = length, key = key, keysize = keysize, iv = iv}
|
||||||
|
|
||||||
|
return EncDec(
|
||||||
|
¶m,
|
||||||
|
2 | 0x20 | (((auto_cast keysize << 2) - 0x100) & 0x300)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Sha256Digest :: #force_inline proc(src: rawptr, dst: rawptr, length: sce.Size) -> c.int {
|
||||||
|
ctx: SceSblDmac5HashTransformContext
|
||||||
|
param := SceSblDmac5HashTransformParam{src = src, dst = dst, length = length, key = c.NULL, keysize = 0, ctx = &ctx}
|
||||||
|
|
||||||
|
ctx.state[0] = auto_cast intrinsics.byte_swap(u32(0x6a09e667))
|
||||||
|
ctx.state[1] = auto_cast intrinsics.byte_swap(u32(0xbb67ae85))
|
||||||
|
ctx.state[2] = auto_cast intrinsics.byte_swap(u32(0x3c6ef372))
|
||||||
|
ctx.state[3] = auto_cast intrinsics.byte_swap(u32(0xa54ff53a))
|
||||||
|
ctx.state[4] = auto_cast intrinsics.byte_swap(u32(0x510e527f))
|
||||||
|
ctx.state[5] = auto_cast intrinsics.byte_swap(u32(0x9b05688c))
|
||||||
|
ctx.state[6] = auto_cast intrinsics.byte_swap(u32(0x1f83d9ab))
|
||||||
|
ctx.state[7] = auto_cast intrinsics.byte_swap(u32(0x5be0cd19))
|
||||||
|
ctx.length = 0
|
||||||
|
|
||||||
|
return HashTransform(
|
||||||
|
¶m,
|
||||||
|
3 | 0x10, 0x800
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "sceSblDmac5")
|
||||||
|
foreign dmac5 {
|
||||||
|
/**
|
||||||
|
* @brief Execute DMAC5 encdec command
|
||||||
|
*
|
||||||
|
* @param[inout] param - The encdec param.
|
||||||
|
* @param[in] command - The DMAC5 encdec command.
|
||||||
|
*
|
||||||
|
* @return 0 on success, else < 0.
|
||||||
|
*/
|
||||||
|
EncDec :: proc(param: ^SceSblDmac5EncDecParam, command: sce.UInt32) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Execute DMAC5 hash transform command
|
||||||
|
*
|
||||||
|
* @param[inout] param - The encdec param.
|
||||||
|
* @param[in] command - The DMAC5 hash base command.
|
||||||
|
* @param[in] extra - The DMAC5 extra command.
|
||||||
|
*
|
||||||
|
* @return 0 on success, else < 0.
|
||||||
|
*/
|
||||||
|
HashTransform :: proc(param: ^SceSblDmac5HashTransformParam, command: sce.UInt32, extra: sce.UInt32) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package dmac
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceSblDmac5EncDecParam :: struct { // size is 0x18-bytes
|
||||||
|
src: rawptr, //<! The operation input buffer
|
||||||
|
dst: rawptr, //<! The operation output buffer
|
||||||
|
length: sce.Size, //<! The src data length
|
||||||
|
key: rawptr, //<! The key data
|
||||||
|
keysize: sce.Size, //<! The key size in bits
|
||||||
|
iv: rawptr, //<! The initialization vector
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceSblDmac5EncDecParam) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceSblDmac5HashTransformContext :: struct { // size is 0x28-bytes
|
||||||
|
state: [8]sce.UInt32,
|
||||||
|
length: sce.UInt64,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceSblDmac5HashTransformContext) == 0x28)
|
||||||
|
|
||||||
|
SceSblDmac5HashTransformParam :: struct { // size is 0x18-bytes
|
||||||
|
src: rawptr, //<! The operation input buffer
|
||||||
|
dst: rawptr, //<! The operation output buffer
|
||||||
|
length: sce.Size, //<! The src data length
|
||||||
|
key: rawptr, //<! The key data
|
||||||
|
keysize: sce.Size, //<! The key size in bits
|
||||||
|
ctx: rawptr, //<! SceSblDmac5HashTransformContext Or another context of size 0x10-bytes
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceSblDmac5HashTransformParam) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package fiber
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import _fiber "system:SceFiber_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceFiber")
|
||||||
|
foreign _fiber {
|
||||||
|
@(link_name = "_sceFiberInitializeImpl")
|
||||||
|
InitializeImpl :: proc(
|
||||||
|
fiber: ^SceFiber,
|
||||||
|
name: cstring,
|
||||||
|
entry: ^SceFiberEntry,
|
||||||
|
argOnInitialize: sce.UInt32,
|
||||||
|
addrContext: rawptr,
|
||||||
|
sizeContext: sce.Size,
|
||||||
|
params: ^SceFiberOptParam) -> sce.Int32 ---
|
||||||
|
OptParamInitialize :: proc(optParam: ^SceFiberOptParam) -> sce.Int32 ---
|
||||||
|
Finalize :: proc(fiber: ^SceFiber) -> sce.Int32 ---
|
||||||
|
Run :: proc(fiber: ^SceFiber, argOnRunTo: sce.UInt32, argOnRun: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
Switch :: proc(fiber: ^SceFiber, argOnRunTo: sce.UInt32, argOnRun: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
GetSelf :: proc(fiber: SceFiber) -> sce.Int32 ---
|
||||||
|
ReturnToThread :: proc(argOnReturn: sce.UInt32, argOnRun: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
GetInfo :: proc(fiber: ^SceFiber, fiberInfo: ^SceFiberInfo) -> sce.Int32 ---
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package fiber
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
// Error Codes
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceFiberErrorCode :: enum c.uint {
|
||||||
|
NULL = 0x80590001,
|
||||||
|
ALIGNMENT = 0x80590002,
|
||||||
|
RANGE = 0x80590003,
|
||||||
|
INVALID = 0x80590004,
|
||||||
|
PERMISSION = 0x80590005,
|
||||||
|
STATE = 0x80590006,
|
||||||
|
BUSY = 0x80590007,
|
||||||
|
AGAIN = 0x80590008,
|
||||||
|
FATAL = 0x80590009
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFiber :: struct #align(8) {
|
||||||
|
reserved: [128]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFiber) == 0x80)
|
||||||
|
|
||||||
|
SceFiberOptParam :: struct #align(8) {
|
||||||
|
reserved: [128]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFiberOptParam) == 0x80)
|
||||||
|
|
||||||
|
SceFiberEntry :: #type proc(argOnInitialize: sce.UInt32, argOnRun: sce.UInt32)
|
||||||
|
|
||||||
|
SceFiberInfo :: struct #align(8) {
|
||||||
|
entry: ^SceFiberEntry,
|
||||||
|
argOnInitialize: sce.UInt32,
|
||||||
|
addrContext: rawptr,
|
||||||
|
sizeContext: sce.Size,
|
||||||
|
name: [32]c.char,
|
||||||
|
padding: [80]c.uint,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceFiberInfo) == 0x170)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package fios2
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import fios2 "system:SceFios2Kernel_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "_sceFiosKernelOverlay")
|
||||||
|
foreign fios2 {
|
||||||
|
Add :: proc(overlay: ^SceFiosKernelOverlay, out_id: ^SceFiosKernelOverlayID) -> c.int ---
|
||||||
|
AddForProcess :: proc(target_process: sce.UID, overlay: ^SceFiosKernelOverlay, out_id: ^SceFiosKernelOverlayID) -> c.int ---
|
||||||
|
DHChstatSync :: proc(dh: SceFiosKernelOverlayDH, new_stat: ^SceFiosNativeStat, cbit: c.uint) -> c.int ---
|
||||||
|
DHCloseSync :: proc(dh: SceFiosKernelOverlayDH) -> c.int ---
|
||||||
|
|
||||||
|
DHOpenSync :: proc(out_dh: ^SceFiosKernelOverlayDH, path: cstring, from_order: sce.UInt8, args: ^SceFiosDHOpenSyncSyscallArgs) -> c.int ---
|
||||||
|
DHReadSync :: proc(dh: SceFiosKernelOverlayDH, out_entry: ^SceFiosNativeDirEntry) -> c.int ---
|
||||||
|
DHStatSync :: proc(dh: SceFiosKernelOverlayDH, out_stat: ^SceFiosNativeStat) -> c.int ---
|
||||||
|
DHSyncSync :: proc(dh: SceFiosKernelOverlayDH, flag: c.int) -> c.int ---
|
||||||
|
GetInfo :: proc(id: SceFiosKernelOverlayID, out_overlay: ^SceFiosKernelOverlay) -> c.int ---
|
||||||
|
GetInfoForProcess :: proc(target_process: sce.UID, id: SceFiosKernelOverlayID, out_overlay: ^SceFiosKernelOverlay) -> c.int ---
|
||||||
|
|
||||||
|
GetList :: proc(pid: sce.UID, min_order: sce.UInt8, max_order: sce.UInt8, args: ^SceFiosGetListSyscallArgs) -> c.int ---
|
||||||
|
GetRecommendedScheduler :: proc(avail: c.int, partially_resolved_path: cstring, a3: ^sce.UInt64) -> c.int ---
|
||||||
|
Modify :: proc(id: SceFiosKernelOverlayID, new_value: ^SceFiosKernelOverlay) -> c.int ---
|
||||||
|
ModifyForProcess :: proc(target_process: sce.UID, id: SceFiosKernelOverlayID, new_value: ^SceFiosKernelOverlay) -> c.int ---
|
||||||
|
Remove :: proc(id: SceFiosKernelOverlayID) -> c.int ---
|
||||||
|
RemoveForProcess :: proc(target_process: sce.UID, id: SceFiosKernelOverlayID) -> c.int ---
|
||||||
|
|
||||||
|
ResolveSync :: proc(pid: sce.UID, resolve_flag: c.int, in_path: cstring, args: ^SceFiosResolveSyncSyscallArgs) -> c.int ---
|
||||||
|
|
||||||
|
ResolveWithRangeSync :: proc(pid: sce.UID, resolve_flag: c.int, in_path: cstring, args: ^SceFiosResolveWithRangeSyncSyscallArgs) -> c.int ---
|
||||||
|
ThreadIsDisabled :: proc() -> c.int ---
|
||||||
|
ThreadSetDisabled :: proc(disabled: sce.Int32) -> c.int ---
|
||||||
|
|
||||||
|
@(link_name = "sceFiosKernelOverlayAddForProcess02")
|
||||||
|
AddForProcess02 :: proc(pid: sce.UID, overlay: ^SceFiosOverlay, outID: ^SceFiosOverlayID) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
package fios2
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SCE_FIOS2_OVERLAY_PATH_SIZE :: (292)
|
||||||
|
SCE_FIOS2_OVERLAY_PATH_MAX_LENGTH :: (SCE_FIOS2_OVERLAY_PATH_SIZE - 1)
|
||||||
|
|
||||||
|
SceFiosKernelOverlayDH :: c.int32_t
|
||||||
|
SceFiosKernelOverlayID :: c.int32_t
|
||||||
|
SceFiosOverlayID :: c.int32_t
|
||||||
|
|
||||||
|
// missing structs
|
||||||
|
SceFiosKernelOverlay :: struct{}
|
||||||
|
SceFiosNativeStat :: struct{}
|
||||||
|
SceFiosNativeDirEntry :: struct{}
|
||||||
|
|
||||||
|
SceFiosDHOpenSyncSyscallArgs :: struct {
|
||||||
|
to_order: sce.UInt8,
|
||||||
|
padding: [2]c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFiosDHOpenSyncSyscallArgs) == 0xC)
|
||||||
|
|
||||||
|
SceFiosGetListSyscallArgs :: struct {
|
||||||
|
out_ids: ^SceFiosKernelOverlayID,
|
||||||
|
data_0x04: c.int,
|
||||||
|
data_0x08: c.int,
|
||||||
|
data_0x0C: sce.Size,
|
||||||
|
data_0x10: c.int,
|
||||||
|
data_0x14: c.int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceFiosGetListSyscallArgs) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFiosResolveSyncSyscallArgs :: struct {
|
||||||
|
out_path: cstring,
|
||||||
|
data_0x04: c.int,
|
||||||
|
data_0x08: c.int,
|
||||||
|
data_0x0C: c.int,
|
||||||
|
data_0x10: c.int,
|
||||||
|
data_0x14: c.int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceFiosResolveSyncSyscallArgs) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFiosResolveWithRangeSyncSyscallArgs :: struct {
|
||||||
|
out_path: cstring,
|
||||||
|
data_0x04: c.int,
|
||||||
|
data_0x08: sce.UInt8,
|
||||||
|
data_0x09: sce.UInt8,
|
||||||
|
data_0x0C: c.int,
|
||||||
|
data_0x10: c.int,
|
||||||
|
data_0x14: c.int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceFiosResolveWithRangeSyncSyscallArgs) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFiosOverlayType :: enum c.int {
|
||||||
|
// src replaces dst. All accesses to dst are redirected to src.
|
||||||
|
OPAQUE = 0,
|
||||||
|
|
||||||
|
// src merges with dst. Reads check src first, then dst. Writes go to dst.
|
||||||
|
TRANSLUCENT = 1,
|
||||||
|
|
||||||
|
// src merges with dst. Reads check both src and dst, and use whichever has the most recent modification time.
|
||||||
|
// If both src and dst have the same modification time, dst is used.
|
||||||
|
// If no file exists at src or dst, dst is used; if no file exists at dst, but a file exists at src, src is used. Writes go to dst.
|
||||||
|
NEWER = 2,
|
||||||
|
|
||||||
|
// src merges with dst. Reads check src first, then dst. Writes go to src.
|
||||||
|
WRITABLE = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFiosOverlay :: struct {
|
||||||
|
type: c.uint8_t, // see SceFiosOverlayType
|
||||||
|
order: c.uint8_t,
|
||||||
|
dst_len: c.uint16_t,
|
||||||
|
src_len: c.uint16_t,
|
||||||
|
unk2: c.uint16_t,
|
||||||
|
pid: sce.UID,
|
||||||
|
id: SceFiosOverlayID,
|
||||||
|
dst: [SCE_FIOS2_OVERLAY_PATH_SIZE]c.char,
|
||||||
|
src: [SCE_FIOS2_OVERLAY_PATH_SIZE]c.char, // src path replaces dst path based on type policy
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFiosOverlay) == 0x258)
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package gps
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import gps "system:SceGps_stub"
|
||||||
|
|
||||||
|
// missing structs
|
||||||
|
SceGpsDeviceInfo :: struct{}
|
||||||
|
SceGpsSatelliteData :: struct{}
|
||||||
|
SceGpsPositionData :: struct{}
|
||||||
|
SceGpsStatus :: struct{}
|
||||||
|
|
||||||
|
@(link_prefix = "_sceGps")
|
||||||
|
foreign gps {
|
||||||
|
Close :: proc() -> c.int ---
|
||||||
|
GetData :: proc(pos: ^SceGpsPositionData, sat: ^SceGpsSatelliteData) -> c.int ---
|
||||||
|
GetDeviceInfo :: proc(dev_info: ^SceGpsDeviceInfo) -> c.int ---
|
||||||
|
GetState :: proc(state: ^SceGpsStatus) -> c.int ---
|
||||||
|
Ioctl :: proc(ioctl_command: sce.UInt32, arg: rawptr, arg_size: sce.Size, a4: ^sce.Size) -> c.int ---
|
||||||
|
IsDevice :: proc() -> c.int ---
|
||||||
|
Open :: proc(cbid: sce.UID) -> c.int ---
|
||||||
|
ResumeCallback :: proc() -> c.int ---
|
||||||
|
SelectDevice :: proc(device_type: sce.UInt32) -> c.int ---
|
||||||
|
Start :: proc(mode: c.uint) -> c.int ---
|
||||||
|
Stop :: proc() -> c.int ---
|
||||||
|
}
|
||||||
+306
@@ -0,0 +1,306 @@
|
|||||||
|
package gxm
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import "base:intrinsics"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import gxm "system:SceGxm_stub"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the start address of the texture data.
|
||||||
|
*
|
||||||
|
* @param gxt pointer to the GXT data
|
||||||
|
* @return A pointer to the start of the texture data
|
||||||
|
*/
|
||||||
|
sceGxtGetDataAddress :: proc(gxt: rawptr) -> rawptr {
|
||||||
|
header := cast(^SceGxtHeader)gxt
|
||||||
|
return cast(rawptr)((cast(uintptr)gxt) + auto_cast header.dataOffset)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@(link_prefix = "sceGxm")
|
||||||
|
foreign gxm {
|
||||||
|
Initialize :: proc(params: ^SceGxmInitializeParams) -> c.int ---
|
||||||
|
VshInitialize :: proc(params: ^SceGxmInitializeParams) -> c.int ---
|
||||||
|
Terminate :: proc() -> c.int ---
|
||||||
|
|
||||||
|
GetNotificationRegion :: proc() -> ^c.uint ---
|
||||||
|
NotificationWait :: proc(notification: ^SceGxmNotification) -> c.int ---
|
||||||
|
|
||||||
|
MapMemory :: proc(base: rawptr, size: sce.Size, attr: SceGxmMemoryAttribFlags) -> c.int ---
|
||||||
|
UnmapMemory :: proc(base: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
MapVertexUsseMemory :: proc(base: rawptr, size: sce.Size, offset: ^c.uint) -> c.int ---
|
||||||
|
UnmapVertexUsseMemory :: proc(base: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
MapFragmentUsseMemory :: proc(base: rawptr, size: sce.Size, offset: ^c.uint) -> c.int ---
|
||||||
|
UnmapFragmentUsseMemory :: proc(base: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
DisplayQueueAddEntry :: proc(oldBuffer: ^SceGxmSyncObject, newBuffer: ^SceGxmSyncObject, callbackData: rawptr) -> c.int ---
|
||||||
|
DisplayQueueFinish :: proc() -> c.int ---
|
||||||
|
|
||||||
|
SyncObjectCreate :: proc(syncObject: ^^SceGxmSyncObject) -> c.int ---
|
||||||
|
SyncObjectDestroy :: proc(syncObject: ^SceGxmSyncObject) -> c.int ---
|
||||||
|
|
||||||
|
CreateContext :: proc(params: ^SceGxmContextParams, _context: ^^SceGxmContext) -> c.int ---
|
||||||
|
DestroyContext :: proc(_context: ^SceGxmContext) -> c.int ---
|
||||||
|
|
||||||
|
CreateDeferredContext :: proc(params: ^SceGxmDeferredContextParams, _context: ^^SceGxmContext) -> c.int ---
|
||||||
|
DestroyDeferredContext :: proc(_context: ^SceGxmContext) -> c.int ---
|
||||||
|
|
||||||
|
SetValidationEnable :: proc(_context: ^SceGxmContext, enable: sce.Bool) ---
|
||||||
|
|
||||||
|
SetVertexProgram :: proc(_context: ^SceGxmContext, vertexProgram: ^SceGxmVertexProgram) ---
|
||||||
|
SetFragmentProgram :: proc(_context: ^SceGxmContext, fragmentProgram: ^SceGxmFragmentProgram) ---
|
||||||
|
|
||||||
|
ReserveVertexDefaultUniformBuffer :: proc(_context: ^SceGxmContext, uniformBuffer: ^rawptr) -> c.int ---
|
||||||
|
ReserveFragmentDefaultUniformBuffer :: proc(_context: ^SceGxmContext, uniformBuffer: ^rawptr) -> c.int ---
|
||||||
|
|
||||||
|
SetVertexDefaultUniformBuffer :: proc(_context: ^SceGxmContext, uniformBuffer: rawptr) -> c.int ---
|
||||||
|
SetFragmentDefaultUniformBuffer :: proc(_context: ^SceGxmContext, uniformBuffer: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
SetVertexStream :: proc(_context: ^SceGxmContext, streamIndex: c.uint, streamData: rawptr) -> c.int ---
|
||||||
|
SetVertexTexture :: proc(_context: ^SceGxmContext, textureIndex: c.uint, texture: ^SceGxmTexture) -> c.int ---
|
||||||
|
SetFragmentTexture :: proc(_context: ^SceGxmContext, textureIndex: c.uint, texture: ^SceGxmTexture) -> c.int ---
|
||||||
|
SetVertexUniformBuffer :: proc(_context: ^SceGxmContext, bufferIndex: c.uint, bufferData: rawptr) -> c.int ---
|
||||||
|
SetFragmentUniformBuffer :: proc(_context: ^SceGxmContext, bufferIndex: c.uint, bufferData: rawptr) -> c.int ---
|
||||||
|
SetAuxiliarySurface :: proc(_context: ^SceGxmContext, surfaceIndex: c.uint, surface: ^SceGxmAuxiliarySurface) -> c.int ---
|
||||||
|
|
||||||
|
SetPrecomputedFragmentState :: proc(_context: ^SceGxmContext, precomputedState: ^SceGxmPrecomputedFragmentState) ---
|
||||||
|
SetPrecomputedVertexState :: proc(_context: ^SceGxmContext, precomputedState: ^SceGxmPrecomputedVertexState) ---
|
||||||
|
|
||||||
|
DrawPrecomputed :: proc(_context: ^SceGxmContext, precomputedDraw: ^SceGxmPrecomputedDraw) -> c.int ---
|
||||||
|
Draw :: proc(_context: ^SceGxmContext, primType: SceGxmPrimitiveType, indexType: SceGxmIndexFormat, indexData: rawptr, indexCount: c.uint) -> c.int ---
|
||||||
|
DrawInstanced :: proc(_context: ^SceGxmContext, primType: SceGxmPrimitiveType, indexType: SceGxmIndexFormat, indexData: rawptr, indexCount: c.uint, indexWrap: c.uint) -> c.int ---
|
||||||
|
SetVisibilityBuffer :: proc(_context: ^SceGxmContext, bufferBase: rawptr, stridePerCore: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
BeginScene :: proc(_context: ^SceGxmContext, flags: c.uint, renderTarget: ^SceGxmRenderTarget, validRegion: ^SceGxmValidRegion, vertexSyncObject: ^SceGxmSyncObject, fragmentSyncObject: ^SceGxmSyncObject, colorSurface: ^SceGxmColorSurface, depthStencil: ^SceGxmDepthStencilSurface) -> c.int ---
|
||||||
|
MidSceneFlush :: proc(_context: ^SceGxmContext, flags: c.uint, vertexSyncObject: ^SceGxmSyncObject, vertexNotification: ^SceGxmNotification) -> c.int ---
|
||||||
|
EndScene :: proc(_context: ^SceGxmContext, vertexNotification: ^SceGxmNotification, fragmentNotification: ^SceGxmNotification) -> c.int ---
|
||||||
|
|
||||||
|
BeginCommandList :: proc(_context: ^SceGxmContext) -> c.int ---
|
||||||
|
ExecuteCommandList :: proc(_context: ^SceGxmContext, list: ^SceGxmCommandList) -> c.int ---
|
||||||
|
EndCommandList :: proc(_context: ^SceGxmContext, list: ^SceGxmCommandList) -> c.int ---
|
||||||
|
|
||||||
|
SetFrontDepthFunc :: proc(_context: ^SceGxmContext, depthFunc: SceGxmDepthFunc) ---
|
||||||
|
SetBackDepthFunc :: proc(_context: ^SceGxmContext, depthFunc: SceGxmDepthFunc) ---
|
||||||
|
SetFrontFragmentProgramEnable :: proc(_context: ^SceGxmContext, enable: SceGxmFragmentProgramMode) ---
|
||||||
|
SetBackFragmentProgramEnable :: proc(_context: ^SceGxmContext, enable: SceGxmFragmentProgramMode) ---
|
||||||
|
SetFrontDepthWriteEnable :: proc(_context: ^SceGxmContext, enable: SceGxmDepthWriteMode) ---
|
||||||
|
SetBackDepthWriteEnable :: proc(_context: ^SceGxmContext, enable: SceGxmDepthWriteMode) ---
|
||||||
|
SetFrontLineFillLastPixelEnable :: proc(_context: ^SceGxmContext, enable: SceGxmLineFillLastPixelMode) ---
|
||||||
|
SetBackLineFillLastPixelEnable :: proc(_context: ^SceGxmContext, enable: SceGxmLineFillLastPixelMode) ---
|
||||||
|
SetFrontStencilRef :: proc(_context: ^SceGxmContext, sref: c.uint) ---
|
||||||
|
SetBackStencilRef :: proc(_context: ^SceGxmContext, sref: c.uint) ---
|
||||||
|
SetFrontPointLineWidth :: proc(_context: ^SceGxmContext, width: c.uint) ---
|
||||||
|
SetBackPointLineWidth :: proc(_context: ^SceGxmContext, width: c.uint) ---
|
||||||
|
SetFrontPolygonMode :: proc(_context: ^SceGxmContext, mode: SceGxmPolygonMode) ---
|
||||||
|
SetBackPolygonMode :: proc(_context: ^SceGxmContext, mode: SceGxmPolygonMode) ---
|
||||||
|
SetFrontStencilFunc :: proc(_context: ^SceGxmContext, func: SceGxmStencilFunc, stencilFail: SceGxmStencilOp, depthFail: SceGxmStencilOp, depthPass: SceGxmStencilOp, compareMask: c.uchar, writeMask: c.uchar) ---
|
||||||
|
SetBackStencilFunc :: proc(_context: ^SceGxmContext, func: SceGxmStencilFunc, stencilFail: SceGxmStencilOp, depthFail: SceGxmStencilOp, depthPass: SceGxmStencilOp, compareMask: c.uchar, writeMask: c.uchar) ---
|
||||||
|
SetFrontDepthBias :: proc(_context: ^SceGxmContext, factor: c.int, units: c.int) ---
|
||||||
|
SetBackDepthBias :: proc(_context: ^SceGxmContext, factor: c.int, units: c.int) ---
|
||||||
|
SetTwoSidedEnable :: proc(_context: ^SceGxmContext, enable: SceGxmTwoSidedMode) ---
|
||||||
|
SetViewport :: proc(_context: ^SceGxmContext, xOffset: c.float, xScale: c.float, yOffset: c.float, yScale: c.float, zOffset: c.float, zScale: c.float) ---
|
||||||
|
SetWClampValue :: proc(_context: ^SceGxmContext, clampValue: c.float) ---
|
||||||
|
SetWClampEnable :: proc(_context: ^SceGxmContext, enable: SceGxmWClampMode) ---
|
||||||
|
SetRegionClip :: proc(_context: ^SceGxmContext, mode: SceGxmRegionClipMode, xMin: c.uint, yMin: c.uint, xMax: c.uint, yMax: c.uint) ---
|
||||||
|
SetDefaultRegionClipAndViewport :: proc(_context: ^SceGxmContext, xMax: c.uint, yMax: c.uint) ---
|
||||||
|
SetCullMode :: proc(_context: ^SceGxmContext, mode: SceGxmCullMode) ---
|
||||||
|
SetViewportEnable :: proc(_context: ^SceGxmContext, enable: SceGxmViewportMode) ---
|
||||||
|
SetWBufferEnable :: proc(_context: ^SceGxmContext, enable: SceGxmWBufferMode) ---
|
||||||
|
SetFrontVisibilityTestIndex :: proc(_context: ^SceGxmContext, index: c.uint) ---
|
||||||
|
SetBackVisibilityTestIndex :: proc(_context: ^SceGxmContext, index: c.uint) ---
|
||||||
|
SetFrontVisibilityTestOp :: proc(_context: ^SceGxmContext, op: SceGxmVisibilityTestOp) ---
|
||||||
|
SetBackVisibilityTestOp :: proc(_context: ^SceGxmContext, op: SceGxmVisibilityTestOp) ---
|
||||||
|
SetFrontVisibilityTestEnable :: proc(_context: ^SceGxmContext, enable: SceGxmVisibilityTestMode) ---
|
||||||
|
SetBackVisibilityTestEnable :: proc(_context: ^SceGxmContext, enable: SceGxmVisibilityTestMode) ---
|
||||||
|
|
||||||
|
SetYuvProfile :: proc(_context: ^SceGxmContext, index: c.uint, profile: SceGxmYuvProfile ) -> c.int ---
|
||||||
|
|
||||||
|
Finish :: proc(_context: ^SceGxmContext) ---
|
||||||
|
|
||||||
|
PushUserMarker :: proc(_context: ^SceGxmContext, tag: cstring) -> c.int ---
|
||||||
|
PopUserMarker :: proc(_context: ^SceGxmContext) -> c.int ---
|
||||||
|
SetUserMarker :: proc(_context: ^SceGxmContext, tag: cstring) -> c.int ---
|
||||||
|
|
||||||
|
PadHeartbeat :: proc(displaySurface: ^SceGxmColorSurface, displaySyncObject: ^SceGxmSyncObject) -> c.int ---
|
||||||
|
|
||||||
|
PadTriggerGpuPaTrace :: proc() -> c.int ---
|
||||||
|
|
||||||
|
ColorSurfaceInit :: proc(surface: ^SceGxmColorSurface, colorFormat: SceGxmColorFormat, surfaceType: SceGxmColorSurfaceType, scaleMode: SceGxmColorSurfaceScaleMode, outputRegisterSize: SceGxmOutputRegisterSize, width: c.uint, height: c.uint, strideInPixels: c.uint, data: rawptr) -> c.int ---
|
||||||
|
ColorSurfaceInitDisabled :: proc(surface: ^SceGxmColorSurface) -> c.int ---
|
||||||
|
ColorSurfaceIsEnabled :: proc(surface: ^SceGxmColorSurface) -> sce.Bool ---
|
||||||
|
ColorSurfaceGetClip :: proc(surface: ^SceGxmColorSurface, xMin: ^c.uint, yMin: ^c.uint, xMax: ^c.uint, yMax: ^c.uint) ---
|
||||||
|
ColorSurfaceSetClip :: proc(surface: ^SceGxmColorSurface, xMin: c.uint, yMin: c.uint, xMax: c.uint, yMax: c.uint) ---
|
||||||
|
|
||||||
|
ColorSurfaceGetScaleMode :: proc(surface: ^SceGxmColorSurface) -> SceGxmColorSurfaceScaleMode ---
|
||||||
|
ColorSurfaceSetScaleMode :: proc(surface: ^SceGxmColorSurface, scaleMode: SceGxmColorSurfaceScaleMode) ---
|
||||||
|
|
||||||
|
ColorSurfaceGetData :: proc(surface: ^SceGxmColorSurface) -> rawptr ---
|
||||||
|
ColorSurfaceSetData :: proc(surface: ^SceGxmColorSurface, data: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
ColorSurfaceGetFormat :: proc(surface: ^SceGxmColorSurface) -> SceGxmColorFormat ---
|
||||||
|
ColorSurfaceSetFormat :: proc(surface: ^SceGxmColorSurface, format: SceGxmColorFormat) -> c.int ---
|
||||||
|
ColorSurfaceGetType :: proc(surface: ^SceGxmColorSurface) -> SceGxmColorSurfaceType ---
|
||||||
|
ColorSurfaceGetStrideInPixels :: proc(surface: ^SceGxmColorSurface) -> c.uint ---
|
||||||
|
|
||||||
|
DepthStencilSurfaceInit :: proc(surface: ^SceGxmDepthStencilSurface, depthStencilFormat: SceGxmDepthStencilFormat, surfaceType: SceGxmDepthStencilSurfaceType, strideInSamples: c.uint, depthData: rawptr, stencilData: rawptr) -> c.int ---
|
||||||
|
DepthStencilSurfaceInitDisabled :: proc(surface: ^SceGxmDepthStencilSurface) -> c.int ---
|
||||||
|
DepthStencilSurfaceGetBackgroundDepth :: proc(surface: ^SceGxmDepthStencilSurface) -> c.float ---
|
||||||
|
DepthStencilSurfaceSetBackgroundDepth :: proc(surface: ^SceGxmDepthStencilSurface, backgroundDepth: c.float) ---
|
||||||
|
DepthStencilSurfaceGetBackgroundStencil :: proc(surface: ^SceGxmDepthStencilSurface) -> c.uchar ---
|
||||||
|
DepthStencilSurfaceSetBackgroundStencil :: proc(surface: ^SceGxmDepthStencilSurface, backgroundStencil: c.uchar) ---
|
||||||
|
DepthStencilSurfaceIsEnabled :: proc(surface: ^SceGxmDepthStencilSurface) -> sce.Bool ---
|
||||||
|
DepthStencilSurfaceSetForceLoadMode :: proc(surface: ^SceGxmDepthStencilSurface, forceLoad: SceGxmDepthStencilForceLoadMode) ---
|
||||||
|
DepthStencilSurfaceGetForceLoadMode :: proc(surface: ^SceGxmDepthStencilSurface) -> SceGxmDepthStencilForceLoadMode ---
|
||||||
|
DepthStencilSurfaceSetForceStoreMode :: proc(surface: ^SceGxmDepthStencilSurface, forceStore: SceGxmDepthStencilForceStoreMode ) ---
|
||||||
|
DepthStencilSurfaceGetForceStoreMode :: proc(surface: ^SceGxmDepthStencilSurface) -> SceGxmDepthStencilForceStoreMode ---
|
||||||
|
|
||||||
|
ColorSurfaceGetGammaMode :: proc(surface: ^SceGxmColorSurface) -> SceGxmColorSurfaceGammaMode ---
|
||||||
|
ColorSurfaceSetGammaMode :: proc(surface: ^SceGxmColorSurface, gammaMode: SceGxmColorSurfaceGammaMode) -> c.int ---
|
||||||
|
ColorSurfaceGetDitherMode :: proc(surface: ^SceGxmColorSurface) -> SceGxmColorSurfaceDitherMode ---
|
||||||
|
ColorSurfaceSetDitherMode :: proc(surface: ^SceGxmColorSurface, ditherMode: SceGxmColorSurfaceDitherMode) -> c.int ---
|
||||||
|
|
||||||
|
DepthStencilSurfaceGetFormat :: proc(surface: ^SceGxmDepthStencilSurface) -> SceGxmDepthStencilFormat ---
|
||||||
|
DepthStencilSurfaceGetStrideInSamples :: proc(surface: ^SceGxmDepthStencilSurface) -> c.uint ---
|
||||||
|
|
||||||
|
ProgramCheck :: proc(program: ^SceGxmProgram) -> c.int ---
|
||||||
|
ProgramGetSize :: proc(program: ^SceGxmProgram) -> c.uint ---
|
||||||
|
ProgramGetType :: proc(program: ^SceGxmProgram) -> SceGxmProgramType ---
|
||||||
|
ProgramIsDiscardUsed :: proc(program: ^SceGxmProgram) -> sce.Bool ---
|
||||||
|
ProgramIsDepthReplaceUsed :: proc(program: ^SceGxmProgram) -> sce.Bool ---
|
||||||
|
ProgramIsSpriteCoordUsed :: proc(program: ^SceGxmProgram) -> sce.Bool ---
|
||||||
|
ProgramGetDefaultUniformBufferSize :: proc(program: ^SceGxmProgram) -> c.uint ---
|
||||||
|
ProgramGetParameterCount :: proc(program: ^SceGxmProgram) -> c.uint ---
|
||||||
|
|
||||||
|
ProgramGetParameter :: proc(program: ^SceGxmProgram, index: c.uint) -> ^SceGxmProgramParameter ---
|
||||||
|
ProgramFindParameterByName :: proc(program: ^SceGxmProgram, name: cstring) -> ^SceGxmProgramParameter ---
|
||||||
|
ProgramFindParameterBySemantic :: proc(program: ^SceGxmProgram, semantic: SceGxmParameterSemantic, index: c.uint) -> ^SceGxmProgramParameter ---
|
||||||
|
ProgramParameterGetIndex :: proc(program: ^SceGxmProgram, parameter: ^SceGxmProgramParameter) -> c.uint ---
|
||||||
|
ProgramParameterGetCategory :: proc(parameter: ^SceGxmProgramParameter) -> SceGxmParameterCategory ---
|
||||||
|
ProgramParameterGetName :: proc(parameter: ^SceGxmProgramParameter) -> cstring ---
|
||||||
|
ProgramParameterGetSemantic :: proc(parameter: ^SceGxmProgramParameter) -> SceGxmParameterSemantic ---
|
||||||
|
ProgramParameterGetSemanticIndex :: proc(parameter: ^SceGxmProgramParameter) -> c.uint ---
|
||||||
|
ProgramParameterGetType :: proc(parameter: ^SceGxmProgramParameter) -> SceGxmParameterType ---
|
||||||
|
ProgramParameterGetComponentCount :: proc(parameter: ^SceGxmProgramParameter) -> c.uint ---
|
||||||
|
ProgramParameterGetArraySize :: proc(parameter: ^SceGxmProgramParameter) -> c.uint ---
|
||||||
|
ProgramParameterGetResourceIndex :: proc(parameter: ^SceGxmProgramParameter) -> c.uint ---
|
||||||
|
ProgramParameterGetContainerIndex :: proc( parameter: ^SceGxmProgramParameter) -> c.uint ---
|
||||||
|
ProgramParameterIsSamplerCube :: proc(parameter: ^SceGxmProgramParameter) -> sce.Bool ---
|
||||||
|
|
||||||
|
FragmentProgramGetProgram :: proc(fragmentProgram: ^SceGxmFragmentProgram) -> ^SceGxmProgram ---
|
||||||
|
VertexProgramGetProgram :: proc(vertexProgram: ^SceGxmVertexProgram) -> ^SceGxmProgram ---
|
||||||
|
|
||||||
|
ShaderPatcherCreate :: proc(params: ^SceGxmShaderPatcherParams, shaderPatcher: ^^SceGxmShaderPatcher) -> c.int ---
|
||||||
|
ShaderPatcherSetUserData :: proc(shaderPatcher: ^SceGxmShaderPatcher, userData: rawptr) -> c.int ---
|
||||||
|
ShaderPatcherGetUserData :: proc(shaderPatcher: ^SceGxmShaderPatcher) -> rawptr ---
|
||||||
|
ShaderPatcherDestroy :: proc(shaderPatcher: ^SceGxmShaderPatcher) -> c.int ---
|
||||||
|
ShaderPatcherRegisterProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, programHeader: ^SceGxmProgram, programId: ^SceGxmShaderPatcherId) -> c.int ---
|
||||||
|
ShaderPatcherUnregisterProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, programId: SceGxmShaderPatcherId) -> c.int ---
|
||||||
|
ShaderPatcherForceUnregisterProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, programId: SceGxmShaderPatcherId) -> c.int ---
|
||||||
|
ShaderPatcherGetProgramFromId :: proc(programId: SceGxmShaderPatcherId) -> ^SceGxmProgram ---
|
||||||
|
ShaderPatcherSetAuxiliarySurface :: proc(shaderPatcher: ^SceGxmShaderPatcher, auxSurfaceIndex: c.uint, auxSurface: ^SceGxmAuxiliarySurface) -> c.int ---
|
||||||
|
ShaderPatcherCreateVertexProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, programId: SceGxmShaderPatcherId, attributes: ^SceGxmVertexAttribute, attributeCount: c.uint, streams: ^SceGxmVertexStream, streamCount: c.uint, vertexProgram: ^^SceGxmVertexProgram) -> c.int ---
|
||||||
|
ShaderPatcherCreateFragmentProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, programId: SceGxmShaderPatcherId, outputFormat: SceGxmOutputRegisterFormat, multisampleMode: SceGxmMultisampleMode, blendInfo: ^SceGxmBlendInfo, vertexProgram: ^SceGxmProgram, fragmentProgram: ^^SceGxmFragmentProgram) -> c.int ---
|
||||||
|
ShaderPatcherCreateMaskUpdateFragmentProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, fragmentProgram: ^^SceGxmFragmentProgram) -> c.int ---
|
||||||
|
ShaderPatcherAddRefVertexProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, vertexProgram: ^SceGxmVertexProgram) -> c.int ---
|
||||||
|
ShaderPatcherAddRefFragmentProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, fragmentProgram: ^SceGxmFragmentProgram) -> c.int ---
|
||||||
|
ShaderPatcherGetVertexProgramRefCount :: proc(shaderPatcher: ^SceGxmShaderPatcher, fragmentProgram: ^SceGxmVertexProgram, count: ^c.uint) -> c.int ---
|
||||||
|
ShaderPatcherGetFragmentProgramRefCount :: proc(shaderPatcher: ^SceGxmShaderPatcher, fragmentProgram: ^SceGxmFragmentProgram, count: ^c.uint) -> c.int ---
|
||||||
|
ShaderPatcherReleaseVertexProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, vertexProgram: ^SceGxmVertexProgram) -> c.int ---
|
||||||
|
ShaderPatcherReleaseFragmentProgram :: proc(shaderPatcher: ^SceGxmShaderPatcher, fragmentProgram: ^SceGxmFragmentProgram) -> c.int ---
|
||||||
|
ShaderPatcherGetHostMemAllocated :: proc(shaderPatcher: ^SceGxmShaderPatcher) -> c.uint ---
|
||||||
|
ShaderPatcherGetBufferMemAllocated :: proc(shaderPatcher: ^SceGxmShaderPatcher) -> c.uint ---
|
||||||
|
ShaderPatcherGetVertexUsseMemAllocated :: proc(shaderPatcher: ^SceGxmShaderPatcher) -> c.uint ---
|
||||||
|
ShaderPatcherGetFragmentUsseMemAllocated :: proc(shaderPatcher: ^SceGxmShaderPatcher) -> c.uint ---
|
||||||
|
|
||||||
|
TextureInitSwizzled :: proc(texture: ^SceGxmTexture, data: rawptr, texFormat: SceGxmTextureFormat, width: c.uint, height: c.uint, mipCount: c.uint) -> c.int ---
|
||||||
|
TextureInitSwizzledArbitrary :: proc(texture: ^SceGxmTexture, data: rawptr, texFormat: SceGxmTextureFormat, width: c.uint, height: c.uint, mipCount: c.uint) -> c.int ---
|
||||||
|
TextureInitLinear :: proc(texture: ^SceGxmTexture, data: rawptr, texFormat: SceGxmTextureFormat, width: c.uint, height: c.uint, mipCount: c.uint) -> c.int ---
|
||||||
|
TextureInitLinearStrided :: proc(texture: ^SceGxmTexture, data: rawptr, texFormat: SceGxmTextureFormat, width: c.uint, height: c.uint, byteStride: c.uint) -> c.int ---
|
||||||
|
TextureInitTiled :: proc(texture: ^SceGxmTexture, data: rawptr, texFormat: SceGxmTextureFormat, width: c.uint, height: c.uint, mipCount: c.uint) -> c.int ---
|
||||||
|
TextureInitCube :: proc(texture: ^SceGxmTexture, data: rawptr, texFormat: SceGxmTextureFormat, width: c.uint, height: c.uint, mipCount: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
TextureGetType :: proc(texture: ^SceGxmTexture) -> SceGxmTextureType ---
|
||||||
|
TextureValidate :: proc(texture: ^SceGxmTexture) -> c.int ---
|
||||||
|
|
||||||
|
TextureSetMinFilter :: proc(texture: ^SceGxmTexture, minFilter: SceGxmTextureFilter) -> c.int ---
|
||||||
|
TextureGetMinFilter :: proc(texture: ^SceGxmTexture) -> SceGxmTextureFilter ---
|
||||||
|
|
||||||
|
TextureSetMagFilter :: proc(texture: ^SceGxmTexture, magFilter: SceGxmTextureFilter) -> c.int ---
|
||||||
|
TextureGetMagFilter :: proc(texture: ^SceGxmTexture) -> SceGxmTextureFilter ---
|
||||||
|
|
||||||
|
TextureSetMipFilter :: proc(texture: ^SceGxmTexture, mipFilter: SceGxmTextureMipFilter) -> c.int ---
|
||||||
|
TextureGetMipFilter :: proc(texture: ^SceGxmTexture) -> SceGxmTextureMipFilter ---
|
||||||
|
|
||||||
|
TextureSetUAddrMode :: proc(texture: ^SceGxmTexture, addrMode: SceGxmTextureAddrMode) -> c.int ---
|
||||||
|
TextureGetUAddrMode :: proc(texture: ^SceGxmTexture) -> SceGxmTextureAddrMode ---
|
||||||
|
|
||||||
|
TextureSetVAddrMode :: proc(texture: ^SceGxmTexture, addrMode: SceGxmTextureAddrMode) -> c.int ---
|
||||||
|
TextureGetVAddrMode :: proc(texture: ^SceGxmTexture) -> SceGxmTextureAddrMode ---
|
||||||
|
|
||||||
|
TextureSetFormat :: proc(texture: ^SceGxmTexture, texFormat: SceGxmTextureFormat ) -> c.int ---
|
||||||
|
TextureGetFormat :: proc( texture: ^SceGxmTexture) -> SceGxmTextureFormat ---
|
||||||
|
|
||||||
|
TextureSetLodBias :: proc(texture: ^SceGxmTexture, bias: c.uint) -> c.int ---
|
||||||
|
TextureGetLodBias :: proc( texture: ^SceGxmTexture) -> c.uint ---
|
||||||
|
|
||||||
|
TextureSetStride :: proc(texture: ^SceGxmTexture, byteStride: c.uint) -> c.int ---
|
||||||
|
TextureGetStride :: proc( texture: ^SceGxmTexture) -> c.uint ---
|
||||||
|
|
||||||
|
TextureSetWidth :: proc(texture: ^SceGxmTexture, width: c.uint) -> c.int ---
|
||||||
|
TextureGetWidth :: proc( texture: ^SceGxmTexture) -> c.uint ---
|
||||||
|
|
||||||
|
TextureSetHeight :: proc(texture: ^SceGxmTexture, height: c.uint) -> c.int ---
|
||||||
|
TextureGetHeight :: proc( texture: ^SceGxmTexture) -> c.uint ---
|
||||||
|
|
||||||
|
TextureSetData :: proc(texture: ^SceGxmTexture, data: rawptr) -> c.int ---
|
||||||
|
TextureGetData :: proc( texture: ^SceGxmTexture) -> rawptr ---
|
||||||
|
|
||||||
|
TextureSetMipmapCount :: proc(texture: ^SceGxmTexture, mipCount: c.uint) -> c.int ---
|
||||||
|
TextureGetMipmapCount :: proc( texture: ^SceGxmTexture) -> c.uint ---
|
||||||
|
|
||||||
|
TextureSetPalette :: proc(texture: ^SceGxmTexture, paletteData: rawptr) -> c.int ---
|
||||||
|
TextureGetPalette :: proc( texture: ^SceGxmTexture) -> rawptr ---
|
||||||
|
|
||||||
|
TextureGetGammaMode :: proc( texture: ^SceGxmTexture) -> SceGxmTextureGammaMode ---
|
||||||
|
TextureSetGammaMode :: proc(texture: ^SceGxmTexture, gammaMode: SceGxmTextureGammaMode) -> c.int ---
|
||||||
|
|
||||||
|
GetPrecomputedVertexStateSize :: proc( vertexProgram: ^SceGxmVertexProgram) -> c.uint ---
|
||||||
|
PrecomputedVertexStateInit :: proc(precomputedState: ^SceGxmPrecomputedVertexState, vertexProgram: ^SceGxmVertexProgram, memBlock: rawptr) -> c.int ---
|
||||||
|
PrecomputedVertexStateSetDefaultUniformBuffer :: proc(precomputedState: ^SceGxmPrecomputedVertexState, defaultBuffer: rawptr) ---
|
||||||
|
PrecomputedVertexStateGetDefaultUniformBuffer :: proc( precomputedState: ^SceGxmPrecomputedVertexState) -> rawptr ---
|
||||||
|
PrecomputedVertexStateSetAllTextures :: proc(precomputedState: ^SceGxmPrecomputedVertexState, textures: ^SceGxmTexture) -> c.int ---
|
||||||
|
PrecomputedVertexStateSetTexture :: proc(precomputedState: ^SceGxmPrecomputedVertexState, textureIndex: c.uint, texture: ^SceGxmTexture) -> c.int ---
|
||||||
|
PrecomputedVertexStateSetAllUniformBuffers :: proc(precomputedState: ^SceGxmPrecomputedVertexState, bufferDataArray: ^rawptr) -> c.int ---
|
||||||
|
PrecomputedVertexStateSetUniformBuffer :: proc(precomputedState: ^SceGxmPrecomputedVertexState, bufferIndex: c.uint, bufferData: rawptr) -> c.int ---
|
||||||
|
GetPrecomputedFragmentStateSize :: proc(fragmentProgram: ^SceGxmFragmentProgram) -> c.uint ---
|
||||||
|
PrecomputedFragmentStateInit :: proc(precomputedState: ^SceGxmPrecomputedFragmentState, fragmentProgram: ^SceGxmFragmentProgram, memBlock: rawptr) -> c.int ---
|
||||||
|
PrecomputedFragmentStateSetDefaultUniformBuffer :: proc(precomputedState: ^SceGxmPrecomputedFragmentState, defaultBuffer: rawptr) ---
|
||||||
|
PrecomputedFragmentStateGetDefaultUniformBuffer :: proc(precomputedState: ^SceGxmPrecomputedFragmentState) -> rawptr ---
|
||||||
|
PrecomputedFragmentStateSetAllTextures :: proc(precomputedState: ^SceGxmPrecomputedFragmentState, textureArray: [^]SceGxmTexture) -> c.int ---
|
||||||
|
PrecomputedFragmentStateSetTexture :: proc(precomputedState: ^SceGxmPrecomputedFragmentState, textureIndex: c.uint, texture: ^SceGxmTexture) -> c.int ---
|
||||||
|
PrecomputedFragmentStateSetAllUniformBuffers :: proc(precomputedState: ^SceGxmPrecomputedFragmentState, bufferDataArray: ^rawptr) -> c.int ---
|
||||||
|
PrecomputedFragmentStateSetUniformBuffer :: proc(precomputedState: ^SceGxmPrecomputedFragmentState, bufferIndex: c.uint, bufferData: rawptr) -> c.int ---
|
||||||
|
PrecomputedFragmentStateSetAllAuxiliarySurfaces :: proc(precomputedState: ^SceGxmPrecomputedFragmentState, auxSurfaceArray: ^SceGxmAuxiliarySurface) -> c.int ---
|
||||||
|
GetPrecomputedDrawSize :: proc( vertexProgram: ^SceGxmVertexProgram) -> c.uint ---
|
||||||
|
PrecomputedDrawInit :: proc(precomputedDraw: ^SceGxmPrecomputedDraw, vertexProgram: ^SceGxmVertexProgram, memBlock: rawptr) -> c.int ---
|
||||||
|
PrecomputedDrawSetAllVertexStreams :: proc(precomputedDraw: ^SceGxmPrecomputedDraw, streamDataArray: ^rawptr) -> c.int ---
|
||||||
|
PrecomputedDrawSetVertexStream :: proc(precomputedDraw: ^SceGxmPrecomputedDraw, streamIndex: c.uint, streamData: rawptr) -> c.int ---
|
||||||
|
PrecomputedDrawSetParams :: proc(precomputedDraw: ^SceGxmPrecomputedDraw, primType: SceGxmPrimitiveType, indexType: SceGxmIndexFormat, indexData: rawptr, indexCount: c.uint) ---
|
||||||
|
PrecomputedDrawSetParamsInstanced :: proc(precomputedDraw: ^SceGxmPrecomputedDraw, primType: SceGxmPrimitiveType, indexType: SceGxmIndexFormat, indexData: rawptr, indexCount: c.uint, indexWrap: c.uint) ---
|
||||||
|
|
||||||
|
GetRenderTargetMemSize :: proc(params: ^SceGxmRenderTargetParams, driverMemSize: ^c.uint) -> c.int ---
|
||||||
|
CreateRenderTarget :: proc(params: ^SceGxmRenderTargetParams, renderTarget: ^^SceGxmRenderTarget) -> c.int ---
|
||||||
|
RenderTargetGetHostMem :: proc(renderTarget: ^SceGxmRenderTarget, hostMem: ^rawptr) -> c.int ---
|
||||||
|
RenderTargetGetDriverMemBlock :: proc(renderTarget: ^SceGxmRenderTarget, driverMemBlock: ^sce.UID) -> c.int ---
|
||||||
|
DestroyRenderTarget :: proc(renderTarget: ^SceGxmRenderTarget) -> c.int ---
|
||||||
|
|
||||||
|
SetUniformDataF :: proc(uniformBuffer: rawptr, parameter: ^SceGxmProgramParameter, componentOffset: c.uint, componentCount: c.uint, sourceData: ^c.float) -> c.int ---
|
||||||
|
|
||||||
|
TransferCopy :: proc(width: c.uint32_t, height: c.uint32_t, colorKeyValue: c.uint32_t, colorKeyMask: c.uint32_t, colorKeyMode: SceGxmTransferColorKeyMode, srcFormat: SceGxmTransferFormat, srcType: SceGxmTransferType, srcAddress: rawptr, srcX: c.uint32_t, srcY: c.uint32_t, srcStride: c.int32_t, destFormat: SceGxmTransferFormat, destType: SceGxmTransferType, destAddress: rawptr, destX: c.uint32_t, destY: c.uint32_t, destStride: c.int32_t, syncObject: ^SceGxmSyncObject, syncFlags: c.uint32_t, notification: ^SceGxmNotification) -> c.int ---
|
||||||
|
TransferDownscale :: proc(srcFormat: SceGxmTransferFormat, srcAddress: rawptr, srcX: c.uint, srcY: c.uint, srcWidth: c.uint, srcHeight: c.uint, srcStride: c.int, destFormat: SceGxmTransferFormat, destAddress: rawptr, destX: c.uint, destY: c.uint, destStride: c.int, syncObject: ^SceGxmSyncObject, syncFlags: c.uint, notification: ^SceGxmNotification) -> c.int ---
|
||||||
|
TransferFill :: proc(color: c.uint32_t, destFormat: SceGxmTransferFormat, destAddress: rawptr, destX: c.uint32_t, destY: c.uint32_t, destWidth: c.uint32_t, destHeight: c.uint32_t, destStride: c.int32_t, syncObject: ^SceGxmSyncObject, syncFlags: c.uint32_t, notification: ^SceGxmNotification) -> c.int ---
|
||||||
|
TransferFinish :: proc() -> c.int ---
|
||||||
|
}
|
||||||
+1429
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,54 @@
|
|||||||
|
package hid
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import hid "system:SceHid_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceHid")
|
||||||
|
foreign hid {
|
||||||
|
/**
|
||||||
|
* Enumerate hid keyboards.
|
||||||
|
*
|
||||||
|
* @param[out] handle Buffer to receive keyboard hid handles.
|
||||||
|
* @param[int] count Number of keyboards to enumerate
|
||||||
|
*/
|
||||||
|
KeyboardEnumerate :: proc(handle: [^]c.int, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get hid keyboard reports (blocking).
|
||||||
|
*
|
||||||
|
* @param[in] handle Hid handle.
|
||||||
|
* @param[in] reports Buffer to receive reports.
|
||||||
|
* @param[in] nReports Number of reports to receive.
|
||||||
|
*/
|
||||||
|
KeyboardRead :: proc(handle: sce.UInt32, reports: []^SceHidKeyboardReport, nReports: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get hid keyboard reports (non-blocking).
|
||||||
|
*
|
||||||
|
* @param[in] handle Hid handle.
|
||||||
|
* @param[in] reports Buffer to receive reports.
|
||||||
|
* @param[in] nReports Number of reports to receive.
|
||||||
|
*/
|
||||||
|
KeyboardPeek :: proc(handle: sce.UInt32, reports: [^]SceHidKeyboardReport, nReports: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enumerate hid mice.
|
||||||
|
*
|
||||||
|
* @param[out] handle Buffer to receive mouse hid handles.
|
||||||
|
* @param[int] count Number of mice to enumerate
|
||||||
|
*/
|
||||||
|
MouseEnumerate :: proc(handle: [^]c.int, count: c.int) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get hid mouse reports.
|
||||||
|
*
|
||||||
|
* @param[in] handle Hid handle.
|
||||||
|
* @param[in] reports Buffer to receive reports.
|
||||||
|
* @param[in] nReports Number of reports to receive.
|
||||||
|
*/
|
||||||
|
MouseRead :: proc(handle: sce.UInt32, reports: []^SceHidMouseReport, nReports: c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package hid
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SCE_HID_MAX_REPORT :: 16
|
||||||
|
SCE_HID_MAX_DEVICE_COUNT :: 8
|
||||||
|
|
||||||
|
SceHidKeyboardReport :: struct {
|
||||||
|
reserved: sce.UInt8,
|
||||||
|
modifiers: [2]sce.UInt8, //modifiers[0] Standard modifiers Ctrl Shift Alt, modifiers[1] Caps Lock, ..?
|
||||||
|
keycodes: [6]sce.UInt8,
|
||||||
|
reserved2: [7]sce.UInt8,
|
||||||
|
timestamp: sce.UInt64, // microseconds
|
||||||
|
}
|
||||||
|
#assert(size_of(SceHidKeyboardReport) == 0x18)
|
||||||
|
|
||||||
|
SceHidMouseReport :: struct {
|
||||||
|
buttons: sce.UInt8,
|
||||||
|
reserved: sce.UInt8,
|
||||||
|
rel_x: sce.Int16,
|
||||||
|
rel_y: sce.Int16,
|
||||||
|
wheel: sce.Int8,
|
||||||
|
tilt: sce.Int8,
|
||||||
|
timestamp: sce.UInt64, // microseconds
|
||||||
|
}
|
||||||
|
#assert(size_of(SceHidMouseReport) == 0x10)
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import http "system:SceHttp_stub"
|
||||||
|
|
||||||
|
foreign http {
|
||||||
|
HttpInit :: proc(poolSize: c.uint) -> c.int ---
|
||||||
|
HttpTerm :: proc() -> c.int ---
|
||||||
|
HttpGetMemoryPoolStats :: proc(currentStat: ^SceHttpMemoryPoolStats) -> c.int ---
|
||||||
|
|
||||||
|
HttpSetAuthInfoCallback :: proc(id: c.int, cbfunc: SceHttpAuthInfoCallback, userArg: rawptr) -> c.int ---
|
||||||
|
HttpSetAuthEnabled :: proc(id: c.int, enable: c.int) -> c.int ---
|
||||||
|
HttpGetAuthEnabled :: proc(id: c.int, enable: ^c.int) -> c.int ---
|
||||||
|
HttpSetRedirectCallback :: proc(id: c.int, cbfunc: SceHttpRedirectCallback, userArg: rawptr) -> c.int ---
|
||||||
|
HttpSetAutoRedirect :: proc(id: c.int, enable: c.int) -> c.int ---
|
||||||
|
HttpGetAutoRedirect :: proc(id: c.int, enable: ^c.int) -> c.int ---
|
||||||
|
HttpSetResolveTimeOut :: proc(id: c.int, usec: c.uint) -> c.int ---
|
||||||
|
HttpSetResolveRetry :: proc(id: c.int, retry: c.int) -> c.int ---
|
||||||
|
HttpSetConnectTimeOut :: proc(id: c.int, usec: c.uint) -> c.int ---
|
||||||
|
HttpSetSendTimeOut :: proc(id: c.int, usec: c.uint) -> c.int ---
|
||||||
|
HttpSetRecvTimeOut :: proc(id: c.int, usec: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
HttpSendRequest :: proc(reqId: c.int, postData: rawptr, size: c.uint) -> c.int ---
|
||||||
|
HttpAbortRequest :: proc(reqId: c.int) -> c.int ---
|
||||||
|
HttpGetResponseContentLength :: proc(reqId: c.int, contentLength: ^c.ulonglong) -> c.int ---
|
||||||
|
HttpGetStatusCode :: proc(reqId: c.int, statusCode: ^c.int) -> c.int ---
|
||||||
|
HttpGetAllResponseHeaders :: proc(reqId: c.int, header: ^[^]c.char, headerSize: ^c.uint) -> c.int --- // TODO: header is multipointer, cstring or double pointer to char??
|
||||||
|
HttpReadData :: proc(reqId: c.int, data: rawptr, size: c.uint) -> c.int ---
|
||||||
|
HttpAddRequestHeader :: proc(id: c.int, name: cstring, value: cstring, mode: c.uint) -> c.int ---
|
||||||
|
HttpRemoveRequestHeader :: proc(id: c.int, name: cstring) -> c.int ---
|
||||||
|
|
||||||
|
HttpParseResponseHeader :: proc(header: cstring, headerLen: c.uint, fieldStr: cstring, fieldValue: ^cstring, valueLen: ^c.uint) -> c.int ---
|
||||||
|
HttpParseStatusLine :: proc(statusLine: cstring, lineLen: c.uint, httpMajorVer: ^c.int, httpMinorVer: ^c.int, responseCode: ^c.int, reasonPhrase: ^cstring, phraseLen: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
HttpCreateTemplate :: proc(userAgent: cstring, httpVer: SceHttpVersion, autoProxyConf: SceHttpProxyMode) -> c.int ---
|
||||||
|
HttpDeleteTemplate :: proc(tmplId: c.int) -> c.int ---
|
||||||
|
HttpCreateConnection :: proc(tmplId: c.int, serverName: cstring, scheme: cstring, port: c.ushort, enableKeepalive: c.int) -> c.int ---
|
||||||
|
HttpCreateConnectionWithURL :: proc(tmplId: c.int, url: cstring, enableKeepalive: c.int) -> c.int ---
|
||||||
|
HttpDeleteConnection :: proc(connId: c.int) -> c.int ---
|
||||||
|
HttpCreateRequest :: proc(connId: c.int, method: c.int, path: cstring, contentLength: c.ulonglong) -> c.int ---
|
||||||
|
HttpCreateRequestWithURL :: proc(connId: c.int, method: c.int, url: cstring, contentLength: c.ulonglong) -> c.int ---
|
||||||
|
HttpDeleteRequest :: proc(reqId: c.int) -> c.int ---
|
||||||
|
HttpSetResponseHeaderMaxSize :: proc(id: c.int, headerSize: c.uint) -> c.int ---
|
||||||
|
HttpSetRequestContentLength :: proc(id: c.int, contentLength: c.ulonglong) -> c.int ---
|
||||||
|
|
||||||
|
// uri
|
||||||
|
HttpUriEscape :: proc(out: cstring, require: ^c.uint, prepare: c.uint, _in: cstring) -> c.int ---
|
||||||
|
HttpUriUnescape :: proc(out: cstring, require: ^c.uint, prepare: c.uint, _in: cstring) -> c.int ---
|
||||||
|
HttpUriParse :: proc(out: ^SceHttpUriElement, srcUrl: cstring, pool: rawptr, require: ^c.uint, prepare: c.uint) -> c.int ---
|
||||||
|
HttpUriBuild :: proc(out: cstring, require: ^c.uint, prepare: c.uint, srcElement: ^SceHttpUriElement, option: c.uint) -> c.int ---
|
||||||
|
HttpUriMerge :: proc(mergedUrl: cstring, url: cstring, relativeUrl: cstring, require: ^c.uint, prepare: c.uint, option: c.uint) -> c.int ---
|
||||||
|
HttpUriSweepPath :: proc(dst: cstring, src: cstring, srcSize: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
// https
|
||||||
|
/**
|
||||||
|
* Register RootCA certificate for HTTPS authentication
|
||||||
|
*
|
||||||
|
* @param[in] caCertNum - Number of elements of the list referncing to RootCA certificate
|
||||||
|
* @param[in] caList - List referencing to RootCA certificate
|
||||||
|
* @param[in] cert - Client certificate
|
||||||
|
* @param[in] privKey - Private key
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* @note <b>SCE_SYSMODULE_HTTPS</b> module must be loaded with ::sceSysmoduleLoadModule to use this function.
|
||||||
|
*/
|
||||||
|
HttpsLoadCert :: proc(caCertNum: c.int, caList: [^]SceHttpsData, cert: ^SceHttpsData, privKey: ^SceHttpsData) -> c.int ---
|
||||||
|
HttpsUnloadCert :: proc() -> c.int ---
|
||||||
|
HttpsEnableOption :: proc(sslFlags: c.uint) -> c.int ---
|
||||||
|
HttpsDisableOption :: proc(sslFlags: c.uint) -> c.int ---
|
||||||
|
HttpsGetSslError :: proc(id: c.int, errNum: ^c.int, detail: ^c.uint) -> c.int ---
|
||||||
|
HttpsSetSslCallback :: proc(id: c.int, cbfunc: SceHttpsCallback, userArg: rawptr) -> c.int ---
|
||||||
|
HttpsGetCaList :: proc(caList: ^SceHttpsCaList) -> c.int ---
|
||||||
|
HttpsFreeCaList :: proc(caList: ^SceHttpsCaList) -> c.int ---
|
||||||
|
|
||||||
|
// cookie
|
||||||
|
HttpSetCookieEnabled :: proc(id: c.int, enable: c.int) -> c.int ---
|
||||||
|
HttpGetCookieEnabled :: proc(id: c.int, enable: ^c.int) -> c.int ---
|
||||||
|
HttpGetCookie :: proc(url: cstring, cookie: cstring, cookieLength: ^c.uint, prepare: c.uint, secure: c.int) -> c.int ---
|
||||||
|
HttpAddCookie :: proc(url: cstring, cookie: cstring, cookieLength: c.uint) -> c.int ---
|
||||||
|
HttpSetCookieRecvCallback :: proc(id: c.int, cbfunc: SceHttpCookieRecvCallback, userArg: rawptr) -> c.int ---
|
||||||
|
HttpSetCookieSendCallback :: proc(id: c.int, cbfunc: SceHttpCookieSendCallback, userArg: rawptr) -> c.int ---
|
||||||
|
}
|
||||||
+270
@@ -0,0 +1,270 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import "base:builtin"
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
SCE_HTTP_DEFAULT_RESOLVER_TIMEOUT : c.uint : (1 * 1000 * 1000)
|
||||||
|
SCE_HTTP_DEFAULT_RESOLVER_RETRY : c.uint : (5)
|
||||||
|
SCE_HTTP_DEFAULT_CONNECT_TIMEOUT : c.uint : (30 * 1000 * 1000)
|
||||||
|
SCE_HTTP_DEFAULT_SEND_TIMEOUT : c.uint : (120 * 1000 * 1000)
|
||||||
|
SCE_HTTP_DEFAULT_RECV_TIMEOUT : c.uint : (120 * 1000 * 1000)
|
||||||
|
SCE_HTTP_DEFAULT_RECV_BLOCK_SIZE : c.uint : (1500)
|
||||||
|
SCE_HTTP_DEFAULT_RESPONSE_HEADER_MAX : c.uint : (5000)
|
||||||
|
SCE_HTTP_DEFAULT_REDIRECT_MAX : c.uint : (6)
|
||||||
|
SCE_HTTP_DEFAULT_TRY_AUTH_MAX : c.uint : (6)
|
||||||
|
|
||||||
|
SCE_HTTP_INVALID_ID :: 0
|
||||||
|
|
||||||
|
// TODO: this should be a c.int
|
||||||
|
SceHttpErrorCode :: enum i64 {
|
||||||
|
BEFORE_INIT = 0x80431001,
|
||||||
|
ALREADY_INITED = 0x80431020,
|
||||||
|
BUSY = 0x80431021,
|
||||||
|
OUT_OF_MEMORY = 0x80431022,
|
||||||
|
NOT_FOUND = 0x80431025,
|
||||||
|
INVALID_VERSION = 0x8043106A,
|
||||||
|
INVALID_ID = 0x80431100,
|
||||||
|
OUT_OF_SIZE = 0x80431104,
|
||||||
|
INVALID_VALUE = 0x804311FE,
|
||||||
|
INVALID_URL = 0x80433060,
|
||||||
|
UNKNOWN_SCHEME = 0x80431061,
|
||||||
|
NETWORK = 0x80431063,
|
||||||
|
BAD_RESPONSE = 0x80431064,
|
||||||
|
BEFORE_SEND = 0x80431065,
|
||||||
|
AFTER_SEND = 0x80431066,
|
||||||
|
TIMEOUT = 0x80431068,
|
||||||
|
UNKOWN_AUTH_TYPE = 0x80431069,
|
||||||
|
UNKNOWN_METHOD = 0x8043106B,
|
||||||
|
READ_BY_HEAD_METHOD = 0x8043106F,
|
||||||
|
NOT_IN_COM = 0x80431070,
|
||||||
|
NO_CONTENT_LENGTH = 0x80431071,
|
||||||
|
CHUNK_ENC = 0x80431072,
|
||||||
|
TOO_LARGE_RESPONSE_HEADER = 0x80431073,
|
||||||
|
SSL = 0x80431075,
|
||||||
|
ABORTED = 0x80431080,
|
||||||
|
UNKNOWN = 0x80431081,
|
||||||
|
PARSE_HTTP_NOT_FOUND = 0x80432025,
|
||||||
|
PARSE_HTTP_INVALID_RESPONSE = 0x80432060,
|
||||||
|
PARSE_HTTP_INVALID_VALUE = 0x804321FE,
|
||||||
|
RESOLVER_EPACKET = 0x80436001,
|
||||||
|
RESOLVER_ENODNS = 0x80436002,
|
||||||
|
RESOLVER_ETIMEDOUT = 0x80436003,
|
||||||
|
RESOLVER_ENOSUPPORT = 0x80436004,
|
||||||
|
RESOLVER_EFORMAT = 0x80436005,
|
||||||
|
RESOLVER_ESERVERFAILURE = 0x80436006,
|
||||||
|
RESOLVER_ENOHOST = 0x80436007,
|
||||||
|
RESOLVER_ENOTIMPLEMENTED = 0x80436008,
|
||||||
|
RESOLVER_ESERVERREFUSED = 0x80436009,
|
||||||
|
RESOLVER_ENORECORD = 0x8043600A,
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: this should be a c.int
|
||||||
|
SceHttpsErrorCode :: enum u32 {
|
||||||
|
CERT = 0x80435060,
|
||||||
|
HANDSHAKE = 0x80435061,
|
||||||
|
IO = 0x80435062,
|
||||||
|
INTERNAL = 0x80435063,
|
||||||
|
PROXY = 0x80435064,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpsSslErrorCode :: enum c.uint {
|
||||||
|
INTERNAL = (0x01),
|
||||||
|
INVALID_CERT = (0x02),
|
||||||
|
CN_CHECK = (0x04),
|
||||||
|
NOT_AFTER_CHECK = (0x08),
|
||||||
|
NOT_BEFORE_CHECK = (0x10),
|
||||||
|
UNKNOWN_CA = (0x20),
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_HTTP_ENABLE :: (1)
|
||||||
|
SCE_HTTP_DISABLE :: (0)
|
||||||
|
|
||||||
|
SCE_HTTP_USERNAME_MAX_SIZE :: 256
|
||||||
|
SCE_HTTP_PASSWORD_MAX_SIZE :: 256
|
||||||
|
|
||||||
|
SceHttpStatusCode :: enum c.int {
|
||||||
|
CONTINUE = 100,
|
||||||
|
SWITCHING_PROTOCOLS = 101,
|
||||||
|
PROCESSING = 102,
|
||||||
|
OK = 200,
|
||||||
|
CREATED = 201,
|
||||||
|
ACCEPTED = 202,
|
||||||
|
NON_AUTHORITATIVE_INFORMATION = 203,
|
||||||
|
NO_CONTENT = 204,
|
||||||
|
RESET_CONTENT = 205,
|
||||||
|
PARTIAL_CONTENT = 206,
|
||||||
|
MULTI_STATUS = 207,
|
||||||
|
MULTIPLE_CHOICES = 300,
|
||||||
|
MOVED_PERMANENTLY = 301,
|
||||||
|
FOUND = 302,
|
||||||
|
SEE_OTHER = 303,
|
||||||
|
NOT_MODIFIED = 304,
|
||||||
|
USE_PROXY = 305,
|
||||||
|
TEMPORARY_REDIRECT = 307,
|
||||||
|
BAD_REQUEST = 400,
|
||||||
|
UNAUTHORIZED = 401,
|
||||||
|
PAYMENT_REQUIRED = 402,
|
||||||
|
FORBIDDDEN = 403,
|
||||||
|
NOT_FOUND = 404,
|
||||||
|
METHOD_NOT_ALLOWED = 405,
|
||||||
|
NOT_ACCEPTABLE = 406,
|
||||||
|
PROXY_AUTHENTICATION_REQUIRED = 407,
|
||||||
|
REQUEST_TIME_OUT = 408,
|
||||||
|
CONFLICT = 409,
|
||||||
|
GONE = 410,
|
||||||
|
LENGTH_REQUIRED = 411,
|
||||||
|
PRECONDITION_FAILED = 412,
|
||||||
|
REQUEST_ENTITY_TOO_LARGE = 413,
|
||||||
|
REQUEST_URI_TOO_LARGE = 414,
|
||||||
|
UNSUPPORTED_MEDIA_TYPE = 415,
|
||||||
|
REQUEST_RANGE_NOT_SATISFIBLE = 416,
|
||||||
|
EXPECTATION_FAILED = 417,
|
||||||
|
UNPROCESSABLE_ENTITY = 422,
|
||||||
|
LOCKED = 423,
|
||||||
|
FAILED_DEPENDENCY = 424,
|
||||||
|
UPGRADE_REQUIRED = 426,
|
||||||
|
INTERNAL_SERVER_ERROR = 500,
|
||||||
|
NOT_IMPLEMENTED = 501,
|
||||||
|
BAD_GATEWAY = 502,
|
||||||
|
SERVICE_UNAVAILABLE = 503,
|
||||||
|
GATEWAY_TIME_OUT = 504,
|
||||||
|
HTTP_VERSION_NOT_SUPPORTED = 505,
|
||||||
|
INSUFFICIENT_STORAGE = 507,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpUriBuildType :: enum c.int {
|
||||||
|
WITH_SCHEME = 0x01,
|
||||||
|
WITH_HOSTNAME = 0x02,
|
||||||
|
WITH_PORT = 0x04,
|
||||||
|
WITH_PATH = 0x08,
|
||||||
|
WITH_USERNAME = 0x10,
|
||||||
|
WITH_PASSWORD = 0x20,
|
||||||
|
WITH_QUERY = 0x40,
|
||||||
|
WITH_FRAGMENT = 0x80,
|
||||||
|
WITH_ALL = 0xFFFF,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpsFlag :: enum c.uint {
|
||||||
|
SERVER_VERIFY = (0x01),
|
||||||
|
CLIENT_VERIFY = (0x02),
|
||||||
|
CN_CHECK = (0x04),
|
||||||
|
NOT_AFTER_CHECK = (0x08),
|
||||||
|
NOT_BEFORE_CHECK = (0x10),
|
||||||
|
KNOWN_CA_CHECK = (0x20),
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpMemoryPoolStats :: struct {
|
||||||
|
poolSize: c.uint,
|
||||||
|
maxInuseSize: c.uint,
|
||||||
|
currentInuseSize: c.uint,
|
||||||
|
reserved: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceHttpMemoryPoolStats) == 0x10)
|
||||||
|
|
||||||
|
SceHttpMethods :: enum c.int {
|
||||||
|
GET,
|
||||||
|
POST,
|
||||||
|
HEAD,
|
||||||
|
OPTIONS,
|
||||||
|
PUT,
|
||||||
|
DELETE,
|
||||||
|
TRACE,
|
||||||
|
CONNECT,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpUriElement :: struct {
|
||||||
|
opaque: c.int, // 4
|
||||||
|
scheme: cstring,
|
||||||
|
username: cstring,
|
||||||
|
password: cstring,
|
||||||
|
hostname: cstring,
|
||||||
|
path: cstring,
|
||||||
|
query: cstring,
|
||||||
|
fragment: cstring,
|
||||||
|
port: c.ushort, // 2
|
||||||
|
reserved: [10]c.uchar, // 10
|
||||||
|
}
|
||||||
|
when size_of(builtin.rawptr) == 4 {
|
||||||
|
#assert(size_of(SceHttpUriElement) == 0x2C)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpVersion :: enum c.int {
|
||||||
|
VERSION_1_0 = 1,
|
||||||
|
VERSION_1_1,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpProxyMode :: enum c.int {
|
||||||
|
AUTO,
|
||||||
|
MANUAL,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpAddHeaderMode :: enum c.int {
|
||||||
|
OVERWRITE,
|
||||||
|
ADD,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpAuthType :: enum c.int {
|
||||||
|
BASIC,
|
||||||
|
DIGEST,
|
||||||
|
RESERVED0,
|
||||||
|
RESERVED1,
|
||||||
|
RESERVED2,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpSslVersion :: enum c.int {
|
||||||
|
SSLV23,
|
||||||
|
SSLV2,
|
||||||
|
SSLV3,
|
||||||
|
TLSV1,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpsData :: struct {
|
||||||
|
ptr: ^c.char, // TODO: multipointer or maybe cstring??
|
||||||
|
size: c.uint,
|
||||||
|
}
|
||||||
|
when size_of(builtin.rawptr) == 4 {
|
||||||
|
#assert(size_of(SceHttpsData) == 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceHttpsCaList :: struct {
|
||||||
|
caCerts: ^rawptr,
|
||||||
|
caNum: c.int,
|
||||||
|
}
|
||||||
|
when size_of(builtin.rawptr) == 4 {
|
||||||
|
#assert(size_of(SceHttpsCaList) == 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* callbacks */
|
||||||
|
|
||||||
|
SceHttpAuthInfoCallback :: #type ^proc(
|
||||||
|
request: c.int,
|
||||||
|
authType: SceHttpAuthType,
|
||||||
|
realm: cstring,
|
||||||
|
username: cstring,
|
||||||
|
password: cstring,
|
||||||
|
needEntity: c.int,
|
||||||
|
entityBody: ^[^]c.uchar,
|
||||||
|
entitySize: ^c.uint,// TODO:??
|
||||||
|
save: ^c.int,
|
||||||
|
userArg: rawptr,
|
||||||
|
) -> c.int
|
||||||
|
|
||||||
|
SceHttpRedirectCallback :: #type ^proc(
|
||||||
|
request: c.int,
|
||||||
|
statusCode: c.int,
|
||||||
|
method: ^c.int,
|
||||||
|
location: cstring,
|
||||||
|
userArg: rawptr,
|
||||||
|
) -> c.int
|
||||||
|
|
||||||
|
SceHttpsCallback :: #type ^proc(verifyEsrr: c.uint, sslCert: []rawptr, certNum: c.int, userArg: rawptr) -> c.int
|
||||||
|
|
||||||
|
SceHttpCookieRecvCallback :: #type ^proc(
|
||||||
|
request: c.int,
|
||||||
|
url: cstring,
|
||||||
|
cookieHeader: cstring,
|
||||||
|
headerLen: c.uint,
|
||||||
|
userArg: rawptr,
|
||||||
|
)
|
||||||
|
|
||||||
|
SceHttpCookieSendCallback :: #type ^proc(request: c.int, url: cstring, cookieHeader: cstring, userArg: rawptr)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package ime
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceClib "../Clib"
|
||||||
|
import sceCommonDialog "../CommonDialog"
|
||||||
|
|
||||||
|
foreign import ime "system:SceIme_stub"
|
||||||
|
|
||||||
|
sceImeDialogParamInit :: #force_inline proc(param: ^SceImeDialogParam) {
|
||||||
|
sceClib.Memset(param, 0x0, size_of(SceImeDialogParam))
|
||||||
|
sceCommonDialog._sceCommonDialogSetMagicNumber(¶m.commonParam)
|
||||||
|
param.sdkVersion = sce.PSP2_SDK_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
sceImeParamInit :: #force_inline proc(param: ^SceImeParam) {
|
||||||
|
sceClib.Memset(param, 0x0, size_of(SceImeParam))
|
||||||
|
param.sdkVersion = sce.PSP2_SDK_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@(link_prefix = "sceIme")
|
||||||
|
foreign ime {
|
||||||
|
sceImeDialogInit :: proc(param: ^SceImeDialogParam) -> sce.Int32 ---
|
||||||
|
sceImeDialogGetStatus :: proc() -> sceCommonDialog.SceCommonDialogStatus ---
|
||||||
|
sceImeDialogAbort :: proc() -> sce.Int32 ---
|
||||||
|
sceImeDialogGetResult :: proc(result: ^SceImeDialogResult) -> sce.Int32 ---
|
||||||
|
sceImeDialogTerm :: proc() -> sce.Int32 ---
|
||||||
|
|
||||||
|
sceImeOpen :: proc(param: ^SceImeParam) -> sce.Int32 ---
|
||||||
|
sceImeUpdate :: proc() -> sce.Int32 ---
|
||||||
|
sceImeSetText :: proc(text: [^]sce.WChar16, length: sce.UInt32) -> sce.Int32 ---
|
||||||
|
sceImeSetCaret :: proc(caret: ^SceImeCaret) -> sce.Int32 ---
|
||||||
|
sceImeSetPreeditGeometry :: proc(preedit: ^SceImePreeditGeometry) -> sce.Int32 ---
|
||||||
|
sceImeClose :: proc() -> sce.Int32 ---
|
||||||
|
}
|
||||||
+233
@@ -0,0 +1,233 @@
|
|||||||
|
package ime
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceCommonDialog "../CommonDialog"
|
||||||
|
|
||||||
|
SCE_IME_DIALOG_MAX_TITLE_LENGTH :: 128
|
||||||
|
SCE_IME_DIALOG_MAX_TEXT_LENGTH :: 2048
|
||||||
|
|
||||||
|
SCE_IME_WORK_BUFFER_SIZE :: (20*1024)
|
||||||
|
|
||||||
|
SCE_IME_MAX_PREEDIT_LENGTH :: (30)
|
||||||
|
SCE_IME_MAX_TEXT_LENGTH :: (2048)
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceImeDialogErrorCode :: enum c.uint {
|
||||||
|
PARAM = 0x80102001,
|
||||||
|
INTERNAL = 0x80102002,
|
||||||
|
INVALID_DIALOG_MODE = 0x80102003,
|
||||||
|
INVALID_TEXT_BOX_MODE = 0x80102004,
|
||||||
|
INVALID_TITLE = 0x80102005
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeDialogDialogMode :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
WITH_CANCEL = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeDialogTextboxMode :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
PASSWORD = 1,
|
||||||
|
WITH_CLEAR = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeDialogButton :: enum c.int {
|
||||||
|
NONE = 0,
|
||||||
|
CLOSE = 1,
|
||||||
|
ENTER = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeDialogParam :: struct {
|
||||||
|
sdkVersion: sce.UInt32,
|
||||||
|
|
||||||
|
inputMethod: sce.UInt32,
|
||||||
|
supportedLanguages: sce.UInt64, //!< Dialog languages (One or more ::SceImeLanguage)
|
||||||
|
languagesForced: sce.Bool,
|
||||||
|
type: sce.UInt32, //!< Dialog type (One of ::SceImeType)
|
||||||
|
option: sce.UInt32, //!< Dialog options (One or more ::SceImeOption)
|
||||||
|
filter: SceImeTextFilter,
|
||||||
|
|
||||||
|
dialogMode: sce.UInt32, //!< Dialog mode (One of ::SceImeDialogDialogMode)
|
||||||
|
textBoxMode: sce.UInt32, //!< Textbox mode (One of ::SceImeDialogTextboxMode)
|
||||||
|
title: [^]sce.WChar16,
|
||||||
|
maxTextLength: sce.UInt32,
|
||||||
|
initialText: [^]sce.WChar16,
|
||||||
|
inputTextBuffer: [^]sce.WChar16,
|
||||||
|
|
||||||
|
commonParam: sceCommonDialog.SceCommonDialogParam,
|
||||||
|
|
||||||
|
enterLabel: sce.UChar8,
|
||||||
|
reserved: [35]sce.Char8,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceImeDialogParam) == 0xA8)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeDialogResult :: struct {
|
||||||
|
result: sce.Int32,
|
||||||
|
button: sce.Int32,
|
||||||
|
reserved: [28]sce.Char8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceImeDialogResult) == 0x24)
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceImeErrorCode :: enum c.uint {
|
||||||
|
ALREADY_OPENED = 0x80100700,
|
||||||
|
NOT_OPENED = 0x80100701,
|
||||||
|
INVALID_POINTER = 0x80100702,
|
||||||
|
INVALID_PARAM = 0x80100703,
|
||||||
|
NO_MEMORY = 0x80100704,
|
||||||
|
CONNECTION_FAILED = 0x80100705,
|
||||||
|
INVALID_TEXT = 0x80100706,
|
||||||
|
TOO_MANY_REQUESTS = 0x80100707,
|
||||||
|
INVALID_SIZE = 0x80100710,
|
||||||
|
INVALID_INPUT_METHOD = 0x80100712,
|
||||||
|
INVALID_SUPPORTED_LANGUAGES = 0x80100713,
|
||||||
|
INVALID_TYPE = 0x80100714,
|
||||||
|
INVALID_OPTION = 0x80100715,
|
||||||
|
INVALID_WORK = 0x80100716,
|
||||||
|
INVALID_ARG = 0x80100717,
|
||||||
|
INVALID_HANDLER = 0x80100718,
|
||||||
|
INVALID_MAX_TEXT_LENGTH = 0x80100719,
|
||||||
|
INVALID_INPUT_TEXT_BUFFER = 0x8010071a,
|
||||||
|
INVALID_RESERVED = 0x8010071b,
|
||||||
|
INVALID_ENTER_LABEL = 0x8010071c,
|
||||||
|
INTERNAL = 0x80100750
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeLanguage :: enum c.ulonglong {
|
||||||
|
DANISH = 0x00000001,
|
||||||
|
GERMAN = 0x00000002,
|
||||||
|
ENGLISH = 0x00000004,
|
||||||
|
SPANISH = 0x00000008,
|
||||||
|
FRENCH = 0x00000010,
|
||||||
|
ITALIAN = 0x00000020,
|
||||||
|
DUTCH = 0x00000040,
|
||||||
|
NORWEGIAN = 0x00000080,
|
||||||
|
POLISH = 0x00000100,
|
||||||
|
PORTUGUESE = 0x00000200,
|
||||||
|
RUSSIAN = 0x00000400,
|
||||||
|
FINNISH = 0x00000800,
|
||||||
|
SWEDISH = 0x00001000,
|
||||||
|
JAPANESE = 0x00002000,
|
||||||
|
KOREAN = 0x00004000,
|
||||||
|
SIMPLIFIED_CHINESE = 0x00008000,
|
||||||
|
TRADITIONAL_CHINESE = 0x00010000,
|
||||||
|
PORTUGUESE_BR = 0x00020000,
|
||||||
|
ENGLISH_GB = 0x00040000,
|
||||||
|
TURKISH = 0x00080000,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeType :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
BASIC_LATIN = 1,
|
||||||
|
NUMBER = 2,
|
||||||
|
EXTENDED_NUMBER = 3,
|
||||||
|
URL = 4,
|
||||||
|
MAIL = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeEnterLabel :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
SEND = 1,
|
||||||
|
SEARCH = 2,
|
||||||
|
GO = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeOption :: enum c.int {
|
||||||
|
MULTILINE = 0x01,
|
||||||
|
NO_AUTO_CAPITALIZATION = 0x02,
|
||||||
|
NO_ASSISTANCE = 0x04
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeEvent :: enum c.int {
|
||||||
|
OPEN = 0,
|
||||||
|
UPDATE_TEXT = 1,
|
||||||
|
UPDATE_CARET = 2,
|
||||||
|
CHANGE_SIZE = 3,
|
||||||
|
PRESS_CLOSE = 4,
|
||||||
|
PRESS_ENTER = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeRect :: struct {
|
||||||
|
x: sce.UInt32,
|
||||||
|
y: sce.UInt32,
|
||||||
|
width: sce.UInt32,
|
||||||
|
height: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceImeRect) == 0x10)
|
||||||
|
|
||||||
|
SceImeEditText :: struct {
|
||||||
|
preeditIndex: sce.UInt32,
|
||||||
|
preeditLength: sce.UInt32,
|
||||||
|
caretIndex: sce.UInt32,
|
||||||
|
str: [^]sce.WChar16,
|
||||||
|
editIndex: sce.UInt32,
|
||||||
|
editLengthChange: sce.Int32,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceImeEditText) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceImeEventParam :: struct #raw_union {
|
||||||
|
rect: SceImeRect,
|
||||||
|
text: SceImeEditText,
|
||||||
|
caretIndex: sce.UInt32,
|
||||||
|
reserved: [40]sce.UChar8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceImeEventParam) == 0x28)
|
||||||
|
|
||||||
|
SceImeEventData :: struct #packed {
|
||||||
|
id: sce.UInt32,
|
||||||
|
param: SceImeEventParam,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceImeEventData) == 0x2C)
|
||||||
|
|
||||||
|
SceImeCaret :: struct {
|
||||||
|
x: sce.UInt32,
|
||||||
|
y: sce.UInt32,
|
||||||
|
height: sce.UInt32,
|
||||||
|
index: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceImeCaret) == 0x10)
|
||||||
|
|
||||||
|
SceImePreeditGeometry :: struct {
|
||||||
|
x: sce.UInt32,
|
||||||
|
y: sce.UInt32,
|
||||||
|
height: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceImePreeditGeometry) == 0xC)
|
||||||
|
|
||||||
|
SceImeTextFilter :: #type ^proc(
|
||||||
|
outText: [^]sce.WChar16,
|
||||||
|
outTextLength: ^sce.UInt32,
|
||||||
|
srcText: [^]sce.WChar16,
|
||||||
|
srcTextLength: sce.UInt32) -> sce.UInt32
|
||||||
|
SceImeEventHandler :: #type ^proc(arg: rawptr, e: ^SceImeEventData)
|
||||||
|
|
||||||
|
SceImeParam :: struct {
|
||||||
|
sdkVersion: sce.UInt32,
|
||||||
|
|
||||||
|
inputMethod: sce.UInt32,
|
||||||
|
supportedLanguages: sce.UInt64, //!< Dialog languages (One or more ::SceImeLanguage)
|
||||||
|
languagesForced: sce.Bool,
|
||||||
|
type: sce.UInt32, //!< Dialog type (One of ::SceImeType)
|
||||||
|
option: sce.UInt32, //!< Dialog options (One or more ::SceImeOption)
|
||||||
|
|
||||||
|
work: rawptr,
|
||||||
|
arg: rawptr,
|
||||||
|
handler: SceImeEventHandler,
|
||||||
|
filter: SceImeTextFilter,
|
||||||
|
|
||||||
|
initialText: [^]sce.WChar16,
|
||||||
|
maxTextLength: sce.UInt32,
|
||||||
|
inputTextBuffer: [^]sce.WChar16,
|
||||||
|
|
||||||
|
enterLabel: sce.UChar8,
|
||||||
|
reserved: [7]sce.UChar8,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceImeParam) == 0x40)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package incomingdialog
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceClib "../Clib"
|
||||||
|
|
||||||
|
foreign import incomingdialog "system:SceIncomingDialog_stub"
|
||||||
|
|
||||||
|
sceIncomingDialogParamInit :: #force_inline proc(dialogParam: ^SceIncomingDialogParam) {
|
||||||
|
sceClib.Memset(dialogParam, 0x0, size_of(SceIncomingDialogParam))
|
||||||
|
dialogParam.sdkVersion = sce.PSP2_SDK_VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "sceIncomingDialog")
|
||||||
|
foreign incomingdialog {
|
||||||
|
/**
|
||||||
|
* Initialize incoming dialog library, init_type must be 1.
|
||||||
|
*/
|
||||||
|
Initialize :: proc(init_type: c.int) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open incoming dialog.
|
||||||
|
*/
|
||||||
|
Open :: proc(dialogParam: ^SceIncomingDialogParam) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns current status of incoming dialog.
|
||||||
|
*/
|
||||||
|
GetStatus :: proc() -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force exit to LiveArea and show dialog window
|
||||||
|
*/
|
||||||
|
SwitchToDialog :: proc() -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close incoming dialog.
|
||||||
|
*/
|
||||||
|
Close :: proc() -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finish incoming dialog library
|
||||||
|
*/
|
||||||
|
Finish :: proc() -> sce.Int32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package incomingdialog
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dialog status
|
||||||
|
*/
|
||||||
|
SceIncomingDialogStatus :: enum c.int {
|
||||||
|
NOT_RUNNING,
|
||||||
|
ACCEPTED,
|
||||||
|
RUNNING,
|
||||||
|
REJECTED,
|
||||||
|
CLOSED,
|
||||||
|
BUSY,
|
||||||
|
TIMEOUT
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error Codes
|
||||||
|
*/
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceIncomingDialogErrorCode :: enum c.uint {
|
||||||
|
INVALID_ARG = 0x80106201
|
||||||
|
}
|
||||||
|
|
||||||
|
SceIncomingDialogParam :: struct {
|
||||||
|
sdkVersion: sce.Int32,
|
||||||
|
audioPath: [0x80]sce.Char8, //Path to audio file that will be played during dialog, .mp3, .at9, m4a. Can be NULL
|
||||||
|
titleid: [0x10]sce.Char8, //TitleId of the application to open when "accept" button has been pressed. Can be NULL
|
||||||
|
unk_BC: sce.Int32, //Can be set to 0
|
||||||
|
dialogTimer: sce.UInt32, //Time to show dialog in seconds
|
||||||
|
reserved1: [0x3E]sce.Char8,
|
||||||
|
buttonRightText: [0x1F]sce.WChar16, //Text for "accept" button
|
||||||
|
separator0: sce.Int16, //must be 0
|
||||||
|
buttonLeftText: [0x1F]sce.WChar16, //Text for "reject" button. If NULL, only "accept" button will be created
|
||||||
|
separator1: sce.Int16, //must be 0
|
||||||
|
dialogText: [0x80]sce.WChar16, //Text for dialog window, also shared with notification
|
||||||
|
separator2: sce.Int16, //must be 0
|
||||||
|
}
|
||||||
|
#assert(size_of(SceIncomingDialogParam) == 0x25C)
|
||||||
|
|
||||||
+337
@@ -0,0 +1,337 @@
|
|||||||
|
package io
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import libkernel "system:SceLibKernel_stub"
|
||||||
|
foreign import iofilemgr "system:SceIofilemgr_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceIo")
|
||||||
|
foreign libkernel {
|
||||||
|
/**
|
||||||
|
* Send a devctl command to a device.
|
||||||
|
*
|
||||||
|
* @par Example: Sending a simple command to a device
|
||||||
|
* @code
|
||||||
|
* SceIoDevInfo info
|
||||||
|
* sceIoDevctl :: proc("ux00x3001: :",, NULL, 0, &info, sizeof(SceIoDevInfo))
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @ :: procparam dev- String: for the device to send the devctl to (e.g. "ux0:")
|
||||||
|
* @param cmd - The command to send to the device
|
||||||
|
* @param indata - A data block to send to the device, if NULL sends no data
|
||||||
|
* @param inlen - Length of indata, if 0 sends no data
|
||||||
|
* @param outdata - A data block to receive the result of a command, if NULL receives no -> c.int ---
|
||||||
|
* @param outlen - Length of outdata, if 0 receives no data
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
Devctl :: proc(dev: cstring, cmd: c.uint, indata: rawptr, inlen: c.int, outdata: rawptr, outlen: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform an ioctl on a device.
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor to ioctl to
|
||||||
|
* @param cmd - The command to send to the device
|
||||||
|
* @param indata - A data block to send to the device, if NULL :: procno: ^sends data
|
||||||
|
* @param - Length of indata, if 0 sends no data -> c.int ---
|
||||||
|
* @param outdata - A data block to receive the result of a command, if NULL receives no data
|
||||||
|
* @param outlen - Length of outdata, if 0 receives no data
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
Ioctl :: proc(fd: sce.UID, cmd: c.uint, indata: rawptr, inlen: c.int, outdata: rawptr, outlen: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform an ioctl :: proc a device: c.in. asynchronous: ^)
|
||||||
|
-> c.int ---
|
||||||
|
* @param fd - Opened file descriptor to ioctl to
|
||||||
|
* @param cmd - The command to send to the device
|
||||||
|
* @param indata - A data block to send to the device, if NULL sends no data
|
||||||
|
* @param inlen - Length of indata, if 0 sends no data
|
||||||
|
* @param outdata - A data block to receive the result of a command, if NULL receives no data
|
||||||
|
* @param outlen - Length of outdata, if 0 receives no data
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
IoctlAsync :: proc(fd: sce.UID, cmd: c.uint, indata: rawptr, inlen: c.int, outdata: rawptr, outlen: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a directory
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* int dfd
|
||||||
|
* dfd = sceIoDopen("device:/")
|
||||||
|
* if(dfd >= 0)
|
||||||
|
* { Do something with the file descriptor }
|
||||||
|
* @endcode
|
||||||
|
* @param dirname - The directory to open for reading.
|
||||||
|
* @return If >= 0 then a valid file descriptor, otherwise a Sony error code.
|
||||||
|
*/
|
||||||
|
Dopen :: proc(dirname: cstring) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an entry from an opened file descriptor.
|
||||||
|
*
|
||||||
|
* @param fd - Already opened file descriptor (using ::sceIoDopen)
|
||||||
|
* @param dir - Pointer to a ::SceIoDirent structure to hold the file information
|
||||||
|
*
|
||||||
|
* @return Read status
|
||||||
|
* - 0 - No more directory entries left
|
||||||
|
* - > 0 - More directory entries to go
|
||||||
|
* - < 0 - Error
|
||||||
|
*/
|
||||||
|
Dread :: proc(fd: sce.UID, dir: ^SceIoDirent) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close an opened directory file descriptor
|
||||||
|
*
|
||||||
|
* @param fd - Already opened file descriptor (using ::sceIoDopen)
|
||||||
|
* @return < 0 on error
|
||||||
|
*/
|
||||||
|
Dclose :: proc(fd: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a directory file
|
||||||
|
*
|
||||||
|
* @param dir - The path to the directory
|
||||||
|
* @param mode - Access mode (One or more ::SceIoAccessMode).
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
Mkdir :: proc(dir: cstring, mode: SceIoAccessMode) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a directory file
|
||||||
|
*
|
||||||
|
* @param path - Removes a directory file pointed by the string path
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
Rmdir :: proc(path: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the status of a file.
|
||||||
|
*
|
||||||
|
* @param file - The path to the file.
|
||||||
|
* @param stat - A pointer to a ::SceIoStat structure.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
Getstat :: proc(file: cstring, stat: ^SceIoStat) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the status of a file descriptor.
|
||||||
|
*
|
||||||
|
* @param fd - The file descriptor.
|
||||||
|
* @param stat - A pointer to a ::SceIoStat structure.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
GetstatByFd :: proc(fd: sce.UID, stat: ^SceIoStat) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the status of a file.
|
||||||
|
*
|
||||||
|
* @param file - The path to the file.
|
||||||
|
* @param stat - A pointer to a ::SceIoStat structure.
|
||||||
|
* @param bits - Bitmask defining which bits to change.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
Chstat :: proc(file: cstring, stat: ^SceIoStat, bits: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the status of a file descriptor.
|
||||||
|
*
|
||||||
|
* @param fd - The file descriptor.
|
||||||
|
* @param stat - A pointer to an io_stat_t structure.
|
||||||
|
* @param bits - Bitmask defining which bits to change.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
ChstatByFd :: proc(fd: sce.UID, buf: ^SceIoStat, cbit: c.uint) -> c.int ---
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "sceIo")
|
||||||
|
foreign iofilemgr {
|
||||||
|
/**
|
||||||
|
* Open or create a file for reading or writing
|
||||||
|
*
|
||||||
|
* @par Example1: Open a file for reading
|
||||||
|
* @code
|
||||||
|
* if((fd = sceIoOpen("device:/path/to/file", SCE_O_RDONLY, 0777) < 0) {
|
||||||
|
* // error code in fd, for example no open filehandle left (0x80010018)
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
|
* @par Example2: Open a file for writing, creating it if it doesn't exist
|
||||||
|
* @code
|
||||||
|
* if((fd = sceIoOpen("device:/path/to/file", SCE_O_WRONLY|SCE_O_CREAT, 0777) < 0) {
|
||||||
|
* // error code in fd, for example no open filehandle left (0x80010018)
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param file - Pointer to a string holding the name of the file to open.
|
||||||
|
* @param flags - Libc styled flags that are or'ed together (One or more ::SceIoMode).
|
||||||
|
* @param mode - One or more ::SceIoAccessMode flags or'ed together. Can also use Unix absolute permissions.
|
||||||
|
* @return > 0 is a valid file handle, < 0 on error.
|
||||||
|
*/
|
||||||
|
Open :: proc(file: cstring, flags: SceIoMode, mode: sce.Mode) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a descriptor
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* sceIoClose(fd)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param fd - File descriptor to close
|
||||||
|
* @return < 0 on error
|
||||||
|
*/
|
||||||
|
Close :: proc(fd: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read input
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* bytes_read = sceIoRead(fd, data, 100)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor to read from
|
||||||
|
* @param buf - Pointer to the buffer where the read data will be placed
|
||||||
|
* @param nbyte - Size of the read in bytes
|
||||||
|
*
|
||||||
|
* @return The number of bytes read
|
||||||
|
*/
|
||||||
|
Read :: proc(fd: sce.UID, buf: rawptr, nbyte: sce.Size) -> sce.SSize ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read input at offset
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* bytes_read = sceIoPread(fd, data, 100, 0x1000)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor to read from
|
||||||
|
* @param data - Pointer to the buffer where the read data will be placed
|
||||||
|
* @param size - Size of the read in bytes
|
||||||
|
* @param offset - Offset to read
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
Pread :: proc(fd: sce.UID, data: rawptr, size: sce.Size, offset: sce.Off) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write output
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* bytes_written = sceIoWrite(fd, data, 100)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor to write to
|
||||||
|
* @param buf - Pointer to the data to write
|
||||||
|
* @param nbyte - Size of data to write
|
||||||
|
*
|
||||||
|
* @return The number of bytes written
|
||||||
|
*/
|
||||||
|
Write :: proc(fd: sce.UID, buf: rawptr, nbyte: sce.Size) -> sce.SSize ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write output at offset
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* bytes_written = sceIoPwrite(fd, data, 100, 0x1000)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor to write to
|
||||||
|
* @param data - Pointer to the data to write
|
||||||
|
* @param size - Size of data to write
|
||||||
|
* @param offset - Offset to write
|
||||||
|
*
|
||||||
|
* @return The number of bytes written
|
||||||
|
*/
|
||||||
|
Pwrite :: proc(fd: sce.UID, data: rawptr, size: sce.Size, offset: sce.Off) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reposition read/write file descriptor offset
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* pos = sceIoLseek(fd, -10, SCE_SEEK_END)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor with which to seek
|
||||||
|
* @param offset - Relative offset from the start position given by whence
|
||||||
|
* @param whence - One of ::SceIoSeekMode.
|
||||||
|
*
|
||||||
|
* @return The position in the file after the seek.
|
||||||
|
*/
|
||||||
|
Lseek :: proc(fd: sce.UID, offset: sce.Off, whence: SceIoSeekMode) -> sce.Off ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reposition read/write file descriptor offset (32bit mode)
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* pos = sceIoLseek32(fd, -10, SCE_SEEK_END)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor with which to seek
|
||||||
|
* @param offset - Relative offset from the start position given by whence
|
||||||
|
* @param whence - One of ::SceIoSeekMode.
|
||||||
|
*
|
||||||
|
* @return The position in the file after the seek.
|
||||||
|
*/
|
||||||
|
Lseek32 :: proc(fd: sce.UID, offset: c.long, whence: SceIoSeekMode) -> c.long ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove directory entry
|
||||||
|
*
|
||||||
|
* @param file - Path to the file to remove
|
||||||
|
* @return < 0 on error
|
||||||
|
*/
|
||||||
|
Remove :: proc(file: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the name of a file
|
||||||
|
*
|
||||||
|
* @param oldname - The old filename
|
||||||
|
* @param newname - The new filename
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
Rename :: proc(oldname: cstring, newname: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronize the file data on the device.
|
||||||
|
*
|
||||||
|
* @param device - The device to synchronize (e.g. msfat0:)
|
||||||
|
* @param unk - Unknown
|
||||||
|
*/
|
||||||
|
Sync :: proc(device: cstring, flag: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronize the file data for one file
|
||||||
|
*
|
||||||
|
* @param fd - Opened file descriptor to sync
|
||||||
|
* @param flag - unknown
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
SyncByFd :: proc(fd: sce.UID, flag: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel an asynchronous operation on a file descriptor.
|
||||||
|
*
|
||||||
|
* @param fd - The file descriptor to perform cancel on.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
Cancel :: proc(fd: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
GetPriority :: proc(fd: sce.UID) -> c.int ---
|
||||||
|
GetProcessDefaultPriority :: proc() -> c.int ---
|
||||||
|
GetThreadDefaultPriority :: proc() -> c.int ---
|
||||||
|
SetPriority :: proc(fd: sce.UID, priority: c.int) -> c.int ---
|
||||||
|
SetProcessDefaultPriority :: proc(priority: c.int) -> c.int ---
|
||||||
|
SetThreadDefaultPriority :: proc(priority: c.int) -> c.int ---
|
||||||
|
}
|
||||||
+156
@@ -0,0 +1,156 @@
|
|||||||
|
package io
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceIoDevInfo :: struct {
|
||||||
|
max_size: sce.Off,
|
||||||
|
free_size: sce.Off,
|
||||||
|
cluster_size: sce.Size,
|
||||||
|
unk: rawptr,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceIoDevInfo) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Note: Not all of these sceIoOpen() flags are not compatible with the
|
||||||
|
open() flags found in sys/unistd.h. */
|
||||||
|
SceIoMode :: enum c.int {
|
||||||
|
O_RDONLY = 0x0001, //!< Read-only
|
||||||
|
O_WRONLY = 0x0002, //!< Write-only
|
||||||
|
O_RDWR = (O_RDONLY | O_WRONLY), //!< Read/Write
|
||||||
|
O_NBLOCK = 0x0004, //!< Non blocking
|
||||||
|
O_DIROPEN = 0x0008, //!< Internal use for ::sceIoDopen
|
||||||
|
O_RDLOCK = 0x0010, //!< Read locked (non-shared)
|
||||||
|
O_WRLOCK = 0x0020, //!< Write locked (non-shared)
|
||||||
|
O_APPEND = 0x0100, //!< Append
|
||||||
|
O_CREAT = 0x0200, //!< Create
|
||||||
|
O_TRUNC = 0x0400, //!< Truncate
|
||||||
|
O_EXCL = 0x0800, //!< Exclusive create
|
||||||
|
O_SCAN = 0x1000, //!< Scan type
|
||||||
|
O_RCOM = 0x2000, //!< Remote command entry
|
||||||
|
O_NOBUF = 0x4000, //!< Number device buffer
|
||||||
|
O_NOWAIT = 0x8000, //!< Asynchronous I/O
|
||||||
|
O_FDEXCL = 0x01000000, //!< Exclusive access
|
||||||
|
O_PWLOCK = 0x02000000, //!< Power control lock
|
||||||
|
O_FGAMEDATA = 0x40000000 //!< Gamedata access
|
||||||
|
}
|
||||||
|
|
||||||
|
SceIoSeekMode :: enum c.int {
|
||||||
|
SET, //!< Starts from the begin of the file
|
||||||
|
CUR, //!< Starts from current position
|
||||||
|
END //!< Starts from the end of the file
|
||||||
|
}
|
||||||
|
|
||||||
|
SceIoDevType :: enum c.int {
|
||||||
|
NULL = 0x00, //!< Dummy device
|
||||||
|
CHAR = 0x01, //!< Character device
|
||||||
|
BLOCK = 0x04, //!< Block device
|
||||||
|
FS = 0x10, //!< File system device
|
||||||
|
ALIAS = 0x20, //!< Alias name
|
||||||
|
MOUNTPT = 0x40 //!< Mount point
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access modes for st_mode in ::SceIoStat.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* System always requires RW access.
|
||||||
|
* For safe homebrew system software will force system permission field to RW.
|
||||||
|
* For unsafe homebrew, you need to set it yourself `( mode | SCE_S_IWSYS | SCE_S_IRSYS)`
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
SceIoAccessMode :: enum c.int {
|
||||||
|
S_IXUSR = 000100, //!< User execute permission
|
||||||
|
S_IWUSR = 000200, //!< User write permission
|
||||||
|
S_IRUSR = 000400, //!< User read permission
|
||||||
|
S_IRWXU = 000700, //!< User access rights mask
|
||||||
|
|
||||||
|
S_IXGRP = 000000, //!< Group execute permission. Ignored and reset to 0 by system
|
||||||
|
S_IWGRP = 000000, //!< Group write permission. Ignored and reset to 0 by system
|
||||||
|
S_IRGRP = 000000, //!< Group read permission. Ignored and reset to 0 by system
|
||||||
|
S_IRWXG = 000000, //!< Group access rights mask. Ignored and reset to 0 by system
|
||||||
|
|
||||||
|
S_IXSYS = 000001, //!< System execute permission
|
||||||
|
S_IWSYS = 000002, //!< System write permission
|
||||||
|
S_IRSYS = 000004, //!< System read permission
|
||||||
|
S_IRWXS = 000007, //!< System access rights mask
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
|
S_IXOTH = 000001, //!< Others execute permission. Deprecated, use ::SCE_S_IXSYS
|
||||||
|
// Deprecated
|
||||||
|
S_IWOTH = 000002, //!< Others write permission. Deprecated, use ::SCE_S_IXSYS
|
||||||
|
// Deprecated
|
||||||
|
S_IROTH = 000004, //!< Others read permission. Deprecated, use ::SCE_S_IXSYS
|
||||||
|
// Deprecated
|
||||||
|
S_IRWXO = 000007, //!< Others access rights mask. Deprecated, use ::SCE_S_IRWXS
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
|
S_ISVTX = 000000, //!< Sticky. Deprecated
|
||||||
|
// Deprecated
|
||||||
|
S_ISGID = 000000, //!< Set GID. Deprecated
|
||||||
|
// Deprecated
|
||||||
|
S_ISUID = 000000, //!< Set UID. Deprecated
|
||||||
|
|
||||||
|
S_IFDIR = 0010000, //!< Directory
|
||||||
|
S_IFREG = 0020000, //!< Regular file
|
||||||
|
S_IFLNK = 0040000, //!< Symbolic link
|
||||||
|
S_IFMT = 0170000, //!< Format bits mask
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
// File mode checking macros
|
||||||
|
//#define SCE_S_ISLNK(m) (((m) & SCE_S_IFMT) == SCE_S_IFLNK)
|
||||||
|
//#define SCE_S_ISREG(m) (((m) & SCE_S_IFMT) == SCE_S_IFREG)
|
||||||
|
//#define SCE_S_ISDIR(m) (((m) & SCE_S_IFMT) == SCE_S_IFDIR)
|
||||||
|
|
||||||
|
/** File modes, used for the st_attr parameter in ::SceIoStat. */
|
||||||
|
SceIoFileMode :: enum c.int {
|
||||||
|
SO_IXOTH = 0x0001, //!< Hidden execute permission
|
||||||
|
SO_IWOTH = 0x0002, //!< Hidden write permission
|
||||||
|
SO_IROTH = 0x0004, //!< Hidden read permission
|
||||||
|
SO_IFLNK = 0x0008, //!< Symbolic link
|
||||||
|
SO_IFDIR = 0x0010, //!< Directory
|
||||||
|
SO_IFREG = 0x0020, //!< Regular file
|
||||||
|
SO_IFMT = 0x0038, //!< Format mask
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
// File mode checking macros
|
||||||
|
//#define SCE_SO_ISLNK(m) (((m) & SCE_SO_IFMT) == SCE_SO_IFLNK)
|
||||||
|
//#define SCE_SO_ISREG(m) (((m) & SCE_SO_IFMT) == SCE_SO_IFREG)
|
||||||
|
//#define SCE_SO_ISDIR(m) (((m) & SCE_SO_IFMT) == SCE_SO_IFDIR)
|
||||||
|
|
||||||
|
/** Structure to hold the status information about a file */
|
||||||
|
SceIoStat :: struct {
|
||||||
|
st_mode: sce.Mode, //!< One or more ::SceIoAccessMode
|
||||||
|
st_attr: c.uint, //!< One or more ::SceIoFileMode
|
||||||
|
st_size: sce.Off, //!< Size of the file in bytes
|
||||||
|
st_ctime: sce.DateTime, //!< Creation time
|
||||||
|
st_atime: sce.DateTime, //!< Last access time
|
||||||
|
st_mtime: sce.DateTime, //!< Last modification time
|
||||||
|
st_private: [6]c.uint, //!< Device-specific data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceIoStat) == 0x58)
|
||||||
|
|
||||||
|
/** Defines for `sceIoChstat` and `sceIoChstatByFd` **/
|
||||||
|
SCE_CST_MODE :: 0x0001
|
||||||
|
SCE_CST_SIZE :: 0x0004
|
||||||
|
SCE_CST_CT :: 0x0008
|
||||||
|
SCE_CST_AT :: 0x0010
|
||||||
|
SCE_CST_MT :: 0x0020
|
||||||
|
|
||||||
|
|
||||||
|
/** Describes a single directory entry */
|
||||||
|
SceIoDirent :: struct {
|
||||||
|
d_stat: SceIoStat, //!< File status
|
||||||
|
d_name: [256]c.char, //!< File name
|
||||||
|
d_private: rawptr, //!< Device-specific data
|
||||||
|
dummy: c.int, //!< Dummy data
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceIoDirent) == 0x160)
|
||||||
|
}
|
||||||
|
|
||||||
+258
@@ -0,0 +1,258 @@
|
|||||||
|
package jpeg
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import jpeg "system:SceJpeg_stub"
|
||||||
|
foreign import jpegarm "system:SceJpegArm_stub"
|
||||||
|
foreign import jpegenc "system:SceJpegEnc_stub"
|
||||||
|
foreign import jpegencarm "system:SceJpegEncArm_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceJpeg")
|
||||||
|
foreign jpeg {
|
||||||
|
InitMJpeg :: proc(decoderCount: sce.Int32) -> c.int ---
|
||||||
|
|
||||||
|
InitMJpegWithParam :: proc(params: ^SceJpegMJpegInitParam) -> c.int ---
|
||||||
|
|
||||||
|
FinishMJpeg :: proc() -> c.int ---
|
||||||
|
|
||||||
|
GetOutputInfo :: proc(jpegData: [^]sce.UInt8,
|
||||||
|
jpegSize: sce.Size,
|
||||||
|
format: sce.Int32,
|
||||||
|
mode: sce.Int32,
|
||||||
|
output: ^SceJpegOutputInfo) -> c.int ---
|
||||||
|
|
||||||
|
DecodeMJpegYCbCr :: proc(jpegData: [^]sce.UInt8,
|
||||||
|
jpegSize: sce.Size,
|
||||||
|
mode: sce.Int32,
|
||||||
|
output: [^]sce.UInt8,
|
||||||
|
outputSize: sce.Size,
|
||||||
|
buffer: rawptr,
|
||||||
|
bufferSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
MJpegCsc :: proc(rgba: [^]sce.UInt8,
|
||||||
|
yuv: [^]sce.UInt8,
|
||||||
|
yuvSize: sce.Size,
|
||||||
|
imageWidth: sce.Int32,
|
||||||
|
format: sce.Int32,
|
||||||
|
sampling: sce.Int32) -> c.int ---
|
||||||
|
}
|
||||||
|
|
||||||
|
foreign jpegarm {
|
||||||
|
sceJpegArmDecodeMJpeg :: proc(pJpeg: [^]sce.UInt8,
|
||||||
|
isize: sce.Size,
|
||||||
|
decodeMode: sce.Int,
|
||||||
|
pRGBA: rawptr,
|
||||||
|
osize: sce.Size,
|
||||||
|
pCoefBuffer: rawptr,
|
||||||
|
coefBufferSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
sceJpegArmDecodeMJpegYCbCr :: proc(pJpeg: [^]sce.UInt8,
|
||||||
|
isize: sce.Size,
|
||||||
|
decodeMode: sce.Int,
|
||||||
|
pYCbCr: [^]sce.UInt8,
|
||||||
|
osize: sce.Size,
|
||||||
|
pCoefBuffer: rawptr,
|
||||||
|
coefBufferSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
sceJpegArmGetOutputInfo :: proc(pJpeg: [^]sce.UInt8,
|
||||||
|
isize: sce.Size,
|
||||||
|
decodeMode: sce.Int,
|
||||||
|
outputFormat: sce.Int,
|
||||||
|
pOutputInfo: ^SceJpegOutputInfo) -> c.int ---
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "sceJpegEncoder")
|
||||||
|
foreign jpegenc {
|
||||||
|
/**
|
||||||
|
* Initialize a jpeg encoder
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to a big enough allocated memory block
|
||||||
|
* @param[in] inWidth - Input width in pixels
|
||||||
|
* @param[in] inHeight - Input height in pixels
|
||||||
|
* @param[in] pixelformat - A valid ::SceJpegEncoderPixelFormat set of values
|
||||||
|
* @param[in] outBuffer - A physically continuous memory block 256 bytes aligned
|
||||||
|
* @param[in] outSize - Output size in bytes
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Init :: proc(_context: SceJpegEncoderContext, inWidth: c.int, inHeight: c.int, pixelformat: SceJpegEncoderPixelFormat, outBuffer: rawptr, outSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a jpeg encoder with param
|
||||||
|
*
|
||||||
|
* @param[in] initParam - A pointer to the initialization parameters
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
InitWithParam :: proc(_context: SceJpegEncoderContext, initParam: ^SceJpegEncoderInitParam) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Terminate a jpeg encoder
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to an already initialized ::SceJpegEncoderContext
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
End :: proc(_context: SceJpegEncoderContext) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a jpeg encode
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to an already initialized ::SceJpegEncoderContext
|
||||||
|
* @param[in] inBuffer - A physically continuous memory block 256 bytes aligned
|
||||||
|
*
|
||||||
|
* @return encoded jpeg size on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Encode :: proc(_context: SceJpegEncoderContext, inBuffer: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set encoder compression ratio
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to an already initialized ::SceJpegEncoderContext
|
||||||
|
* @param[in] ratio - A value between 0 and 255 (higher = better compression, lower = better speed)
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetCompressionRatio :: proc(_context: SceJpegEncoderContext, ratio: c.int) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set encoder output address
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to an already initialized ::SceJpegEncoderContext
|
||||||
|
* @param[in] outBuffer - A physically continuous memory block 256 bytes aligned
|
||||||
|
* @param[in] outSize - Output buffer size in bytes
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetOutputAddr :: proc(_context: SceJpegEncoderContext, outBuffer: rawptr, outSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a color conversion from ARGB to YCbCr
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to an already initialized ::SceJpegEncoderContext
|
||||||
|
* @param[in] outBuffer - A physical continuous memory block 256 bytes aligned
|
||||||
|
* @param[in] inBuffer - A pointer to a valid ARGB buffer
|
||||||
|
* @param[in] inPitch - Input pitch value in pixels
|
||||||
|
* @param[in] inPixelFormat - A valid ::SceJpegEncoderPixelFormat set of values
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
Csc :: proc(_context: SceJpegEncoderContext, outBuffer: rawptr, inBuffer: rawptr, inPitch: c.int, inPixelFormat: SceJpegEncoderPixelFormat) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return required free size to allocate a jpeg encoder
|
||||||
|
*
|
||||||
|
* @return Required free memory size in bytes, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetContextSize :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set encoder valid region (?)
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to an already initialized ::SceJpegEncoderContext
|
||||||
|
* @param[in] inWidth - Input width in pixels
|
||||||
|
* @param[in] inHeight - Input height in pixels
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetValidRegion :: proc(_context: SceJpegEncoderContext, inWidth: c.int, inHeight: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set header used for output file
|
||||||
|
*
|
||||||
|
* @param[in] _context - A pointer to an already initialized ::SceJpegEncoderContext
|
||||||
|
* @param[in] mode - One of ::SceJpegEncoderHeaderMode
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetHeaderMode :: proc(_context: SceJpegEncoderContext, mode: c.int) -> c.int ---
|
||||||
|
}
|
||||||
|
|
||||||
|
foreign jpegencarm {
|
||||||
|
/**
|
||||||
|
* Get required size of _context memory.
|
||||||
|
*
|
||||||
|
* @return Required size of allocated memory.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderGetContextSize :: proc() -> sce.Size ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a JPEG encoder.
|
||||||
|
*
|
||||||
|
* @param[in] _context - An allocated encoder _context of appropriate size.
|
||||||
|
* @param[in] inWidth - Input width in pixels.
|
||||||
|
* @param[in] inHeight - Input height in pixels.
|
||||||
|
* @param[in] pixelformat - One of ::SceJpegArmEncoderPixelFormat.
|
||||||
|
* @param[in] outBuffer - A sufficiently sized 8 byte aligned output buffer.
|
||||||
|
* @param[in] outSize - Output buffer size in bytes.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderInit :: proc(_context: SceJpegArmEncoderContext, inWidth: sce.UInt16, inHeight: sce.UInt16, pixelformat: SceJpegArmEncoderPixelFormat, outBuffer: rawptr, outSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Terminate a JPEG encoder.
|
||||||
|
*
|
||||||
|
* @param[in] _context - An already initialized ::SceJpegArmEncoderContext.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderEnd :: proc(_context: SceJpegArmEncoderContext) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a JPEG encode.
|
||||||
|
*
|
||||||
|
* @param[in] _context - An already initialized ::SceJpegArmEncoderContext.
|
||||||
|
* @param[in] inBuffer - An 8 byte aligned memory block of color data.
|
||||||
|
*
|
||||||
|
* @return Encoded JPEG size on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderEncode :: proc(_context: SceJpegArmEncoderContext, inBuffer: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the encoder compression ratio.
|
||||||
|
*
|
||||||
|
* @param[in] _context - An already initialized ::SceJpegArmEncoderContext.
|
||||||
|
* @param[in] ratio - A value between 1 and 255 (higher = better compression, lower = better speed).
|
||||||
|
*
|
||||||
|
* See @ref SCE_JPEGENCARM_DEFAULT_COMP_RATIO for the default compression ratio.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderSetCompressionRatio :: proc(_context: SceJpegArmEncoderContext, ratio: sce.UInt8) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set encoder output address.
|
||||||
|
*
|
||||||
|
* @param[in] _context - An already initialized ::SceJpegArmEncoderContext.
|
||||||
|
* @param[in] outBuffer - A sufficiently sized 8 byte aligned output buffer.
|
||||||
|
* @param[in] outSize - Output buffer size in bytes.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderSetOutputAddr :: proc(_context: SceJpegArmEncoderContext, outBuffer: rawptr, outSize: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the region of the image to be encoded as JPEG. The encoded region starts
|
||||||
|
* from (0,0), which is the top left of the image, and expands outward by regionWidth and regionHeight.
|
||||||
|
*
|
||||||
|
* @param[in] _context - An already initialized ::SceJpegArmEncoderContext.
|
||||||
|
* @param[in] regionWidth - Width of the region in pixels.
|
||||||
|
* @param[in] regionHeight - Height of the region in pixels.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderSetValidRegion :: proc(_context: SceJpegArmEncoderContext, regionWidth: sce.UInt16, regionHeight: sce.UInt16) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set header used for output file.
|
||||||
|
*
|
||||||
|
* @param[in] _context - An already initialized ::SceJpegArmEncoderContext.
|
||||||
|
* @param[in] mode - One of ::SceJpegArmEncoderHeaderMode.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceJpegArmEncoderSetHeaderMode :: proc(_context: SceJpegArmEncoderContext, mode: SceJpegArmEncoderHeaderMode) -> c.int ---
|
||||||
|
}
|
||||||
+146
@@ -0,0 +1,146 @@
|
|||||||
|
package jpeg
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceJpegMJpegInitParam :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
decoderCount: sce.Int32,
|
||||||
|
options: sce.Int32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceJpegMJpegInitParam) == 0xC)
|
||||||
|
|
||||||
|
SceJpegPitch :: struct {
|
||||||
|
x: sce.UInt32,
|
||||||
|
y: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceJpegPitch) == 8)
|
||||||
|
|
||||||
|
SceJpegOutputInfo :: struct {
|
||||||
|
colorSpace: sce.Int32,
|
||||||
|
width: sce.UInt16,
|
||||||
|
height: sce.UInt16,
|
||||||
|
outputSize: sce.UInt32,
|
||||||
|
unk_0xc: sce.UInt32,
|
||||||
|
unk_0x10: sce.UInt32,
|
||||||
|
pitch: [4]SceJpegPitch,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceJpegOutputInfo) == 0x34)
|
||||||
|
|
||||||
|
|
||||||
|
SceJpegArmErrorCode :: enum c.int {
|
||||||
|
OK = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceJpegEncoderInitParamOption :: enum c.int {
|
||||||
|
NONE = 0, //!< Default option
|
||||||
|
LPDDR2_MEMORY = 1 //!< LPDDR2 memory will be used instead of CDRAM
|
||||||
|
}
|
||||||
|
|
||||||
|
SceJpegEncoderInitParam :: struct {
|
||||||
|
size: sce.Size, //!< Size of this structure
|
||||||
|
inWidth: c.int, //!< Input width in pixels
|
||||||
|
inHeight: c.int, //!< Input height in pixels
|
||||||
|
pixelFormat: c.int, //!< A valid ::SceJpegEncoderPixelFormat set of values
|
||||||
|
outBuffer: rawptr, //!< A physically continuous memory block 256 bytes aligned
|
||||||
|
outSize: sce.Size, //!< Output size in bytes
|
||||||
|
option: c.int, //!< Additional options, OR of ::SceJpegEncoderInitParamOption
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceJpegEncoderInitParam) == 0x1C)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SCE_JPEGENCARM_MIN_COMP_RATIO :: 1 //!< Lowest compression ratio, best quality.
|
||||||
|
SCE_JPEGENCARM_DEFAULT_COMP_RATIO :: 64 //!< Default compression ratio.
|
||||||
|
SCE_JPEGENCARM_MAX_COMP_RATIO :: 255 //!< Highest compression ratio, lowest quality.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dynamically allocated encoder context.
|
||||||
|
*
|
||||||
|
* See @ref sceJpegArmEncoderGetContextSize() for required allocation size.
|
||||||
|
* The address must be 4 byte aligned.
|
||||||
|
*/
|
||||||
|
SceJpegArmEncoderContext :: rawptr
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceJpegArmEncoderContext) == 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error Codes
|
||||||
|
*/
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceJpegEncArmErrorCode :: enum c.uint {
|
||||||
|
/**
|
||||||
|
* The image dimensions given are not supported, or are larger
|
||||||
|
* than those set at initialization.
|
||||||
|
*/
|
||||||
|
IMAGE_SIZE = 0x80650300,
|
||||||
|
/**
|
||||||
|
* The output buffer provided is not of sufficient size.
|
||||||
|
*/
|
||||||
|
INSUFFICIENT_BUFFER = 0x80650301,
|
||||||
|
/**
|
||||||
|
* The compression ratio given is not within the valid range.
|
||||||
|
*/
|
||||||
|
INVALID_COMP_RATIO = 0x80650302,
|
||||||
|
/**
|
||||||
|
* The pixelformat given is not one of ::SceJpegArmEncoderPixelFormat.
|
||||||
|
*/
|
||||||
|
INVALID_PIXELFORMAT = 0x80650303,
|
||||||
|
/**
|
||||||
|
* The headerMode given is not one of ::SceJpegArmEncoderHeaderMode.
|
||||||
|
*/
|
||||||
|
INVALID_HEADER_MODE = 0x80650304,
|
||||||
|
/**
|
||||||
|
* A null or badly aligned pointer was given.
|
||||||
|
*/
|
||||||
|
INVALID_POINTER = 0x80650305
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pixel Formats
|
||||||
|
*/
|
||||||
|
SceJpegArmEncoderPixelFormat :: enum c.int {
|
||||||
|
YCBCR420 = 8, //!< YCbCr420 format
|
||||||
|
YCBCR422 = 9 //!< YCbCr422 format
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JPEG Header Modes
|
||||||
|
*/
|
||||||
|
SceJpegArmEncoderHeaderMode :: enum c.int {
|
||||||
|
JPEG = 0, //!< JPEG header mode
|
||||||
|
MJPEG = 1 //!< MJPEG header mode
|
||||||
|
}
|
||||||
|
|
||||||
|
SceJpegEncoderContext :: rawptr
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceJpegEncoderContext) == 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: should be c.int
|
||||||
|
SceJpegEncErrorCode :: enum c.uint {
|
||||||
|
IMAGE_SIZE = 0x80650200,
|
||||||
|
INSUFFICIENT_BUFFER = 0x80650201,
|
||||||
|
INVALID_COMPRATIO = 0x80650202,
|
||||||
|
INVALID_PIXELFORMAT = 0x80650203,
|
||||||
|
INVALID_HEADER_MODE = 0x80650204,
|
||||||
|
INVALID_POINTER = 0x80650205,
|
||||||
|
NOT_PHY_CONTINUOUS_MEMORY = 0x80650206
|
||||||
|
}
|
||||||
|
|
||||||
|
SceJpegEncoderPixelFormat :: enum c.int {
|
||||||
|
ARGB8888 = 0, //!< ARGB8888 format
|
||||||
|
YCBCR420 = 8, //!< YCbCr420 format
|
||||||
|
YCBCR422 = 9, //!< YCbCr422 format
|
||||||
|
CSC_ARGB_YCBCR = 16 //!< ARGB to YCbCr color conversion flag
|
||||||
|
}
|
||||||
|
|
||||||
|
SceJpegEncoderHeaderMode :: enum c.int {
|
||||||
|
JPEG = 0, //!< JPEG header mode
|
||||||
|
MJPEG = 1 //!< MJPEG header mode
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,804 @@
|
|||||||
|
package kernel
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import libkernel "system:SceLibKernel_stub"
|
||||||
|
|
||||||
|
/** Message Pipe status info */
|
||||||
|
SceKernelMppInfo :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
mppId: sce.UID, // Needs confirmation
|
||||||
|
name: [32]c.char,
|
||||||
|
attr: sce.UInt,
|
||||||
|
bufSize: c.int,
|
||||||
|
freeSize: c.int,
|
||||||
|
numSendWaitThreads: c.int,
|
||||||
|
numReceiveWaitThreads: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelMppInfo) == 0x3C)
|
||||||
|
|
||||||
|
/** Additional options used when creating rwlock. */
|
||||||
|
SceKernelRWLockOptParam :: struct {
|
||||||
|
/** Size of the ::SceKernelRWLockOptParam structure */
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelRWLockOptParam) == 4)
|
||||||
|
|
||||||
|
/** Current state of a rwlock.
|
||||||
|
* @see sceKernelGetRWLockInfo
|
||||||
|
*/
|
||||||
|
SceKernelRWLockInfo :: struct {
|
||||||
|
/** Size of the ::SceKernelRWLockInfo structure */
|
||||||
|
size: sce.Size,
|
||||||
|
/** The UID of the rwlock */
|
||||||
|
rwLockId: sce.UID,
|
||||||
|
/** NULL-terminated name of the rwlock */
|
||||||
|
name: [32]c.char,
|
||||||
|
/** Attributes */
|
||||||
|
attr: sce.UInt32,
|
||||||
|
/** The current lock count */
|
||||||
|
lockCount: sce.Int32,
|
||||||
|
/** The UID of the current owner of the rwlock with write access, 0 when locked for reads */
|
||||||
|
writeOwnerId: sce.UID,
|
||||||
|
/** The number of threads waiting on the rwlock for read access */
|
||||||
|
numReadWaitThreads: sce.UInt32,
|
||||||
|
/** The number of threads waiting on the rwlock for write access */
|
||||||
|
numWriteWaitThreads: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelRWLockInfo) == 0x3C)
|
||||||
|
|
||||||
|
SceKernelSystemInfo :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
activeCpuMask: sce.UInt32,
|
||||||
|
|
||||||
|
cpuInfo: [4]struct {
|
||||||
|
idleClock: sce.KernelSysClock,
|
||||||
|
comesOutOfIdleCount: sce.UInt32,
|
||||||
|
threadSwitchCount: sce.UInt32,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelSystemInfo) == 0x48)
|
||||||
|
|
||||||
|
@(link_prefix = "sceKernel")
|
||||||
|
foreign libkernel {
|
||||||
|
/**
|
||||||
|
* Fills the output buffer with random data.
|
||||||
|
*
|
||||||
|
* @param[out] output - Output buffer
|
||||||
|
* @param[in] size - Size of the output buffer, 64 bytes maximum
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetRandomNumber :: proc(output: rawptr, size: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the status of a specified callback.
|
||||||
|
*
|
||||||
|
* @param cb - The UID of the callback to retrieve info for.
|
||||||
|
* @param status - Pointer to a status structure. The size parameter should be
|
||||||
|
* initialised before calling.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
GetCallbackInfo :: proc(cb: sce.UID, infop: ^SceKernelCallbackInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new condition variable
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* SceUID condId
|
||||||
|
* condId = sceKernelCreateCond("MyCond", 0, mutexId, NULL)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param name - Specifies the name of the condition variable
|
||||||
|
* @param attr - Condition variable attribute flags (normally set to 0)
|
||||||
|
* @param mutexId - Mutex to be related to the condition variable
|
||||||
|
* @param option - Condition variable options (normally set to 0)
|
||||||
|
* @return A condition variable id
|
||||||
|
*/
|
||||||
|
CreateCond :: proc(name: cstring, attr: sce.UInt, mutexId: sce.UID, option: ^SceKernelCondOptParam) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Waits for a signal of a condition variable
|
||||||
|
*
|
||||||
|
* @param condId - The condition variable id returned from ::sceKernelCreateCond
|
||||||
|
* @param timeout - Timeout in microseconds (assumed)
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
WaitCond :: proc(condId: sce.UID, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Waits for a signal of a condition variable (with callbacks)
|
||||||
|
*
|
||||||
|
* @param condId - The condition variable id returned from ::sceKernelCreateCond
|
||||||
|
* @param timeout - Timeout in microseconds (assumed)
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
WaitCondCB :: proc(condId: sce.UID, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an event flag.
|
||||||
|
*
|
||||||
|
* @param name - The name of the event flag.
|
||||||
|
* @param attr - Attributes from ::SceEventFlagAttributes
|
||||||
|
* @param bits - Initial bit pattern.
|
||||||
|
* @param opt - Options, set to NULL
|
||||||
|
* @return < 0 on error. >= 0 event flag id.
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* int evid
|
||||||
|
* evid = sceKernelCreateEventFlag("wait_event", 0, 0, NULL)
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
CreateEventFlag :: proc(name: cstring, attr: c.int, bits: c.int, opt: ^SceKernelEventFlagOptParam) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Poll an event flag for a given bit pattern.
|
||||||
|
*
|
||||||
|
* @param evid - The event id returned by ::sceKernelCreateEventFlag.
|
||||||
|
* @param bits - The bit pattern to poll for.
|
||||||
|
* @param wait - Wait type, one or more of ::SceEventFlagWaitTypes or'ed together
|
||||||
|
* @param outBits - The bit pattern that was matched.
|
||||||
|
* @return < 0 On error
|
||||||
|
*/
|
||||||
|
PollEventFlag :: proc(evid: c.int, bits: c.uint, wait: c.uint, outBits: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for an event flag for a given bit pattern.
|
||||||
|
*
|
||||||
|
* @param evid - The event id returned by ::sceKernelCreateEventFlag.
|
||||||
|
* @param bits - The bit pattern to poll for.
|
||||||
|
* @param wait - Wait type, one or more of ::SceEventFlagWaitTypes or'ed together
|
||||||
|
* @param outBits - The bit pattern that was matched.
|
||||||
|
* @param timeout - Timeout in microseconds
|
||||||
|
* @return < 0 On error
|
||||||
|
*/
|
||||||
|
WaitEventFlag :: proc(evid: c.int, bits: c.uint, wait: c.uint, outBits: ^c.uint, timeout: ^sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for an event flag for a given bit pattern with callback.
|
||||||
|
*
|
||||||
|
* @param evid - The event id returned by ::sceKernelCreateEventFlag.
|
||||||
|
* @param bits - The bit pattern to poll for.
|
||||||
|
* @param wait - Wait type, one or more of ::SceEventFlagWaitTypes or'ed together
|
||||||
|
* @param outBits - The bit pattern that was matched.
|
||||||
|
* @param timeout - Timeout in microseconds
|
||||||
|
* @return < 0 On error
|
||||||
|
*/
|
||||||
|
WaitEventFlagCB :: proc(evid: c.int, bits: c.uint, wait: c.uint, outBits: ^c.uint, timeout: ^sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the status of an event flag.
|
||||||
|
*
|
||||||
|
* @param event - The UID of the event.
|
||||||
|
* @param status - A pointer to a ::SceKernelEventFlagInfo structure.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
GetEventFlagInfo :: proc(event: sce.UID, info: ^SceKernelEventFlagInfo) -> c.int ---
|
||||||
|
|
||||||
|
CreateLwCond :: proc(pWork: ^SceKernelLwCondWork, pName: cstring, attr: c.uint, pLwMutex: ^SceKernelLwMutexWork, pOptParam: ^SceKernelLwCondOptParam) -> c.int ---
|
||||||
|
DeleteLwCond :: proc(pWork: ^SceKernelLwCondWork) -> c.int ---
|
||||||
|
SignalLwCond :: proc(pWork: ^SceKernelLwCondWork) -> c.int ---
|
||||||
|
SignalLwCondAll :: proc(pWork: ^SceKernelLwCondWork) -> c.int ---
|
||||||
|
SignalLwCondTo :: proc(pWork: ^SceKernelLwCondWork, threadId: sce.UID) -> c.int ---
|
||||||
|
WaitLwCond :: proc(pWork: ^SceKernelLwCondWork, pTimeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
CreateLwMutex :: proc(pWork: ^SceKernelLwMutexWork, pName: cstring, attr: c.uint, initCount: c.int, pOptParam: ^SceKernelLwMutexOptParam) -> c.int ---
|
||||||
|
DeleteLwMutex :: proc(pWork: ^SceKernelLwMutexWork) -> c.int ---
|
||||||
|
LockLwMutex :: proc(pWork: ^SceKernelLwMutexWork, lockCount: c.int, pTimeout: ^c.uint) -> c.int ---
|
||||||
|
TryLockLwMutex :: proc(pWork: ^SceKernelLwMutexWork, lockCount: c.int) -> c.int ---
|
||||||
|
UnlockLwMutex :: proc(pWork: ^SceKernelLwMutexWork, unlockCount: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a message pipe
|
||||||
|
*
|
||||||
|
* @param name - Name of the pipe
|
||||||
|
* @param type - The type of memory attribute to use internally (set to 0x40)
|
||||||
|
* @param attr - Set to 12
|
||||||
|
* @param bufSize - The size of the internal buffer in multiples of 0x1000 (4KB)
|
||||||
|
* @param opt - Message pipe options (set to NULL)
|
||||||
|
*
|
||||||
|
* @return The UID of the created pipe, < 0 on error
|
||||||
|
*/
|
||||||
|
CreateMsgPipe :: proc(name: cstring, type: c.int, attr: c.int, bufSize: c.uint, opt: rawptr) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to a pipe
|
||||||
|
*
|
||||||
|
* @param uid - The UID of the pipe
|
||||||
|
* @param message - Pointer to the message
|
||||||
|
* @param size - Size of the message
|
||||||
|
* @param unk1 - Unknown - async vs sync? use 0 for sync
|
||||||
|
* @param unk2 - Unknown - use NULL
|
||||||
|
* @param timeout - Timeout for send in us. use NULL to wait indefinitely
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SendMsgPipe :: proc(uid: sce.UID , message: rawptr, size: c.uint, unk1: c.int, unk2: rawptr, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to a pipe (with callback)
|
||||||
|
*
|
||||||
|
* @param uid - The UID of the pipe
|
||||||
|
* @param message - Pointer to the message
|
||||||
|
* @param size - Size of the message
|
||||||
|
* @param unk1 - Unknown - async vs sync? use 0 for sync
|
||||||
|
* @param unk2 - Unknown - use NULL
|
||||||
|
* @param timeout - Timeout for send in us. use NULL to wait indefinitely
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SendMsgPipeCB :: proc(uid: sce.UID, message: rawptr, size: c.uint, unk1: c.int, unk2: rawptr, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to send a message to a pipe
|
||||||
|
*
|
||||||
|
* @param uid - The UID of the pipe
|
||||||
|
* @param message - Pointer to the message
|
||||||
|
* @param size - Size of the message
|
||||||
|
* @param unk1 - Unknown - use 0
|
||||||
|
* @param unk2 - Unknown - use NULL
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
TrySendMsgPipe :: proc(uid: sce.UID, message: rawptr, size: sce.Size, unk1: c.int, unk2: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receive a message from a pipe
|
||||||
|
*
|
||||||
|
* @param uid - The UID of the pipe
|
||||||
|
* @param message - Pointer to the message
|
||||||
|
* @param size - Size of the message
|
||||||
|
* @param unk1 - Unknown - async vs sync? use 0 for sync
|
||||||
|
* @param unk2 - Unknown - use NULL
|
||||||
|
* @param timeout - Timeout for receive in us. use NULL to wait indefinitely
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
ReceiveMsgPipe :: proc(uid: sce.UID, message: rawptr, size: sce.Size, unk1: c.int, unk2: rawptr, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receive a message from a pipe (with callback)
|
||||||
|
*
|
||||||
|
* @param uid - The UID of the pipe
|
||||||
|
* @param message - Pointer to the message
|
||||||
|
* @param size - Size of the message
|
||||||
|
* @param unk1 - Unknown - async vs sync? use 0 for sync
|
||||||
|
* @param unk2 - Unknown - use NULL
|
||||||
|
* @param timeout - Timeout for receive in us. use NULL to wait indefinitely
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
ReceiveMsgPipeCB :: proc(uid: sce.UID, message: rawptr, size: sce.Size, unk1: c.int, unk2: rawptr, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receive a message from a pipe
|
||||||
|
*
|
||||||
|
* @param uid - The UID of the pipe
|
||||||
|
* @param message - Pointer to the message
|
||||||
|
* @param size - Size of the message
|
||||||
|
* @param unk1 - Unknown - use 0
|
||||||
|
* @param unk2 - Unknown - use NULL
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
TryReceiveMsgPipe :: proc(uid: sce.UID, message: rawptr, size: sce.Size, unk1: c.int, unk2: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel a message pipe
|
||||||
|
*
|
||||||
|
* @param uid - UID of the pipe to cancel
|
||||||
|
* @param psend - Receive number of sending threads, NULL is valid
|
||||||
|
* @param precv - Receive number of receiving threads, NULL is valid
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
CancelMsgPipe :: proc(uid: sce.UID, psend: ^c.int, precv: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the status of a Message Pipe
|
||||||
|
*
|
||||||
|
* @param uid - The uid of the Message Pipe
|
||||||
|
* @param info - Pointer to a ::SceKernelMppInfo structure
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetMsgPipeInfo :: proc(uid: sce.UID, info: ^SceKernelMppInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new mutex
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* int mutexid
|
||||||
|
* mutexid = sceKernelCreateMutex("MyMutex", 0, 1, NULL)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param name - Specifies the name of the mutex
|
||||||
|
* @param attr - Mutex attribute flags (normally set to 0)
|
||||||
|
* @param initCount - Mutex initial value
|
||||||
|
* @param option - Mutex options (normally set to 0)
|
||||||
|
* @return A mutex id
|
||||||
|
*/
|
||||||
|
CreateMutex :: proc(name: cstring, attr: sce.UInt, initCount: c.int, option: ^SceKernelMutexOptParam) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a mutex
|
||||||
|
*
|
||||||
|
* @param mutexid - The mutex id returned from ::sceKernelCreateMutex
|
||||||
|
* @param lockCount - The value to increment to the lock count of the mutex
|
||||||
|
* @param timeout - Timeout in microseconds (assumed)
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
LockMutex :: proc(mutexid: sce.UID, lockCount: c.int, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a mutex and handle callbacks if necessary.
|
||||||
|
*
|
||||||
|
* @param mutexid - The mutex id returned from ::sceKernelCreateMutex
|
||||||
|
* @param lockCount - The value to increment to the lock count of the mutex
|
||||||
|
* @param timeout - Timeout in microseconds (assumed)
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
LockMutexCB :: proc(mutexid: sce.UID, lockCount: c.int, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels a mutex
|
||||||
|
*
|
||||||
|
* @param mutexid - The mutex id returned from ::sceKernelCreateMutex
|
||||||
|
* @param newCount - The new lock count of the mutex
|
||||||
|
* @param numWaitThreads - Number of threads waiting for the mutex
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
CancelMutex :: proc(mutexid: sce.UID, newCount: c.int, numWaitThreads: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve information about a mutex.
|
||||||
|
*
|
||||||
|
* @param mutexid - UID of the mutex to retrieve info for.
|
||||||
|
* @param info - Pointer to a ::SceKernelMutexInfo struct to receive the info.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
GetMutexInfo :: proc(mutexid: sce.UID, info: ^SceKernelMutexInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new rwlock
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* int rwlock_id
|
||||||
|
* rwlock_id = sceKernelCreateRWLock("MyRWLock", 0, NULL)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param name - Specifies the name of the rwlock
|
||||||
|
* @param attr - RWLock attribute flags (normally set to 0)
|
||||||
|
* @param option - RWLock options (normally set to NULL)
|
||||||
|
* @return RWLock id on success, < 0 on error
|
||||||
|
*/
|
||||||
|
CreateRWLock :: proc(name: cstring, attr: sce.UInt32, opt_param: ^SceKernelRWLockOptParam) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a rwlock with read access
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @param timeout - Timeout in microseconds, use NULL to disable it
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
LockReadRWLock :: proc(rwlock_id: sce.UID, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a rwlock with write access
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @param timeout - Timeout in microseconds, use NULL to disable it
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
LockWriteRWLock :: proc(rwlock_id: sce.UID, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a rwlock with read access and handle callbacks
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @param timeout - Timeout in microseconds, use NULL to disable it
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
LockReadRWLockCB :: proc(rwlock_id: sce.UID, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a rwlock with write access and handle callbacks
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @param timeout - Timeout in microseconds, use NULL to disable it
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
LockWriteRWLockCB :: proc(rwlock_id: sce.UID, timeout: ^c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve information about a rwlock.
|
||||||
|
*
|
||||||
|
* @param rwlock_id - UID of the rwlock to retrieve info for.
|
||||||
|
* @param info - Pointer to a ::SceKernelRWLockInfo struct to receive the info.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetRWLockInfo :: proc(rwlock_id: sce.UID, info: ^SceKernelRWLockInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new semaphore
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* int semaid
|
||||||
|
* semaid = sceKernelCreateSema("MySema", 0, 1, 1, NULL)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param name - Specifies the name of the sema
|
||||||
|
* @param attr - Sema attribute flags (normally set to 0)
|
||||||
|
* @param initVal - Sema initial value
|
||||||
|
* @param maxVal - Sema maximum value
|
||||||
|
* @param option - Sema options (normally set to 0)
|
||||||
|
* @return A semaphore id
|
||||||
|
*/
|
||||||
|
CreateSema :: proc(name: cstring, attr: sce.UInt, initVal: c.int, maxVal: c.int, option: ^SceKernelSemaOptParam) -> sce.UID ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a semaphore
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* sceKernelWaitSema(semaid, 1, 0)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param semaid - The sema id returned from ::sceKernelCreateSema
|
||||||
|
* @param signal - The value to wait for (i.e. if 1 then wait till reaches a signal state of 1)
|
||||||
|
* @param timeout - Timeout in microseconds (assumed).
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
WaitSema :: proc(semaid: sce.UID, signal: c.int, timeout: ^sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lock a semaphore and handle callbacks if necessary.
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* sceKernelWaitSemaCB(semaid, 1, 0)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param semaid - The sema id returned from ::sceKernelCreateSema
|
||||||
|
* @param signal - The value to wait for (i.e. if 1 then wait till reaches a signal state of 1)
|
||||||
|
* @param timeout - Timeout in microseconds (assumed).
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
WaitSemaCB :: proc(semaid: sce.UID, signal: c.int, timeout: ^sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels a semaphore
|
||||||
|
*
|
||||||
|
* @param semaid - The sema id returned from ::sceKernelCreateSema
|
||||||
|
* @param setCount - The new lock count of the semaphore
|
||||||
|
* @param numWaitThreads - Number of threads waiting for the semaphore
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
CancelSema :: proc(semaid: sce.UID, setCount: c.int, numWaitThreads: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve information about a semaphore.
|
||||||
|
*
|
||||||
|
* @param semaid - UID of the semaphore to retrieve info for.
|
||||||
|
* @param info - Pointer to a ::SceKernelSemaInfo struct to receive the info.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
GetSemaInfo :: proc(semaid: sce.UID, info: ^SceKernelSemaInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sleep current thread and wait for a signal. After it receives a signal, the thread wakes up.
|
||||||
|
*
|
||||||
|
* This is like a semphore with limit 1.
|
||||||
|
* If signal was sent before and not consumed before, the function will immediately return.
|
||||||
|
* @param unk0 unknown parameter. 0 can be used.
|
||||||
|
* @param delay the delay before wating for a signal
|
||||||
|
* @param timeout the timeout if it's null, it waits indefinitely.
|
||||||
|
* @return 0 on success
|
||||||
|
*/
|
||||||
|
WaitSignal :: proc(unk0: sce.UInt32, delay: sce.UInt32, timeout: ^sce.UInt32) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a thread
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* SceUID thid
|
||||||
|
* thid = sceKernelCreateThread("my_thread", threadFunc, 0x10000100, 0x10000, 0, 0, NULL)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param name - An arbitrary thread name.
|
||||||
|
* @param entry - The thread function to run when started.
|
||||||
|
* @param initPriority - The initial priority of the thread. Less if higher priority.
|
||||||
|
* @param stackSize - The size of the initial stack.
|
||||||
|
* @param attr - The thread attributes, zero or more of ::SceThreadAttributes.
|
||||||
|
* @param cpuAffinityMask - The CPU affinity mask
|
||||||
|
* A thread can run only on the cores specified in the CPU affinity mask.
|
||||||
|
* The CPU affinity mask can be specified by the logical sum of the following macros:
|
||||||
|
* - SCE_KERNEL_CPU_MASK_USER_0
|
||||||
|
* - SCE_KERNEL_CPU_MASK_USER_1
|
||||||
|
* - SCE_KERNEL_CPU_MASK_USER_2
|
||||||
|
* - SCE_KERNEL_CPU_MASK_SYSTEM (system-reserved core)
|
||||||
|
* The following macro are also available to represent all available in userland CPU cores:
|
||||||
|
* - SCE_KERNEL_CPU_MASK_USER_ALL
|
||||||
|
* The following macro are also available to inherit affinity mask of the calling process:
|
||||||
|
* - SCE_KERNEL_THREAD_CPU_AFFINITY_MASK_DEFAULT
|
||||||
|
* @param option - Additional options specified by ::SceKernelThreadOptParam.
|
||||||
|
|
||||||
|
* @return UID of the created thread, or an error code.
|
||||||
|
*/
|
||||||
|
CreateThread :: proc(name: cstring, entry: SceKernelThreadEntry, initPriority: c.int, stackSize: sce.Size, attr: sce.UInt, cpuAffinityMask: c.int, option: ^SceKernelThreadOptParam) -> sce.UID ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start a created thread
|
||||||
|
*
|
||||||
|
* @param thid - Thread id from ::sceKernelCreateThread
|
||||||
|
* @param arglen - Length of the data pointed to by argp, in bytes
|
||||||
|
* @param argp - Pointer to the arguments.
|
||||||
|
*/
|
||||||
|
StartThread :: proc(thid: sce.UID, arglen: sce.Size, argp: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait until a thread has ended.
|
||||||
|
*
|
||||||
|
* @param thid - Id of the thread to wait for.
|
||||||
|
* @param stat - Exit status.
|
||||||
|
* @param timeout - Timeout in microseconds (assumed).
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
WaitThreadEnd :: proc(thid: sce.UID, stat: ^c.int, timeout: ^sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait until a thread has ended and handle callbacks if necessary.
|
||||||
|
*
|
||||||
|
* @param thid - Id of the thread to wait for.
|
||||||
|
* @param stat - Exit status.
|
||||||
|
* @param timeout - Timeout in microseconds (assumed).
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
WaitThreadEndCB :: proc(thid: sce.UID, stat: ^c.int, timeout: ^sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modify the attributes of the current thread.
|
||||||
|
*
|
||||||
|
* @param clearAttr - The thread attributes to clear. One of ::SceThreadAttributes.
|
||||||
|
* @param setAttr - The thread attributes to set. One of ::SceThreadAttributes.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
ChangeCurrentThreadAttr :: proc(clearAttr: sce.UInt, setAttr: sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current priority of the thread you are in.
|
||||||
|
*
|
||||||
|
* @return The current thread priority
|
||||||
|
*/
|
||||||
|
GetThreadCurrentPriority :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the exit status of a thread.
|
||||||
|
*
|
||||||
|
* @param[in] thid - The UID of the thread to check.
|
||||||
|
* @param[out] status - Status out pointer
|
||||||
|
* @return The exit status
|
||||||
|
*/
|
||||||
|
GetThreadExitStatus :: proc(thid: sce.UID, status: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the thread stack?
|
||||||
|
*
|
||||||
|
* @return Unknown.
|
||||||
|
*/
|
||||||
|
CheckThreadStack :: proc() -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the status information for the specified thread.
|
||||||
|
*
|
||||||
|
* @param thid - Id of the thread to get status
|
||||||
|
* @param info - Pointer to the info structure to receive the data.
|
||||||
|
* Note: The structures size field should be set to
|
||||||
|
* sizeof(SceKernelThreadInfo) before calling this function.
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* SceKernelThreadInfo status
|
||||||
|
* status.size = sizeof(SceKernelThreadInfo)
|
||||||
|
* if(sceKernelGetThreadInfo(thid, &status) == 0)
|
||||||
|
* { Do something... }
|
||||||
|
* @endcode
|
||||||
|
* @return 0 if successful, otherwise the error code.
|
||||||
|
*/
|
||||||
|
GetThreadInfo :: proc(thid: sce.UID, info: ^SceKernelThreadInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrive the runtime status of a thread.
|
||||||
|
*
|
||||||
|
* @param thid - UID of the thread to retrieve status.
|
||||||
|
* @param status - Pointer to a ::SceKernelThreadRunStatus struct to receive the runtime status.
|
||||||
|
*
|
||||||
|
* @return 0 if successful, otherwise the error code.
|
||||||
|
*/
|
||||||
|
GetThreadRunStatus :: proc(thid: sce.UID, status: ^SceKernelThreadRunStatus) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current thread Id
|
||||||
|
*
|
||||||
|
* @return The thread id of the calling thread.
|
||||||
|
*/
|
||||||
|
GetThreadId :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the system information
|
||||||
|
*
|
||||||
|
* @param info - Pointer to a ::SceKernelSystemInfo structure
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetSystemInfo :: proc(info: ^SceKernelSystemInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief sceKernelGetTLSAddr get pointer to TLS key area for current thread
|
||||||
|
* @param key - the TLS keyslot index
|
||||||
|
* @return pointer to TLS key value
|
||||||
|
*/
|
||||||
|
GetTLSAddr :: proc(key: c.int) -> rawptr ---
|
||||||
|
|
||||||
|
AtomicSet8 :: proc(store: ^sce.Int8, value: sce.Int8) ---
|
||||||
|
AtomicSet16 :: proc(store: sce.Int16, value: sce.Int16) ---
|
||||||
|
AtomicSet32 :: proc(store: sce.Int32, value: sce.Int32) ---
|
||||||
|
AtomicSet64 :: proc(store: sce.Int64, value: sce.Int64) ---
|
||||||
|
|
||||||
|
AtomicCompareAndSet8 :: proc(store: sce.Int8, value, SceInt8, new_value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicCompareAndSet16 :: proc(store: sce.Int16, value, SceInt16, new_value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicCompareAndSet32 :: proc(store: sce.Int32, value, SceInt32, new_value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicCompareAndSet64 :: proc(store: sce.Int64, value, SceInt64, new_value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
|
||||||
|
AtomicAddAndGet8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicAddAndGet16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicAddAndGet32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicAddAndGet64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicAddUnless8 :: proc(store: sce.Int8, value: sce.Int8, cmpv: sce.Int8) -> sce.Bool ---
|
||||||
|
AtomicAddUnless16 :: proc(store: sce.Int16, value: sce.Int16, cmpv: sce.Int16) -> sce.Bool ---
|
||||||
|
AtomicAddUnless32 :: proc(store: sce.Int32, value: sce.Int32, cmpv: sce.Int32) -> sce.Bool ---
|
||||||
|
AtomicAddUnless64 :: proc(store: sce.Int64, value: sce.Int64, cmpv: sce.Int64) -> sce.Bool ---
|
||||||
|
|
||||||
|
AtomicSubAndGet8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicSubAndGet16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicSubAndGet32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicSubAndGet64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicAndAndGet8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicAndAndGet16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicAndAndGet32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicAndAndGet64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicOrAndGet8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicOrAndGet16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicOrAndGet32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicOrAndGet64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicXorAndGet8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicXorAndGet16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicXorAndGet32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicXorAndGet64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicClearAndGet8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicClearAndGet16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicClearAndGet32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicClearAndGet64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
|
||||||
|
AtomicGetAndSet8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicGetAndSet16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicGetAndSet32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicGetAndSet64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicGetAndAdd8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicGetAndAdd16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicGetAndAdd32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicGetAndAdd64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicGetAndSub8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicGetAndSub16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicGetAndSub32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicGetAndSub64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicGetAndAnd8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicGetAndAnd16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicGetAndAnd32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicGetAndAnd64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicGetAndOr8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicGetAndOr16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicGetAndOr32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicGetAndOr64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicGetAndXor8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicGetAndXor16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicGetAndXor32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicGetAndXor64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
AtomicGetAndClear8 :: proc(store: sce.Int8, value: sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicGetAndClear16 :: proc(store: sce.Int16, value: sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicGetAndClear32 :: proc(store: sce.Int32, value: sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicGetAndClear64 :: proc(store: sce.Int64, value: sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
|
||||||
|
AtomicClearMask8 :: proc(store: sce.Int8, value: sce.Int8) ---
|
||||||
|
AtomicClearMask16 :: proc(store: sce.Int16, value: sce.Int16) ---
|
||||||
|
AtomicClearMask32 :: proc(store: sce.Int32, value: sce.Int32) ---
|
||||||
|
AtomicClearMask64 :: proc(store: sce.Int64, value: sce.Int64) ---
|
||||||
|
|
||||||
|
AtomicDecIfPositive8 :: proc(store: ^sce.Int8) -> sce.Int8 ---
|
||||||
|
AtomicDecIfPositive16 :: proc(store: ^sce.Int16) -> sce.Int16 ---
|
||||||
|
AtomicDecIfPositive32 :: proc(store: ^sce.Int32) -> sce.Int32 ---
|
||||||
|
AtomicDecIfPositive64 :: proc(store: ^sce.Int64) -> sce.Int64 ---
|
||||||
|
|
||||||
|
|
||||||
|
LoadModule :: proc(path: cstring, flags: c.int, option: ^SceKernelLMOption) -> sce.UID ---
|
||||||
|
UnloadModule :: proc(modid: sce.UID, flags: c.int, option: ^SceKernelULMOption) -> c.int ---
|
||||||
|
|
||||||
|
StartModule :: proc(modid: sce.UID, args: sce.Size, argp: rawptr, flags: c.int, option: rawptr, status: ^c.int) -> c.int ---
|
||||||
|
StopModule :: proc(modid: sce.UID, args: sce.Size, argp: rawptr, flags: c.int, option: rawptr, status: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
LoadStartModule :: proc(path: cstring, args: sce.Size, argp: rawptr, flags: c.int, option: ^SceKernelLMOption, status: ^c.int) -> sce.UID ---
|
||||||
|
StopUnloadModule :: proc(modid: sce.UID, args: sce.Size, argp: rawptr, flags: c.int, option: ^SceKernelULMOption, status: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exit current Process with specified return code
|
||||||
|
*
|
||||||
|
* @param[in] res - Exit code to return
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
ExitProcess :: proc(res: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the process time of the current process.
|
||||||
|
*
|
||||||
|
* @param[out] type - Pointer to a ::SceKernelSysClock structure which will receive the process time.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetProcessTime :: proc(pSysClock: ^sce.KernelSysClock) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the lower 32 bits part of process time of the current process.
|
||||||
|
*
|
||||||
|
* @return process time of the current process
|
||||||
|
*/
|
||||||
|
GetProcessTimeLow :: proc() -> sce.UInt32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the process time of the current process.
|
||||||
|
*
|
||||||
|
* @return process time of the current process
|
||||||
|
*/
|
||||||
|
GetProcessTimeWide :: proc() -> sce.UInt64 ---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GetOpenPsId :: proc(id: ^SceKernelOpenPsId) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package kernel
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import modulemgr "system:SceKernelModulemgr_stub"
|
||||||
|
|
||||||
|
// missing structs
|
||||||
|
SceKernelLoadModuleOption :: struct {}
|
||||||
|
SceKernelUnloadModuleOption :: struct {}
|
||||||
|
SceKernelLibraryInfo :: struct {}
|
||||||
|
|
||||||
|
@(link_prefix = "sceKernel")
|
||||||
|
foreign modulemgr {
|
||||||
|
GetModuleInfo :: proc(uid: sce.UID, info: ^SceKernelModuleInfo) -> c.int ---
|
||||||
|
GetModuleList :: proc(type: sce.UInt8, uids: [^]sce.UID, num: ^sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets system firmware information.
|
||||||
|
*
|
||||||
|
* @param[out] version - System sw version.
|
||||||
|
*
|
||||||
|
* @note - If you spoofed the firmware version it will return the spoofed firmware.
|
||||||
|
*/
|
||||||
|
GetSystemSwVersion :: proc(version: ^SceKernelSystemSwVersion) -> c.int ---
|
||||||
|
|
||||||
|
@(link_name = "_sceKernelLoadModule")
|
||||||
|
_LoadModule :: proc(module_filename: cstring, flags: sce.UInt32, option: ^SceKernelLoadModuleOption) -> sce.UID ---
|
||||||
|
@(link_name = "_sceKernelLoadStartModule")
|
||||||
|
_LoadStartModule :: proc(module_filename: cstring, args: sce.Size, argp: rawptr, flags: sce.UInt32) -> sce.UID ---
|
||||||
|
@(link_name = "_sceKernelUnloadModule")
|
||||||
|
_UnloadModule :: proc(uid: sce.UID, flags: sce.UInt32, option: ^SceKernelUnloadModuleOption) -> c.int ---
|
||||||
|
@(link_name = "_sceKernelStopModule")
|
||||||
|
_StopModule :: proc(uid: sce.UID, args: sce.Size, argp: rawptr, flags: sce.UInt32) -> c.int ---
|
||||||
|
@(link_name = "_sceKernelStopUnloadModule")
|
||||||
|
_StopUnloadModule :: proc(uid: sce.UID, args: sce.Size, argp: rawptr, flags: sce.UInt32) -> c.int ---
|
||||||
|
|
||||||
|
@(link_name = "_sceKernelOpenModule")
|
||||||
|
_OpenModule :: proc(module_filename: cstring, args: sce.Size, argp: rawptr, flags: sce.UInt32) -> sce.UID ---
|
||||||
|
@(link_name = "_sceKernelCloseModule")
|
||||||
|
_CloseModule :: proc(modid: sce.UID, args: sce.Size, argp: rawptr, flags: sce.UInt32) -> sce.UID ---
|
||||||
|
|
||||||
|
GetLibraryInfoByNID :: proc(modid: sce.UID, libnid: sce.NID, info: ^SceKernelLibraryInfo) -> c.int ---
|
||||||
|
|
||||||
|
IsCalledFromSysModule :: proc(lr: rawptr) -> c.int ---
|
||||||
|
GetModuleIdByAddr :: proc(addr: rawptr) -> sce.UID ---
|
||||||
|
GetAllowedSdkVersionOnSystem :: proc() -> sce.UInt32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package kernel
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import processmgr "system:SceProcessmgr_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceKernel")
|
||||||
|
foreign processmgr {
|
||||||
|
/**
|
||||||
|
* Cancel specified idle timers to prevent entering in power save processing.
|
||||||
|
*
|
||||||
|
* @param[in] type - One of ::SceKernelPowerTickType
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
PowerTick :: proc(type: SceKernelPowerTickType) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Locks certain timers from triggering.
|
||||||
|
*
|
||||||
|
* @param[in] type - One of ::SceKernelPowerTickType
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
PowerLock :: proc(type: SceKernelPowerTickType) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unlocks certain timers.
|
||||||
|
*
|
||||||
|
* @param[in] type - One of ::SceKernelPowerTickType
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
PowerUnlock :: proc(type: SceKernelPowerTickType) -> c.int ---
|
||||||
|
|
||||||
|
GetCurrentProcess :: proc() -> sce.UID ---
|
||||||
|
GetRemoteProcessTime :: proc(processId: sce.UID, pClock: ^sce.KernelSysClock) -> sce.Int32 ---
|
||||||
|
|
||||||
|
GetStderr :: proc() -> sce.UID ---
|
||||||
|
GetStdin :: proc() -> sce.UID ---
|
||||||
|
GetStdout :: proc() -> sce.UID ---
|
||||||
|
|
||||||
|
GetProcessParam :: proc() -> rawptr ---
|
||||||
|
|
||||||
|
LibcClock :: proc() -> SceKernelClock ---
|
||||||
|
LibcTime :: proc(tloc: ^SceKernelTime) -> SceKernelTime ---
|
||||||
|
|
||||||
|
LibcGettimeofday :: proc(tv: ^SceKernelTimeval, tz: ^SceKernelTimezone) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
package kernel
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import sysmem "system:SceSysmem_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceKernel")
|
||||||
|
foreign sysmem {
|
||||||
|
GetCpuId :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocates a new memory block
|
||||||
|
*
|
||||||
|
* @param[in] name - Name for the memory block
|
||||||
|
* @param[in] type - Type of the memory to allocate. Use `SCE_KERNEL_MEMBLOCK_TYPE_USER_*`.
|
||||||
|
* @param[in] size - Size of the memory to allocate
|
||||||
|
* @param[in] opt - Memory block options?
|
||||||
|
*
|
||||||
|
* @return SceUID of the memory block on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
AllocMemBlock :: proc(name: cstring, type: SceKernelMemBlockType, size: sce.Size, opt: ^SceKernelAllocMemBlockOpt) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frees new memory block
|
||||||
|
*
|
||||||
|
* @param[in] uid - SceUID of the memory block to free
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
FreeMemBlock :: proc(uid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the base address of a memory block
|
||||||
|
*
|
||||||
|
* @param[in] uid - SceUID of the memory block to free
|
||||||
|
* @param[out] base - Base address of the memory block identified by SceUID
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetMemBlockBase :: proc(uid: sce.UID, base: ^rawptr) -> c.int ---
|
||||||
|
|
||||||
|
FindMemBlockByAddr :: proc(addr: rawptr, size: sce.Size) -> sce.UID ---
|
||||||
|
|
||||||
|
GetMemBlockInfoByAddr :: proc(base: rawptr, info: ^SceKernelMemBlockInfo) -> c.int ---
|
||||||
|
GetMemBlockInfoByRange :: proc(base: rawptr, size: sce.Size, info: ^SceKernelMemBlockInfo) -> c.int ---
|
||||||
|
|
||||||
|
AllocMemBlockForVM :: proc(name: cstring, size: sce.Size) -> sce.UID ---
|
||||||
|
SyncVMDomain :: proc(uid: sce.UID, data: rawptr, size: sce.Size) -> c.int ---
|
||||||
|
OpenVMDomain :: proc() -> c.int ---
|
||||||
|
CloseVMDomain :: proc() -> c.int ---
|
||||||
|
|
||||||
|
OpenMemBlock :: proc(name: cstring, flags: c.int) -> c.int ---
|
||||||
|
CloseMemBlock :: proc(uid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the model number of the device
|
||||||
|
*
|
||||||
|
* @return A value from SCE_KERNEL_MODEL
|
||||||
|
*/
|
||||||
|
GetModelForCDialog :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the model number of the device
|
||||||
|
*
|
||||||
|
* @return A value from SCE_KERNEL_MODEL
|
||||||
|
*/
|
||||||
|
GetModel :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get free memory size in bytes
|
||||||
|
*
|
||||||
|
* @param[out] info - Returned free memory size for different kind of memory block types
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetFreeMemorySize :: proc(info: ^SceKernelFreeMemorySizeInfo) -> c.int ---
|
||||||
|
|
||||||
|
IsPSVitaTV :: proc() -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,433 @@
|
|||||||
|
package kernel
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import threadmgr "system:SceKernelThreadMgr_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceKernel")
|
||||||
|
foreign threadmgr {
|
||||||
|
/**
|
||||||
|
* Create callback
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* int cbid
|
||||||
|
* cbid = sceKernelCreateCallback("Exit Callback", 0, exit_cb, NULL)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param name - A textual name for the callback
|
||||||
|
* @param attr - ?
|
||||||
|
* @param func - A pointer to a function that will be called as the callback
|
||||||
|
* @param userData - User defined data to be passed to the callback.
|
||||||
|
*
|
||||||
|
* @return >= 0 A callback id which can be used in subsequent functions, < 0 an error.
|
||||||
|
*/
|
||||||
|
CreateCallback :: proc(name: cstring, attr: c.uint, func: SceKernelCallbackFunction, userData: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a callback
|
||||||
|
*
|
||||||
|
* @param cb - The UID of the specified callback
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
DeleteCallback :: proc(cb: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify a callback
|
||||||
|
*
|
||||||
|
* @param cb - The UID of the specified callback
|
||||||
|
* @param arg2 - Passed as arg2 into the callback function
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
NotifyCallback :: proc(cb: sce.UID, arg2: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel a callback ?
|
||||||
|
*
|
||||||
|
* @param cb - The UID of the specified callback
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
CancelCallback :: proc(cb: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the callback count
|
||||||
|
*
|
||||||
|
* @param cb - The UID of the specified callback
|
||||||
|
*
|
||||||
|
* @return The callback count, < 0 on error
|
||||||
|
*/
|
||||||
|
GetCallbackCount :: proc(cb: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check callback ?
|
||||||
|
*
|
||||||
|
* @return Something or another
|
||||||
|
*/
|
||||||
|
CheckCallback :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy a condition variable
|
||||||
|
*
|
||||||
|
* @param condition variableid - The condition variable id returned from ::sceKernelCreateCond
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
DeleteCond :: proc(condId: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a condition variable
|
||||||
|
*
|
||||||
|
* @param name - The name of the condition variable to open
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
OpenCond :: proc(name: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close a condition variable
|
||||||
|
*
|
||||||
|
* @param condition variableid - The condition variable id returned from ::sceKernelCreateCond
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
CloseCond :: proc(condId: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signals a condition variable
|
||||||
|
*
|
||||||
|
* @param condId - The condition variable id returned from ::sceKernelCreateCond
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
SignalCond :: proc(condId: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signals a condition variable to all threads waiting for it
|
||||||
|
*
|
||||||
|
* @param condId - The condition variable id returned from ::sceKernelCreateCond
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
SignalCondAll :: proc(condId: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signals a condition variable to a specific thread waiting for it
|
||||||
|
*
|
||||||
|
* @param condId - The condition variable id returned from ::sceKernelCreateCond
|
||||||
|
* @param threadId - The thread id returned from ::sceKernelCreateThread
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
SignalCondTo :: proc(condId: sce.UID, threadId: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set an event flag bit pattern.
|
||||||
|
*
|
||||||
|
* @param evid - The event id returned by ::sceKernelCreateEventFlag.
|
||||||
|
* @param bits - The bit pattern to set.
|
||||||
|
*
|
||||||
|
* @return < 0 On error
|
||||||
|
*/
|
||||||
|
SetEventFlag :: proc(evid: sce.UID, bits: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear a event flag bit pattern
|
||||||
|
*
|
||||||
|
* @param evid - The event id returned by ::sceKernelCreateEventFlag
|
||||||
|
* @param bits - The bits to clean
|
||||||
|
*
|
||||||
|
* @return < 0 on Error
|
||||||
|
*/
|
||||||
|
ClearEventFlag :: proc(evid: sce.UID, bits: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an event flag
|
||||||
|
*
|
||||||
|
* @param evid - The event id returned by ::sceKernelCreateEventFlag.
|
||||||
|
*
|
||||||
|
* @return < 0 On error
|
||||||
|
*/
|
||||||
|
DeleteEventFlag :: proc(evid: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a message pipe
|
||||||
|
*
|
||||||
|
* @param uid - The UID of the pipe
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
DeleteMsgPipe :: proc(uid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy a mutex
|
||||||
|
*
|
||||||
|
* @param mutexid - The mutex id returned from ::sceKernelCreateMutex
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
DeleteMutex :: proc(mutexid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a mutex
|
||||||
|
*
|
||||||
|
* @param name - The name of the mutex to open
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
OpenMutex :: proc(name: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close a mutex
|
||||||
|
*
|
||||||
|
* @param mutexid - The mutex id returned from ::sceKernelCreateMutex
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
CloseMutex :: proc(mutexid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to lock a mutex (non-blocking)
|
||||||
|
*
|
||||||
|
* @param mutexid - The mutex id returned from ::sceKernelCreateMutex
|
||||||
|
* @param lockCount - The value to increment to the lock count of the mutex
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
TryLockMutex :: proc(mutexid: sce.UID, lockCount: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to unlock a mutex (non-blocking)
|
||||||
|
*
|
||||||
|
* @param mutexid - The mutex id returned from ::sceKernelCreateMutex
|
||||||
|
* @param unlockCount - The value to decrement to the lock count of the mutex
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
UnlockMutex :: proc(mutexid: sce.UID, unlockCount: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy a rwlock
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
DeleteRWLock :: proc(rwlock_id: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a rwlock
|
||||||
|
*
|
||||||
|
* @param name - The name of the rwlock to open
|
||||||
|
* @return RWLock id on success, < 0 on error
|
||||||
|
*/
|
||||||
|
OpenRWLock :: proc(name: cstring) -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close a rwlock
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
CloseRWLock :: proc(rwlock_id: sce.UID) -> c.int ---
|
||||||
|
/**
|
||||||
|
* Try to lock a rwlock with read access (non-blocking)
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
TryLockReadRWLock :: proc(rwlock_id: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to lock a rwlock with write access (non-blocking)
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
TryLockWriteRWLock :: proc(rwlock_id: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to unlock a rwlock with read access (non-blocking)
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
UnlockReadRWLock :: proc(rwlock_id: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to unlock a rwlock with write access (non-blocking)
|
||||||
|
*
|
||||||
|
* @param rwlock_id - The rwlock id returned from ::sceKernelCreateRWLock
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
UnlockWriteRWLock :: proc(rwlock_id: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy a semaphore
|
||||||
|
*
|
||||||
|
* @param semaid - The semaid returned from a previous create call.
|
||||||
|
* @return Returns the value 0 if it's successful, otherwise -1
|
||||||
|
*/
|
||||||
|
DeleteSema :: proc(semaid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a signal to a semaphore
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* // Signal the sema
|
||||||
|
* sceKernelSignalSema(semaid, 1)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @param semaid - The sema id returned from ::sceKernelCreateSema
|
||||||
|
* @param signal - The amount to signal the sema (i.e. if 2 then increment the sema by 2)
|
||||||
|
*
|
||||||
|
* @return < 0 On error.
|
||||||
|
*/
|
||||||
|
SignalSema :: proc(semaid: sce.UID, signal: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Poll a semaphore.
|
||||||
|
*
|
||||||
|
* @param semaid - UID of the semaphore to poll.
|
||||||
|
* @param signal - The value to test for.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
PollSema :: proc(semaid: sce.UID, signal: c.int) -> c.int ---
|
||||||
|
|
||||||
|
OpenSema :: proc(name: cstring) -> sce.UID ---
|
||||||
|
|
||||||
|
CloseSema :: proc(semaid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Send a signal to the thread specified by thid. Note that it can send a signal to the current thread as well.
|
||||||
|
*
|
||||||
|
* @param thid - the id of the thread to send a signal to
|
||||||
|
* @return 0 on success
|
||||||
|
* @return SCE_KERNEL_ERROR_ALREADY_SENT if the last signal was not consumed by sceKernelWaitSignal
|
||||||
|
*/
|
||||||
|
SendSignal :: proc(thid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delate a thread
|
||||||
|
*
|
||||||
|
* @param thid - UID of the thread to be deleted.
|
||||||
|
*
|
||||||
|
* @return < 0 on error.
|
||||||
|
*/
|
||||||
|
DeleteThread :: proc(thid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exit a thread
|
||||||
|
*
|
||||||
|
* @param status - Exit status.
|
||||||
|
*/
|
||||||
|
ExitThread :: proc(status: c.int) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exit a thread and delete itself.
|
||||||
|
*
|
||||||
|
* @param status - Exit status
|
||||||
|
*/
|
||||||
|
ExitDeleteThread :: proc(status: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delay the current thread by a specified number of microseconds
|
||||||
|
*
|
||||||
|
* @param delay - Delay in microseconds.
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* sceKernelDelayThread(1000000) // Delay for a second
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
DelayThread :: proc(delay: sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delay the current thread by a specified number of microseconds and handle any callbacks.
|
||||||
|
*
|
||||||
|
* @param delay - Delay in microseconds.
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* sceKernelDelayThread(1000000) // Delay for a second
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
DelayThreadCB :: proc(delay: sce.UInt) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the threads current priority.
|
||||||
|
*
|
||||||
|
* @param thid - The ID of the thread (from ::sceKernelCreateThread or ::sceKernelGetThreadId)
|
||||||
|
* @param priority - The new priority (the lower the number the higher the priority)
|
||||||
|
*
|
||||||
|
* @par Example:
|
||||||
|
* @code
|
||||||
|
* int thid = sceKernelGetThreadId()
|
||||||
|
* // Change priority of current thread to 16
|
||||||
|
* sceKernelChangeThreadPriority(thid, 16)
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @return 0 if successful, otherwise the error code.
|
||||||
|
*/
|
||||||
|
ChangeThreadPriority :: proc(thid: sce.UID, priority: c.int) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the free stack size for a thread.
|
||||||
|
*
|
||||||
|
* @param thid - The thread ID
|
||||||
|
*
|
||||||
|
* @return The free size.
|
||||||
|
*/
|
||||||
|
GetThreadStackFreeSize :: proc(thid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrive the cpu affinity mask of a thread.
|
||||||
|
*
|
||||||
|
* @param thid - UID of the thread to retrieve affinity mask for.
|
||||||
|
*
|
||||||
|
* @return current affinity mask if >= 0, otherwise the error code.
|
||||||
|
*/
|
||||||
|
GetThreadCpuAffinityMask :: proc(thid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the cpu affinity mask of a thread.
|
||||||
|
*
|
||||||
|
* @param thid - UID of the thread to retrieve affinity mask for.
|
||||||
|
* @param mask - New cpu affinity mask.
|
||||||
|
*
|
||||||
|
* @return 0 if successful, otherwise the error code.
|
||||||
|
*/
|
||||||
|
ChangeThreadCpuAffinityMask :: proc(thid: sce.UID, mask: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the process ID of in the running thread.
|
||||||
|
*
|
||||||
|
* @return process ID of in the running thread
|
||||||
|
*/
|
||||||
|
GetProcessId :: proc() -> sce.UID ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the type of a Threadmgr uid
|
||||||
|
*
|
||||||
|
* @param uid - The uid to get the type from
|
||||||
|
*
|
||||||
|
* @return The type, < 0 on error
|
||||||
|
*/
|
||||||
|
GetThreadmgrUIDClass :: proc(uid: sce.UID) -> SceKernelIdListType ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief sceKernelGetThreadTLSAddr gets an address to a 4 bytes area of TLS memory for the specified thread
|
||||||
|
* @param thid - The UID of the thread to access TLS
|
||||||
|
* @param key - the TLS keyslot index
|
||||||
|
* @return pointer to TLS memory
|
||||||
|
*/
|
||||||
|
GetThreadTLSAddr :: proc(thid: sce.UID, key: c.int) -> rawptr ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the system time (wide version)
|
||||||
|
*
|
||||||
|
* @return The system time
|
||||||
|
*/
|
||||||
|
GetSystemTimeWide :: proc() -> sce.Int64 ---
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,953 @@
|
|||||||
|
package kernel
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
// TODO: this should be a c.int
|
||||||
|
SceKernelErrorCode :: enum i64 {
|
||||||
|
OK = 0x0,
|
||||||
|
ERROR = 0x80020001,
|
||||||
|
NOT_IMPLEMENTED = 0x80020002,
|
||||||
|
NOSYS = 0x80020003,
|
||||||
|
UNSUP = 0x80020004,
|
||||||
|
INVALID_ARGUMENT = 0x80020005,
|
||||||
|
ILLEGAL_ADDR = 0x80020006,
|
||||||
|
ILLEGAL_ALIGNMENT = 0x80020007,
|
||||||
|
ILLEGAL_PERMISSION = 0x80020008,
|
||||||
|
INVALID_ARGUMENT_SIZE = 0x80020009,
|
||||||
|
INVALID_FLAGS = 0x8002000A,
|
||||||
|
ILLEGAL_SIZE = 0x8002000B,
|
||||||
|
ILLEGAL_TYPE = 0x8002000C,
|
||||||
|
ILLEGAL_PATTERN = 0x8002000D,
|
||||||
|
ILLEGAL_ATTR = 0x8002000E,
|
||||||
|
ILLEGAL_COUNT = 0x8002000F,
|
||||||
|
ILLEGAL_MODE = 0x80020010,
|
||||||
|
ILLEGAL_OPEN_LIMIT = 0x80020011,
|
||||||
|
ONLY_DEVELOPMENT_MODE = 0x80020012,
|
||||||
|
DEBUG_ERROR = 0x80021000,
|
||||||
|
ILLEGAL_DIPSW_NUMBER = 0x80021001,
|
||||||
|
PA_ERROR = 0x80021100,
|
||||||
|
PA_NOT_AVAILABLE = 0x80021101,
|
||||||
|
PA_INVALID_KEY = 0x80021102,
|
||||||
|
PA_KEY_IS_NOT_SHARED = 0x80021103,
|
||||||
|
PA_INVALID_SIGNATURE = 0x80021104,
|
||||||
|
CPU_ERROR = 0x80022000,
|
||||||
|
MMU_ILLEGAL_L1_TYPE = 0x80022001,
|
||||||
|
MMU_L2_INDEX_OVERFLOW = 0x80022002,
|
||||||
|
MMU_L2_SIZE_OVERFLOW = 0x80022003,
|
||||||
|
INVALID_CPU_AFFINITY = 0x80022004,
|
||||||
|
INVALID_MEMORY_ACCESS = 0x80022005,
|
||||||
|
INVALID_MEMORY_ACCESS_PERMISSION = 0x80022006,
|
||||||
|
VA2PA_FAULT = 0x80022007,
|
||||||
|
VA2PA_MAPPED = 0x80022008,
|
||||||
|
VALIDATION_CHECK_FAILED = 0x80022009,
|
||||||
|
SYSMEM_ERROR = 0x80024000,
|
||||||
|
INVALID_PROCESS_CONTEXT = 0x80024001,
|
||||||
|
UID_NAME_TOO_LONG = 0x80024002,
|
||||||
|
VARANGE_IS_NOT_PHYSICAL_CONTINUOUS = 0x80024003,
|
||||||
|
PHYADDR_ERROR = 0x80024100,
|
||||||
|
NO_PHYADDR = 0x80024101,
|
||||||
|
PHYADDR_USED = 0x80024102,
|
||||||
|
PHYADDR_NOT_USED = 0x80024103,
|
||||||
|
NO_IOADDR = 0x80024104,
|
||||||
|
PHYMEM_ERROR = 0x80024300,
|
||||||
|
ILLEGAL_PHYPAGE_STATUS = 0x80024301,
|
||||||
|
NO_FREE_PHYSICAL_PAGE = 0x80024302,
|
||||||
|
NO_FREE_PHYSICAL_PAGE_UNIT = 0x80024303,
|
||||||
|
PHYMEMPART_NOT_EMPTY = 0x80024304,
|
||||||
|
NO_PHYMEMPART_LPDDR2 = 0x80024305,
|
||||||
|
NO_PHYMEMPART_CDRAM = 0x80024306,
|
||||||
|
PHYMEMPART_OUT_OF_INDEX = 0x80024307,
|
||||||
|
CANNOT_GROW_PHYMEMPART = 0x80024308,
|
||||||
|
NO_FREE_PHYSICAL_PAGE_CDRAM = 0x80024309,
|
||||||
|
INVALID_SUBBUDGET_ID = 0x8002430A,
|
||||||
|
FIXEDHEAP_ERROR = 0x80024400,
|
||||||
|
FIXEDHEAP_ILLEGAL_SIZE = 0x80024401,
|
||||||
|
FIXEDHEAP_ILLEGAL_INDEX = 0x80024402,
|
||||||
|
FIXEDHEAP_INDEX_OVERFLOW = 0x80024403,
|
||||||
|
FIXEDHEAP_NO_CHUNK = 0x80024404,
|
||||||
|
UID_ERROR = 0x80024500,
|
||||||
|
INVALID_UID = 0x80024501,
|
||||||
|
SYSMEM_UID_INVALID_ARGUMENT = 0x80024502,
|
||||||
|
SYSMEM_INVALID_UID_RANGE = 0x80024503,
|
||||||
|
SYSMEM_NO_VALID_UID = 0x80024504,
|
||||||
|
SYSMEM_CANNOT_ALLOCATE_UIDENTRY = 0x80024505,
|
||||||
|
NOT_PROCESS_UID = 0x80024506,
|
||||||
|
NOT_KERNEL_UID = 0x80024507,
|
||||||
|
INVALID_UID_CLASS = 0x80024508,
|
||||||
|
INVALID_UID_SUBCLASS = 0x80024509,
|
||||||
|
UID_CANNOT_FIND_BY_NAME = 0x8002450A,
|
||||||
|
UID_NOT_VISIBLE = 0x8002450B,
|
||||||
|
UID_MAX_OPEN = 0x8002450C,
|
||||||
|
UID_RL_OVERFLOW = 0x8002450D,
|
||||||
|
VIRPAGE_ERROR = 0x80024600,
|
||||||
|
ILLEGAL_VIRPAGE_TYPE = 0x80024601,
|
||||||
|
BLOCK_ERROR = 0x80024700,
|
||||||
|
ILLEGAL_BLOCK_ID = 0x80024701,
|
||||||
|
ILLEGAL_BLOCK_TYPE = 0x80024702,
|
||||||
|
BLOCK_IN_USE = 0x80024703,
|
||||||
|
PARTITION_ERROR = 0x80024800,
|
||||||
|
ILLEGAL_PARTITION_ID = 0x80024801,
|
||||||
|
ILLEGAL_PARTITION_INDEX = 0x80024802,
|
||||||
|
NO_L2PAGETABLE = 0x80024803,
|
||||||
|
HEAPLIB_ERROR = 0x80024900,
|
||||||
|
ILLEGAL_HEAP_ID = 0x80024901,
|
||||||
|
OUT_OF_RANG = 0x80024902,
|
||||||
|
HEAPLIB_NOMEM = 0x80024903,
|
||||||
|
HEAPLIB_VERIFY_ERROR = 0x80024904,
|
||||||
|
SYSMEM_ADDRESS_SPACE_ERROR = 0x80024A00,
|
||||||
|
INVALID_ADDRESS_SPACE_ID = 0x80024A01,
|
||||||
|
INVALID_PARTITION_INDEX = 0x80024A02,
|
||||||
|
ADDRESS_SPACE_CANNOT_FIND_PARTITION_BY_ADDR = 0x80024A03,
|
||||||
|
SYSMEM_MEMBLOCK_ERROR = 0x80024B00,
|
||||||
|
ILLEGAL_MEMBLOCK_TYPE = 0x80024B01,
|
||||||
|
ILLEGAL_MEMBLOCK_REMAP_TYPE = 0x80024B02,
|
||||||
|
NOT_PHY_CONT_MEMBLOCK = 0x80024B03,
|
||||||
|
ILLEGAL_MEMBLOCK_CODE = 0x80024B04,
|
||||||
|
ILLEGAL_MEMBLOCK_SIZE = 0x80024B05,
|
||||||
|
ILLEGAL_USERMAP_SIZE = 0x80024B06,
|
||||||
|
MEMBLOCK_TYPE_FOR_KERNEL_PROCESS = 0x80024B07,
|
||||||
|
PROCESS_CANNOT_REMAP_MEMBLOCK = 0x80024B08,
|
||||||
|
MEMBLOCK_RANGE_ERROR = 0x80024B09,
|
||||||
|
MEMBLOCK_TYPE_FOR_UPDATER_OR_SAFEMODE = 0x80024B0A,
|
||||||
|
MEMBLOCK_OVERFLOW = 0x80024B0B,
|
||||||
|
SYSMEM_PHYMEMLOW_ERROR = 0x80024C00,
|
||||||
|
CANNOT_ALLOC_PHYMEMLOW = 0x80024C01,
|
||||||
|
UNKNOWN_PHYMEMLOW_TYPE = 0x80024C02,
|
||||||
|
SYSMEM_BITHEAP_ERROR = 0x80024D00,
|
||||||
|
CANNOT_ALLOC_BITHEAP = 0x80024D01,
|
||||||
|
SYSMEM_NAMEHEAP_ERROR = 0x80024E00,
|
||||||
|
NO_SUCH_NAME = 0x80024E01,
|
||||||
|
DUPLICATE_NAME = 0x80024E02,
|
||||||
|
LOADCORE_ERROR = 0x80025000,
|
||||||
|
ILLEGAL_ELF_HEADER = 0x80025001,
|
||||||
|
ILLEGAL_SELF_HEADER = 0x80025002,
|
||||||
|
EXCPMGR_ERROR = 0x80027000,
|
||||||
|
ILLEGAL_EXCPCODE = 0x80027001,
|
||||||
|
ILLEGAL_EXCPHANDLER = 0x80027002,
|
||||||
|
NOTFOUND_EXCPHANDLER = 0x80027003,
|
||||||
|
CANNOT_RELEASE_EXCPHANDLER = 0x80027004,
|
||||||
|
INTRMGR_ERROR = 0x80027100,
|
||||||
|
ILLEGAL_CONTEXT = 0x80027101,
|
||||||
|
ILLEGAL_INTRCODE = 0x80027102,
|
||||||
|
ILLEGAL_INTRPARAM = 0x80027103,
|
||||||
|
ILLEGAL_INTRPRIORITY = 0x80027104,
|
||||||
|
ILLEGAL_TARGET_CPU = 0x80027105,
|
||||||
|
ILLEGAL_INTRFILTER = 0x80027106,
|
||||||
|
ILLEGAL_INTRTYPE = 0x80027107,
|
||||||
|
ILLEGAL_HANDLER = 0x80027108,
|
||||||
|
FOUND_HANDLER = 0x80027109,
|
||||||
|
NOTFOUND_HANDLER = 0x8002710A,
|
||||||
|
NO_MEMORY = 0x8002710B,
|
||||||
|
DMACMGR_ERROR = 0x80027200,
|
||||||
|
ALREADY_QUEUED = 0x80027201,
|
||||||
|
NOT_QUEUED = 0x80027202,
|
||||||
|
NOT_SETUP = 0x80027203,
|
||||||
|
ON_TRANSFERRING = 0x80027204,
|
||||||
|
NOT_INITIALIZED = 0x80027205,
|
||||||
|
TRANSFERRED = 0x80027206,
|
||||||
|
NOT_UNDER_CONTROL = 0x80027207,
|
||||||
|
CANCELING = 0x80027208,
|
||||||
|
SYSTIMER_ERROR = 0x80027300,
|
||||||
|
NO_FREE_TIMER = 0x80027301,
|
||||||
|
TIMER_NOT_ALLOCATED = 0x80027302,
|
||||||
|
TIMER_COUNTING = 0x80027303,
|
||||||
|
TIMER_STOPPED = 0x80027304,
|
||||||
|
THREADMGR_ERROR = 0x80028000,
|
||||||
|
UNKNOWN_UID = 0x80028001,
|
||||||
|
DIFFERENT_UID_CLASS = 0x80028002,
|
||||||
|
ALREADY_REGISTERED = 0x80028003,
|
||||||
|
CAN_NOT_WAIT = 0x80028004,
|
||||||
|
WAIT_TIMEOUT = 0x80028005,
|
||||||
|
WAIT_DELETE = 0x80028006,
|
||||||
|
WAIT_CANCEL = 0x80028007,
|
||||||
|
THREAD_ERROR = 0x80028020,
|
||||||
|
UNKNOWN_THREAD_ID = 0x80028021,
|
||||||
|
ILLEGAL_THREAD_ID = 0x80028022,
|
||||||
|
ILLEGAL_PRIORITY = 0x80028023,
|
||||||
|
ILLEGAL_STACK_SIZE = 0x80028024,
|
||||||
|
ILLEGAL_CPU_AFFINITY_MASK = 0x80028025,
|
||||||
|
ILLEGAL_THREAD_PARAM_COMBINATION = 0x80028026,
|
||||||
|
DORMANT = 0x80028027,
|
||||||
|
NOT_DORMANT = 0x80028028,
|
||||||
|
RUNNING = 0x80028029,
|
||||||
|
DELETED = 0x8002802A,
|
||||||
|
CAN_NOT_SUSPEND = 0x8002802B,
|
||||||
|
THREAD_STOPPED = 0x8002802C,
|
||||||
|
THREAD_SUSPENDED = 0x8002802D,
|
||||||
|
NOT_SUSPENDED = 0x8002802E,
|
||||||
|
ALREADY_DEBUG_SUSPENDED = 0x8002802F,
|
||||||
|
NOT_DEBUG_SUSPENDED = 0x80028030,
|
||||||
|
CAN_NOT_USE_VFP = 0x80028031,
|
||||||
|
THREAD_EVENT_ERROR = 0x80028060,
|
||||||
|
UNKNOWN_THREAD_EVENT_ID = 0x80028061,
|
||||||
|
KERNEL_TLS_ERROR = 0x80028080,
|
||||||
|
KERNEL_TLS_FULL = 0x80028081,
|
||||||
|
ILLEGAL_KERNEL_TLS_INDEX = 0x80028082,
|
||||||
|
KERNEL_TLS_BUSY = 0x80028083,
|
||||||
|
CALLBACK_ERROR = 0x800280A0,
|
||||||
|
UNKNOWN_CALLBACK_ID = 0x800280A1,
|
||||||
|
NOTIFY_CALLBACK = 0x800280A2,
|
||||||
|
CALLBACK_NOT_REGISTERED = 0x800280A3,
|
||||||
|
ALARM_ERROR = 0x800280C0,
|
||||||
|
UNKNOWN_ALARM_ID = 0x800280C1,
|
||||||
|
ALARM_CAN_NOT_CANCEL = 0x800280C2,
|
||||||
|
EVF_ERROR = 0x800280E0,
|
||||||
|
UNKNOWN_EVF_ID = 0x800280E1,
|
||||||
|
EVF_MULTI = 0x800280E2,
|
||||||
|
EVF_COND = 0x800280E3,
|
||||||
|
SEMA_ERROR = 0x80028100,
|
||||||
|
UNKNOWN_SEMA_ID = 0x80028101,
|
||||||
|
SEMA_ZERO = 0x80028102,
|
||||||
|
SEMA_OVF = 0x80028103,
|
||||||
|
SIGNAL_ERROR = 0x80028120,
|
||||||
|
ALREADY_SENT = 0x80028121,
|
||||||
|
MUTEX_ERROR = 0x80028140,
|
||||||
|
UNKNOWN_MUTEX_ID = 0x80028141,
|
||||||
|
MUTEX_RECURSIVE = 0x80028142,
|
||||||
|
MUTEX_LOCK_OVF = 0x80028143,
|
||||||
|
MUTEX_UNLOCK_UDF = 0x80028144,
|
||||||
|
MUTEX_FAILED_TO_OWN = 0x80028145,
|
||||||
|
MUTEX_NOT_OWNED = 0x80028146,
|
||||||
|
FAST_MUTEX_ERROR = 0x80028160,
|
||||||
|
UNKNOWN_FAST_MUTEX_ID = 0x80028161,
|
||||||
|
FAST_MUTEX_RECURSIVE = 0x80028162,
|
||||||
|
FAST_MUTEX_LOCK_OVF = 0x80028163,
|
||||||
|
FAST_MUTEX_FAILED_TO_OWN = 0x80028164,
|
||||||
|
FAST_MUTEX_NOT_OWNED = 0x80028165,
|
||||||
|
FAST_MUTEX_OWNED = 0x80028166,
|
||||||
|
FAST_MUTEX_ALREADY_INITIALIZED = 0x80028167,
|
||||||
|
FAST_MUTEX_NOT_INITIALIZED = 0x80028168,
|
||||||
|
LW_MUTEX_ERROR = 0x80028180,
|
||||||
|
UNKNOWN_LW_MUTEX_ID = 0x80028181,
|
||||||
|
LW_MUTEX_RECURSIVE = 0x80028182,
|
||||||
|
LW_MUTEX_LOCK_OVF = 0x80028183,
|
||||||
|
LW_MUTEX_UNLOCK_UDF = 0x80028184,
|
||||||
|
LW_MUTEX_FAILED_TO_OWN = 0x80028185,
|
||||||
|
LW_MUTEX_NOT_OWNED = 0x80028186,
|
||||||
|
COND_ERROR = 0x800281A0,
|
||||||
|
UNKNOWN_COND_ID = 0x800281A1,
|
||||||
|
WAIT_DELETE_MUTEX = 0x800281A2,
|
||||||
|
WAIT_CANCEL_MUTEX = 0x800281A3,
|
||||||
|
WAIT_DELETE_COND = 0x800281A4,
|
||||||
|
WAIT_CANCEL_COND = 0x800281A5,
|
||||||
|
LW_COND_ERROR = 0x800281C0,
|
||||||
|
UNKNOWN_LW_COND_ID = 0x800281C1,
|
||||||
|
WAIT_DELETE_LW_MUTEX = 0x800281C2,
|
||||||
|
WAIT_DELETE_LW_COND = 0x800281C3,
|
||||||
|
RW_LOCK_ERROR = 0x800281E0,
|
||||||
|
UNKNOWN_RW_LOCK_ID = 0x800281E1,
|
||||||
|
RW_LOCK_RECURSIVE = 0x800281E2,
|
||||||
|
RW_LOCK_LOCK_OVF = 0x800281E3,
|
||||||
|
RW_LOCK_NOT_OWNED = 0x800281E4,
|
||||||
|
RW_LOCK_UNLOCK_UDF = 0x800281E5,
|
||||||
|
RW_LOCK_FAILED_TO_LOCK = 0x800281E6,
|
||||||
|
RW_LOCK_FAILED_TO_UNLOCK = 0x800281E7,
|
||||||
|
EVENT_ERROR = 0x80028200,
|
||||||
|
UNKNOWN_EVENT_ID = 0x80028201,
|
||||||
|
EVENT_COND = 0x80028202,
|
||||||
|
MSG_PIPE_ERROR = 0x80028220,
|
||||||
|
UNKNOWN_MSG_PIPE_ID = 0x80028221,
|
||||||
|
MSG_PIPE_FULL = 0x80028222,
|
||||||
|
MSG_PIPE_EMPTY = 0x80028223,
|
||||||
|
MSG_PIPE_DELETED = 0x80028224,
|
||||||
|
TIMER_ERROR = 0x80028240,
|
||||||
|
UNKNOWN_TIMER_ID = 0x80028241,
|
||||||
|
EVENT_NOT_SET = 0x80028242,
|
||||||
|
SIMPLE_EVENT_ERROR = 0x80028260,
|
||||||
|
UNKNOWN_SIMPLE_EVENT_ID = 0x80028261,
|
||||||
|
PMON_ERROR = 0x80028280,
|
||||||
|
PMON_NOT_THREAD_MODE = 0x80028281,
|
||||||
|
PMON_NOT_CPU_MODE = 0x80028282,
|
||||||
|
WORK_QUEUE = 0x80028300,
|
||||||
|
UNKNOWN_WORK_QUEUE_ID = 0x80028301,
|
||||||
|
UNKNOWN_WORK_TASK_ID = 0x80028302,
|
||||||
|
PROCESSMGR_ERROR = 0x80029000,
|
||||||
|
INVALID_PID = 0x80029001,
|
||||||
|
INVALID_PROCESS_TYPE = 0x80029002,
|
||||||
|
PLS_FULL = 0x80029003,
|
||||||
|
INVALID_PROCESS_STATUS = 0x80029004,
|
||||||
|
PROCESS_CALLBACK_NOTFOUND = 0x80029005,
|
||||||
|
INVALID_BUDGET_ID = 0x80029006,
|
||||||
|
INVALID_BUDGET_SIZE = 0x80029007,
|
||||||
|
CP14_DISABLED = 0x80029008,
|
||||||
|
EXCEEDED_MAX_PROCESSES = 0x80029009,
|
||||||
|
PROCESS_REMAINING = 0x8002900A,
|
||||||
|
NO_PROCESS_DATA = 0x8002900B,
|
||||||
|
PROCESS_EVENT_INHIBITED = 0x8002900C,
|
||||||
|
IOFILEMGR_ERROR = 0x8002A000,
|
||||||
|
IO_NAME_TOO_LONG = 0x8002A001,
|
||||||
|
IO_REG_DEV = 0x8002A002,
|
||||||
|
IO_ALIAS_USED = 0x8002A003,
|
||||||
|
IO_DEL_DEV = 0x8002A004,
|
||||||
|
IO_WOULD_BLOCK = 0x8002A005,
|
||||||
|
MODULEMGR_START_FAILED = 0x8002D000,
|
||||||
|
MODULEMGR_STOP_FAIL = 0x8002D001,
|
||||||
|
MODULEMGR_IN_USE = 0x8002D002,
|
||||||
|
MODULEMGR_NO_LIB = 0x8002D003,
|
||||||
|
MODULEMGR_SYSCALL_REG = 0x8002D004,
|
||||||
|
MODULEMGR_NOMEM_LIB = 0x8002D005,
|
||||||
|
MODULEMGR_NOMEM_STUB = 0x8002D006,
|
||||||
|
MODULEMGR_NOMEM_SELF = 0x8002D007,
|
||||||
|
MODULEMGR_NOMEM = 0x8002D008,
|
||||||
|
MODULEMGR_INVALID_LIB = 0x8002D009,
|
||||||
|
MODULEMGR_INVALID_STUB = 0x8002D00A,
|
||||||
|
MODULEMGR_NO_FUNC_NID = 0x8002D00B,
|
||||||
|
MODULEMGR_NO_VAR_NID = 0x8002D00C,
|
||||||
|
MODULEMGR_INVALID_TYPE = 0x8002D00D,
|
||||||
|
MODULEMGR_NO_MOD_ENTRY = 0x8002D00E,
|
||||||
|
MODULEMGR_INVALID_PROC_PARAM = 0x8002D00F,
|
||||||
|
MODULEMGR_NO_MODOBJ = 0x8002D010,
|
||||||
|
MODULEMGR_NO_MOD = 0x8002D011,
|
||||||
|
MODULEMGR_NO_PROCESS = 0x8002D012,
|
||||||
|
MODULEMGR_OLD_LIB = 0x8002D013,
|
||||||
|
MODULEMGR_STARTED = 0x8002D014,
|
||||||
|
MODULEMGR_NOT_STARTED = 0x8002D015,
|
||||||
|
MODULEMGR_NOT_STOPPED = 0x8002D016,
|
||||||
|
MODULEMGR_INVALID_PROCESS_UID = 0x8002D017,
|
||||||
|
MODULEMGR_CANNOT_EXPORT_LIB_TO_SHARED = 0x8002D018,
|
||||||
|
MODULEMGR_INVALID_REL_INFO = 0x8002D019,
|
||||||
|
MODULEMGR_INVALID_REF_INFO = 0x8002D01A,
|
||||||
|
MODULEMGR_ELINK = 0x8002D01B,
|
||||||
|
MODULEMGR_NOENT = 0x8002D01C,
|
||||||
|
MODULEMGR_BUSY = 0x8002D01D,
|
||||||
|
MODULEMGR_NOEXEC = 0x8002D01E,
|
||||||
|
MODULEMGR_NAMETOOLONG = 0x8002D01F,
|
||||||
|
LIBRARYDB_NOENT = 0x8002D080,
|
||||||
|
LIBRARYDB_NO_LIB = 0x8002D081,
|
||||||
|
LIBRARYDB_NO_MOD = 0x8002D082,
|
||||||
|
PRELOAD_FAILED = 0x8002D0F0,
|
||||||
|
PRELOAD_LIBC_FAILED = 0x8002D0F1,
|
||||||
|
PRELOAD_FIOS2_FAILED = 0x8002D0F2,
|
||||||
|
AUTHFAIL = 0x8002F000,
|
||||||
|
NO_AUTH = 0x8002F001
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelOpenPsId :: struct {
|
||||||
|
id: [16]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelOpenPsId) == 0x10)
|
||||||
|
|
||||||
|
/** Threadmgr types */
|
||||||
|
SceKernelIdListType :: enum c.int {
|
||||||
|
SCE_KERNEL_TMID_Thread = 1,
|
||||||
|
SCE_KERNEL_TMID_Semaphore = 2,
|
||||||
|
SCE_KERNEL_TMID_EventFlag = 3,
|
||||||
|
SCE_KERNEL_TMID_Mbox = 4,
|
||||||
|
SCE_KERNEL_TMID_Vpl = 5,
|
||||||
|
SCE_KERNEL_TMID_Fpl = 6,
|
||||||
|
SCE_KERNEL_TMID_Mpipe = 7,
|
||||||
|
SCE_KERNEL_TMID_Callback = 8,
|
||||||
|
SCE_KERNEL_TMID_ThreadEventHandler = 9,
|
||||||
|
SCE_KERNEL_TMID_Alarm = 10,
|
||||||
|
SCE_KERNEL_TMID_VTimer = 11,
|
||||||
|
SCE_KERNEL_TMID_SleepThread = 64,
|
||||||
|
SCE_KERNEL_TMID_DelayThread = 65,
|
||||||
|
SCE_KERNEL_TMID_SuspendThread = 66,
|
||||||
|
SCE_KERNEL_TMID_DormantThread = 67,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceThreadStatus :: enum c.int {
|
||||||
|
RUNNING = 1,
|
||||||
|
READY = 2,
|
||||||
|
STANDBY = 4,
|
||||||
|
WAITING = 8,
|
||||||
|
SUSPEND = 8, /* Compatibility */
|
||||||
|
DORMANT = 16,
|
||||||
|
STOPPED = 16, /* Compatibility */
|
||||||
|
DELETED = 32, /* Thread manager has killed the thread (stack overflow) */
|
||||||
|
KILLED = 32, /* Compatibility */
|
||||||
|
DEAD = 64,
|
||||||
|
STAGNANT = 128,
|
||||||
|
SUSPENDED = 256,
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Statistics about a running thread.
|
||||||
|
* @see sceKernelGetThreadRunStatus.
|
||||||
|
*/
|
||||||
|
SceKernelThreadRunStatus :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
cpuInfo: [4]struct {
|
||||||
|
processId: sce.UID,
|
||||||
|
threadId: sce.UID,
|
||||||
|
priority: c.int,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelThreadRunStatus) == 0x34)
|
||||||
|
|
||||||
|
SceKernelThreadEntry :: #type ^proc(args: sce.Size, argp: rawptr) -> c.int
|
||||||
|
|
||||||
|
/** Additional options used when creating threads. */
|
||||||
|
SceKernelThreadOptParam :: struct {
|
||||||
|
/** Size of the ::SceKernelThreadOptParam structure. */
|
||||||
|
size: sce.Size,
|
||||||
|
/** Attributes */
|
||||||
|
attr: sce.UInt32,
|
||||||
|
kStackMemType: sce.UInt32,
|
||||||
|
uStackMemType: sce.UInt32,
|
||||||
|
uTLSMemType: sce.UInt32,
|
||||||
|
uStackMemid: sce.UInt32,
|
||||||
|
data_0x18: sce.UInt32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelThreadOptParam) == 0x1C)
|
||||||
|
|
||||||
|
/** Structure to hold the status information for a thread
|
||||||
|
* @see sceKernelGetThreadInfo
|
||||||
|
*/
|
||||||
|
SceKernelThreadInfo :: struct {
|
||||||
|
/** Size of the structure */
|
||||||
|
size: sce.Size,
|
||||||
|
/** The UID of the process where the thread belongs */
|
||||||
|
processId: sce.UID,
|
||||||
|
/** Nul terminated name of the thread */
|
||||||
|
name: [32]c.char,
|
||||||
|
/** Thread attributes */
|
||||||
|
attr: sce.UInt32,
|
||||||
|
/** Thread status */
|
||||||
|
status: sce.UInt32,
|
||||||
|
/** Thread entry point */
|
||||||
|
entry: SceKernelThreadEntry,
|
||||||
|
/** Thread stack pointer */
|
||||||
|
stack: rawptr,
|
||||||
|
/** Thread stack size */
|
||||||
|
stackSize: sce.Int32,
|
||||||
|
/** Initial priority */
|
||||||
|
initPriority: sce.Int32,
|
||||||
|
/** Current priority */
|
||||||
|
currentPriority: sce.Int32,
|
||||||
|
/** Initial CPU affinity mask */
|
||||||
|
initCpuAffinityMask: sce.Int32,
|
||||||
|
/** Current CPU affinity mask */
|
||||||
|
currentCpuAffinityMask: sce.Int32,
|
||||||
|
/** Current CPU ID */
|
||||||
|
currentCpuId: sce.Int32,
|
||||||
|
/** Last executed CPU ID */
|
||||||
|
lastExecutedCpuId: sce.Int32,
|
||||||
|
/** Wait type */
|
||||||
|
waitType: sce.UInt32,
|
||||||
|
/** Wait id */
|
||||||
|
waitId: sce.UID,
|
||||||
|
/** Exit status of the thread */
|
||||||
|
exitStatus: sce.Int32,
|
||||||
|
/** Number of clock cycles run */
|
||||||
|
runClocks: sce.KernelSysClock,
|
||||||
|
/** Interrupt preemption count */
|
||||||
|
intrPreemptCount: sce.UInt32,
|
||||||
|
/** Thread preemption count */
|
||||||
|
threadPreemptCount: sce.UInt32,
|
||||||
|
/** Thread release count */
|
||||||
|
threadReleaseCount: sce.UInt32,
|
||||||
|
/** Number of CPUs to which the thread is moved */
|
||||||
|
changeCpuCount: sce.Int32,
|
||||||
|
/** Function notify callback UID */
|
||||||
|
fNotifyCallback: sce.Int32,
|
||||||
|
/** Reserved */
|
||||||
|
reserved: sce.Int32,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceKernelThreadInfo) == 0x80)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Inherit calling thread affinity mask. */
|
||||||
|
SCE_KERNEL_THREAD_CPU_AFFINITY_MASK_DEFAULT :: 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** Callback function prototype */
|
||||||
|
SceKernelCallbackFunction :: #type ^proc(notifyId: c.int, notifyCount: c.int, notifyArg: c.int, userData: rawptr) -> c.int
|
||||||
|
|
||||||
|
/** Structure to hold the status information for a callback */
|
||||||
|
SceKernelCallbackInfo :: struct {
|
||||||
|
/** Size of the structure (i.e. sizeof(SceKernelCallbackInfo)) */
|
||||||
|
size: sce.Size,
|
||||||
|
/** The UID of the callback. */
|
||||||
|
callbackId: sce.UID, // Needs confirmation
|
||||||
|
/** The name given to the callback */
|
||||||
|
name: [32]c.char,
|
||||||
|
/** The thread id associated with the callback */
|
||||||
|
threadId: sce.UID,
|
||||||
|
/** Pointer to the callback function */
|
||||||
|
callback: SceKernelCallbackFunction,
|
||||||
|
/** User supplied argument for the callback */
|
||||||
|
common: rawptr,
|
||||||
|
/** Unknown */
|
||||||
|
notifyCount: c.int,
|
||||||
|
/** Unknown */
|
||||||
|
notifyArg: c.int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceKernelCallbackInfo) == 0x3C)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** Additional options used when creating semaphores. */
|
||||||
|
SceKernelSemaOptParam :: struct {
|
||||||
|
/** Size of the ::SceKernelSemaOptParam structure. */
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelSemaOptParam) == 4)
|
||||||
|
|
||||||
|
/** Current state of a semaphore.
|
||||||
|
* @see sceKernelGetSemaInfo.
|
||||||
|
*/
|
||||||
|
SceKernelSemaInfo :: struct {
|
||||||
|
/** Size of the ::SceKernelSemaInfo structure. */
|
||||||
|
size: sce.Size,
|
||||||
|
/** The UID of the semaphore */
|
||||||
|
semaId: sce.UID,
|
||||||
|
/** NUL-terminated name of the semaphore. */
|
||||||
|
name: [32]c.char,
|
||||||
|
/** Attributes. */
|
||||||
|
attr: sce.UInt,
|
||||||
|
/** The initial count the semaphore was created with. */
|
||||||
|
initCount: c.int,
|
||||||
|
/** The current count. */
|
||||||
|
currentCount: c.int,
|
||||||
|
/** The maximum count. */
|
||||||
|
maxCount: c.int,
|
||||||
|
/** The number of threads waiting on the semaphore. */
|
||||||
|
numWaitThreads: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelSemaInfo) == 0x3C)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SceKernelWaitableAttribute :: enum c.int {
|
||||||
|
THREAD_FIFO = 0x00000000, //!< Waiting threads First input First output
|
||||||
|
THREAD_PRIO = 0x00002000, //!< Waiting threads queued on priority basis
|
||||||
|
OPENABLE = 0x00000080, //!< Sync object can be accessed by sceKernelOpenXxx
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Event flag creation attributes */
|
||||||
|
SceEventFlagAttributes :: enum c.int {
|
||||||
|
// Deprecated
|
||||||
|
THREAD_FIFO = auto_cast SceKernelWaitableAttribute.THREAD_FIFO, //!< Use SCE_KERNEL_ATTR_THREAD_FIFO
|
||||||
|
// Deprecated
|
||||||
|
THREAD_PRIO = auto_cast SceKernelWaitableAttribute.THREAD_PRIO, //!< Use SCE_KERNEL_ATTR_THREAD_PRIO
|
||||||
|
WAITSINGLE = 0, //!< Sync object can only be waited upon by one thread.
|
||||||
|
WAITMULTIPLE = 0x00001000, //!< Sync object can be waited upon by multiple threads.
|
||||||
|
// Deprecated
|
||||||
|
OPENABLE = auto_cast SceKernelWaitableAttribute.OPENABLE, //!< Use SCE_KERNEL_ATTR_OPENABLE
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelEventFlagOptParam :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelEventFlagOptParam) == 4)
|
||||||
|
|
||||||
|
/** Structure to hold the event flag information */
|
||||||
|
SceKernelEventFlagInfo :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
evfId: sce.UID, // Needs confirmation
|
||||||
|
name: [32]c.char,
|
||||||
|
attr: sce.UInt,
|
||||||
|
initPattern: sce.UInt,
|
||||||
|
currentPattern: sce.UInt,
|
||||||
|
numWaitThreads: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelEventFlagInfo) == 0x38)
|
||||||
|
|
||||||
|
/** Event flag wait types */
|
||||||
|
SceEventFlagWaitTypes :: enum c.int {
|
||||||
|
/** Wait for all bits in the pattern to be set */
|
||||||
|
WAITAND = 0,
|
||||||
|
/** Wait for one or more bits in the pattern to be set */
|
||||||
|
WAITOR = 1,
|
||||||
|
/** Clear all the bits when it matches */
|
||||||
|
WAITCLEAR = 2,
|
||||||
|
/** Clear the wait pattern when it matches */
|
||||||
|
WAITCLEAR_PAT = 4,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SceKernelLwCondWork :: struct {
|
||||||
|
data: [4]sce.Int32 ,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelLwCondWork) == 0x10)
|
||||||
|
|
||||||
|
SceKernelLwCondOptParam :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelLwCondOptParam) == 4)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SceKernelLwMutexWork :: struct {
|
||||||
|
data: [4]sce.Int64,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelLwMutexWork) == 0x20)
|
||||||
|
|
||||||
|
SceKernelLwMutexOptParam :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelLwMutexOptParam) == 4)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SceKernelMutexAttribute :: enum c.int {
|
||||||
|
RECURSIVE = 0x02,
|
||||||
|
CEILING = 0x04,
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Additional options used when creating mutexes. */
|
||||||
|
SceKernelMutexOptParam :: struct {
|
||||||
|
/** Size of the ::SceKernelMutexOptParam structure. */
|
||||||
|
size: sce.Size,
|
||||||
|
ceilingPriority: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelMutexOptParam) == 8)
|
||||||
|
|
||||||
|
/** Current state of a mutex.
|
||||||
|
* @see sceKernelGetMutexInfo.
|
||||||
|
*/
|
||||||
|
SceKernelMutexInfo :: struct {
|
||||||
|
/** Size of the ::SceKernelMutexInfo structure. */
|
||||||
|
size: sce.Size,
|
||||||
|
/** The UID of the mutex. */
|
||||||
|
mutexId: sce.UID,
|
||||||
|
/** NUL-terminated name of the mutex. */
|
||||||
|
name: [32]c.char,
|
||||||
|
/** Attributes. */
|
||||||
|
attr: sce.UInt,
|
||||||
|
/** The initial count the mutex was created with. */
|
||||||
|
initCount: c.int,
|
||||||
|
/** The current count. */
|
||||||
|
currentCount: c.int,
|
||||||
|
/** The UID of the current owner of the mutex. */
|
||||||
|
currentOwnerId: sce.UID,
|
||||||
|
/** The number of threads waiting on the mutex. */
|
||||||
|
numWaitThreads: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelMutexInfo) == 0x3C)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** Additional options used when creating condition variables. */
|
||||||
|
SceKernelCondOptParam :: struct {
|
||||||
|
/** Size of the ::SceKernelCondOptParam structure. */
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelCondOptParam) == 4)
|
||||||
|
|
||||||
|
/** Current state of a condition variable.
|
||||||
|
* @see sceKernelGetCondInfo.
|
||||||
|
*/
|
||||||
|
SceKernelCondInfo :: struct {
|
||||||
|
/** Size of the ::SceKernelCondInfo structure. */
|
||||||
|
size: sce.Size,
|
||||||
|
/** The UID of the condition variable. */
|
||||||
|
condId: sce.UID,
|
||||||
|
/** NUL-terminated name of the condition variable. */
|
||||||
|
name: [32]c.char,
|
||||||
|
/** Attributes. */
|
||||||
|
attr: sce.UInt,
|
||||||
|
/** Mutex associated with the condition variable. */
|
||||||
|
mutexId: sce.UID,
|
||||||
|
/** The number of threads waiting on the condition variable. */
|
||||||
|
numWaitThreads: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelCondInfo) == 0x34)
|
||||||
|
|
||||||
|
//
|
||||||
|
// modulemgr.h start
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return values for plugins `module_start` and `module_stop`
|
||||||
|
*/
|
||||||
|
/** @{ */
|
||||||
|
SCE_KERNEL_START_SUCCESS :: (0)
|
||||||
|
SCE_KERNEL_START_RESIDENT :: SCE_KERNEL_START_SUCCESS
|
||||||
|
SCE_KERNEL_START_NO_RESIDENT :: (1)
|
||||||
|
SCE_KERNEL_START_FAILED :: (2)
|
||||||
|
|
||||||
|
SCE_KERNEL_STOP_SUCCESS :: (0)
|
||||||
|
SCE_KERNEL_STOP_FAIL :: (1)
|
||||||
|
SCE_KERNEL_STOP_CANCEL :: SCE_KERNEL_STOP_FAIL
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
SceKernelModuleState :: enum c.int {
|
||||||
|
READY = 0x00000002,
|
||||||
|
STARTED = 0x00000006,
|
||||||
|
ENDED = 0x00000009
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Assigning the following macro to the variable sceKernelPreloadModuleInhibit with the OR operator inhibit preloading that module.
|
||||||
|
*
|
||||||
|
* Example
|
||||||
|
* <code>
|
||||||
|
* // Inhibit preload SceLibc and SceShellSvc.
|
||||||
|
* int sceKernelPreloadModuleInhibit = SCE_KERNEL_PRELOAD_INHIBIT_LIBC | SCE_KERNEL_PRELOAD_INHIBIT_LIBSHELLSVC;
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* And these are only valid for modules in the process image, preload is not inhibited even if specified for modules to be loaded later.
|
||||||
|
*
|
||||||
|
* WARNING
|
||||||
|
* If SceLibNet etc. is loaded without SceShellSvc etc. loaded, an unintended system crash will occur.
|
||||||
|
*/
|
||||||
|
SceKernelPreloadInhibit :: enum c.int {
|
||||||
|
NONE = 0x00000000,
|
||||||
|
LIBC = 0x10000,
|
||||||
|
LIBDBG = 0x20000,
|
||||||
|
LIBSHELLSVC = 0x80000,
|
||||||
|
LIBCDLG = 0x100000,
|
||||||
|
LIBFIOS2 = 0x200000,
|
||||||
|
APPUTIL = 0x400000,
|
||||||
|
LIBSCEFT2 = 0x800000,
|
||||||
|
LIBPVF = 0x1000000,
|
||||||
|
LIBPERF = 0x2000000
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelPreloadInhibit) == 4)
|
||||||
|
|
||||||
|
|
||||||
|
SceKernelSegmentInfo :: struct {
|
||||||
|
size: sce.Size, //!< this structure size (0x18)
|
||||||
|
perms: sce.UInt, //!< probably rwx in low bits
|
||||||
|
vaddr: rawptr, //!< address in memory
|
||||||
|
memsz: sce.Size, //!< size in memory
|
||||||
|
filesz: sce.Size, //!< original size of memsz
|
||||||
|
res: sce.UInt, //!< unused
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceKernelSegmentInfo) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelModuleInfo :: struct {
|
||||||
|
size: sce.Size, //!< 0x1B8 for Vita 1.x
|
||||||
|
modid: sce.UID,
|
||||||
|
modattr: c.uint16_t,
|
||||||
|
modver: [2]c.uint8_t,
|
||||||
|
module_name: [28]c.char,
|
||||||
|
unk28: sce.UInt,
|
||||||
|
start_entry: rawptr,
|
||||||
|
stop_entry: rawptr,
|
||||||
|
exit_entry: rawptr,
|
||||||
|
exidx_top: rawptr,
|
||||||
|
exidx_btm: rawptr,
|
||||||
|
extab_top: rawptr,
|
||||||
|
extab_btm: rawptr,
|
||||||
|
tlsInit: rawptr,
|
||||||
|
tlsInitSize: sce.Size,
|
||||||
|
tlsAreaSize: sce.Size,
|
||||||
|
path: [256]c.char,
|
||||||
|
segments: [4]SceKernelSegmentInfo,
|
||||||
|
state: sce.UInt, //!< see:SceKernelModuleState
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceKernelModuleInfo) == 0x1B8)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelLMOption :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelLMOption) == 4)
|
||||||
|
|
||||||
|
SceKernelULMOption :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelULMOption) == 4)
|
||||||
|
|
||||||
|
SceKernelSystemSwVersion :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
versionString: [0x1C]c.char,
|
||||||
|
version: sce.UInt,
|
||||||
|
unk_24: sce.UInt,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelSystemSwVersion) == 0x28)
|
||||||
|
|
||||||
|
/* For backward compatibility */
|
||||||
|
SceKernelFwInfo :: SceKernelSystemSwVersion
|
||||||
|
|
||||||
|
SceKernelModuleLibraryInfo :: struct {
|
||||||
|
size: sce.Size, //!< sizeof(SceKernelModuleLibraryInfo) : 0x120
|
||||||
|
library_id: sce.UID,
|
||||||
|
libnid: c.uint32_t,
|
||||||
|
version: c.uint16_t,
|
||||||
|
flags: c.uint16_t,
|
||||||
|
entry_num_function: c.uint16_t,
|
||||||
|
entry_num_variable: c.uint16_t,
|
||||||
|
unk_0x14: c.uint16_t,
|
||||||
|
unk_0x16: c.uint16_t,
|
||||||
|
library_name: [0x100]c.char,
|
||||||
|
number_of_imported: sce.Size,
|
||||||
|
modid2: sce.UID,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelModuleLibraryInfo) == 0x120)
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// modulemgr.h end
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// processmgr.h start
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
SceKernelProcessType :: distinct sce.UInt32
|
||||||
|
SceKernelClock :: distinct sce.UInt64
|
||||||
|
SceKernelTime :: distinct sce.UInt32
|
||||||
|
|
||||||
|
SceKernelTimeval :: struct {
|
||||||
|
sec: sce.Int32,
|
||||||
|
usec: sce.Int32,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelTimeval) == 8)
|
||||||
|
|
||||||
|
SceKernelTimezone :: struct {
|
||||||
|
value: sce.UInt64,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelTimezone) == 8)
|
||||||
|
|
||||||
|
SceKernelProcessPrioritySystem :: enum c.int {
|
||||||
|
SCE_KERNEL_PROCESS_PRIORITY_SYSTEM_HIGH = 32,
|
||||||
|
SCE_KERNEL_PROCESS_PRIORITY_SYSTEM_DEFAULT = 96,
|
||||||
|
SCE_KERNEL_PROCESS_PRIORITY_SYSTEM_LOW = 159,
|
||||||
|
__SCE_KERNEL_PROCESS_PRIORITY_SYSTEM = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelProcessPrioritySystem) == 4)
|
||||||
|
|
||||||
|
SceKernelProcessPriorityUser :: enum c.int {
|
||||||
|
SCE_KERNEL_PROCESS_PRIORITY_USER_HIGH = 64,
|
||||||
|
SCE_KERNEL_PROCESS_PRIORITY_USER_DEFAULT = 96,
|
||||||
|
SCE_KERNEL_PROCESS_PRIORITY_USER_LOW = 127,
|
||||||
|
__SCE_KERNEL_PROCESS_PRIORITY_USER = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelProcessPriorityUser) == 4)
|
||||||
|
|
||||||
|
SceKernelPowerTickType :: enum c.int {
|
||||||
|
/** Cancel all timers */
|
||||||
|
SCE_KERNEL_POWER_TICK_DEFAULT = 0,
|
||||||
|
/** Cancel automatic suspension timer */
|
||||||
|
SCE_KERNEL_POWER_TICK_DISABLE_AUTO_SUSPEND = 1,
|
||||||
|
/** Cancel OLED-off timer */
|
||||||
|
SCE_KERNEL_POWER_TICK_DISABLE_OLED_OFF = 4,
|
||||||
|
/** Cancel OLED dimming timer */
|
||||||
|
SCE_KERNEL_POWER_TICK_DISABLE_OLED_DIMMING = 6,
|
||||||
|
__SCE_KERNEL_POWER_TICK_DISABLE = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelPowerTickType) == 4)
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// processmgr.h end
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// sysmem.h start
|
||||||
|
//
|
||||||
|
|
||||||
|
SceKernelMemBlockType :: distinct sce.UInt32
|
||||||
|
#assert(size_of(SceKernelMemBlockType) == 4)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* User/Kernel shared memtypes
|
||||||
|
*/
|
||||||
|
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_L1WBWA_RW :: (0x09404060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_R :: (0x09408040)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW :: (0x09408060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_DEVICE_RW :: (0x0C200860)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_R :: (0x0C20D040)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_RW :: (0x0C20D060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_NC_RW :: (0x0C208060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_GAME_RW :: (0x0C50D060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW :: (0x0C80D060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW :: (0x0D808060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_CDIALOG_RW :: (0x0CA0D060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_CDIALOG_NC_RW :: (0x0CA08060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_RW :: (0x0CF0D060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_TOOL_NC_RW :: (0x0CF08060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_R :: (0x0E20D040)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_RW :: (0x0E20D060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_R :: (0x0E208040)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDIALOG_NC_RW :: (0x0E208060)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For Backwards compatibility
|
||||||
|
*/
|
||||||
|
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE :: (0x0C208060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_RW :: (0x0C20D060)
|
||||||
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_TOOL_NC_RW :: (0x0CF08060)
|
||||||
|
|
||||||
|
|
||||||
|
SceKernelAllocMemBlockAttr :: enum c.uint {
|
||||||
|
HAS_PADDR = 0x00000002,
|
||||||
|
HAS_ALIGNMENT = 0x00000004,
|
||||||
|
HAS_MIRROR_BLOCKID = 0x00000040,
|
||||||
|
HAS_PID = 0x00000080,
|
||||||
|
HAS_PADDR_LIST = 0x00001000,
|
||||||
|
PHYCONT = 0x00200000,
|
||||||
|
ALLOW_PARTIAL_OP = 0x04000000,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelModel :: enum c.int {
|
||||||
|
VITA = 0x10000,
|
||||||
|
VITATV = 0x20000
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_KERNEL_CPU_MASK_USER_0 :: 0x00010000
|
||||||
|
SCE_KERNEL_CPU_MASK_USER_1 :: 0x00020000
|
||||||
|
SCE_KERNEL_CPU_MASK_USER_2 :: 0x00040000
|
||||||
|
SCE_KERNEL_CPU_MASK_SYSTEM :: 0x00080000
|
||||||
|
|
||||||
|
SCE_KERNEL_CPU_MASK_USER_ALL :: (SCE_KERNEL_CPU_MASK_USER_0 | SCE_KERNEL_CPU_MASK_USER_1 | SCE_KERNEL_CPU_MASK_USER_2)
|
||||||
|
|
||||||
|
SceKernelAllocMemBlockOpt :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
attr: sce.UInt32,
|
||||||
|
alignment: sce.Size,
|
||||||
|
uidBaseBlock: sce.UInt32,
|
||||||
|
strBaseBlockName: cstring,
|
||||||
|
flags: c.int, //! Unknown flags 0x10 or 0x30 for ::sceKernelOpenMemBlock
|
||||||
|
reserved: [10]c.int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceKernelAllocMemBlockOpt) == 0x40)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelFreeMemorySizeInfo :: struct {
|
||||||
|
size: c.int, //!< sizeof(SceKernelFreeMemorySizeInfo)
|
||||||
|
size_user: c.int, //!< Free memory size for *_USER_RW memory
|
||||||
|
size_cdram: c.int, //!< Free memory size for USER_CDRAM_RW memory
|
||||||
|
size_phycont: c.int, //!< Free memory size for USER_MAIN_PHYCONT_*_RW memory
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelFreeMemorySizeInfo) == 0x10)
|
||||||
|
|
||||||
|
SceKernelMemBlockInfo :: struct {
|
||||||
|
size: sce.Size,
|
||||||
|
mappedBase: rawptr,
|
||||||
|
mappedSize: sce.Size,
|
||||||
|
memoryType: c.int,
|
||||||
|
access: sce.UInt32,
|
||||||
|
type: SceKernelMemBlockType,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceKernelMemBlockInfo) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelMemoryAccessType :: enum c.int {
|
||||||
|
SCE_KERNEL_MEMORY_ACCESS_X = 0x01,
|
||||||
|
SCE_KERNEL_MEMORY_ACCESS_W = 0x02,
|
||||||
|
SCE_KERNEL_MEMORY_ACCESS_R = 0x04
|
||||||
|
}
|
||||||
|
|
||||||
|
SceKernelMemoryType :: enum c.int {
|
||||||
|
SCE_KERNEL_MEMORY_TYPE_NORMAL_NC = 0x80,
|
||||||
|
SCE_KERNEL_MEMORY_TYPE_NORMAL = 0xD0
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// sysmem.h end
|
||||||
|
//
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 IllusionMan1212
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package location
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import location "system:SceLibLocation_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceLocation")
|
||||||
|
foreign location {
|
||||||
|
/** Library start */
|
||||||
|
Open :: proc(handle: ^SceLocationHandle, locateMethod: SceLocationLocationMethod, headingMethod: SceLocationHeadingMethod) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Close library */
|
||||||
|
Close :: proc(handle: SceLocationHandle) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Reopen library */
|
||||||
|
Reopen :: proc(handle: SceLocationHandle, locateMethod: SceLocationLocationMethod, headingMethod: SceLocationHeadingMethod) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Get location measurement method */
|
||||||
|
GetMethod :: proc(handle: SceLocationHandle, locateMethod: ^SceLocationLocationMethod, headingMethod: ^SceLocationHeadingMethod) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Get location information */
|
||||||
|
GetLocation :: proc(handle: SceLocationHandle, locationInfo: ^SceLocationLocationInfo) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Cancel location information acquisition operation */
|
||||||
|
CancelGetLocation :: proc(handle: SceLocationHandle) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Start continuous acquisition of location information */
|
||||||
|
StartLocationCallback :: proc(handle: SceLocationHandle, distance: sce.UInt32, callback: SceLocationLocationInfoCallback, userdata: rawptr) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Stop continuous acquisition of location information */
|
||||||
|
StopLocationCallback :: proc(handle: SceLocationHandle) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Get direction information */
|
||||||
|
GetHeading :: proc(handle: SceLocationHandle, headingInfo: ^SceLocationHeadingInfo) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Start continuous acquisition of direction information */
|
||||||
|
StartHeadingCallback :: proc(handle: SceLocationHandle, difference: sce.UInt32, callback: SceLocationHeadingInfoCallback, userdata: rawptr) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Stop continuous acquisition of direction information */
|
||||||
|
StopHeadingCallback :: proc(handle: SceLocationHandle) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Allow acquisition of location information */
|
||||||
|
Confirm :: proc(handle: SceLocationHandle) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Get status of location information acquisition permission dialog */
|
||||||
|
ConfirmGetStatus :: proc(handle: SceLocationHandle, status: ^SceLocationDialogStatus) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Get result of location information acquisition permission dialog */
|
||||||
|
ConfirmGetResult :: proc(handle: SceLocationHandle, result: ^SceLocationDialogResult) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Abort location information acquisition permission dialog */
|
||||||
|
ConfirmAbort :: proc(handle: SceLocationHandle) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Get location information acquisition permission/refusal information */
|
||||||
|
GetPermission :: proc(handle: SceLocationHandle, info: ^SceLocationPermissionInfo) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/** Get location information acquisition permission information */
|
||||||
|
SetGpsEmulationFile :: proc(filename: cstring) -> sce.Int32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
package location
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SCE_LOCATION_DATA_INVALID :: -9999.0
|
||||||
|
|
||||||
|
/** Location error codes */
|
||||||
|
// TODO:
|
||||||
|
SceLocationErrorCode :: enum c.uint {
|
||||||
|
SUCCESS = 0,
|
||||||
|
|
||||||
|
INFO_UNDETERMINED_LOCATION = 0x80101200,
|
||||||
|
INFO_INSUFFICIENT_INFORMATION = 0x80101201,
|
||||||
|
INFO_GET_LOCATION_CANCELED = 0x80101202,
|
||||||
|
INFO_DENIED_BY_USER = 0x80101203,
|
||||||
|
|
||||||
|
INVALID_ADDRESS = 0x80101204,
|
||||||
|
INVALID_HANDLE = 0x80101205,
|
||||||
|
NO_MEMORY = 0x80101206,
|
||||||
|
TOO_MANY_HANDLES = 0x80101207,
|
||||||
|
INVALID_LOCATION_METHOD = 0x80101208,
|
||||||
|
INVALID_HEADING_METHOD = 0x80101209,
|
||||||
|
MULTIPLE_CALLBACK = 0x8010120A,
|
||||||
|
NOT_RUNNING_CALLBACK = 0x8010120B,
|
||||||
|
DIALOG_RESULT_NONE = 0x8010120C,
|
||||||
|
DISABLE_APPLICATION = 0x8010120D,
|
||||||
|
MULTIPLE_CONFIRM = 0x8010120E,
|
||||||
|
|
||||||
|
UNAUTHORIZED = 0x80101280,
|
||||||
|
PROVIDER_UNAVAILABLE = 0x80101281,
|
||||||
|
FILE_IO = 0x80101282,
|
||||||
|
INVALID_FILE_FORMAT = 0x80101283,
|
||||||
|
TIME_OUT = 0x80101284,
|
||||||
|
NO_SERVER_MEMORY = 0x80101285,
|
||||||
|
INVALID_TITLE_ID = 0x80101286,
|
||||||
|
FATAL_ERROR = 0x801012FF,
|
||||||
|
}
|
||||||
|
|
||||||
|
//TO DO: further comment each struct and function (i.e. parameters)
|
||||||
|
|
||||||
|
/** Location handle datatype */
|
||||||
|
SceLocationHandle :: sce.UInt32
|
||||||
|
#assert(size_of(SceLocationHandle) == 4)
|
||||||
|
|
||||||
|
/** Usage permission dialog display status */
|
||||||
|
SceLocationDialogStatus :: enum c.int {
|
||||||
|
SCE_LOCATION_DIALOG_STATUS_IDLE = 0, //!< Dialog initial idle status
|
||||||
|
SCE_LOCATION_DIALOG_STATUS_RUNNING = 1, //!< Dialog running
|
||||||
|
SCE_LOCATION_DIALOG_STATUS_FINISHED = 2, //!< Dialog operation finished
|
||||||
|
__SCE_LOCATION_DIALOG_STATUS = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Usage permission dialog result */
|
||||||
|
SceLocationDialogResult :: enum c.int {
|
||||||
|
SCE_LOCATION_DIALOG_RESULT_NONE = 0, //!< Result is not stored
|
||||||
|
SCE_LOCATION_DIALOG_RESULT_DISABLE = 1, //!< Negative result is stored
|
||||||
|
SCE_LOCATION_DIALOG_RESULT_ENABLE = 2, //!< Positive result is stored
|
||||||
|
__SCE_LOCATION_DIALOG_RESULT = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/** location usage permission status for individual application */
|
||||||
|
SceLocationPermissionApplicationStatus :: enum c.int {
|
||||||
|
SCE_LOCATION_PERMISSION_APPLICATION_NONE = 0, //!< liblocation not used
|
||||||
|
SCE_LOCATION_PERMISSION_APPLICATION_INIT = 1, //!< liblocation not accessed
|
||||||
|
SCE_LOCATION_PERMISSION_APPLICATION_DENY = 2, //!< liblocation access denied status
|
||||||
|
SCE_LOCATION_PERMISSION_APPLICATION_ALLOW = 3, //!< liblocation access allowed status
|
||||||
|
__SCE_LOCATION_PERMISSION_APPLICATION = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/** location usage permission status */
|
||||||
|
SceLocationPermissionStatus :: enum c.int {
|
||||||
|
SCE_LOCATION_PERMISSION_DENY = 0, //!< liblocation access denied status
|
||||||
|
SCE_LOCATION_PERMISSION_ALLOW = 1, //!< liblocation access allowed status
|
||||||
|
__SCE_LOCATION_PERMISSION = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Location measurement method */
|
||||||
|
SceLocationLocationMethod :: enum c.int {
|
||||||
|
SCE_LOCATION_LMETHOD_NONE = 0, //!< Do not perform location measurement
|
||||||
|
SCE_LOCATION_LMETHOD_AGPS_AND_3G_AND_WIFI = 1, //!< Perform measurement by switching between AGPS, Wi-Fi, and 3G
|
||||||
|
SCE_LOCATION_LMETHOD_GPS_AND_WIFI = 2, //!< Perform measurement by switching between GPS and Wi-Fi
|
||||||
|
SCE_LOCATION_LMETHOD_WIFI = 3, //!< Use only Wi-Fi
|
||||||
|
SCE_LOCATION_LMETHOD_3G = 4, //!< Use only 3G
|
||||||
|
SCE_LOCATION_LMETHOD_GPS = 5, //!< Use only GPS
|
||||||
|
__SCE_LOCATION_LMETHOD = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Direction measurement method */
|
||||||
|
SceLocationHeadingMethod :: enum c.int {
|
||||||
|
SCE_LOCATION_HMETHOD_NONE = 0, //!< Don't perform heading measurement
|
||||||
|
SCE_LOCATION_HMETHOD_AUTO = 1, //!< Automatically determine hold orientation and outputs its value
|
||||||
|
SCE_LOCATION_HMETHOD_VERTICAL = 2, //!< Output value in vertical hold reference system
|
||||||
|
SCE_LOCATION_HMETHOD_HORIZONTAL = 3, //!< Output value in horizontal hold reference system
|
||||||
|
SCE_LOCATION_HMETHOD_CAMERA = 4, //!< Output value in camera axis reference system
|
||||||
|
__SCE_LOCATION_HMETHOD = -1 // 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Structure of location information */
|
||||||
|
SceLocationLocationInfo :: struct {
|
||||||
|
latitude: sce.Double64, //!< Latitude (deg). Valid range: -90 to + 90. If cannot be obtained, SCE_LOCATION_DATA_INVALID
|
||||||
|
longitude: sce.Double64, //!< Longitude (deg). Valid range: -180 to +180. If cannot be obtained, SCE_LOCATION_DATA_INVALID
|
||||||
|
altitude: sce.Double64, //!< Altitude (m). If cannot be obtained, SCE_LOCATION_DATA_INVALID
|
||||||
|
accuracy: sce.Float32, //!< Horizontal error (m). If cannot be obtained, SCE_LOCATION_DATA_INVALID
|
||||||
|
reserve: sce.Float32, //!< Reserve
|
||||||
|
direction: sce.Float32, //!< Travel direction. If cannot be obtained, SCE_LOCATION_DATA_INVALID
|
||||||
|
speed: sce.Float32, //!< Travel speed (m/s). If cannot be obtained, SCE_LOCATION_DATA_INVALID
|
||||||
|
timestamp: sce.RtcTick, //!< Time of data acquisition, in μsec (UTC)
|
||||||
|
}
|
||||||
|
#assert(size_of(SceLocationLocationInfo) == 0x30)
|
||||||
|
|
||||||
|
|
||||||
|
/** Structure of heading information */
|
||||||
|
SceLocationHeadingInfo :: struct {
|
||||||
|
trueHeading: sce.Float32, //!< Clockwise angle from true north (0 to 360 degrees). If cannot be acquired, SCE_LOCATION_INVALID_DATA
|
||||||
|
headingVectorX: sce.Float32, //!< Direction vector X coordinates element of true north. If cannot be acquired, SCE_LOCATION_INVALID_DATA
|
||||||
|
headingVectorY: sce.Float32, //!< Direction vector Y coordinates element of true north. If cannot be acquired, SCE_LOCATION_INVALID_DATA
|
||||||
|
headingVectorZ: sce.Float32, //!< Direction vector Z coordinates element of true north. If cannot be acquired, SCE_LOCATION_INVALID_DATA
|
||||||
|
reserve: sce.Float32, //!< Reserve
|
||||||
|
reserve2: sce.Float32, //!< Reserve
|
||||||
|
timestamp: sce.RtcTick, //!< Time acquired in unit of 1 usec (UTC)
|
||||||
|
}
|
||||||
|
#assert(size_of(SceLocationHeadingInfo) == 0x20)
|
||||||
|
|
||||||
|
/** Location information callback notification function */
|
||||||
|
SceLocationLocationInfoCallback :: #type ^proc "c" (result: sce.Int32, handle: SceLocationHandle, #by_ptr location: SceLocationLocationInfo, userdata: rawptr)
|
||||||
|
|
||||||
|
/** Callback notification function for direction information */
|
||||||
|
SceLocationHeadingInfoCallback :: #type ^proc "c" (result: sce.Int32, handle: SceLocationHandle, #by_ptr heading: SceLocationHeadingInfo, userdata: rawptr)
|
||||||
|
|
||||||
|
/** Location information acquisition permission information */
|
||||||
|
SceLocationPermissionInfo :: struct {
|
||||||
|
parentalstatus: SceLocationPermissionStatus, //!< Status of usage permission through parental control
|
||||||
|
mainstatus: SceLocationPermissionStatus, //!< Status of usage permission through location data item of system settings
|
||||||
|
applicationstatus: SceLocationPermissionApplicationStatus, //!< Status of usage permission through location data item for each application in system settings
|
||||||
|
unk_0x0C: c.int,
|
||||||
|
unk_0x10: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceLocationPermissionInfo) == 0x14)
|
||||||
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package monobridge
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import monobridge "system:SceLibMonoBridge_stub"
|
||||||
|
|
||||||
|
ScePssCryptoHandle :: struct {
|
||||||
|
fd: sce.UID,
|
||||||
|
unk1: c.uint32_t,
|
||||||
|
size: sce.Size,
|
||||||
|
unk3: c.uint32_t,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePssCryptoHandle) == 0x10)
|
||||||
|
|
||||||
|
@(link_prefix = "pss_")
|
||||||
|
foreign monobridge {
|
||||||
|
crypto_open :: proc(handle: ^ScePssCryptoHandle, path: cstring) -> c.int ---
|
||||||
|
crypto_read :: proc(handle: ^ScePssCryptoHandle, mode: ^c.int) -> [^]c.char ---
|
||||||
|
crypto_close :: proc(handle: ^ScePssCryptoHandle) -> c.int ---
|
||||||
|
code_mem_alloc :: proc(_: ^sce.Size) -> rawptr ---
|
||||||
|
code_mem_flush_icache :: proc(_: rawptr, __: sce.Size) ---
|
||||||
|
code_mem_lock :: proc() ---
|
||||||
|
code_mem_unlock :: proc() ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
package motion
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import motion "system:SceMotion_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceMotion")
|
||||||
|
foreign motion {
|
||||||
|
/**
|
||||||
|
* Gets the current motion state.
|
||||||
|
*
|
||||||
|
* @param[out] *motionState - See ::SceMotionState
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
GetState :: proc(motionState: ^SceMotionState) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current motion sensor state
|
||||||
|
*
|
||||||
|
* @param[in] numRecords - Amount of records to get
|
||||||
|
* @param[out] *motionSensorState - See ::SceMotionSensorState
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
GetSensorState :: proc(sensorState: ^SceMotionSensorState, numRecords: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the location of the device's sensors in relation to its center point (in mm).
|
||||||
|
*
|
||||||
|
* @param[out] *deviceLocation - See ::SceMotionDeviceLocation
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
GetDeviceLocation :: proc(deviceLocation: ^SceMotionDeviceLocation) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the basic orientation of the device in relation to gravity
|
||||||
|
* @note - Possible values in the output vector are -1, 0 and 1
|
||||||
|
* @note - Using the same coordinate system as ::SceMotionDeviceLocation these values are set in the vector depending on if the axies' positive or negative directions are facing away from gravitational pull
|
||||||
|
* @note - For example if the vita is laying on a flat and level surface, with the OLED/LCD side facing upwards, the Z part of the vector will be 1
|
||||||
|
* @note - Now flipping the device upwards, taking hold of the right joystick's side, until it forms a 90 degree angle to the surface will result in the X part of the vector being 1 instead
|
||||||
|
* @note - Both examples would result in the returned value being -1 if flipped 180 degrees, swapping their top and bottom sides in correlation to gravity
|
||||||
|
* @note - The angle of rotation in relation to being in a centered state on an axis (returned as 0) after which the device will change the value is determined by ::SceMotionSetAngleThreshold
|
||||||
|
* @note - In order for this function to return up to date data, ::GetState must be called prior to call this function.
|
||||||
|
* @param[out] *basicOrientation
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
GetBasicOrientation :: proc(basicOrientation: ^sce.FVector3) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotate the yaw axis
|
||||||
|
*
|
||||||
|
* @param[in] radians - Rotation angle in radians
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
RotateYaw :: proc(radians: c.float) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Status of tilt correction
|
||||||
|
* @note - With tilt correction enabled the data for roll and pitch movements of the device get recalculated to not distort the yaw movements in relation to gravity
|
||||||
|
* @note - Enabled by default
|
||||||
|
* @return 1 if enabled, 0 if disabled
|
||||||
|
*/
|
||||||
|
GetTiltCorrection :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activate/deactivate tilt correction
|
||||||
|
* @note - For more information see ::GetTiltCorrection
|
||||||
|
* @param[in] setValue - 1 to enable, 0 to disable
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
SetTiltCorrection :: proc(setValue: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get status of deadbanding
|
||||||
|
* @note - With deadbanding enabled the device will filter out small movements to reduce jitter
|
||||||
|
* @note - Potentially decreaces accuracy of fine movements
|
||||||
|
* @note - Enabled by default
|
||||||
|
* @return 1 if enabled, 0 if disabled
|
||||||
|
*/
|
||||||
|
GetDeadband :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activate/deactivate deadbanding
|
||||||
|
* @note - For more information see ::GetDeadbanding
|
||||||
|
* @param[in] setValue - 1 to enable, 0 to disable
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
SetDeadband :: proc(setValue: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get status of gyroscope bias correction
|
||||||
|
* @note - With gyroscope bias correction enabled the device will attempt to adjust for outside influences that could impact calibration
|
||||||
|
* @note - Enabled by default
|
||||||
|
* @return 1 if enabled, 0 if disabled
|
||||||
|
*/
|
||||||
|
GetGyroBiasCorrection :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activate/deactivate gyroscope bias correction
|
||||||
|
* @note - For more information see ::GetGyroBiasCorrection
|
||||||
|
* @param[in] setValue - 1 to enable, 0 to disable
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
SetGyroBiasCorrection :: proc(setValue: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the angle threshold for basic orientation
|
||||||
|
*
|
||||||
|
* @param[in] angle - range of 0 to 45 degrees
|
||||||
|
*
|
||||||
|
* @return 0
|
||||||
|
*/
|
||||||
|
SetAngleThreshold :: proc(angle: c.float) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the angle threshold for basic orientation
|
||||||
|
*
|
||||||
|
* @return angle in degrees
|
||||||
|
*/
|
||||||
|
GetAngleThreshold :: proc() -> c.float ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set current orientation as origin
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
Reset :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start magnetometer sampling
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
MagnetometerOn :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop magnetometer sampling
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
MagnetometerOff :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get status of magnetometer sampling
|
||||||
|
*
|
||||||
|
* @return 1 if enabled, 0 if disabled
|
||||||
|
*/
|
||||||
|
GetMagnetometerState :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start sampling
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
StartSampling :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop sampling
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error
|
||||||
|
*/
|
||||||
|
StopSampling :: proc() -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
package motion
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceMotionMagFieldStability :: enum c.int {
|
||||||
|
UNSTABLE = 0,
|
||||||
|
UNUSED = 1,
|
||||||
|
STABLE = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
SceMotionErrorCode :: enum c.uint {
|
||||||
|
DATA_INVALID = 0x80360200,
|
||||||
|
READING = 0x80360201,
|
||||||
|
NON_INIT_ERR = 0x80360202,
|
||||||
|
STATE_INVALID = 0x80360203,
|
||||||
|
CALIB_READ_FAIL = 0x80360204,
|
||||||
|
OUT_OF_BOUNDS = 0x80360205,
|
||||||
|
NOT_SAMPLING = 0x80360206,
|
||||||
|
ALREADY_SAMPLING = 0x80360207,
|
||||||
|
MEM_IN_USE = 0x80360208
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* struct */
|
||||||
|
|
||||||
|
/** Returned motion state */
|
||||||
|
SceMotionState :: struct {
|
||||||
|
timestamp: c.uint, //!< Local timestamp of the device
|
||||||
|
acceleration: sce.FVector3, //!< Accelerometer data
|
||||||
|
angularVelocity: sce.FVector3, //!< Angular velocity data
|
||||||
|
reserved1: [12]c.uint8_t, //!< Reserved data
|
||||||
|
deviceQuat: sce.FQuaternion, //!< Orientation data as a Quaternion
|
||||||
|
rotationMatrix: sce.FMatrix4, //!< Orientation data as a rotation matrix
|
||||||
|
nedMatrix: sce.FMatrix4, //!< Magnetometer orientation matrix
|
||||||
|
reserved2: [4]c.uint8_t, //!< Reserved data
|
||||||
|
basicOrientation: sce.FVector3, //!< Orientation of the device in reference to gravity
|
||||||
|
hostTimestamp: sce.ULong64, //!< Timestamp of the data in microseconds
|
||||||
|
reserved3: [36]c.uint8_t, //!< Reserved data
|
||||||
|
magFieldStability: c.uint8_t, //!< One of ::SceMotionMagFieldStability
|
||||||
|
unknown: c.uint8_t, //!< Unknown
|
||||||
|
reserved4: [2]c.uint8_t, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceMotionState) == 0xF8)
|
||||||
|
|
||||||
|
/** Returned motion sensor state
|
||||||
|
* @note - ::SceMotionSensorState holds actual sensor data as opposed to ::SceMotionState which uses a calculated state
|
||||||
|
*/
|
||||||
|
SceMotionSensorState :: struct {
|
||||||
|
accelerometer: sce.FVector3, //!< Accelerometer data
|
||||||
|
gyro: sce.FVector3, //!< Angular velocity data
|
||||||
|
reserved1: [12]c.uint8_t, //!< Reserved data
|
||||||
|
timestamp: c.uint, //!< Timestamp of the data in microseconds
|
||||||
|
counter: c.uint, //!< Number of requested state
|
||||||
|
reserved2: [4]c.uint8_t, //!< Reserved data
|
||||||
|
hostTimestamp: sce.ULong64, //!< Timestamp of the data in microseconds
|
||||||
|
unknown: c.uint8_t, //!< Unknown
|
||||||
|
reserved3: [7]c.uint8_t, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceMotionSensorState) == 0x40)
|
||||||
|
|
||||||
|
/** Returned location of both the accelerometer and gyroscope in mm
|
||||||
|
* @note - Axies are fixed with z axis being straight perpendicular through the screen and x axis being parallel to the screen's bottom and top edge
|
||||||
|
* @note - Direction of the z axis is as if the device were laying on a flat surface, oled/lcd side facing upwards
|
||||||
|
* @note - OLED models should return the following values:
|
||||||
|
* @note - Accelerometer: x == -32; y == 12; z == -8
|
||||||
|
* @note - Gyroscope: x == -33; y == 6; z == -8
|
||||||
|
* @note - LCD models should return the following values:
|
||||||
|
* @note - Accelerometer: x == 13; y == 19; z == -8
|
||||||
|
* @note - Gyroscope: x == 13; y == 19; z == -8
|
||||||
|
*/
|
||||||
|
SceMotionDeviceLocation :: struct {
|
||||||
|
accelerometer: sce.FVector3, //!< Location of te accelerometer in relation to the center of the device (in mm)
|
||||||
|
gyro: sce.FVector3, //!< Location of te gyroscope in relation to the center of the device (in mm)
|
||||||
|
reserved: [24]c.uint8_t, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceMotionDeviceLocation) == 0x30)
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package motiondev
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import motiondev "system:SceMotionDev_stub"
|
||||||
|
|
||||||
|
// missing structs
|
||||||
|
SceMotionDevAccCalibData :: struct{}
|
||||||
|
SceMotionDevCalibrationData :: struct{}
|
||||||
|
SceMotionDevCalibrationHeader :: struct{}
|
||||||
|
SceMotionDevMagnCalibData :: struct{}
|
||||||
|
SceMotionDevDeviceInfo :: struct{}
|
||||||
|
SceMotionDevDeviceLocation :: struct{}
|
||||||
|
SceMotionDevGyroBiasData :: struct{}
|
||||||
|
SceMotionDevGyroCalibData :: struct{}
|
||||||
|
SceMotionDevModeInfo :: struct{}
|
||||||
|
SceMotionDevData :: struct{}
|
||||||
|
|
||||||
|
@(link_prefix = "sceMotionDev")
|
||||||
|
foreign motiondev {
|
||||||
|
GetAccCalibData :: proc(data: ^SceMotionDevAccCalibData) -> c.int ---
|
||||||
|
GetAccCalibData2 :: proc(port: c.int, data: ^SceMotionDevAccCalibData) -> c.int ---
|
||||||
|
GetCalibrationData :: proc(block_id: sce.UInt32, data: ^SceMotionDevCalibrationData, data_num: sce.UInt32) -> c.int ---
|
||||||
|
GetCalibrationHeader :: proc(block_id: sce.UInt32, calib_header: ^SceMotionDevCalibrationHeader) -> c.int ---
|
||||||
|
GetCurrentMagnCalibData :: proc(data: ^SceMotionDevMagnCalibData) -> c.int ---
|
||||||
|
GetCurrentMagnStabilityLevel :: proc(level: ^sce.UInt32) -> c.int ---
|
||||||
|
GetDeviceInfo :: proc(device_info: ^SceMotionDevDeviceInfo) -> c.int ---
|
||||||
|
GetDeviceLocation :: proc(location: ^SceMotionDevDeviceLocation) -> c.int ---
|
||||||
|
GetFactoryMagnCalibData :: proc(data: ^SceMotionDevMagnCalibData) -> c.int ---
|
||||||
|
GetGyroBias :: proc(bias: ^SceMotionDevGyroBiasData) -> c.int ---
|
||||||
|
GetGyroBias2 :: proc(port: c.int, bias: ^SceMotionDevGyroBiasData) -> c.int ---
|
||||||
|
GetGyroCalibData :: proc(data: ^SceMotionDevGyroCalibData) -> c.int ---
|
||||||
|
GetGyroCalibData2 :: proc(port: c.int, data: ^SceMotionDevGyroCalibData) -> c.int ---
|
||||||
|
GetMeasMode :: proc(mode_info: ^SceMotionDevModeInfo) -> c.int ---
|
||||||
|
IsReady :: proc() -> c.int ---
|
||||||
|
MagnSamplingStart :: proc() -> c.int ---
|
||||||
|
MagnSamplingStop :: proc() -> c.int ---
|
||||||
|
Read :: proc(data: ^SceMotionDevData, data_num: c.int, info: ^sce.UInt32) -> c.int ---
|
||||||
|
Read2 :: proc(port: c.int, data: ^SceMotionDevData, data_num: c.int, info: ^sce.UInt32) -> c.int ---
|
||||||
|
ReadForMagnCalib :: proc(data: ^SceMotionDevData, data_num: c.int) -> c.int ---
|
||||||
|
SamplingStart :: proc() -> c.int ---
|
||||||
|
SamplingStart2 :: proc(port: c.int) -> c.int ---
|
||||||
|
SamplingStop :: proc() -> c.int ---
|
||||||
|
SamplingStop2 :: proc(port: c.int) -> c.int ---
|
||||||
|
SetSamplingMode :: proc(mode: sce.UInt32) -> c.int ---
|
||||||
|
UpdateMagnCalibData :: proc(#by_ptr data: SceMotionDevMagnCalibData, tag: ^sce.UInt32) -> c.int ---
|
||||||
|
UpdateMagnStabilityLevel :: proc(level: sce.UInt32) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package mtp
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import mtp "system:SceMtpIfDriver_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceMtpIf")
|
||||||
|
foreign mtp {
|
||||||
|
/**
|
||||||
|
* Start MTP driver
|
||||||
|
*
|
||||||
|
* @param[in] flags - Set to 1
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
StartDriver :: proc(flags: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop MTP driver
|
||||||
|
*
|
||||||
|
* @param[in] flags - Set to 1
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
StopDriver :: proc(flags: c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package musicexport
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import musicexport "system:SceMusicExport_stub"
|
||||||
|
|
||||||
|
MusicExportParam :: struct {
|
||||||
|
reserved: [128]c.char, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(MusicExportParam) == 0x80)
|
||||||
|
|
||||||
|
@(link_prefix = "sceMusicExport")
|
||||||
|
foreign musicexport {
|
||||||
|
FromFile :: proc(
|
||||||
|
path: cstring,
|
||||||
|
#by_ptr param: MusicExportParam,
|
||||||
|
workingMemory: rawptr,
|
||||||
|
cancelCb: rawptr,
|
||||||
|
progress: #type ^proc "c" (_: rawptr, __: c.int),
|
||||||
|
user: rawptr,
|
||||||
|
outPath: cstring,
|
||||||
|
outPathSize: sce.Size) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package net
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
foreign import net "system:SceNet_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceNet")
|
||||||
|
foreign net {
|
||||||
|
Init :: proc(param: ^SceNetInitParam) -> c.int ---
|
||||||
|
Term :: proc() -> c.int ---
|
||||||
|
|
||||||
|
ShowIfconfig :: proc(p: rawptr, b: c.int) -> c.int ---
|
||||||
|
ShowRoute :: proc() -> c.int ---
|
||||||
|
ShowNetstat :: proc() -> c.int ---
|
||||||
|
|
||||||
|
EmulationSet :: proc(param: ^SceNetEmulationParam, flags: SceNetEmulationFlag) -> c.int ---
|
||||||
|
EmulationGet :: proc(param: ^SceNetEmulationParam, flags: SceNetEmulationFlag) -> c.int ---
|
||||||
|
|
||||||
|
// flags is always 0
|
||||||
|
ResolverCreate :: proc(name: cstring, param: ^SceNetResolverParam, flags: c.int) -> c.int ---
|
||||||
|
ResolverStartNtoa :: proc(rid: c.int, hostname: cstring, addr: ^SceNetInAddr, timeout: c.int, retry: c.int, flags: SceNetResolverFlag) -> c.int ---
|
||||||
|
ResolverStartAton :: proc(rid: c.int, addr: ^SceNetInAddr, hostname: cstring, len: c.int, timeout: c.int, retry: c.int, flags: SceNetResolverFlag) -> c.int ---
|
||||||
|
ResolverGetError :: proc(rid: c.int, result: ^c.int) -> SceNetResolverErrorCode ---
|
||||||
|
ResolverDestroy :: proc(rid: c.int) -> c.int ---
|
||||||
|
ResolverAbort :: proc(rid: c.int, flags: SceNetResolverAbortFlag) -> c.int ---
|
||||||
|
|
||||||
|
// flags is always 0
|
||||||
|
DumpCreate :: proc(name: cstring, len: c.int, flags: c.int) -> c.int ---
|
||||||
|
DumpRead :: proc(id: c.int, buf: rawptr, len: c.int, pflags: ^SceNetDumpReadFlag) -> c.int ---
|
||||||
|
DumpDestroy :: proc(id: c.int) -> c.int ---
|
||||||
|
DumpAbort :: proc(id: c.int, flags: SceNetDumpAbortFlag) -> c.int ---
|
||||||
|
// flags is always 0
|
||||||
|
EpollCreate :: proc(name: cstring, flags: c.int) -> c.int ---
|
||||||
|
EpollControl :: proc(eid: c.int, op: SceNetEpollControlFlag, id: c.int, event: ^SceNetEpollEvent) -> c.int ---
|
||||||
|
EpollWait :: proc(eid: c.int, events: ^SceNetEpollEvent, maxevents: c.int, timeout: c.int) -> c.int ---
|
||||||
|
EpollWaitCB :: proc(eid: c.int, events: ^SceNetEpollEvent, maxevents: c.int, timeout: c.int) -> c.int ---
|
||||||
|
EpollDestroy :: proc(eid: c.int) -> c.int ---
|
||||||
|
EpollAbort :: proc(eid: c.int, flags: SceNetEpollAbortFlag) -> c.int ---
|
||||||
|
|
||||||
|
EtherStrton :: proc(str: cstring, n: ^SceNetEtherAddr) -> c.int ---
|
||||||
|
EtherNtostr :: proc(n: ^SceNetEtherAddr, str: cstring, len: c.uint) -> c.int ---
|
||||||
|
// flags is always 0
|
||||||
|
GetMacAddress :: proc(addr: ^SceNetEtherAddr, flags: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
Socket :: proc(name: cstring, domain: c.int, type: SceNetSocketType, protocol: c.int) -> c.int ---
|
||||||
|
Accept :: proc(s: c.int, addr: ^SceNetSockaddr, addrlen: ^c.uint) -> c.int ---
|
||||||
|
Bind :: proc(s: c.int, addr: ^SceNetSockaddr, addrlen: c.uint) -> c.int ---
|
||||||
|
Connect :: proc(s: c.int, name: ^SceNetSockaddr, namelen: c.uint) -> c.int ---
|
||||||
|
Getpeername :: proc(s: c.int, name: ^SceNetSockaddr, namelen: ^c.uint) -> c.int ---
|
||||||
|
Getsockname :: proc(s: c.int, name: ^SceNetSockaddr, namelen: ^c.uint) -> c.int ---
|
||||||
|
Getsockopt :: proc(s: c.int, level: c.int, optname: c.int, optval: rawptr, optlen: ^c.uint) -> c.int ---
|
||||||
|
Listen :: proc(s: c.int, backlog: c.int) -> c.int ---
|
||||||
|
Recv :: proc(s: c.int, buf: rawptr, len: c.uint, flags: SceNetMsgFlag) -> c.int ---
|
||||||
|
Recvfrom :: proc(s: c.int, buf: rawptr, len: c.uint, flags: SceNetMsgFlag, from: ^SceNetSockaddr, fromlen: ^c.uint) -> c.int ---
|
||||||
|
Recvmsg :: proc(s: c.int, msg: ^SceNetMsghdr, flags: SceNetMsgFlag) -> c.int ---
|
||||||
|
Send :: proc(s: c.int, msg: rawptr, len: c.uint, flags: SceNetMsgFlag) -> c.int ---
|
||||||
|
Sendto :: proc(s: c.int, msg: rawptr, len: c.uint, flags: SceNetMsgFlag, to: ^SceNetSockaddr, tolen: c.uint) -> c.int ---
|
||||||
|
Sendmsg :: proc(s: c.int, msg: ^SceNetMsghdr, flags: SceNetMsgFlag) -> c.int ---
|
||||||
|
Setsockopt :: proc(s: c.int, level: c.int, optname: c.int, optval: rawptr, optlen: c.uint) -> c.int ---
|
||||||
|
Shutdown :: proc(s: c.int, how: SceNetShutdownFlag) -> c.int ---
|
||||||
|
SocketClose :: proc(s: c.int) -> c.int ---
|
||||||
|
SocketAbort :: proc(s: c.int, flags: SceNetSocketAbortFlag) -> c.int ---
|
||||||
|
// flags is always 0
|
||||||
|
GetSockInfo :: proc(s: c.int, info: ^SceNetSockInfo, n: c.int, flags: c.int) -> c.int ---
|
||||||
|
// flags is always 0
|
||||||
|
GetSockIdInfo :: proc(fds: ^SceNetFdSet, sockinfoflags: c.int, flags: c.int) -> c.int ---
|
||||||
|
// flags is always 0
|
||||||
|
GetStatisticsInfo :: proc(info: ^SceNetStatisticsInfo, flags: c.int) -> c.int ---
|
||||||
|
|
||||||
|
// flags is always 0
|
||||||
|
SetDnsInfo :: proc(info: ^SceNetDnsInfo, flags: c.int) -> c.int ---
|
||||||
|
// flags is always 0
|
||||||
|
ClearDnsCache :: proc(flags: c.int) -> c.int ---
|
||||||
|
|
||||||
|
InetNtop :: proc(af: c.int, src: rawptr, dst: cstring, size: c.uint) -> cstring ---
|
||||||
|
InetPton :: proc(af: c.int, src: cstring, dst: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
//TODO : create BSD aliases ?
|
||||||
|
|
||||||
|
Htonll :: proc(host64: c.ulonglong) -> c.ulonglong ---
|
||||||
|
Htonl :: proc(host32: c.uint) -> c.uint ---
|
||||||
|
Htons :: proc(host16: c.ushort) -> c.ushort ---
|
||||||
|
Ntohll :: proc(net64: c.ulonglong) -> c.ulonglong ---
|
||||||
|
Ntohl :: proc(net32: c.uint) -> c.uint ---
|
||||||
|
Ntohs :: proc(net16: c.ushort) -> c.ushort ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get pointer to last network errno.
|
||||||
|
*
|
||||||
|
* @return pointer to int.
|
||||||
|
*/
|
||||||
|
ErrnoLoc :: proc() -> ^c.int ---
|
||||||
|
}
|
||||||
+735
@@ -0,0 +1,735 @@
|
|||||||
|
package net
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
/** Resolver specific error codes */
|
||||||
|
SceNetResolverErrorCode :: enum c.int {
|
||||||
|
EINTERNAL = 220,
|
||||||
|
EBUSY,
|
||||||
|
ENOSPACE,
|
||||||
|
EPACKET,
|
||||||
|
ERESERVED224,
|
||||||
|
ENODNS,
|
||||||
|
ETIMEDOUT,
|
||||||
|
ENOSUPPORT,
|
||||||
|
EFORMAT,
|
||||||
|
ESERVERFAILURE,
|
||||||
|
ENOHOST,
|
||||||
|
ENOTIMPLEMENTED,
|
||||||
|
ESERVERREFUSED,
|
||||||
|
ENORECORD,
|
||||||
|
EALIGNMENT
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flags to specify as argument to ::sceNetDumpRead() */
|
||||||
|
SceNetDumpReadFlag :: enum c.int {
|
||||||
|
PEEK = 0x00000010,
|
||||||
|
DONTWAIT = 0x00000020,
|
||||||
|
OVERFLOW = 0x00000040,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetDumpAbortFlag :: enum c.int {
|
||||||
|
PRESERVATION = 0x00000001
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Events for ::SceNetEpollEvent */
|
||||||
|
SceNetEpollEventType :: enum c.int {
|
||||||
|
EPOLLIN = 0x00000001,
|
||||||
|
EPOLLOUT = 0x00000002,
|
||||||
|
EPOLLERR = 0x00000008,
|
||||||
|
EPOLLHUP = 0x00000010,
|
||||||
|
EPOLLDESCID = 0x00010000
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flags to specify as argument to ::sceNetEpollControl() */
|
||||||
|
SceNetEpollControlFlag :: enum c.int {
|
||||||
|
ADD = 1,
|
||||||
|
MOD,
|
||||||
|
DEL
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flags to specify as argument to ::sceNetEmulationGet() / ::sceNetEmulationSet() */
|
||||||
|
SceNetEmulationFlag :: enum c.int {
|
||||||
|
ETH0 = 1,
|
||||||
|
WLAN0
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flags to specify as argument to ::sceNetResolverStartNtoa() / ::sceNetResolverStartAton() */
|
||||||
|
SceNetResolverFlag :: enum c.int {
|
||||||
|
ASYNC = 0x00000001,
|
||||||
|
START_NTOA_DISABLE_IPADDRESS = 0x00010000
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flags to specify as argument to ::sceNetResolverAbort() */
|
||||||
|
SceNetResolverAbortFlag :: enum c.int {
|
||||||
|
NTOA_PRESERVATION = 0x00000001,
|
||||||
|
ATON_PRESERVATION = 0x00000002
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flags to specify as argument to ::sceNetSocketAbort() */
|
||||||
|
SceNetSocketAbortFlag :: enum c.int {
|
||||||
|
RCV_PRESERVATION = 0x00000001,
|
||||||
|
SND_PRESERVATION = 0x00000002
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flags to specify as argument to ::sceNetShutdown */
|
||||||
|
SceNetShutdownFlag :: enum c.int {
|
||||||
|
RD,
|
||||||
|
WR,
|
||||||
|
RDWR
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Defines */
|
||||||
|
SceNetEpollAbortFlag :: enum c.int {
|
||||||
|
PRESERVATION = 0x00000001,
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_NET_RESOLVER_PORT :: 53
|
||||||
|
SCE_NET_RESOLVER_HOSTNAME_LEN_MAX :: 255
|
||||||
|
|
||||||
|
/* callback */
|
||||||
|
|
||||||
|
SceNetResolverFunctionAllocate :: #type ^proc(
|
||||||
|
size: c.uint,
|
||||||
|
rid: c.int,
|
||||||
|
name: cstring,
|
||||||
|
user: rawptr,
|
||||||
|
) -> rawptr
|
||||||
|
|
||||||
|
SceNetResolverFunctionFree :: #type ^proc(
|
||||||
|
ptr: rawptr,
|
||||||
|
rid: c.int,
|
||||||
|
name: cstring,
|
||||||
|
user: rawptr,
|
||||||
|
)
|
||||||
|
|
||||||
|
/* struct */
|
||||||
|
|
||||||
|
SceNetInitParam :: struct {
|
||||||
|
memory: rawptr,
|
||||||
|
size: c.int,
|
||||||
|
flags: c.int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetInitParam) == 0xC)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetEmulationData :: struct {
|
||||||
|
drop_rate: c.ushort,
|
||||||
|
drop_duration: c.ushort,
|
||||||
|
pass_duration: c.ushort,
|
||||||
|
delay_time: c.ushort,
|
||||||
|
delay_jitter: c.ushort,
|
||||||
|
order_rate: c.ushort,
|
||||||
|
order_delay_time: c.ushort,
|
||||||
|
duplication_rate: c.ushort,
|
||||||
|
bps_limit: c.uint,
|
||||||
|
lower_size_limit: c.ushort,
|
||||||
|
upper_size_limit: c.ushort,
|
||||||
|
system_policy_pattern: c.uint,
|
||||||
|
game_policy_pattern: c.uint,
|
||||||
|
policy_flags: [64]c.ushort,
|
||||||
|
reserved: [64]c.uchar,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEmulationData) == 0xE0)
|
||||||
|
|
||||||
|
SceNetEmulationParam :: struct {
|
||||||
|
version: c.ushort,
|
||||||
|
option_number: c.ushort,
|
||||||
|
current_version: c.ushort,
|
||||||
|
result: c.ushort,
|
||||||
|
flags: c.uint,
|
||||||
|
reserved1: c.uint,
|
||||||
|
send: SceNetEmulationData,
|
||||||
|
recv: SceNetEmulationData,
|
||||||
|
seed: c.uint,
|
||||||
|
reserved: [44]c.uchar,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEmulationParam) == 0x200)
|
||||||
|
|
||||||
|
SceNetEpollDataExt :: struct {
|
||||||
|
id: c.int,
|
||||||
|
u32: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEpollDataExt) == 8)
|
||||||
|
|
||||||
|
SceNetEpollData :: struct #raw_union {
|
||||||
|
ptr: rawptr,
|
||||||
|
fd: c.int,
|
||||||
|
u32: c.uint,
|
||||||
|
u64: c.ulonglong,
|
||||||
|
ext: SceNetEpollDataExt,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEpollData) == 8)
|
||||||
|
|
||||||
|
SceNetEpollSystemData :: struct {
|
||||||
|
system: [4]c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEpollSystemData) == 0x10)
|
||||||
|
|
||||||
|
SceNetEpollEvent :: struct {
|
||||||
|
events: c.uint,
|
||||||
|
reserved: c.uint,
|
||||||
|
system: SceNetEpollSystemData,
|
||||||
|
data: SceNetEpollData,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEpollEvent) == 0x20)
|
||||||
|
|
||||||
|
SceNetResolverParam :: struct {
|
||||||
|
allocate: SceNetResolverFunctionAllocate,
|
||||||
|
free: SceNetResolverFunctionFree,
|
||||||
|
user: rawptr,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetResolverParam) == 0xC)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Net Error Codes */
|
||||||
|
// TODO: this should be a c.int
|
||||||
|
SceNetErrorCode :: enum i64 {
|
||||||
|
EPERM = 0x80410101,
|
||||||
|
ENOENT = 0x80410102,
|
||||||
|
ESRCH = 0x80410103,
|
||||||
|
EINTR = 0x80410104,
|
||||||
|
EIO = 0x80410105,
|
||||||
|
ENXIO = 0x80410106,
|
||||||
|
E2BIG = 0x80410107,
|
||||||
|
ENOEXEC = 0x80410108,
|
||||||
|
EBADF = 0x80410109,
|
||||||
|
ECHILD = 0x8041010A,
|
||||||
|
EDEADLK = 0x8041010B,
|
||||||
|
ENOMEM = 0x8041010C,
|
||||||
|
EACCES = 0x8041010D,
|
||||||
|
EFAULT = 0x8041010E,
|
||||||
|
ENOTBLK = 0x8041010F,
|
||||||
|
EBUSY = 0x80410110,
|
||||||
|
EEXIST = 0x80410111,
|
||||||
|
EXDEV = 0x80410112,
|
||||||
|
ENODEV = 0x80410113,
|
||||||
|
ENOTDIR = 0x80410114,
|
||||||
|
EISDIR = 0x80410115,
|
||||||
|
EINVAL = 0x80410116,
|
||||||
|
ENFILE = 0x80410117,
|
||||||
|
EMFILE = 0x80410118,
|
||||||
|
ENOTTY = 0x80410119,
|
||||||
|
ETXTBSY = 0x8041011A,
|
||||||
|
EFBIG = 0x8041011B,
|
||||||
|
ENOSPC = 0x8041011C,
|
||||||
|
ESPIPE = 0x8041011D,
|
||||||
|
EROFS = 0x8041011E,
|
||||||
|
EMLINK = 0x8041011F,
|
||||||
|
EPIPE = 0x80410120,
|
||||||
|
EDOM = 0x80410121,
|
||||||
|
ERANGE = 0x80410122,
|
||||||
|
EAGAIN = 0x80410123,
|
||||||
|
EWOULDBLOCK = 0x80410123,
|
||||||
|
EINPROGRESS = 0x80410124,
|
||||||
|
EALREADY = 0x80410125,
|
||||||
|
ENOTSOCK = 0x80410126,
|
||||||
|
EDESTADDRREQ = 0x80410127,
|
||||||
|
EMSGSIZE = 0x80410128,
|
||||||
|
EPROTOTYPE = 0x80410129,
|
||||||
|
ENOPROTOOPT = 0x8041012A,
|
||||||
|
EPROTONOSUPPORT = 0x8041012B,
|
||||||
|
ESOCKTNOSUPPORT = 0x8041012C,
|
||||||
|
EOPNOTSUPP = 0x8041012D,
|
||||||
|
EPFNOSUPPORT = 0x8041012E,
|
||||||
|
EAFNOSUPPORT = 0x8041012F,
|
||||||
|
EADDRINUSE = 0x80410130,
|
||||||
|
EADDRNOTAVAIL = 0x80410131,
|
||||||
|
ENETDOWN = 0x80410132,
|
||||||
|
ENETUNREACH = 0x80410133,
|
||||||
|
ENETRESET = 0x80410134,
|
||||||
|
ECONNABORTED = 0x80410135,
|
||||||
|
ECONNRESET = 0x80410136,
|
||||||
|
ENOBUFS = 0x80410137,
|
||||||
|
EISCONN = 0x80410138,
|
||||||
|
ENOTCONN = 0x80410139,
|
||||||
|
ESHUTDOWN = 0x8041013A,
|
||||||
|
ETOOMANYREFS = 0x8041013B,
|
||||||
|
ETIMEDOUT = 0x8041013C,
|
||||||
|
ECONNREFUSED = 0x8041013D,
|
||||||
|
ELOOP = 0x8041013E,
|
||||||
|
ENAMETOOLONG = 0x8041013F,
|
||||||
|
EHOSTDOWN = 0x80410140,
|
||||||
|
EHOSTUNREACH = 0x80410141,
|
||||||
|
ENOTEMPTY = 0x80410142,
|
||||||
|
EPROCLIM = 0x80410143,
|
||||||
|
EUSERS = 0x80410144,
|
||||||
|
EDQUOT = 0x80410145,
|
||||||
|
ESTALE = 0x80410146,
|
||||||
|
EREMOTE = 0x80410147,
|
||||||
|
EBADRPC = 0x80410148,
|
||||||
|
ERPCMISMATCH = 0x80410149,
|
||||||
|
EPROGUNAVAIL = 0x8041014A,
|
||||||
|
EPROGMISMATCH = 0x8041014B,
|
||||||
|
EPROCUNAVAIL = 0x8041014C,
|
||||||
|
ENOLCK = 0x8041014D,
|
||||||
|
ENOSYS = 0x8041014E,
|
||||||
|
EFTYPE = 0x8041014F,
|
||||||
|
EAUTH = 0x80410150,
|
||||||
|
ENEEDAUTH = 0x80410151,
|
||||||
|
EIDRM = 0x80410152,
|
||||||
|
ENOMS = 0x80410153,
|
||||||
|
EOVERFLOW = 0x80410154,
|
||||||
|
EILSEQ = 0x80410155,
|
||||||
|
ENOTSUP = 0x80410156,
|
||||||
|
ECANCELED = 0x80410157,
|
||||||
|
EBADMSG = 0x80410158,
|
||||||
|
ENODATA = 0x80410159,
|
||||||
|
ENOSR = 0x8041015A,
|
||||||
|
ENOSTR = 0x8041015B,
|
||||||
|
ETIME = 0x8041015C,
|
||||||
|
EADHOC = 0x804101A0,
|
||||||
|
EDISABLEDIF = 0x804101A1,
|
||||||
|
ERESUME = 0x804101A2,
|
||||||
|
ENOTINIT = 0x804101C8,
|
||||||
|
ENOLIBMEM = 0x804101C9,
|
||||||
|
ERESERVED202 = 0x804101CA,
|
||||||
|
ECALLBACK = 0x804101CB,
|
||||||
|
EINTERNAL = 0x804101CC,
|
||||||
|
ERETURN = 0x804101CD,
|
||||||
|
RESOLVER_EINTERNAL = 0x804101DC,
|
||||||
|
RESOLVER_EBUSY = 0x804101DD,
|
||||||
|
RESOLVER_ENOSPACE = 0x804101DE,
|
||||||
|
RESOLVER_EPACKET = 0x804101DF,
|
||||||
|
RESOLVER_ERESERVED22 = 0x804101E0,
|
||||||
|
RESOLVER_ENODNS = 0x804101E1,
|
||||||
|
RESOLVER_ETIMEDOUT = 0x804101E2,
|
||||||
|
RESOLVER_ENOSUPPORT = 0x804101E3,
|
||||||
|
RESOLVER_EFORMAT = 0x804101E4,
|
||||||
|
RESOLVER_ESERVERFAILURE = 0x804101E5,
|
||||||
|
RESOLVER_ENOHOST = 0x804101E6,
|
||||||
|
RESOLVER_ENOTIMPLEMENTED = 0x804101E7,
|
||||||
|
RESOLVER_ESERVERREFUSED = 0x804101E8,
|
||||||
|
RESOLVER_ENORECORD = 0x804101E9,
|
||||||
|
RESOLVER_EALIGNMENT = 0x804101EA
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Specific kernel and libnet error codes */
|
||||||
|
SceNetKernelErrorCode :: enum c.int {
|
||||||
|
EPERM = 1,
|
||||||
|
ENOENT = 2,
|
||||||
|
ESRCH = 3,
|
||||||
|
EINTR = 4,
|
||||||
|
EIO = 5,
|
||||||
|
ENXIO = 6,
|
||||||
|
E2BIG = 7,
|
||||||
|
ENOEXEC = 8,
|
||||||
|
EBADF = 9,
|
||||||
|
ECHILD = 10,
|
||||||
|
EDEADLK = 11,
|
||||||
|
ENOMEM = 12,
|
||||||
|
EACCES = 13,
|
||||||
|
EFAULT = 14,
|
||||||
|
ENOTBLK = 15,
|
||||||
|
EBUSY = 16,
|
||||||
|
EEXIST = 17,
|
||||||
|
EXDEV = 18,
|
||||||
|
ENODEV = 19,
|
||||||
|
ENOTDIR = 20,
|
||||||
|
EISDIR = 21,
|
||||||
|
EINVAL = 22,
|
||||||
|
ENFILE = 23,
|
||||||
|
EMFILE = 24,
|
||||||
|
ENOTTY = 25,
|
||||||
|
ETXTBSY = 26,
|
||||||
|
EFBIG = 27,
|
||||||
|
ENOSPC = 28,
|
||||||
|
ESPIPE = 29,
|
||||||
|
EROFS = 30,
|
||||||
|
EMLINK = 31,
|
||||||
|
EPIPE = 32,
|
||||||
|
EDOM = 33,
|
||||||
|
ERANGE = 34,
|
||||||
|
EAGAIN = 35,
|
||||||
|
EWOULDBLOCK = 35,
|
||||||
|
EINPROGRESS = 36,
|
||||||
|
EALREADY = 37,
|
||||||
|
ENOTSOCK = 38,
|
||||||
|
EDESTADDRREQ = 39,
|
||||||
|
EMSGSIZE = 40,
|
||||||
|
EPROTOTYPE = 41,
|
||||||
|
ENOPROTOOPT = 42,
|
||||||
|
EPROTONOSUPPORT = 43,
|
||||||
|
ESOCKTNOSUPPORT = 44,
|
||||||
|
EOPNOTSUPP = 45,
|
||||||
|
EPFNOSUPPORT = 46,
|
||||||
|
EAFNOSUPPORT = 47,
|
||||||
|
EADDRINUSE = 48,
|
||||||
|
EADDRNOTAVAIL = 49,
|
||||||
|
ENETDOWN = 50,
|
||||||
|
ENETUNREACH = 51,
|
||||||
|
ENETRESET = 52,
|
||||||
|
ECONNABORTED = 53,
|
||||||
|
ECONNRESET = 54,
|
||||||
|
ENOBUFS = 55,
|
||||||
|
EISCONN = 56,
|
||||||
|
ENOTCONN = 57,
|
||||||
|
ESHUTDOWN = 58,
|
||||||
|
ETOOMANYREFS = 59,
|
||||||
|
ETIMEDOUT = 60,
|
||||||
|
ECONNREFUSED = 61,
|
||||||
|
ELOOP = 62,
|
||||||
|
ENAMETOOLONG = 63,
|
||||||
|
EHOSTDOWN = 64,
|
||||||
|
EHOSTUNREACH = 65,
|
||||||
|
ENOTEMPTY = 66,
|
||||||
|
EPROCLIM = 67,
|
||||||
|
EUSERS = 68,
|
||||||
|
EDQUOT = 69,
|
||||||
|
ESTALE = 70,
|
||||||
|
EREMOTE = 71,
|
||||||
|
EBADRPC = 72,
|
||||||
|
ERPCMISMATCH = 73,
|
||||||
|
EPROGUNAVAIL = 74,
|
||||||
|
EPROGMISMATCH = 75,
|
||||||
|
EPROCUNAVAIL = 76,
|
||||||
|
ENOLCK = 77,
|
||||||
|
ENOSYS = 78,
|
||||||
|
EFTYPE = 79,
|
||||||
|
EAUTH = 80,
|
||||||
|
ENEEDAUTH = 81,
|
||||||
|
EIDRM = 82,
|
||||||
|
ENOMSG = 83,
|
||||||
|
EOVERFLOW = 84,
|
||||||
|
EILSEQ = 85,
|
||||||
|
ENOTSUP = 86,
|
||||||
|
ECANCELED = 87,
|
||||||
|
EBADMSG = 88,
|
||||||
|
ENODATA = 89,
|
||||||
|
ENOSR = 90,
|
||||||
|
ENOSTR = 91,
|
||||||
|
ETIME = 92,
|
||||||
|
EADHOC = 160,
|
||||||
|
EDISABLEDIF = 161,
|
||||||
|
ERESUME = 162
|
||||||
|
}
|
||||||
|
|
||||||
|
/** libnet specific error codes */
|
||||||
|
SceNetLibnetErrorCode :: enum c.int {
|
||||||
|
ENOTINIT = 200,
|
||||||
|
ENOLIBMEM,
|
||||||
|
ETLS,
|
||||||
|
ECALLBACK,
|
||||||
|
EINTERNAL,
|
||||||
|
ERETURN
|
||||||
|
}
|
||||||
|
|
||||||
|
/** state for ::SceNetSockInfo structure */
|
||||||
|
SceNetSockInfoState :: enum c.int {
|
||||||
|
UNKNOWN,
|
||||||
|
CLOSED,
|
||||||
|
OPENED,
|
||||||
|
LISTEN,
|
||||||
|
SYN_SENT,
|
||||||
|
SYN_RECEIVED,
|
||||||
|
ESTABLISHED,
|
||||||
|
FIN_WAIT_1,
|
||||||
|
FIN_WAIT_2,
|
||||||
|
CLOSE_WAIT,
|
||||||
|
CLOSING,
|
||||||
|
LAST_ACK,
|
||||||
|
TIME_WAIT
|
||||||
|
}
|
||||||
|
|
||||||
|
/** flags for ::SceNetSockInfo structure */
|
||||||
|
SceNetSockInfoFlag :: enum c.int {
|
||||||
|
SELF = 0x00000001,
|
||||||
|
KERNEL = 0x00000002,
|
||||||
|
OTHERS = 0x00000004,
|
||||||
|
RECV_WAIT = 0x00010000,
|
||||||
|
SEND_WAIT = 0x00020000,
|
||||||
|
RECV_EWAIT = 0x00040000,
|
||||||
|
SEND_EWAIT = 0x00080000,
|
||||||
|
WAKEUP_SIGNAL = 0x00100000,
|
||||||
|
ALL = 0x001F0007
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Net Protocols */
|
||||||
|
SceNetProtocol :: enum c.int {
|
||||||
|
IPPROTO_IP = 0,
|
||||||
|
IPPROTO_ICMP = 1,
|
||||||
|
IPPROTO_IGMP = 2,
|
||||||
|
IPPROTO_TCP = 6,
|
||||||
|
IPPROTO_UDP = 17,
|
||||||
|
SOL_SOCKET = 0xFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Socket Options */
|
||||||
|
SceNetSocketOption :: enum c.int {
|
||||||
|
/* IP */
|
||||||
|
IP_HDRINCL = 2,
|
||||||
|
IP_TOS = 3,
|
||||||
|
IP_TTL = 4,
|
||||||
|
IP_MULTICAST_IF = 9,
|
||||||
|
IP_MULTICAST_TTL = 10,
|
||||||
|
IP_MULTICAST_LOOP = 11,
|
||||||
|
IP_ADD_MEMBERSHIP = 12,
|
||||||
|
IP_DROP_MEMBERSHIP = 13,
|
||||||
|
IP_TTLCHK = 23,
|
||||||
|
IP_MAXTTL = 24,
|
||||||
|
/* TCP */
|
||||||
|
TCP_NODELAY = 1,
|
||||||
|
TCP_MAXSEG = 2,
|
||||||
|
TCP_MSS_TO_ADVERTISE = 3,
|
||||||
|
/* SOCKET */
|
||||||
|
SO_REUSEADDR = 0x00000004,
|
||||||
|
SO_KEEPALIVE = 0x00000008,
|
||||||
|
SO_BROADCAST = 0x00000020,
|
||||||
|
SO_LINGER = 0x00000080,
|
||||||
|
SO_OOBINLINE = 0x00000100,
|
||||||
|
SO_REUSEPORT = 0x00000200,
|
||||||
|
SO_ONESBCAST = 0x00000800,
|
||||||
|
SO_USECRYPTO = 0x00001000,
|
||||||
|
SO_USESIGNATURE = 0x00002000,
|
||||||
|
SO_SNDBUF = 0x1001,
|
||||||
|
SO_RCVBUF = 0x1002,
|
||||||
|
SO_SNDLOWAT = 0x1003,
|
||||||
|
SO_RCVLOWAT = 0x1004,
|
||||||
|
SO_SNDTIMEO = 0x1005,
|
||||||
|
SO_RCVTIMEO = 0x1006,
|
||||||
|
SO_ERROR = 0x1007,
|
||||||
|
SO_TYPE = 0x1008,
|
||||||
|
SO_NBIO = 0x1100,
|
||||||
|
SO_TPPOLICY = 0x1101,
|
||||||
|
SO_NAME = 0x1102
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Socket types */
|
||||||
|
SceNetSocketType :: enum c.int {
|
||||||
|
STREAM = 1,
|
||||||
|
DGRAM = 2,
|
||||||
|
RAW = 3,
|
||||||
|
DGRAM_P2P = 6,
|
||||||
|
STREAM_P2P = 10
|
||||||
|
}
|
||||||
|
|
||||||
|
/** MSG Flags */
|
||||||
|
SceNetMsgFlag :: enum c.int {
|
||||||
|
PEEK = 0x00000002,
|
||||||
|
WAITALL = 0x00000040,
|
||||||
|
DONTWAIT = 0x00000080,
|
||||||
|
USECRYPTO = 0x00000400,
|
||||||
|
USESIGNATURE = 0x00000800
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Types to specify to ::SceNetIcmpHeader structure */
|
||||||
|
SceNetIcmpType :: enum c.int {
|
||||||
|
ECHO_REPLY = 0,
|
||||||
|
DEST_UNREACH = 3,
|
||||||
|
SOURCE_QUENCH = 4,
|
||||||
|
REDIRECT = 5,
|
||||||
|
ECHO_REQUEST = 8,
|
||||||
|
TIME_EXCEEDED = 11,
|
||||||
|
PARAMETER_PROBLEM = 12,
|
||||||
|
TIMESTAMP_REQUEST = 13,
|
||||||
|
TIMESTAMP_REPLY = 14,
|
||||||
|
INFORMATION_REQUEST = 15,
|
||||||
|
INFORMATION_REPLY = 16,
|
||||||
|
ADDRESS_MASK_REQUEST = 17,
|
||||||
|
ADDRESS_MASK_REPLY = 18
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Codes to specify to ::SceNetIcmpHeader structure */
|
||||||
|
SceNetIcmpCode :: enum c.int {
|
||||||
|
DEST_UNREACH_NET_UNREACH = 0,
|
||||||
|
DEST_UNREACH_HOST_UNREACH = 1,
|
||||||
|
DEST_UNREACH_PROTO_UNREACH = 2,
|
||||||
|
DEST_UNREACH_PORT_UNREACH = 3,
|
||||||
|
DEST_UNREACH_FRAG_AND_DF = 4,
|
||||||
|
DEST_UNREACH_SRC_HOST_FAILED = 5,
|
||||||
|
DEST_UNREACH_DST_NET_UNKNOWN = 6,
|
||||||
|
DEST_UNREACH_DST_HOST_UNKNOWN = 7,
|
||||||
|
DEST_UNREACH_SRC_HOST_ISOLATED = 8,
|
||||||
|
DEST_UNREACH_NET_ADMIN_PROHIBITED = 9,
|
||||||
|
DEST_UNREACH_NET_HOST_PROHIBITED = 10,
|
||||||
|
DEST_UNREACH_NET_TOS = 11,
|
||||||
|
DEST_UNREACH_HOST_TOS = 12,
|
||||||
|
TIME_EXCEEDED_TTL_EXCEEDED = 0,
|
||||||
|
TIME_EXCEEDED_FRT_EXCEEDED = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
SCE_NET_IP_DEFAULT_MULTICAST_TTL :: 1
|
||||||
|
SCE_NET_IP_DEFAULT_MULTICAST_LOOP :: 1
|
||||||
|
|
||||||
|
SCE_NET_IPVERSION :: 4
|
||||||
|
|
||||||
|
SCE_NET_IP_RF :: 0x8000
|
||||||
|
SCE_NET_IP_DF :: 0x4000
|
||||||
|
SCE_NET_IP_MF :: 0x2000
|
||||||
|
SCE_NET_IP_OFFMASK :: 0x1FFF
|
||||||
|
|
||||||
|
SCE_NET_INADDR_ANY :: 0x00000000
|
||||||
|
SCE_NET_INADDR_LOOPBACK :: 0x7F000001
|
||||||
|
SCE_NET_INADDR_BROADCAST :: 0xFFFFFFFF
|
||||||
|
SCE_NET_INADDR_UNSPEC_GROUP :: 0xE0000000
|
||||||
|
SCE_NET_INADDR_AUTOIP :: 0xA9FE0000
|
||||||
|
|
||||||
|
SCE_NET_IN_CLASSD_NET :: 0xF0000000
|
||||||
|
SCE_NET_IN_AUTOIP_NET :: 0xFFFF0000
|
||||||
|
|
||||||
|
SCE_NET_ADHOC_PORT :: 3658
|
||||||
|
|
||||||
|
SCE_NET_AF_INET :: 2
|
||||||
|
|
||||||
|
SCE_NET_DEBUG_NAME_LEN_MAX :: 31
|
||||||
|
|
||||||
|
SCE_NET_ID_SOCKET_MIN :: 0
|
||||||
|
SCE_NET_ID_SOCKET_MAX :: 1023
|
||||||
|
|
||||||
|
SceNetFdSet :: struct {
|
||||||
|
bits: [32]c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetFdSet) == 0x80)
|
||||||
|
|
||||||
|
SceNetInAddr :: struct {
|
||||||
|
s_addr: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetInAddr) == 4)
|
||||||
|
|
||||||
|
SceNetSockaddrIn :: struct {
|
||||||
|
sin_len: c.uchar,
|
||||||
|
sin_family: c.uchar,
|
||||||
|
sin_port: c.ushort,
|
||||||
|
sin_addr: SceNetInAddr,
|
||||||
|
sin_vport: c.ushort,
|
||||||
|
sin_zero: [6]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetSockaddrIn) == 0x10)
|
||||||
|
|
||||||
|
SceNetIpMreq :: struct {
|
||||||
|
imr_multiaddr: SceNetInAddr,
|
||||||
|
imr_interface: SceNetInAddr,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIpMreq) == 8)
|
||||||
|
|
||||||
|
SceNetEtherAddr :: struct {
|
||||||
|
data: [6]c.uchar,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEtherAddr) == 6)
|
||||||
|
|
||||||
|
SceNetDnsInfo :: struct {
|
||||||
|
dns_addr: [2]SceNetInAddr,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetDnsInfo) == 8)
|
||||||
|
|
||||||
|
SceNetLinger :: struct {
|
||||||
|
l_onoff: c.int,
|
||||||
|
l_linger: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetLinger) == 8)
|
||||||
|
|
||||||
|
SceNetSockaddr :: struct {
|
||||||
|
sa_len: c.uchar,
|
||||||
|
sa_family: c.uchar,
|
||||||
|
sa_data: [14]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetSockaddr) == 0x10)
|
||||||
|
|
||||||
|
SceNetIovec :: struct {
|
||||||
|
iov_base: rawptr,
|
||||||
|
iov_len: c.uint,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetIovec) == 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetMsghdr :: struct {
|
||||||
|
msg_name: rawptr,
|
||||||
|
msg_namelen: c.uint,
|
||||||
|
msg_iov: ^SceNetIovec,
|
||||||
|
msg_iovlen: c.int,
|
||||||
|
msg_control: rawptr,
|
||||||
|
msg_controllen: c.uint,
|
||||||
|
msg_flags: c.int,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetMsghdr) == 0x1C)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetSockInfo :: struct {
|
||||||
|
name: [SCE_NET_DEBUG_NAME_LEN_MAX + 1]c.char,
|
||||||
|
pid: c.int,
|
||||||
|
s: c.int,
|
||||||
|
socket_type: c.char,
|
||||||
|
policy: c.char,
|
||||||
|
reserved16: c.short,
|
||||||
|
recv_queue_length: c.int,
|
||||||
|
send_queue_length: c.int,
|
||||||
|
local_adr: SceNetInAddr,
|
||||||
|
remote_adr: SceNetInAddr,
|
||||||
|
local_port: c.ushort,
|
||||||
|
remote_port: c.ushort,
|
||||||
|
local_vport: c.ushort,
|
||||||
|
remote_vport: c.ushort,
|
||||||
|
state: c.int,
|
||||||
|
flags: c.int,
|
||||||
|
reserved: [8]c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetSockInfo) == 0x6C)
|
||||||
|
|
||||||
|
SceNetStatisticsInfo :: struct {
|
||||||
|
kernel_mem_free_size: c.int,
|
||||||
|
kernel_mem_free_min: c.int,
|
||||||
|
packet_count: c.int,
|
||||||
|
packet_qos_count: c.int,
|
||||||
|
|
||||||
|
libnet_mem_free_size: c.int,
|
||||||
|
libnet_mem_free_min: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetStatisticsInfo) == 0x18)
|
||||||
|
|
||||||
|
SceNetIpHeaderIpVerHl :: struct {
|
||||||
|
hl: c.char,
|
||||||
|
ver: c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIpHeaderIpVerHl) == 2)
|
||||||
|
|
||||||
|
SceNetIpHeaderUnion :: struct #raw_union {
|
||||||
|
ip_ver_hl: SceNetIpHeaderIpVerHl ,
|
||||||
|
ver_hl: c.uchar,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIpHeaderUnion) == 2)
|
||||||
|
|
||||||
|
SceNetIpHeader :: struct {
|
||||||
|
un: SceNetIpHeaderUnion,
|
||||||
|
ip_tos: c.uchar,
|
||||||
|
ip_len: c.ushort,
|
||||||
|
ip_id: c.ushort,
|
||||||
|
ip_off: c.ushort,
|
||||||
|
ip_ttl: c.uchar,
|
||||||
|
ip_p: c.uchar,
|
||||||
|
ip_sum: c.ushort,
|
||||||
|
ip_src: SceNetInAddr,
|
||||||
|
ip_dst: SceNetInAddr,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIpHeader) == 0x18)
|
||||||
|
|
||||||
|
SceNetIcmpHeaderEcho :: struct {
|
||||||
|
id: c.ushort,
|
||||||
|
sequence: c.ushort,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIcmpHeaderEcho) == 4)
|
||||||
|
|
||||||
|
SceNetIcmpHeaderFrag :: struct {
|
||||||
|
unused: c.ushort,
|
||||||
|
mtu: c.ushort,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIcmpHeaderFrag) == 4)
|
||||||
|
|
||||||
|
SceNetIcmpHeaderUnion :: struct #raw_union {
|
||||||
|
echo: SceNetIcmpHeaderEcho,
|
||||||
|
gateway: c.uint,
|
||||||
|
frag: SceNetIcmpHeaderFrag,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIcmpHeaderUnion) == 4)
|
||||||
|
|
||||||
|
SceNetIcmpHeader :: struct {
|
||||||
|
type: c.uchar,
|
||||||
|
code: c.uchar,
|
||||||
|
checksum: c.ushort,
|
||||||
|
un: SceNetIcmpHeaderUnion,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetIcmpHeader) == 8)
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package netctl
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import netctl "system:SceNetCtl_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "SceNetCtl")
|
||||||
|
foreign netctl {
|
||||||
|
Init :: proc() -> c.int ---
|
||||||
|
Term :: proc() ---
|
||||||
|
|
||||||
|
CheckCallback :: proc() -> c.int ---
|
||||||
|
|
||||||
|
InetGetResult :: proc(eventType: c.int, errorCode: ^c.int) -> c.int ---
|
||||||
|
AdhocGetResult :: proc(eventType: c.int, errorCode: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
InetGetInfo :: proc(code: c.int, info: ^SceNetCtlInfo) -> c.int ---
|
||||||
|
InetGetState :: proc(state: ^c.int) -> c.int ---
|
||||||
|
GetNatInfo :: proc(natinfo: ^SceNetCtlNatInfo) -> c.int ---
|
||||||
|
|
||||||
|
InetRegisterCallback :: proc(func: SceNetCtlCallback, arg: rawptr, cid: ^c.int) -> c.int ---
|
||||||
|
InetUnregisterCallback :: proc(cid: c.int) -> c.int ---
|
||||||
|
|
||||||
|
AdhocRegisterCallback :: proc(func: SceNetCtlCallback, arg: rawptr, cid: ^c.int) -> c.int ---
|
||||||
|
AdhocUnregisterCallback :: proc(cid: c.int) -> c.int ---
|
||||||
|
AdhocGetState :: proc(state: ^c.int) -> c.int ---
|
||||||
|
AdhocDisconnect :: proc() -> c.int ---
|
||||||
|
AdhocGetPeerList :: proc(buflen: ^c.uint, buf: rawptr) -> c.int ---
|
||||||
|
AdhocGetInAddr :: proc(inaddr: ^SceNetInAddr) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package netctl
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
SCE_NETCTL_INFO_CONFIG_NAME_LEN_MAX :: 64
|
||||||
|
SCE_NETCTL_INFO_SSID_LEN_MAX :: 32
|
||||||
|
|
||||||
|
SceNetCtlInfoType :: enum c.int {
|
||||||
|
GET_CNF_NAME = 1,
|
||||||
|
GET_DEVICE,
|
||||||
|
GET_ETHER_ADDR,
|
||||||
|
GET_MTU,
|
||||||
|
GET_LINK,
|
||||||
|
GET_BSSID,
|
||||||
|
GET_SSID,
|
||||||
|
GET_WIFI_SECURITY,
|
||||||
|
GET_RSSI_DBM,
|
||||||
|
GET_RSSI_PERCENTAGE,
|
||||||
|
GET_CHANNEL,
|
||||||
|
GET_IP_CONFIG,
|
||||||
|
GET_DHCP_HOSTNAME,
|
||||||
|
GET_PPPOE_AUTH_NAME,
|
||||||
|
GET_IP_ADDRESS,
|
||||||
|
GET_NETMASK,
|
||||||
|
GET_DEFAULT_ROUTE,
|
||||||
|
GET_PRIMARY_DNS,
|
||||||
|
GET_SECONDARY_DNS,
|
||||||
|
GET_HTTP_PROXY_CONFIG,
|
||||||
|
GET_HTTP_PROXY_SERVER,
|
||||||
|
GET_HTTP_PROXY_PORT,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetCtlState :: enum c.int {
|
||||||
|
DISCONNECTED,
|
||||||
|
CONNECTING,
|
||||||
|
FINALIZING,
|
||||||
|
CONNECTED
|
||||||
|
}
|
||||||
|
|
||||||
|
/* callback */
|
||||||
|
|
||||||
|
SceNetCtlCallback :: #type ^proc(
|
||||||
|
event_type: c.int,
|
||||||
|
arg: rawptr,
|
||||||
|
) -> rawptr
|
||||||
|
|
||||||
|
/* struct/union */
|
||||||
|
|
||||||
|
// TODO: copy-pasted from Net/types.odin. should prob be in common or something
|
||||||
|
SceNetEtherAddr :: struct {
|
||||||
|
data: [6]c.uchar,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetEtherAddr) == 6)
|
||||||
|
|
||||||
|
// TODO: copy-pasted from Net/types.odin. should prob be in common or something
|
||||||
|
SceNetInAddr :: struct {
|
||||||
|
s_addr: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetInAddr) == 4)
|
||||||
|
|
||||||
|
SceNetCtlInfo :: struct #raw_union {
|
||||||
|
cnf_name: [SCE_NETCTL_INFO_CONFIG_NAME_LEN_MAX + 1]c.char,
|
||||||
|
device: c.uint,
|
||||||
|
ether_addr: SceNetEtherAddr,
|
||||||
|
mtu: c.uint,
|
||||||
|
link: c.uint,
|
||||||
|
bssid: SceNetEtherAddr,
|
||||||
|
ssid: [SCE_NETCTL_INFO_SSID_LEN_MAX + 1]c.char,
|
||||||
|
wifi_security: c.uint,
|
||||||
|
rssi_dbm: c.uint,
|
||||||
|
rssi_percentage: c.uint,
|
||||||
|
channel: c.uint,
|
||||||
|
ip_config: c.uint,
|
||||||
|
dhcp_hostname: [256]c.char,
|
||||||
|
pppoe_auth_name: [128]c.char,
|
||||||
|
ip_address: [16]c.char,
|
||||||
|
netmask: [16]c.char,
|
||||||
|
default_route: [16]c.char,
|
||||||
|
primary_dns: [16]c.char,
|
||||||
|
secondary_dns: [16]c.char,
|
||||||
|
http_proxy_config: c.uint,
|
||||||
|
http_proxy_server: [256]c.char,
|
||||||
|
http_proxy_port: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetCtlInfo) == 0x100)
|
||||||
|
|
||||||
|
|
||||||
|
SceNetCtlNatInfo :: struct {
|
||||||
|
size: c.uint,
|
||||||
|
stun_status: c.int,
|
||||||
|
nat_type: c.int,
|
||||||
|
mapped_addr: SceNetInAddr,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetCtlNatInfo) == 0x10)
|
||||||
|
|
||||||
|
SceNetCtlAdhocPeerInfo :: struct {
|
||||||
|
next: ^SceNetCtlAdhocPeerInfo,
|
||||||
|
inet_addr: SceNetInAddr,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetCtlAdhocPeerInfo) == 8)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package net_syscalls
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import net_syscalls "system:SceNetPsForSyscalls_stub"
|
||||||
|
|
||||||
|
SceNetSyscallParameter :: struct{} // missing struct
|
||||||
|
|
||||||
|
@(link_prefix = "sceNetSyscall")
|
||||||
|
foreign net_syscalls {
|
||||||
|
Accept :: proc(s: c.int, addr: rawptr, addrlen: rawptr) -> c.int ---
|
||||||
|
Bind :: proc(s: c.int, addr: rawptr, addrlen: c.int) -> c.int ---
|
||||||
|
Close :: proc(s: c.int) -> c.int ---
|
||||||
|
Connect :: proc(s: c.int, name: rawptr, namelen: c.int) -> c.int ---
|
||||||
|
Control :: proc(if_index: c.int, code: c.int, ptr: rawptr, len: c.int) -> c.int ---
|
||||||
|
DescriptorClose :: proc(id: c.int) -> c.int ---
|
||||||
|
DescriptorCreate :: proc(name: cstring, flags: c.int) -> c.int ---
|
||||||
|
DescriptorCtl :: proc(id: c.int, op: c.int, s: c.int, info: rawptr) -> c.int ---
|
||||||
|
DumpAbort :: proc(id: c.int, flags: c.int) -> c.int ---
|
||||||
|
DumpClose :: proc(id: c.int) -> c.int ---
|
||||||
|
DumpCreate :: proc(name: cstring, len: c.int, flags: c.int) -> c.int ---
|
||||||
|
DumpRead :: proc(id: c.int, buf: rawptr, len: c.int, pflags: rawptr) -> c.int ---
|
||||||
|
EpollAbort :: proc(eid: c.int, flags: c.int) -> c.int ---
|
||||||
|
EpollClose :: proc(eid: c.int) -> c.int ---
|
||||||
|
EpollCreate :: proc(name: cstring, flags: c.int) -> c.int ---
|
||||||
|
EpollCtl :: proc(eid: c.int, op: c.int, id: c.int, event: rawptr) -> c.int ---
|
||||||
|
EpollWait :: proc(param: ^SceNetSyscallParameter) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get net if list
|
||||||
|
*
|
||||||
|
* @param[out] list - The output buffer list. size is (0x140 * n)
|
||||||
|
* @param[in] n - The output size number.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetIfList :: proc(list: rawptr, n: c.int) -> c.int ---
|
||||||
|
|
||||||
|
GetSockinfo :: proc(s: c.int, ptr: rawptr, n: c.int, flags: c.int) -> c.int ---
|
||||||
|
Getpeername :: proc(s: c.int, name: rawptr, namelen: rawptr) -> c.int ---
|
||||||
|
Getsockname :: proc(s: c.int, name: rawptr, namelen: rawptr) -> c.int ---
|
||||||
|
Getsockopt :: proc(param: ^SceNetSyscallParameter) -> c.int ---
|
||||||
|
IcmConnect :: proc(s: c.int, flags: c.int) -> c.int ---
|
||||||
|
Ioctl :: proc(s: c.int, com: c.uint, data: rawptr) -> c.int ---
|
||||||
|
Listen :: proc(s: c.int, backlog: c.int) -> c.int ---
|
||||||
|
Recvfrom :: proc(param: ^SceNetSyscallParameter) -> c.int ---
|
||||||
|
Recvmsg :: proc(s: c.int, msg: rawptr, flags: c.int) -> c.int ---
|
||||||
|
Sendmsg :: proc(s: c.int, msg: rawptr, flags: c.int) -> c.int ---
|
||||||
|
Sendto :: proc(param: ^SceNetSyscallParameter) -> c.int ---
|
||||||
|
Setsockopt :: proc(param: ^SceNetSyscallParameter) -> c.int ---
|
||||||
|
Shutdown :: proc(s: c.int, how: c.int) -> c.int ---
|
||||||
|
Socket :: proc(name: cstring, domain: c.int, type: c.int, protocol: c.int) -> c.int ---
|
||||||
|
SocketAbort :: proc(s: c.int, flags: c.int) -> c.int ---
|
||||||
|
Sysctl :: proc(param: ^SceNetSyscallParameter) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
package ngs
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import ngs "sceNgs_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceNgs")
|
||||||
|
foreign ngs {
|
||||||
|
ModuleCheckParamsInRangeInternal :: proc(handle: SceNgsHVoice, module_id: SceNgsModuleID, #by_ptr descriptor: SceNgsParamsDescriptor, size: sce.UInt32) -> sce.Int32 ---
|
||||||
|
ModuleGetNumPresetsInternal :: proc(handle: SceNgsHSynSystem, module_id: SceNgsModuleID, num_presets: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
ModuleGetPresetInternal :: proc(handle: SceNgsHSynSystem, module_id: SceNgsModuleID, preset_index: sce.UInt32, info: ^SceNgsBufferInfo) -> sce.Int32 ---
|
||||||
|
PatchCreateRoutingInternal :: proc(#by_ptr info: SceNgsPatchSetupInfo, handle: ^SceNgsHPatch) -> sce.Int32 ---
|
||||||
|
PatchRemoveRoutingInternal :: proc(handle: SceNgsHPatch) -> sce.Int32 ---
|
||||||
|
RackGetRequiredMemorySizeInternal :: proc(handle: SceNgsHSynSystem, #by_ptr rack_description: SceNgsRackDescription, user_size: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
RackGetVoiceHandleInternal :: proc(rack_handle: SceNgsHRack, index: sce.UInt32, voice_handle: ^SceNgsHVoice) -> sce.Int32 ---
|
||||||
|
RackInitInternal :: proc(system_handle: SceNgsHSynSystem, rack_buffer: ^SceNgsBufferInfo, #by_ptr rack_description: SceNgsRackDescription, rack_handle: ^SceNgsHRack) -> sce.Int32 ---
|
||||||
|
RackReleaseInternal :: proc(handle: SceNgsHRack, callback: SceNgsRackReleaseCallbackFunc) -> sce.Int32 ---
|
||||||
|
RackSetParamErrorCallbackInternal :: proc(rack_handle: SceNgsHRack, callback: SceNgsParamsErrorCallbackFunc) -> sce.Int32 ---
|
||||||
|
SulphaGetInfoInternal :: proc(#by_ptr obj_reg: SulphaNgsRegistration, info: ^SceNgsBufferInfo) -> sce.Int32 ---
|
||||||
|
SulphaGetModuleListInternal :: proc(module_ids: ^sce.UInt32, in_array_count: sce.UInt32, count: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
SulphaGetSynthUpdateCallbackInternal :: proc(handle: SceNgsHSynSystem, update_callback: ^SceNgsSulphaUpdateCallback, info: ^SceNgsBufferInfo) -> sce.Int32 ---
|
||||||
|
SulphaQueryModuleInternal :: proc(type: SulphaNgsModuleQueryType, debug: ^SulphaNgsModuleQuery) -> sce.Int32 ---
|
||||||
|
SulphaSetSynthUpdateCallbackInternal :: proc(handle: SceNgsHSynSystem, update_callback: SceNgsSulphaUpdateCallback, info: ^SceNgsBufferInfo) -> sce.Int32 ---
|
||||||
|
SystemGetCallbackListInternal :: proc(handle: SceNgsHSynSystem, array: ^[^]SceNgsCallbackListInfo, array_size: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
SystemGetRequiredMemorySizeInternal :: proc(#by_ptr params: SceNgsSystemInitParams, size: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
SystemInitInternal :: proc(buffer_info: ^SceNgsBufferInfo, compiled_sdk_version: sce.UInt32, #by_ptr params: SceNgsSystemInitParams, handle: ^SceNgsHSynSystem) -> sce.Int32 ---
|
||||||
|
SystemLockInternal :: proc(handle: SceNgsHSynSystem) -> sce.Int32 ---
|
||||||
|
SystemPullDataInternal :: proc(handle: SceNgsHSynSystem, dirty_flags_a: sce.UInt32, dirty_flags_b: sce.UInt32) -> sce.Int32 ---
|
||||||
|
SystemPushDataInternal :: proc(handle: SceNgsHSynSystem) -> sce.Int32 ---
|
||||||
|
SystemReleaseInternal :: proc(handle: SceNgsHSynSystem) -> sce.Int32 ---
|
||||||
|
SystemSetFlagsInternal :: proc(handle: SceNgsHSynSystem, system_flags: sce.UInt32) -> sce.Int32 ---
|
||||||
|
SystemSetParamErrorCallbackInternal :: proc(handle: SceNgsHSynSystem, callback_id: SceNgsParamsErrorCallbackFunc) -> sce.Int32 ---
|
||||||
|
SystemUnlockInternal :: proc(handle: SceNgsHSynSystem) -> sce.Int32 ---
|
||||||
|
SystemUpdateInternal :: proc(handle: SceNgsHSynSystem) -> sce.Int32 ---
|
||||||
|
VoiceBypassModuleInternal :: proc(handle: SceNgsHVoice, module: sce.UInt32, flag: sce.UInt32) -> sce.Int32 ---
|
||||||
|
VoiceClearDirtyFlagInternal :: proc(handle: SceNgsHVoice, param_bit_flag: sce.UInt32) -> sce.Int32 ---
|
||||||
|
VoiceDefinitionGetPresetInternal :: proc(#by_ptr definition: SceNgsVoiceDefinition, index: sce.UInt32, presets: ^^SceNgsVoicePreset) -> sce.Int32 ---
|
||||||
|
VoiceGetModuleBypassInternal :: proc(handle: SceNgsHVoice, module: sce.UInt32, flag: ^sce.UInt32) -> sce.Int32 ---
|
||||||
|
VoiceGetOutputPatchInternal :: proc(handle: SceNgsHVoice, nOutputIndex: sce.Int32, nSubIndex: sce.Int32, pPatchHandle: ^SceNgsHPatch) -> sce.Int32 ---
|
||||||
|
VoiceGetParamsOutOfRangeBufferedInternal :: proc(handle: SceNgsHVoice, module: sce.UInt32, message_buffer: [^]c.char) -> sce.Int32 ---
|
||||||
|
VoiceInitInternal :: proc(handle: SceNgsHVoice, #by_ptr preset: SceNgsVoicePreset, flags: sce.UInt32) -> sce.Int32 ---
|
||||||
|
VoiceKeyOffInternal :: proc(handle: SceNgsHVoice) -> sce.Int32 ---
|
||||||
|
VoiceKillInternal :: proc(handle: SceNgsHVoice) -> sce.Int32 ---
|
||||||
|
VoicePauseInternal :: proc(handle: SceNgsHVoice) -> sce.Int32 ---
|
||||||
|
VoicePlayInternal :: proc(handle: SceNgsHVoice) -> sce.Int32 ---
|
||||||
|
VoiceResumeInternal :: proc(handle: SceNgsHVoice) -> sce.Int32 ---
|
||||||
|
VoiceSetAllBypassesInternal :: proc(handle: SceNgsHVoice, bitflag: sce.UInt32) -> sce.Int32 ---
|
||||||
|
VoiceSetFinishedCallbackInternal :: proc(handle: SceNgsHVoice, callback: SceNgsCallbackFunc, userdata: rawptr) -> sce.Int32 ---
|
||||||
|
VoiceSetModuleCallbackInternal :: proc(handle: SceNgsHVoice, module: sce.UInt32, callback: SceNgsModuleCallbackFunc, callback_userdata: rawptr) -> sce.Int32 ---
|
||||||
|
VoiceSetPresetInternal :: proc(handle: SceNgsHVoice, #by_ptr preset: SceNgsVoicePreset) -> sce.Int32 ---
|
||||||
|
|
||||||
|
VoiceDefGetAtrac9VoiceInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetCompressorBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetCompressorSideChainBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetDelayBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetDistortionBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetEnvelopeBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetEqBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetMasterBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetMixerBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetPauserBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetPitchshiftBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetReverbBussInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetSasEmuVoiceInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetScreamVoiceAT9Internal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetScreamVoiceInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetSimpleAtrac9VoiceInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetSimpleVoiceInternal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
VoiceDefGetTemplate1Internal :: proc() -> ^SceNgsVoiceDefinition ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package ngs
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceNgsHRack :: sce.UInt32
|
||||||
|
#assert(size_of(SceNgsHRack) == 4)
|
||||||
|
SceNgsHPatch :: sce.UInt32
|
||||||
|
#assert(size_of(SceNgsHPatch) == 4)
|
||||||
|
SceNgsHSynSystem :: sce.UInt32
|
||||||
|
#assert(size_of(SceNgsHSynSystem) == 4)
|
||||||
|
SceNgsHVoice :: sce.UInt32
|
||||||
|
#assert(size_of(SceNgsHVoice) == 4)
|
||||||
|
SulphaNgsModuleQueryType :: sce.UInt32
|
||||||
|
#assert(size_of(SulphaNgsModuleQueryType) == 4)
|
||||||
|
SceNgsModuleID :: sce.UInt32
|
||||||
|
#assert(size_of(SceNgsModuleID) == 4)
|
||||||
|
SceNgsSulphaUpdateCallback :: rawptr
|
||||||
|
|
||||||
|
SceNgsCallbackFunc :: #type ^proc "c" (#by_ptr callback_info: SceNgsCallbackInfo)
|
||||||
|
|
||||||
|
SceNgsRackReleaseCallbackFunc :: SceNgsCallbackFunc
|
||||||
|
SceNgsModuleCallbackFunc :: SceNgsCallbackFunc
|
||||||
|
SceNgsParamsErrorCallbackFunc :: SceNgsCallbackFunc
|
||||||
|
|
||||||
|
// missing structs
|
||||||
|
SceNgsVoicePreset :: struct{}
|
||||||
|
SceNgsBufferInfo :: struct{}
|
||||||
|
SceNgsSystemInitParams :: struct{}
|
||||||
|
SceNgsCallbackListInfo :: struct{}
|
||||||
|
SulphaNgsModuleQuery :: struct{}
|
||||||
|
SulphaNgsRegistration :: struct{}
|
||||||
|
SceNgsRackDescription :: struct{}
|
||||||
|
SceNgsPatchSetupInfo :: struct{}
|
||||||
|
SceNgsParamsDescriptor :: struct{}
|
||||||
|
SceNgsCallbackInfo :: struct{}
|
||||||
|
SceNgsVoiceDefinition :: struct{}
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package notificationutil
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import notificationutil "system:SceNotificationUtil_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceNotificationUtil")
|
||||||
|
foreign notificationutil {
|
||||||
|
/**
|
||||||
|
* Initialize notification util for use with BG application.
|
||||||
|
*
|
||||||
|
* Does not need to be called for normal applications.
|
||||||
|
*/
|
||||||
|
BgAppInitialize :: proc() -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send notification.
|
||||||
|
*
|
||||||
|
* Text buffer size must be 0x410.
|
||||||
|
*/
|
||||||
|
SendNotification :: proc(text: [^]sce.WChar16) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean notifications for calling app from notification history.
|
||||||
|
*/
|
||||||
|
CleanHistory :: proc() -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start BGDL-type notification.
|
||||||
|
*/
|
||||||
|
ProgressBegin :: proc(initParams: ^SceNotificationUtilProgressInitParam) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update BGDL-type notification.
|
||||||
|
*/
|
||||||
|
ProgressUpdate :: proc(updateParams: ^SceNotificationUtilProgressUpdateParam) -> sce.Int32 ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finish BGDL-type notification.
|
||||||
|
*/
|
||||||
|
ProgressFinish :: proc(finishParams: ^SceNotificationUtilProgressFinishParam) -> sce.Int32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package notificationutil
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
*/
|
||||||
|
SCE_NOTIFICATIONUTIL_TEXT_MAX :: 0x3F
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error Codes
|
||||||
|
*/
|
||||||
|
// TODO:
|
||||||
|
SceNotificationUitlErrorCode :: enum c.uint {
|
||||||
|
INTERNAL = 0x80106300
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BGDL-type notification event handler function
|
||||||
|
*/
|
||||||
|
SceNotificationUtilProgressEventHandler :: #type ^proc "c" (eventId: c.int)
|
||||||
|
|
||||||
|
SceNotificationUtilProgressInitParam :: struct {
|
||||||
|
notificationText: [SCE_NOTIFICATIONUTIL_TEXT_MAX]sce.WChar16,
|
||||||
|
separator0: sce.Int16, //must be 0
|
||||||
|
notificationSubText: [SCE_NOTIFICATIONUTIL_TEXT_MAX]sce.WChar16,
|
||||||
|
separator1: sce.Int16, //must be 0
|
||||||
|
unk: [0x3E6]sce.Char8,
|
||||||
|
unk_4EC: sce.Int32, //can be set to 0
|
||||||
|
eventHandler: SceNotificationUtilProgressEventHandler,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNotificationUtilProgressInitParam) == 0x4F0)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNotificationUtilProgressUpdateParam :: struct {
|
||||||
|
notificationText: [SCE_NOTIFICATIONUTIL_TEXT_MAX]sce.WChar16,
|
||||||
|
separator0: sce.Int16, //must be 0
|
||||||
|
notificationSubText: [SCE_NOTIFICATIONUTIL_TEXT_MAX]sce.WChar16,
|
||||||
|
separator1: sce.Int16, //must be 0
|
||||||
|
targetProgress: sce.Float,
|
||||||
|
reserved: [0x38]sce.Char8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNotificationUtilProgressUpdateParam) == 0x13C)
|
||||||
|
|
||||||
|
SceNotificationUtilProgressFinishParam :: struct {
|
||||||
|
notificationText: [SCE_NOTIFICATIONUTIL_TEXT_MAX]sce.WChar16,
|
||||||
|
separator0: sce.Int16, //must be 0
|
||||||
|
notificationSubText: [SCE_NOTIFICATIONUTIL_TEXT_MAX]sce.WChar16,
|
||||||
|
separator1: sce.Int16, //must be 0
|
||||||
|
path: [0x3E8]sce.Char8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNotificationUtilProgressFinishParam) == 0x4E8)
|
||||||
|
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package npdrm
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import npdrm "system:SceNpDrm_stub"
|
||||||
|
foreign import npdrmpackage "system:SceNpDrmPackage_stub"
|
||||||
|
|
||||||
|
foreign npdrm {
|
||||||
|
/**
|
||||||
|
* Get rif name
|
||||||
|
*
|
||||||
|
* @param[out] rif_name - RIF name buffer (48 bytes)
|
||||||
|
*
|
||||||
|
* @param[in] aid - Account ID
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceNpDrmGetRifName :: proc(rif_name: [^]c.char, aid: c.uint64_t) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get fixed rif name
|
||||||
|
*
|
||||||
|
* @param[out] rif_name - RIF name buffer (48 bytes)
|
||||||
|
*
|
||||||
|
* @param[in] aid - Account ID
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceNpDrmGetFixedRifName :: proc(rif_name: [^]c.char, aid: c.uint64_t) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check you have npdrm activation data, and get information from it
|
||||||
|
*
|
||||||
|
* @param[out] act_type - The pointer of activation type output.
|
||||||
|
*
|
||||||
|
* @param[out] version_flag - The pointer of version flag output.
|
||||||
|
*
|
||||||
|
* @param[out] account_id - The pointer of activated account id output.
|
||||||
|
*
|
||||||
|
* @param[out] act_exp_time - The pointer of activation expire time output, [0] is start_date, [1] is end_date
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceNpDrmCheckActData :: proc(act_type: ^c.int, version_flag: ^c.int, account_id: ^sce.UInt64, act_exp_time: [2]sce.UInt64) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get rif name for install
|
||||||
|
*
|
||||||
|
* @param[out] rif_name - RIF name buffer (48 bytes)
|
||||||
|
*
|
||||||
|
* @param[in] rif_data - Data of RIF file (512 bytes)
|
||||||
|
*
|
||||||
|
* @param[in] unk - Unknown, use 0
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceNpDrmGetRifNameForInstall :: proc(rif_name: [^]c.char, rif_data: rawptr, unk: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get PSM rif key
|
||||||
|
*
|
||||||
|
* @param[in] license_buf - RIF buffer (1024 bytes)
|
||||||
|
*
|
||||||
|
* @param[out] keydata - Decrypted key data
|
||||||
|
*
|
||||||
|
* @param[in] flags - Unknown
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
scePsmDrmGetRifKey :: proc(#by_ptr license_buf: ScePsmDrmLicense, keydata: [^]c.char, flags: c.int) -> c.int ---
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "_sceNpDrmPackage")
|
||||||
|
foreign npdrmpackage {
|
||||||
|
/**
|
||||||
|
* Read the header of the PKG and initialize the context
|
||||||
|
*
|
||||||
|
* @param buffer - The buffer containing the header of PKG.
|
||||||
|
* @param size - The size of buffer. The minimum confirmed value is 0x8000.
|
||||||
|
* @param zero - Unknown. Supposed to be set to 0.
|
||||||
|
* @param identifier - arbitrary value [0, 6) ORed with (1 << 8) or 0.
|
||||||
|
* If it is set to 0, the function just checks the header
|
||||||
|
* and doesn't create the context.
|
||||||
|
*
|
||||||
|
* @return 0 on success, != 0 on error
|
||||||
|
*/
|
||||||
|
Check :: proc(buffer: rawptr, size: sce.Size, zero: c.int, identifier: c.uint) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decrypt a PKG
|
||||||
|
*
|
||||||
|
* @param buffer - The buffer containing the content of the PKG.
|
||||||
|
* @param size - The size of the buffer. The minimum confirmed value is 0x20.
|
||||||
|
* @param opt - The options.
|
||||||
|
*
|
||||||
|
* @return 0 on success, != 0 on error
|
||||||
|
*/
|
||||||
|
Decrypt :: proc(#no_alias buffer: rawptr, size: sce.Size, #no_alias opt: ^_sceNpDrmPackageDecrypt_opt) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package npdrm
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceNpDrmActivationData :: struct { // size is 0x1038
|
||||||
|
act_type: sce.Int16,
|
||||||
|
version_flag: sce.Int16,
|
||||||
|
version: sce.Int32,
|
||||||
|
account_id: sce.UInt64,
|
||||||
|
primary_key_table: [0x80][0x10]sce.UInt8,
|
||||||
|
unk1: [0x40]sce.UInt8,
|
||||||
|
openpsid: [0x10]sce.UInt8,
|
||||||
|
unk2: [0x10]sce.UInt8,
|
||||||
|
unk3: [0x10]sce.UInt8,
|
||||||
|
secondary_key_table: [0x65][0x10]sce.UInt8,
|
||||||
|
rsa_signature: [0x100]sce.UInt8,
|
||||||
|
unk_sigmature: [0x40]sce.UInt8,
|
||||||
|
ecdsa_signature: [0x28]sce.UInt8, // checked by pspemu, and SceNpDrm.
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNpDrmActivationData) == 0x1038)
|
||||||
|
|
||||||
|
SceNpDrmLicense :: struct { // size is 0x200
|
||||||
|
version: sce.Int16, // -1 VITA, 0 PSP, 1 PSP-VITA
|
||||||
|
version_flags: sce.Int16, // 0, 1
|
||||||
|
license_type: sce.Int16, // 1
|
||||||
|
license_flags: sce.Int16, // 0x400:non-check ecdsa
|
||||||
|
account_id: sce.UInt64,
|
||||||
|
content_id: [0x30]c.char,
|
||||||
|
key_table: [0x10]c.char,
|
||||||
|
key1: [0x10]c.char,
|
||||||
|
start_time: sce.Int64,
|
||||||
|
expiration_time: sce.Int64,
|
||||||
|
ecdsa_signature: [0x28]c.char,
|
||||||
|
flags: sce.Int64,
|
||||||
|
key2: [0x10]c.char,
|
||||||
|
unk_0xB0: [0x10]c.char,
|
||||||
|
open_psid: [0x10]c.char,
|
||||||
|
unk_0xD0: [0x10]c.char,
|
||||||
|
cmd56_handshake_part: [0x14]c.char,
|
||||||
|
debug_upgradable: c.int,
|
||||||
|
unk_0xF8: c.int,
|
||||||
|
sku_flag: c.int,
|
||||||
|
rsa_signature: [0x100]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNpDrmLicense) == 0x200)
|
||||||
|
|
||||||
|
ScePsmDrmLicense :: struct {
|
||||||
|
magic: [0x8]c.char,
|
||||||
|
unk1: sce.UInt32,
|
||||||
|
unk2: sce.UInt32,
|
||||||
|
account_id: sce.UInt64,
|
||||||
|
unk3: sce.UInt32,
|
||||||
|
unk4: sce.UInt32,
|
||||||
|
start_time: sce.UInt64,
|
||||||
|
expiration_time: sce.UInt64,
|
||||||
|
activation_checksum: [0x20]sce.UInt8,
|
||||||
|
content_id: [0x30]c.char,
|
||||||
|
unk5: [0x80]sce.UInt8,
|
||||||
|
unk6: [0x20]sce.UInt8,
|
||||||
|
key: [0x10]sce.UInt8,
|
||||||
|
signature: [0x1D0]sce.UInt8,
|
||||||
|
rsa_signature: [0x100]sce.UInt8,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePsmDrmLicense) == 0x400)
|
||||||
|
|
||||||
|
/** Options for _sceNpDrmPackageDecrypt */
|
||||||
|
_sceNpDrmPackageDecrypt_opt :: struct {
|
||||||
|
/** The offset in the encrypted data */
|
||||||
|
offset: sce.Off,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifier specified for _sceNpDrmPackageCheck but NOT ORed
|
||||||
|
* with (1 << 8)
|
||||||
|
*/
|
||||||
|
identifier: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(_sceNpDrmPackageDecrypt_opt) == 0x10)
|
||||||
|
|
||||||
|
|
||||||
+103
@@ -0,0 +1,103 @@
|
|||||||
|
package paf
|
||||||
|
|
||||||
|
import sce "../common"
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import paf "system:ScePaf_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "scePaf")
|
||||||
|
foreign paf {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the current wave
|
||||||
|
*
|
||||||
|
* @param[in] index - The index from 0 to 0x1F within range.
|
||||||
|
* @param[in] update_interval - The update interval. 0.0f to it will change soon. 1.0f will slowly turn into an updated wave after 1 second, just like when you change it the normal way.
|
||||||
|
*
|
||||||
|
* @return 0 on success, <0 otherwise.
|
||||||
|
*/
|
||||||
|
GraphicsUpdateCurrentWave :: proc(index: sce.UInt32, update_interval: sce.Float32) -> c.int ---
|
||||||
|
|
||||||
|
GetCurrentClockLocalTime :: proc(data: ^ScePafDateTime) -> c.int ---
|
||||||
|
|
||||||
|
Sha1Init :: proc(_context: ^ScePafSha1Context) -> c.int ---
|
||||||
|
Sha1Update :: proc(_context: ^ScePafSha1Context, data: rawptr, length: sce.Size) -> c.int ---
|
||||||
|
Sha1Result :: proc(_context: ^ScePafSha1Context, dst: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
CreateHeap :: proc(_context: ^ScePafHeapContext, membase: rawptr, size: sce.Size, name: cstring, opt: ^ScePafHeapOpt) ---
|
||||||
|
DeleteHeap :: proc(_context: ^ScePafHeapContext) ---
|
||||||
|
|
||||||
|
MallocWithContext :: proc(_context: ^ScePafHeapContext, len: sce.Size) -> rawptr ---
|
||||||
|
FreeWithContext :: proc(_context: ^ScePafHeapContext, ptr: rawptr) ---
|
||||||
|
|
||||||
|
MallocAlignWithContext :: proc(_context: ^ScePafHeapContext, align: sce.UInt32, len: sce.Size) -> rawptr ---
|
||||||
|
ReallocWithContext :: proc(_context: ^ScePafHeapContext, ptr: rawptr, len: sce.Size) -> rawptr ---
|
||||||
|
|
||||||
|
@(link_name = "sce_paf_malloc")
|
||||||
|
malloc :: proc(size: sce.Size) -> rawptr ---
|
||||||
|
@(link_name = "sce_paf_free")
|
||||||
|
free :: proc(ptr: rawptr) ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Alloc memory with align
|
||||||
|
*
|
||||||
|
* @param[in] align The align size
|
||||||
|
* @param[in] length The alloc length
|
||||||
|
*
|
||||||
|
* @return memory pointer or NULL
|
||||||
|
*/
|
||||||
|
@(link_name = "sce_paf_memalign")
|
||||||
|
memalign :: proc(align: sce.Size, length: sce.Size) -> rawptr ---
|
||||||
|
|
||||||
|
@(link_name = "sce_paf_memchr")
|
||||||
|
memchr :: proc(src: rawptr, ch: c.int, length: sce.Size) -> rawptr ---
|
||||||
|
@(link_name = "sce_paf_memcmp")
|
||||||
|
memcmp :: proc(s1: rawptr, s2: rawptr, n: sce.Size) -> c.int ---
|
||||||
|
|
||||||
|
@(link_name = "sce_paf_memcpy")
|
||||||
|
memcpy :: proc(dst: rawptr, src: rawptr, len: sce.Size) -> rawptr ---
|
||||||
|
@(link_name = "sce_paf_memset")
|
||||||
|
memset :: proc(dst: rawptr, ch: c.int, len: sce.Size) -> rawptr ---
|
||||||
|
@(link_name = "sce_paf_memmove")
|
||||||
|
memmove :: proc(dst: rawptr, src: rawptr, len: sce.Size) -> rawptr ---
|
||||||
|
|
||||||
|
@(link_name = "sce_paf_snprintf")
|
||||||
|
snprintf :: proc(dst: cstring, max: c.uint, fmt: cstring, #c_vararg args: ..any) -> c.int ---
|
||||||
|
@(link_name = "sce_paf_vsnprintf")
|
||||||
|
vsnprintf :: proc(dst: cstring, max: c.uint, fmt: cstring, arg: c.va_list) -> c.int ---
|
||||||
|
|
||||||
|
@(link_name = "sce_paf_bcmp")
|
||||||
|
bcmp :: proc(ptr1: rawptr, ptr2: rawptr, num: sce.Size) -> c.int ---
|
||||||
|
@(link_name = "sce_paf_bcopy")
|
||||||
|
bcopy :: proc(dst: rawptr, src: rawptr, n: sce.Size) -> rawptr ---
|
||||||
|
@(link_name = "sce_paf_bzero")
|
||||||
|
bzero :: proc(dst: rawptr, n: sce.Size) -> rawptr ---
|
||||||
|
|
||||||
|
@(link_name = "sce_paf_strchr")
|
||||||
|
strchr :: proc(s: cstring, ch: c.int) -> ^c.char ---
|
||||||
|
@(link_name = "sce_paf_strcmp")
|
||||||
|
strcmp :: proc(s1: cstring, s2: cstring) -> c.int ---
|
||||||
|
@(link_name = "sce_paf_strlen")
|
||||||
|
strlen :: proc(s: cstring) -> c.size_t ---
|
||||||
|
@(link_name = "sce_paf_strcasecmp")
|
||||||
|
strcasecmp :: proc(s1: cstring, s2: cstring) -> c.int ---
|
||||||
|
@(link_name = "sce_paf_strncasecmp")
|
||||||
|
strncasecmp :: proc(s1: cstring, s2: cstring, len: sce.Size) -> c.int ---
|
||||||
|
@(link_name = "sce_paf_strncmp")
|
||||||
|
strncmp :: proc(s1: cstring, s2: cstring, len: sce.Size) -> c.int ---
|
||||||
|
@(link_name = "sce_paf_strncpy")
|
||||||
|
strncpy :: proc(dst: cstring, src: cstring, len: sce.Size) -> cstring ---
|
||||||
|
@(link_name = "sce_paf_strrchr")
|
||||||
|
strrchr :: proc(s: cstring, ch: c.int) -> ^c.char ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief string to double
|
||||||
|
*
|
||||||
|
* @param[in] nptr The input float string
|
||||||
|
* @param[out] endptr The float string endpoint
|
||||||
|
*
|
||||||
|
* @return parsed value
|
||||||
|
*/
|
||||||
|
@(link_name = "sce_paf_strtod")
|
||||||
|
strtod :: proc(nptr: cstring, endptr: ^^c.char) -> c.double ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package paf
|
||||||
|
|
||||||
|
import sce "../common"
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
scePafGraphicsCurrentWave :: sce.UInt32
|
||||||
|
|
||||||
|
ScePafDateTime :: struct {
|
||||||
|
data: sce.DateTime,
|
||||||
|
data_0x10: c.int,
|
||||||
|
data_0x14: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePafDateTime) == 0x18)
|
||||||
|
|
||||||
|
ScePafSha1Context :: struct {
|
||||||
|
// size is 0x68
|
||||||
|
h: [5]c.uint32_t,
|
||||||
|
unk: [0x54]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePafSha1Context) == 0x68)
|
||||||
|
|
||||||
|
// TODO: copy-pasted from Kernel/types.odin. should be in common or something
|
||||||
|
SceKernelLwMutexWork :: struct {
|
||||||
|
data: [4]sce.Int64,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceKernelLwMutexWork) == 0x20)
|
||||||
|
|
||||||
|
|
||||||
|
ScePafHeapContext :: struct {
|
||||||
|
// size is 0x60-bytes
|
||||||
|
vtable: rawptr,
|
||||||
|
heap: rawptr,
|
||||||
|
membase: rawptr,
|
||||||
|
size: sce.Size,
|
||||||
|
name: [0x20]c.char,
|
||||||
|
is_import_membase: sce.Char8,
|
||||||
|
is_skip_debug_msg: sce.Char8,
|
||||||
|
data_0x32: c.char,
|
||||||
|
data_0x33: c.char, // maybe unused. just for align.
|
||||||
|
data_0x34: c.int, // maybe unused. just for align.
|
||||||
|
lw_mtx: SceKernelLwMutexWork,
|
||||||
|
memblk_id: sce.UID,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* !1 : Game
|
||||||
|
* 1 : CDialog
|
||||||
|
*/
|
||||||
|
mode: sce.Int32,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(ScePafHeapContext) == 0x60)
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePafHeapOpt :: struct {
|
||||||
|
// size is 0x14-bytes
|
||||||
|
a1: c.int,
|
||||||
|
a2: c.int,
|
||||||
|
is_skip_debug_msg: sce.Char8,
|
||||||
|
a3: [3]c.char,
|
||||||
|
mode: sce.Int32,
|
||||||
|
a5: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePafHeapOpt) == 0x14)
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package pamgr
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import pamgr "system:ScePamgr_stub"
|
||||||
|
|
||||||
|
// missing structs
|
||||||
|
SceKernelPaTraceBufferParam :: struct{}
|
||||||
|
SceKernelPaGpuSampledData :: struct{}
|
||||||
|
SceKernelPaGpuTraceParam :: struct{}
|
||||||
|
SceKernelPaCounterTraceParam :: struct{}
|
||||||
|
SceKernelPaArmTraceParam :: struct{}
|
||||||
|
|
||||||
|
foreign pamgr {
|
||||||
|
sceKernelPaGetTraceBufferSize :: proc(type: sce.UInt32) -> sce.Size ---
|
||||||
|
sceKernelPaGetIoBaseAddress :: proc() -> sce.UInt32 ---
|
||||||
|
sceKernelPaGetTimebaseFrequency :: proc() -> sce.UInt32 ---
|
||||||
|
sceKernelPaGetTraceBufferStatus :: proc() -> sce.UInt32 ---
|
||||||
|
sceKernelPaGetWritePointer :: proc() -> sce.UInt32 ---
|
||||||
|
sceKernelPaGetTimebaseValue :: proc() -> sce.UInt64 ---
|
||||||
|
_sceKernelPaAddArmTraceByKey :: proc(key: c.int, #by_ptr param: SceKernelPaArmTraceParam) -> c.int ---
|
||||||
|
_sceKernelPaAddCounterTraceByKey :: proc(key: c.int, #by_ptr param: SceKernelPaCounterTraceParam) -> c.int ---
|
||||||
|
_sceKernelPaAddGpuTraceByKey :: proc(key: c.int, #by_ptr param: SceKernelPaGpuTraceParam) -> c.int ---
|
||||||
|
_sceKernelPaGetGpuSampledData :: proc(data: ^SceKernelPaGpuSampledData) -> c.int ---
|
||||||
|
_sceKernelPaSetupTraceBufferByKey :: proc(key: c.int, #by_ptr param: SceKernelPaTraceBufferParam) -> c.int ---
|
||||||
|
sceKernelPaInsertBookmark :: proc(fifo: sce.UInt32, channel: sce.UInt32, data: sce.UInt32) -> c.int ---
|
||||||
|
sceKernelPaRegister :: proc() -> c.int ---
|
||||||
|
sceKernelPaRemoveArmTraceByKey :: proc(key: c.int) -> c.int ---
|
||||||
|
sceKernelPaRemoveCounterTraceByKey :: proc(key: c.int) -> c.int ---
|
||||||
|
sceKernelPaRemoveGpuTraceByKey :: proc(key: c.int) -> c.int ---
|
||||||
|
sceKernelPaSetBookmarkChannelEnableByKey :: proc(key: c.int, fifo: sce.UInt32, mask: sce.UInt32) -> c.int ---
|
||||||
|
sceKernelPaStartByKey :: proc(key: c.int) -> c.int ---
|
||||||
|
sceKernelPaStopByKey :: proc(key: c.int) -> c.int ---
|
||||||
|
sceKernelPaUnregister :: proc(key: c.int) -> c.int ---
|
||||||
|
sceKernelPerfArmPmonClose :: proc() -> c.int ---
|
||||||
|
sceKernelPerfArmPmonOpen :: proc() -> c.int ---
|
||||||
|
sceKernelPerfArmPmonReset :: proc(threadId: sce.UID) -> c.int ---
|
||||||
|
sceKernelPerfArmPmonSelectEvent :: proc(threadId: sce.UID, counter: sce.UInt32, eventCode: sce.UInt8) -> c.int ---
|
||||||
|
sceKernelPerfArmPmonSetCounterValue :: proc(threadId: sce.UID, counter: sce.UInt32, value: sce.UInt32) -> c.int ---
|
||||||
|
sceKernelPerfArmPmonStart :: proc(threadId: sce.UID) -> c.int ---
|
||||||
|
sceKernelPerfArmPmonStop :: proc(threadId: sce.UID) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package perf
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import perf "system:ScePerf_stub"
|
||||||
|
|
||||||
|
SCE_PERF_ARM_PMON_THREAD_ID_SELF :: (sce.SCE_KERNEL_THREAD_ID_SELF)
|
||||||
|
|
||||||
|
_ScePerfArmPmonEventCode :: enum c.int {
|
||||||
|
SOFT_INCREMENT = 0x00,
|
||||||
|
ICACHE_MISS = 0x01,
|
||||||
|
ITLB_MISS = 0x02,
|
||||||
|
DCACHE_MISS = 0x03,
|
||||||
|
DCACHE_ACCESS = 0x04,
|
||||||
|
DTLB_MISS = 0x05,
|
||||||
|
DATA_READ = 0x06,
|
||||||
|
DATA_WRITE = 0x07,
|
||||||
|
EXCEPTION_TAKEN = 0x09,
|
||||||
|
EXCEPTION_RETURN = 0x0A,
|
||||||
|
WRITE_CONTEXTID = 0x0B,
|
||||||
|
SOFT_CHANGEPC = 0x0C,
|
||||||
|
IMMEDIATE_BRANCH = 0x0D,
|
||||||
|
UNALIGNED = 0x0F,
|
||||||
|
BRANCH_MISPREDICT = 0x10,
|
||||||
|
CYCLE_COUNT = 0x11,
|
||||||
|
PREDICT_BRANCH = 0x12,
|
||||||
|
COHERENT_LF_MISS = 0x50,
|
||||||
|
COHERENT_LF_HIT = 0x51,
|
||||||
|
ICACHE_STALL = 0x60,
|
||||||
|
DCACHE_STALL = 0x61,
|
||||||
|
MAINTLB_STALL = 0x62,
|
||||||
|
STREX_PASSED = 0x63,
|
||||||
|
STREX_FAILED = 0x64,
|
||||||
|
DATA_EVICTION = 0x65,
|
||||||
|
ISSUE_NO_DISPATCH = 0x66,
|
||||||
|
ISSUE_EMPTY = 0x67,
|
||||||
|
INST_RENAME = 0x68,
|
||||||
|
PREDICT_FUNC_RET = 0x6E,
|
||||||
|
MAIN_PIPE = 0x70,
|
||||||
|
SECOND_PIPE = 0x71,
|
||||||
|
LS_PIPE = 0x72,
|
||||||
|
FPU_RENAME = 0x73,
|
||||||
|
NEON_RENAME = 0x74,
|
||||||
|
PLD_STALL = 0x80,
|
||||||
|
WRITE_STALL = 0x81,
|
||||||
|
INST_MAINTLB_STALL = 0x82,
|
||||||
|
DATA_MAINTLB_STALL = 0x83,
|
||||||
|
INST_UTLB_STALL = 0x84,
|
||||||
|
DATA_UTLB_STALL = 0x85,
|
||||||
|
DMB_STALL = 0x86,
|
||||||
|
INTEGER_CLOCK = 0x8A,
|
||||||
|
DATAENGINE_CLOCK = 0x8B,
|
||||||
|
ISB = 0x90,
|
||||||
|
DSB = 0x91,
|
||||||
|
DMB = 0x92,
|
||||||
|
EXT_INTERRUPT = 0x93,
|
||||||
|
PLE_LINE_REQ_COMPLETED = 0xA0,
|
||||||
|
PLE_CHANNEL_SKIPPED = 0xA1,
|
||||||
|
PLE_FIFO_FLUSH = 0xA2,
|
||||||
|
PLE_REQ_COMPLETED = 0xA3,
|
||||||
|
PLE_FIFO_OVERFLOW = 0xA4,
|
||||||
|
PLE_REQ_PROGRAMMED = 0xA5
|
||||||
|
}
|
||||||
|
|
||||||
|
@(link_prefix = "scePerf")
|
||||||
|
foreign perf {
|
||||||
|
ArmPmonReset :: proc(thid: sce.UID) -> c.int ---
|
||||||
|
ArmPmonSelectEvent :: proc(thid: sce.UID, counter: sce.UInt32, event_code: sce.UInt8) -> c.int ---
|
||||||
|
ArmPmonStart :: proc(thid: sce.UID) -> c.int ---
|
||||||
|
ArmPmonStop :: proc(thid: sce.UID) -> c.int ---
|
||||||
|
ArmPmonGetCounterValue :: proc(thid: sce.UID, counter: sce.UInt32, value: ^sce.UInt32) -> c.int ---
|
||||||
|
ArmPmonSetCounterValue :: proc(thid: sce.UID, counter: sce.UInt32, value: sce.UInt32) -> c.int ---
|
||||||
|
ArmPmonSoftwareIncrement :: proc(mask: sce.UInt32) -> c.int ---
|
||||||
|
|
||||||
|
GetTimebaseValue :: proc() -> sce.UInt64 ---
|
||||||
|
GetTimebaseFrequency :: proc() -> sce.UInt32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package pgf
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import pgf "system:ScePgf_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceFont")
|
||||||
|
foreign pgf {
|
||||||
|
NewLib :: proc(params: ^SceFontNewLibParams, errorCode: ^c.uint) -> SceFontLibHandle ---
|
||||||
|
DoneLib :: proc(libHandle: SceFontLibHandle) -> c.int ---
|
||||||
|
Open :: proc(libHandle: SceFontLibHandle, index: c.int, mode: c.int, errorCode: ^c.uint) -> SceFontHandle ---
|
||||||
|
OpenUserMemory :: proc(libHandle: SceFontLibHandle, pMemoryFont: rawptr, pMemoryFontSize: sce.Size, errorCode: ^c.uint) -> SceFontHandle ---
|
||||||
|
OpenUserFile :: proc(libHandle: SceFontLibHandle, file: cstring, mode: c.int, errorCode: ^c.uint) -> SceFontHandle ---
|
||||||
|
Close :: proc(fontHandle: SceFontHandle) -> c.int ---
|
||||||
|
GetNumFontList :: proc(libHandle: SceFontLibHandle, errorCode: ^c.uint) -> c.int ---
|
||||||
|
FindOptimumFont :: proc(libHandle: SceFontLibHandle, fontStyle: ^SceFontStyle, errorCode: ^c.uint) -> c.int ---
|
||||||
|
FindFont :: proc(libHandle: SceFontLibHandle, fontStyle: ^SceFontStyle, errorCode: ^c.uint) -> c.int ---
|
||||||
|
GetFontInfo :: proc(fontHandle: SceFontHandle, fontInfo: ^SceFontInfo) -> c.int ---
|
||||||
|
GetFontInfoByIndexNumber :: proc(libHandle: SceFontLibHandle, fontStyle: ^SceFontStyle, unknown: c.int, fontIndex: c.int) -> c.int ---
|
||||||
|
SetResolution :: proc(libHandle: SceFontLibHandle, hRes: c.float, vRes: c.float) -> c.int ---
|
||||||
|
GetFontList :: proc(libHandle: SceFontLibHandle, fontStyle: ^SceFontStyle, numFonts: c.int) -> c.int ---
|
||||||
|
GetCharInfo :: proc(fontHandle: SceFontHandle, charCode: c.uint, charInfo: ^SceFontCharInfo) -> c.int ---
|
||||||
|
GetCharImageRect :: proc(fontHandle: SceFontHandle, charCode: c.uint, charRect: ^SceFontImageRect) -> c.int ---
|
||||||
|
GetCharGlyphImage :: proc(fontHandle: SceFontHandle, charCode: c.uint, glyphImage: ^SceFontGlyphImage) -> c.int ---
|
||||||
|
GetCharGlyphImage_Clip :: proc(fontHandle: SceFontHandle, charCode: c.uint, glyphImage: ^SceFontGlyphImage, clipXPos: c.int, clipYPos: c.int, clipWidth: c.int, clipHeight: c.int) -> c.int ---
|
||||||
|
PixelToPointH :: proc(libHandle: SceFontLibHandle, fontPixelsH: c.float, errorCode: ^c.uint) -> c.float ---
|
||||||
|
PixelToPointV :: proc(libHandle: SceFontLibHandle, fontPixelsV: c.float, errorCode: ^c.uint) -> c.float ---
|
||||||
|
PointToPixelH :: proc(libHandle: SceFontLibHandle, fontPointsH: c.float, errorCode: ^c.uint) -> c.float ---
|
||||||
|
PointToPixelV :: proc(libHandle: SceFontLibHandle, fontPointsV: c.float, errorCode: ^c.uint) -> c.float ---
|
||||||
|
SetAltCharacterCode :: proc(libHandle: SceFontLibHandle, charCode: c.uint) -> c.int ---
|
||||||
|
Flush :: proc(fontHandle: SceFontHandle) -> c.int ---
|
||||||
|
}
|
||||||
+179
@@ -0,0 +1,179 @@
|
|||||||
|
package pgf
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
SceFontLibHandle :: rawptr
|
||||||
|
SceFontHandle :: rawptr
|
||||||
|
|
||||||
|
/* struct */
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
SceFontErrorCode :: enum c.uint {
|
||||||
|
OUT_OF_MEMORY = 0x80460001,
|
||||||
|
INVALID_LIBID = 0x80460002,
|
||||||
|
INVALID_PARAMETER = 0x80460003,
|
||||||
|
HANDLER_OPEN_FAILED = 0x80460005,
|
||||||
|
TOO_MANY_OPEN_FONTS = 0x80460009,
|
||||||
|
INVALID_FONT_DATA = 0x8046000A,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFontNewLibParams :: struct {
|
||||||
|
userData: rawptr,
|
||||||
|
numFonts: c.uint,
|
||||||
|
cacheData: rawptr,
|
||||||
|
|
||||||
|
// Driver callbacks.
|
||||||
|
allocFunc: #type ^proc "c" (_: rawptr, __: c.uint) -> rawptr,
|
||||||
|
freeFunc: #type ^proc "c" (_: rawptr, __: rawptr),
|
||||||
|
openFunc: rawptr,
|
||||||
|
closeFunc: rawptr,
|
||||||
|
readFunc: rawptr,
|
||||||
|
seekFunc: rawptr,
|
||||||
|
errorFunc: rawptr,
|
||||||
|
ioFinishFunc: rawptr,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceFontNewLibParams) == 0x2C)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFontFamilyCode :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
SANS_SERIF = 1,
|
||||||
|
SERIF = 2,
|
||||||
|
ROUNDED = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFontStyleCode :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
REGULAR = 1,
|
||||||
|
ITALIC = 2,
|
||||||
|
NARROW = 3,
|
||||||
|
NARROW_ITALIC = 4,
|
||||||
|
BOLD = 5,
|
||||||
|
BOLD_ITALIC = 6,
|
||||||
|
BLACK = 7,
|
||||||
|
BLACK_ITALIC = 8,
|
||||||
|
L = 101,
|
||||||
|
M = 102,
|
||||||
|
DB = 103, //!< Demi-Bold / semi-bold
|
||||||
|
B = 104,
|
||||||
|
EB = 105,
|
||||||
|
UB = 106,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFontLanguageCode :: enum c.int {
|
||||||
|
DEFAULT = 0,
|
||||||
|
JAPANESE = 1,
|
||||||
|
LATIN = 2,
|
||||||
|
KOREAN = 3,
|
||||||
|
CHINESE = 4,
|
||||||
|
CJK = 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFontPixelFormatCode :: enum c.int {
|
||||||
|
PIXELFORMAT_4 = 0, //!< 2 pixels packed in 1 byte (natural order)
|
||||||
|
PIXELFORMAT_4_REV = 1, //!< 2 pixels packed in 1 byte (reversed order)
|
||||||
|
PIXELFORMAT_8 = 2, //!< 1 pixel in 1 byte
|
||||||
|
PIXELFORMAT_24 = 3, //!< 1 pixel in 3 bytes (RGB)
|
||||||
|
PIXELFORMAT_32 = 4, //!< 1 pixel in 4 bytes (RGBA)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceFontImageRect :: struct {
|
||||||
|
width: c.ushort,
|
||||||
|
height: c.ushort,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFontImageRect) == 4)
|
||||||
|
|
||||||
|
SceFontGlyphImage :: struct {
|
||||||
|
pixelFormat: c.uint,
|
||||||
|
xPos64: c.int,
|
||||||
|
yPos64: c.int,
|
||||||
|
bufWidth: c.ushort,
|
||||||
|
bufHeight: c.ushort,
|
||||||
|
bytesPerLine: c.ushort,
|
||||||
|
pad: c.ushort,
|
||||||
|
bufferPtr: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFontGlyphImage) == 0x18)
|
||||||
|
|
||||||
|
SceFontStyle :: struct {
|
||||||
|
fontH: c.float,
|
||||||
|
fontV: c.float,
|
||||||
|
fontHRes: c.float,
|
||||||
|
fontVRes: c.float,
|
||||||
|
fontWeight: c.float,
|
||||||
|
fontFamily: c.ushort,
|
||||||
|
fontStyle: c.ushort,
|
||||||
|
// Check.
|
||||||
|
fontStyleSub: c.ushort,
|
||||||
|
fontLanguage: c.ushort,
|
||||||
|
fontRegion: c.ushort,
|
||||||
|
fontCountry: c.ushort,
|
||||||
|
fontName: [64]c.char,
|
||||||
|
fontFileName: [64]c.char,
|
||||||
|
fontAttributes: c.uint,
|
||||||
|
fontExpire: c.uint,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFontStyle) == 0xA8)
|
||||||
|
|
||||||
|
SceFontCharInfo :: struct {
|
||||||
|
bitmapWidth: c.uint,
|
||||||
|
bitmapHeight: c.uint,
|
||||||
|
bitmapLeft: c.uint,
|
||||||
|
bitmapTop: c.uint,
|
||||||
|
// Glyph metrics (in 26.6 signed fixed-point).
|
||||||
|
sfp26Width: c.uint,
|
||||||
|
sfp26Height: c.uint,
|
||||||
|
sfp26Ascender: c.int,
|
||||||
|
sfp26Descender: c.int,
|
||||||
|
sfp26BearingHX: c.int,
|
||||||
|
sfp26BearingHY: c.int,
|
||||||
|
sfp26BearingVX: c.int,
|
||||||
|
sfp26BearingVY: c.int,
|
||||||
|
sfp26AdvanceH: c.int,
|
||||||
|
sfp26AdvanceV: c.int,
|
||||||
|
shadowFlags: c.short,
|
||||||
|
shadowId: c.short,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFontCharInfo) == 0x3C)
|
||||||
|
|
||||||
|
SceFontInfo :: struct {
|
||||||
|
// Glyph metrics (in 26.6 signed fixed-point).
|
||||||
|
maxGlyphWidthI: c.uint,
|
||||||
|
maxGlyphHeightI: c.uint,
|
||||||
|
maxGlyphAscenderI: c.uint,
|
||||||
|
maxGlyphDescenderI: c.uint,
|
||||||
|
maxGlyphLeftXI: c.uint,
|
||||||
|
maxGlyphBaseYI: c.uint,
|
||||||
|
minGlyphCenterXI: c.uint,
|
||||||
|
maxGlyphTopYI: c.uint,
|
||||||
|
maxGlyphAdvanceXI: c.uint,
|
||||||
|
maxGlyphAdvanceYI: c.uint,
|
||||||
|
|
||||||
|
// Glyph metrics (replicated as float).
|
||||||
|
maxGlyphWidthF: c.float,
|
||||||
|
maxGlyphHeightF: c.float,
|
||||||
|
maxGlyphAscenderF: c.float,
|
||||||
|
maxGlyphDescenderF: c.float,
|
||||||
|
maxGlyphLeftXF: c.float,
|
||||||
|
maxGlyphBaseYF: c.float,
|
||||||
|
minGlyphCenterXF: c.float,
|
||||||
|
maxGlyphTopYF: c.float,
|
||||||
|
maxGlyphAdvanceXF: c.float,
|
||||||
|
maxGlyphAdvanceYF: c.float,
|
||||||
|
|
||||||
|
// Bitmap dimensions.
|
||||||
|
maxGlyphWidth: c.short,
|
||||||
|
maxGlyphHeight: c.short,
|
||||||
|
charMapLength: c.uint, //!< Number of elements in the font's charmap.
|
||||||
|
shadowMapLength: c.uint, //!< Number of elements in the font's shadow charmap.
|
||||||
|
|
||||||
|
// Font style (used by font comparison functions).
|
||||||
|
fontStyle: SceFontStyle,
|
||||||
|
|
||||||
|
BPP: c.uint8_t, //!< Font's BPP.
|
||||||
|
pad: [3]c.uint8_t,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceFontInfo) == 0x108)
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package photoexport
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
PhotoExportParam :: struct {
|
||||||
|
version: c.int, //!< Version
|
||||||
|
photoTitle: [^]sce.WChar32, //!< Photo title
|
||||||
|
gameTitle: [^]sce.WChar32, //!< Game title
|
||||||
|
gameComment: [^]sce.WChar32, //!< Game description
|
||||||
|
reserved: [8]c.int, //!< Reserved data
|
||||||
|
}
|
||||||
|
|
||||||
|
foreign import photoexport "system:ScePhotoExport_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "scePhotoExport")
|
||||||
|
foreign photoexport {
|
||||||
|
FromData :: proc(data: rawptr, size: sce.Size, #by_ptr param: PhotoExportParam, workingMemory: rawptr, cancelCb: rawptr, user: rawptr, outPath: cstring, outPathSize: sce.Size) -> c.int ---
|
||||||
|
FromFile :: proc(path: cstring, #by_ptr param: PhotoExportParam, workingMemory: rawptr, cancelCb: rawptr, user: rawptr, outPath: cstring, outPathSize: sce.Size) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,239 @@
|
|||||||
|
package power
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import power "system:ScePower_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "scePower")
|
||||||
|
foreign power {
|
||||||
|
/**
|
||||||
|
* Registers a ScePower Callback
|
||||||
|
*
|
||||||
|
* @param cbid - The UID of the specified callback
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
RegisterCallback :: proc(cbid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister a callback
|
||||||
|
*
|
||||||
|
* @param cbid - The UID of the specified callback
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
UnregisterCallback :: proc(cbid: sce.UID) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery charging status
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if under charge, SCE_FALSE otherwise
|
||||||
|
*/
|
||||||
|
IsBatteryCharging :: proc() -> sce.Bool ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery life percentage
|
||||||
|
*
|
||||||
|
* @return Battery life percentage
|
||||||
|
*/
|
||||||
|
GetBatteryLifePercent :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set power configuration mode between:
|
||||||
|
*
|
||||||
|
* Mode A - This is the normal mode at process start-up. The clock frequency of the GPU core is the "normal" clock frequency. The WLAN/COM can be used.
|
||||||
|
* Mode B - This mode accelerates the GPU clock frequency. The clock frequency of the GPU core is the "high" clock frequency. The WLAN/COM cannot be used.
|
||||||
|
* Mode C - This mode accelerates the GPU clock frequency, and also uses the WLAN/COM. The clock frequency of the GPU core is the "high" clock frequency, and use of the WLAN/COM is possible. The screen (touchscreen) brightness, however, is limited. Also, camera cannot be used.
|
||||||
|
*
|
||||||
|
* @param conf One of ::ScePowerConfigurationMode
|
||||||
|
*
|
||||||
|
* @return 0 on success
|
||||||
|
*/
|
||||||
|
SetConfigurationMode :: proc(conf: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a suspend is required
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if suspend is required, SCE_FALSE otherwise
|
||||||
|
*/
|
||||||
|
IsSuspendRequired :: proc() -> sce.Bool ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if AC is plugged in
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if plugged in, SCE_FALSE otherwise
|
||||||
|
*/
|
||||||
|
IsPowerOnline :: proc() -> sce.Bool ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery life time
|
||||||
|
*
|
||||||
|
* @return Battery life time in minutes
|
||||||
|
*/
|
||||||
|
GetBatteryLifeTime :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery remaining capacity
|
||||||
|
*
|
||||||
|
* @return battery remaining capacity in mAh (milliampere hour)
|
||||||
|
*/
|
||||||
|
GetBatteryRemainCapacity :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery state
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if battery is low, SCE_FALSE otherwise
|
||||||
|
*/
|
||||||
|
IsLowBattery :: proc() -> sce.Bool ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery full capacity
|
||||||
|
*
|
||||||
|
* @return battery full capacity in mAh (milliampere hour)
|
||||||
|
*/
|
||||||
|
GetBatteryFullCapacity :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery temperature
|
||||||
|
*
|
||||||
|
* @return temperature in degrees celcius * 100
|
||||||
|
*/
|
||||||
|
GetBatteryTemp :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery voltage
|
||||||
|
*
|
||||||
|
* @return battery voltage in mV (millivolts)
|
||||||
|
*/
|
||||||
|
GetBatteryVolt :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery state of health
|
||||||
|
*
|
||||||
|
* @return battery state of health percent
|
||||||
|
*/
|
||||||
|
GetBatterySOH :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns battery cycle count
|
||||||
|
*
|
||||||
|
* @return battery cycle count
|
||||||
|
*/
|
||||||
|
GetBatteryCycleCount :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns CPU clock frequency
|
||||||
|
*
|
||||||
|
* @return CPU clock frequency in Mhz
|
||||||
|
*/
|
||||||
|
GetArmClockFrequency :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns BUS clock frequency
|
||||||
|
*
|
||||||
|
* @return BUS clock frequency in Mhz
|
||||||
|
*/
|
||||||
|
GetBusClockFrequency :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns GPU clock frequency
|
||||||
|
*
|
||||||
|
* @return GPU clock frequency in Mhz
|
||||||
|
*/
|
||||||
|
GetGpuClockFrequency :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns GPU crossbar clock frequency
|
||||||
|
*
|
||||||
|
* @return GPU crossbar clock frequency in Mhz
|
||||||
|
*/
|
||||||
|
GetGpuXbarClockFrequency :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests PS Vita to do a cold reset
|
||||||
|
*
|
||||||
|
* @return always 0
|
||||||
|
*/
|
||||||
|
RequestColdReset :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests PS Vita to go into standby
|
||||||
|
*
|
||||||
|
* @return always 0
|
||||||
|
*/
|
||||||
|
RequestStandby :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests PS Vita to suspend
|
||||||
|
*
|
||||||
|
* @return always 0
|
||||||
|
*/
|
||||||
|
RequestSuspend :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request display on
|
||||||
|
*
|
||||||
|
* @return always 0
|
||||||
|
*/
|
||||||
|
RequestDisplayOn :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request display off
|
||||||
|
*
|
||||||
|
* @return always 0
|
||||||
|
*/
|
||||||
|
RequestDisplayOff :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets CPU clock frequency
|
||||||
|
*
|
||||||
|
* @param freq - Frequency to set in Mhz
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetArmClockFrequency :: proc(freq: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets BUS clock frequency
|
||||||
|
*
|
||||||
|
* @param freq - Frequency to set in Mhz
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetBusClockFrequency :: proc(freq: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets GPU clock frequency
|
||||||
|
*
|
||||||
|
* @param freq - Frequency to set in Mhz
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetGpuClockFrequency :: proc(freq: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets GPU crossbar clock frequency
|
||||||
|
*
|
||||||
|
* @param freq - Frequency to set in Mhz
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetGpuXbarClockFrequency :: proc(freq: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets wireless features usage
|
||||||
|
*
|
||||||
|
* @param enabled - SCE_TRUE to enable, SCE_FALSE to disable
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetUsingWireless :: proc(enabled: sce.Bool) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets wireless features usage
|
||||||
|
*
|
||||||
|
* @return SCE_TRUE if enabled, SCE_FALSE otherwise
|
||||||
|
*/
|
||||||
|
GetUsingWireless :: proc() -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package power
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
ScePowerErrorCode :: enum c.uint {
|
||||||
|
INVALID_VALUE = 0x802B0000,
|
||||||
|
ALREADY_REGISTERED = 0x802B0001,
|
||||||
|
CALLBACK_NOT_REGISTERED = 0x802B0002,
|
||||||
|
CANT_SUSPEND = 0x802B0003,
|
||||||
|
NO_BATTERY = 0x802B0100,
|
||||||
|
DETECTING = 0x802B0101
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePowerErrorCode) == 4)
|
||||||
|
|
||||||
|
ScePowerCallbackType :: enum c.uint {
|
||||||
|
AFTER_SYSTEM_RESUME = 0x00000080, /* TODO: confirm */
|
||||||
|
BATTERY_ONLINE = 0x00000100,
|
||||||
|
THERMAL_SUSPEND = 0x00000200, /* TODO: confirm */
|
||||||
|
LOW_BATTERY_SUSPEND = 0x00000400, /* TODO: confirm */
|
||||||
|
LOW_BATTERY = 0x00000800,
|
||||||
|
POWER_ONLINE = 0x00001000,
|
||||||
|
SYSTEM_SUSPEND = 0x00010000,
|
||||||
|
SYSTEM_RESUMING = 0x00020000,
|
||||||
|
SYSTEM_RESUME = 0x00040000,
|
||||||
|
UNK_0x100000 = 0x00100000, /* Related to proc_event::display_switch */
|
||||||
|
APP_RESUME = 0x00200000,
|
||||||
|
APP_SUSPEND = 0x00400000,
|
||||||
|
APP_RESUMING = 0x00800000, /* TODO: confirm */
|
||||||
|
BUTTON_PS_START_PRESS = 0x04000000,
|
||||||
|
BUTTON_PS_POWER_PRESS = 0x08000000,
|
||||||
|
BUTTON_PS_HOLD = 0x10000000,
|
||||||
|
BUTTON_PS_PRESS = 0x20000000,
|
||||||
|
BUTTON_POWER_HOLD = 0x40000000,
|
||||||
|
BUTTON_POWER_PRESS = 0x80000000,
|
||||||
|
VALID_MASK_KERNEL = 0xFCF71F80,
|
||||||
|
VALID_MASK_SYSTEM = 0xFCF71F80,
|
||||||
|
VALID_MASK_NON_SYSTEM = 0x00361180
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePowerCallbackType) == 4)
|
||||||
|
|
||||||
|
/* GPU, WLAN/COM configuration setting */
|
||||||
|
ScePowerConfigurationMode :: enum c.uint {
|
||||||
|
SCE_POWER_CONFIGURATION_MODE_A = 0x00000080, /* GPU clock normal, WLAN/COM enabled */
|
||||||
|
SCE_POWER_CONFIGURATION_MODE_B = 0x00000800, /* GPU clock high, WLAN/COM disabled */
|
||||||
|
SCE_POWER_CONFIGURATION_MODE_C = 0x00010880, /* GPU clock high, WLAN/COM enabled (drains battery faster) */
|
||||||
|
__SCE_POWER_CONFIGURATION_MODE = 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePowerConfigurationMode) == 4)
|
||||||
|
|
||||||
|
/* Callbacks */
|
||||||
|
|
||||||
|
/** Callback function prototype */
|
||||||
|
ScePowerCallback :: #type ^proc "c" (notifyId: c.int, notifyCount: c.int, powerInfo: c.int, userData: rawptr)
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package promoterutil
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import promoterutil "system:ScePromoterUtil_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "scePromoterUtility")
|
||||||
|
foreign promoterutil {
|
||||||
|
/**
|
||||||
|
* Init the promoter utility.
|
||||||
|
* \note Needs to be called before using the other functions.
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
Init :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deinit the promoter utility.
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
Exit :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a package from the LiveArea.
|
||||||
|
*
|
||||||
|
* @param[in] *titleid
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
DeletePkg :: proc(titleid: cstring) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the LiveArea resources of an app
|
||||||
|
*
|
||||||
|
* @param[in] *args - see ::ScePromoterUtilityLAUpdate
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
UpdateLiveArea :: proc(args: ^ScePromoterUtilityLAUpdate) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install Content Manager import contents and create bubbles without checking license files.
|
||||||
|
*
|
||||||
|
* @param[in] *params - see ::ScePromoterUtilImportParams
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
PromoteImport :: proc(params: ^ScePromoterUtilityImportParams) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install a package from a directory, and add an icon on the LiveArea.
|
||||||
|
*
|
||||||
|
* @param[in] *path - the path of the directory where the extracted content of the package is
|
||||||
|
* @param sync - pass 0 for asynchronous, 1 for synchronous
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
PromotePkg :: proc(path: cstring, sync: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install a package from a directory and generate a rif.
|
||||||
|
*
|
||||||
|
* @param[in] *path - the path of the directory where the extracted content of the package is
|
||||||
|
* @param sync - pass 0 for asynchronous, 1 for synchronous
|
||||||
|
*
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
PromotePkgWithRif :: proc(path: cstring, sync: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the state of an operation.
|
||||||
|
*
|
||||||
|
* @param[out] *state - the current status, 0 when finished
|
||||||
|
*
|
||||||
|
* @return < 0 if failed.
|
||||||
|
*/
|
||||||
|
GetState :: proc(state: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the result of a finished operation
|
||||||
|
*
|
||||||
|
* @param[out] *res - the result, 0 on success
|
||||||
|
*
|
||||||
|
* @return < 0 if failed.
|
||||||
|
*/
|
||||||
|
GetResult :: proc(res: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if titleid exists
|
||||||
|
*
|
||||||
|
* @param[out] *res - the result, unknown meaning
|
||||||
|
*
|
||||||
|
* @return 0 if exists, < 0 otherwise.
|
||||||
|
*/
|
||||||
|
CheckExist :: proc(titleid: cstring, res: ^c.int) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package promoterutil
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
/** Avalible types for ::ScePromoterUtilityImportParams **/
|
||||||
|
ScePromoterUtilityPackageType :: enum c.int {
|
||||||
|
VITA = 0x0001, //!< PSVita Apps
|
||||||
|
PSP = 0x0001, //!< PSP Games
|
||||||
|
PSM = 0x0003, //!< PlayStation Mobile
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Parameters for scePromoterUtilityUpdateLiveArea() */
|
||||||
|
ScePromoterUtilityLAUpdate :: struct {
|
||||||
|
titleid: [12]c.char, //!< Target app.
|
||||||
|
path: [128]c.char, //!< Directory of extracted LA update data.
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePromoterUtilityLAUpdate) == 0x8C)
|
||||||
|
|
||||||
|
/** Parameters for scePromoterUtilityPromoteImport() */
|
||||||
|
ScePromoterUtilityImportParams :: struct {
|
||||||
|
path: [0x80]c.char, //!< Install path (ux0:/temp/game on PSM/PSV, ux0:/pspemu/temp/game on PSP)
|
||||||
|
titleid: [0xC]c.char, //!< Game titleid
|
||||||
|
type: ScePromoterUtilityPackageType, //!< Package type
|
||||||
|
attribute: c.uint32_t, //!< Additional Attributes (Appears to be 0x1 on PSM content but 0x00 on Vita contents)
|
||||||
|
reserved: [0x1C]c.char,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePromoterUtilityImportParams) == 0xB0)
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package pspnetadhoc
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceNet "../Net"
|
||||||
|
|
||||||
|
foreign import pspnetadhoc "system:ScePspnetAdhoc_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceNetAdhoc")
|
||||||
|
foreign pspnetadhoc {
|
||||||
|
Init :: proc() -> c.int ---
|
||||||
|
Term :: proc() -> c.int ---
|
||||||
|
|
||||||
|
PollSocket :: proc(sds: ^SceNetAdhocPollSd, nsds: c.int, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
SetSocketAlert :: proc(id: c.int, flag: c.int) -> c.int ---
|
||||||
|
GetSocketAlert :: proc(id: c.int, flag: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
PdpCreate :: proc(#by_ptr saddr: sceNet.SceNetEtherAddr, sport: sce.UShort16, bufsize: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PdpSend :: proc(id: c.int, #by_ptr daddr: sceNet.SceNetEtherAddr, dport: sce.UShort16, data: rawptr, len: c.int, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PdpRecv :: proc(id: c.int, saddr: ^sceNet.SceNetEtherAddr, sport: ^sce.UShort16, buf: rawptr, len: ^c.int, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PdpDelete :: proc(id: c.int, flag: c.int) -> c.int ---
|
||||||
|
GetPdpStat :: proc(buflen: ^c.int, buf: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
PtpOpen :: proc(#by_ptr saddr: sceNet.SceNetEtherAddr, sport: sce.UShort16, #by_ptr daddr: sceNet.SceNetEtherAddr, dport: sce.UShort16, bufsize: c.uint, rexmt_int: c.uint, rexmt_cnt: c.int, flag: c.int) -> c.int ---
|
||||||
|
PtpConnect :: proc(id: c.int, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PtpListen :: proc(#by_ptr saddr: sceNet.SceNetEtherAddr, sport: sce.UShort16, bufsize: c.uint, rexmt_int: c.uint, rexmt_cnt: c.int, backlog: c.int, flag: c.int) -> c.int ---
|
||||||
|
PtpAccept :: proc(id: c.int, addr: ^sceNet.SceNetEtherAddr, port: ^sce.UShort16, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PtpSend :: proc(id: c.int, data: rawptr, len: ^c.int, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PtpRecv :: proc(id: c.int, buf: rawptr, len: ^c.int, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PtpFlush :: proc(id: c.int, timeout: c.uint, flag: c.int) -> c.int ---
|
||||||
|
PtpClose :: proc(id: c.int, flag: c.int) -> c.int ---
|
||||||
|
GetPtpStat :: proc(buflen: ^c.int, buf: rawptr) -> c.int ---
|
||||||
|
|
||||||
|
ctlInit :: proc(#by_ptr adhocId: SceNetAdhocctlAdhocId) -> c.int ---
|
||||||
|
ctlTerm :: proc() -> c.int ---
|
||||||
|
ctlGetAdhocId :: proc(adhocId: ^SceNetAdhocctlAdhocId) -> c.int ---
|
||||||
|
ctlGetPeerList :: proc(buflen: ^c.int, buf: rawptr) -> c.int ---
|
||||||
|
ctlGetPeerInfo :: proc(#by_ptr addr: sceNet.SceNetEtherAddr, size: c.int, peerInfo: ^SceNetAdhocctlPeerInfo) -> c.int ---
|
||||||
|
ctlGetAddrByName :: proc(#by_ptr nickname: SceNetAdhocctlNickname, buflen: ^c.int, buf: rawptr) -> c.int ---
|
||||||
|
ctlGetNameByAddr :: proc(#by_ptr addr: sceNet.SceNetEtherAddr, nickname: ^SceNetAdhocctlNickname) -> c.int ---
|
||||||
|
ctlGetParameter :: proc(parameter: ^SceNetAdhocctlParameter) -> c.int ---
|
||||||
|
ctlGetEtherAddr :: proc(addr: ^sceNet.SceNetEtherAddr) -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
package pspnetadhoc
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
import sceNet "../Net"
|
||||||
|
|
||||||
|
SCE_NET_ADHOC_PDP_MFS :: 1444
|
||||||
|
SCE_NET_ADHOC_PDP_MTU :: 65523
|
||||||
|
SCE_NET_ADHOC_PTP_MSS :: 1444
|
||||||
|
SCE_NET_ADHOCCTL_ADHOCID_LEN :: 9
|
||||||
|
SCE_NET_ADHOCCTL_GROUPNAME_LEN :: 8
|
||||||
|
SCE_NET_ADHOCCTL_NICKNAME_LEN :: 128
|
||||||
|
SCE_NET_ADHOCCTL_BSSID_LEN :: 6
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
ScePspnetAdhocErrorCode :: enum c.uint {
|
||||||
|
INVALID_SOCKET_ID = 0x80410701,
|
||||||
|
INVALID_ADDR = 0x80410702,
|
||||||
|
INVALID_PORT = 0x80410703,
|
||||||
|
INVALID_BUFLEN = 0x80410704,
|
||||||
|
INVALID_DATALEN = 0x80410705,
|
||||||
|
NOT_ENOUGH_SPACE = 0x80410706,
|
||||||
|
SOCKET_DELETED = 0x80410707,
|
||||||
|
SOCKET_ALERTED = 0x80410708,
|
||||||
|
WOULD_BLOCK = 0x80410709,
|
||||||
|
PORT_IN_USE = 0x8041070A,
|
||||||
|
NOT_CONNECTED = 0x8041070B,
|
||||||
|
DISCONNECTED = 0x8041070C,
|
||||||
|
NOT_OPENED = 0x8041070D,
|
||||||
|
NOT_LISTENED = 0x8041070E,
|
||||||
|
SOCKET_ID_NOT_AVAIL = 0x8041070F,
|
||||||
|
PORT_NOT_AVAIL = 0x80410710,
|
||||||
|
INVALID_ARG = 0x80410711,
|
||||||
|
NOT_INITIALIZED = 0x80410712,
|
||||||
|
ALREADY_INITIALIZED = 0x80410713,
|
||||||
|
BUSY = 0x80410714,
|
||||||
|
TIMEOUT = 0x80410715,
|
||||||
|
NO_ENTRY = 0x80410716,
|
||||||
|
EXCEPTION_EVENT = 0x80410717,
|
||||||
|
CONNECTION_REFUSED = 0x80410718,
|
||||||
|
THREAD_ABORTED = 0x80410719,
|
||||||
|
ALREADY_CREATED = 0x8041071A,
|
||||||
|
NOT_IN_GAMEMODE = 0x8041071B,
|
||||||
|
NOT_CREATED = 0x8041071C,
|
||||||
|
INVALID_ALIGNMENT = 0x8041071D,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetAdhocPollSd :: struct {
|
||||||
|
id: c.int,
|
||||||
|
events: c.int,
|
||||||
|
revents: c.int,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetAdhocPollSd) == 0xC)
|
||||||
|
|
||||||
|
ScePspnetAdhocEvent :: enum c.int {
|
||||||
|
SEND = 0x0001,
|
||||||
|
RECV = 0x0002,
|
||||||
|
CONNECT = 0x0004,
|
||||||
|
ACCEPT = 0x0008,
|
||||||
|
FLUSH = 0x0010,
|
||||||
|
INVALID = 0x0100,
|
||||||
|
DELETE = 0x0200,
|
||||||
|
ALERT = 0x0400,
|
||||||
|
DISCONNECT = 0x0800,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetAdhocPdpStat :: struct {
|
||||||
|
next: ^SceNetAdhocPdpStat,
|
||||||
|
id: c.int,
|
||||||
|
laddr: sceNet.SceNetEtherAddr,
|
||||||
|
lport: sce.UShort16,
|
||||||
|
rcv_sb_cc: c.uint,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetAdhocPdpStat) == 0x14)
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePspnetAdhocPtpState :: enum c.int {
|
||||||
|
CLOSED = 0,
|
||||||
|
LISTEN = 1,
|
||||||
|
SYN_SENT = 2,
|
||||||
|
SYN_RCVD = 3,
|
||||||
|
ESTABLISHED = 4,
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetAdhocPtpStat :: struct {
|
||||||
|
next: ^SceNetAdhocPtpStat,
|
||||||
|
id: c.int,
|
||||||
|
laddr: sceNet.SceNetEtherAddr,
|
||||||
|
paddr: sceNet.SceNetEtherAddr,
|
||||||
|
lport: sce.UShort16,
|
||||||
|
pport: sce.UShort16,
|
||||||
|
snd_sb_cc: c.uint,
|
||||||
|
rcv_sb_cc: c.uint,
|
||||||
|
state: c.int,
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePspnetAdhocFlags :: enum c.int {
|
||||||
|
NONBLOCK = 0x0001,
|
||||||
|
ALERTSEND = 0x0010,
|
||||||
|
ALERTRECV = 0x0020,
|
||||||
|
ALERTPOLL = 0x0040,
|
||||||
|
ALERTCONNECT = 0x0080,
|
||||||
|
ALERTACCEPT = 0x0100,
|
||||||
|
ALERTFLUSH = 0x0200,
|
||||||
|
ALERTALL = ALERTSEND | ALERTRECV | ALERTPOLL | ALERTCONNECT | ALERTACCEPT | ALERTFLUSH,
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
ScePspnetAdhocctlErrorCode :: enum c.uint {
|
||||||
|
INVALID_ARG = 0x80410B04,
|
||||||
|
ALREADY_INITIALIZED = 0x80410B07,
|
||||||
|
NOT_INITIALIZED = 0x80410B08,
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePspnetAdhocctlAdhocType :: enum c.int {
|
||||||
|
PRODUCT_ID = 0,
|
||||||
|
RESERVED = 1,
|
||||||
|
SYSTEM = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetAdhocctlAdhocId :: struct {
|
||||||
|
type: c.int,
|
||||||
|
data: [SCE_NET_ADHOCCTL_ADHOCID_LEN]sce.Char8,
|
||||||
|
padding: [3]sce.UChar8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetAdhocctlAdhocId) == 0x10)
|
||||||
|
|
||||||
|
SceNetAdhocctlGroupName :: struct {
|
||||||
|
data: [SCE_NET_ADHOCCTL_GROUPNAME_LEN]sce.Char8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetAdhocctlGroupName) == 8)
|
||||||
|
|
||||||
|
SceNetAdhocctlNickname :: struct {
|
||||||
|
data: [SCE_NET_ADHOCCTL_NICKNAME_LEN]sce.Char8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetAdhocctlNickname) == 0x80)
|
||||||
|
|
||||||
|
SceNetAdhocctlPeerInfo :: struct {
|
||||||
|
next: ^SceNetAdhocctlPeerInfo,
|
||||||
|
nickname: SceNetAdhocctlNickname,
|
||||||
|
macAddr: sceNet.SceNetEtherAddr,
|
||||||
|
padding: [6]sce.UChar8,
|
||||||
|
lastRecv: sce.UInt64,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(SceNetAdhocctlPeerInfo) == 0x98)
|
||||||
|
}
|
||||||
|
|
||||||
|
SceNetAdhocctlBSSId :: struct {
|
||||||
|
data: [SCE_NET_ADHOCCTL_BSSID_LEN]sce.UChar8,
|
||||||
|
padding: [2]sce.UChar8,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetAdhocctlBSSId) == 8)
|
||||||
|
|
||||||
|
SceNetAdhocctlParameter :: struct {
|
||||||
|
channel: c.int,
|
||||||
|
groupName: SceNetAdhocctlGroupName,
|
||||||
|
nickname: SceNetAdhocctlNickname,
|
||||||
|
bssid: SceNetAdhocctlBSSId,
|
||||||
|
}
|
||||||
|
#assert(size_of(SceNetAdhocctlParameter) == 0x94)
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package pvf
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import pvf "system:ScePvf_stub"
|
||||||
|
|
||||||
|
GetCharGlyphImageClip :: GetCharGlyphImage_Clip
|
||||||
|
|
||||||
|
@(link_prefix = "scePvf")
|
||||||
|
foreign pvf {
|
||||||
|
NewLib :: proc(initParam: ^ScePvfInitRec, errorCode: ScePvfError) -> ScePvfLibId ---
|
||||||
|
DoneLib :: proc(libID: ScePvfLibId) -> ScePvfError ---
|
||||||
|
SetEM :: proc(libID: ScePvfLibId, emValue: ScePvfFloat32) -> ScePvfError ---
|
||||||
|
SetResolution :: proc(libID: ScePvfLibId, hResolution: ScePvfFloat32, vResolution: ScePvfFloat32) -> ScePvfError ---
|
||||||
|
GetNumFontList :: proc(libID: ScePvfLibId, errorCode: ScePvfError) -> ScePvfInt ---
|
||||||
|
GetFontList :: proc(libID: ScePvfLibId, fontStyleInfo: ^ScePvfFontStyleInfo, arraySize: ScePvfInt) -> ScePvfError ---
|
||||||
|
FindOptimumFont :: proc(libID: ScePvfLibId, fontStyleInfo: ^ScePvfFontStyleInfo, errorCode: ScePvfError) -> ScePvfFontIndex ---
|
||||||
|
FindFont :: proc(libID: ScePvfLibId, fontStyleInfo: ^ScePvfFontStyleInfo, errorCode: ScePvfError) -> ScePvfFontIndex ---
|
||||||
|
GetFontInfoByIndexNumber :: proc(libID: ScePvfLibId, fontStyleInfo: ^ScePvfFontStyleInfo, fontIndex: ScePvfFontIndex) -> ScePvfError ---
|
||||||
|
Open :: proc(libID: ScePvfLibId, fontIndex: ScePvfFontIndex, mode: ScePvfU32, errorCode: ScePvfError) -> ScePvfFontId ---
|
||||||
|
OpenUserFile :: proc(libID: ScePvfLibId, filename: ScePvfPointer, mode: ScePvfU32, errorCode: ScePvfError) -> ScePvfFontId ---
|
||||||
|
OpenUserFileWithSubfontIndex :: proc(libID: ScePvfLibId, filename: ScePvfPointer, mode: ScePvfU32, subFontIndex: ScePvfU32, errorCode: ScePvfError) -> ScePvfFontId ---
|
||||||
|
OpenUserMemory :: proc(libID: ScePvfLibId, addr: ScePvfPointer, size: ScePvfU32, errorCode: ScePvfError) -> ScePvfFontId ---
|
||||||
|
OpenUserMemoryWithSubfontIndex :: proc(libID: ScePvfLibId, addr: ScePvfPointer, size: ScePvfU32, subFontIndex: ScePvfU32, errorCode: ScePvfError) -> ScePvfFontId ---
|
||||||
|
OpenDefaultJapaneseFontOnSharedMemory :: proc(libID: ScePvfLibId, errorCode: ScePvfError) -> ScePvfFontId ---
|
||||||
|
OpenDefaultLatinFontOnSharedMemory :: proc(libID: ScePvfLibId, errorCode: ScePvfError) -> ScePvfFontId ---
|
||||||
|
Close :: proc(fontID: ScePvfFontId) -> ScePvfError ---
|
||||||
|
Flush :: proc(fontID: ScePvfFontId) -> ScePvfError ---
|
||||||
|
SetCharSize :: proc(fontID: ScePvfFontId, hSize: ScePvfFloat32, vSize: ScePvfFloat32) -> ScePvfError ---
|
||||||
|
SetEmboldenRate :: proc(fontID: ScePvfFontId, emboldenRate: ScePvfFloat32) -> ScePvfError ---
|
||||||
|
SetSkewValue :: proc(fontID: ScePvfFontId, angleX: ScePvfFloat32, angleY: ScePvfFloat32) -> ScePvfError ---
|
||||||
|
IsElement :: proc(fontID: ScePvfFontId, charCode: ScePvfCharCode) -> ScePvfBool ---
|
||||||
|
GetFontInfo :: proc(fontID: ScePvfFontId, fontInfo: ^ScePvfFontInfo) -> ScePvfError ---
|
||||||
|
GetCharInfo :: proc(fontID: ScePvfFontId, charCode: ScePvfCharCode, charInfo: ^ScePvfCharInfo) -> ScePvfError ---
|
||||||
|
GetKerningInfo :: proc(fontID: ScePvfFontId, leftCharCode: ScePvfCharCode, rightCharCode: ScePvfCharCode, pKerningInfo: ^ScePvfKerningInfo) -> ScePvfError ---
|
||||||
|
GetCharImageRect :: proc(fontID: ScePvfFontId, charCode: ScePvfCharCode, rect: ^ScePvfIrect) -> ScePvfError ---
|
||||||
|
GetCharGlyphImage :: proc(fontID: ScePvfFontId, charCode: ScePvfCharCode, imageBuffer: ^ScePvfUserImageBufferRec) -> ScePvfError ---
|
||||||
|
GetCharGlyphImage_Clip :: proc(fontID: ScePvfFontId, charCode: ScePvfCharCode, imageBuffer: ^ScePvfUserImageBufferRec, clipX: ScePvfS32, clipY: ScePvfS32, clipWidth: ScePvfU32, clipHeight: ScePvfU32) -> ScePvfError ---
|
||||||
|
PixelToPointH :: proc(libID: ScePvfLibId, pixel: ScePvfFloat32, errorCode: ScePvfError) -> ScePvfFloat32 ---
|
||||||
|
PixelToPointV :: proc(libID: ScePvfLibId, pixel: ScePvfFloat32, errorCode: ScePvfError) -> ScePvfFloat32 ---
|
||||||
|
PointToPixelH :: proc(libID: ScePvfLibId, point: ScePvfFloat32, errorCode: ScePvfError) -> ScePvfFloat32 ---
|
||||||
|
PointToPixelV :: proc(libID: ScePvfLibId, point: ScePvfFloat32, errorCode: ScePvfError) -> ScePvfFloat32 ---
|
||||||
|
SetAltCharacterCode :: proc(libID: ScePvfLibId, charCode: ScePvfCharCode) -> ScePvfError ---
|
||||||
|
}
|
||||||
+305
@@ -0,0 +1,305 @@
|
|||||||
|
package pvf
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
SCE_PVF_MAX_OPEN :: 18
|
||||||
|
|
||||||
|
SCE_PVF_FONTNAME_LENGTH :: 64
|
||||||
|
SCE_PVF_STYLENAME_LENGTH :: 64
|
||||||
|
SCE_PVF_FONTFILENAME_LENGTH :: 64
|
||||||
|
|
||||||
|
SCE_PVF_MIN_EMBOLDEN_RATE :: -20.0
|
||||||
|
SCE_PVF_MAX_EMBOLDEN_RATE :: 40.0
|
||||||
|
SCE_PVF_MIN_SKEW_VALUE :: -30.0
|
||||||
|
SCE_PVF_MAX_SKEW_VALUE :: 30.0
|
||||||
|
|
||||||
|
ScePvfErrorCode :: enum c.uint {
|
||||||
|
NOMEMORY = 0x80460001,
|
||||||
|
LIBID = 0x80460002,
|
||||||
|
ARG = 0x80460003,
|
||||||
|
NOFILE = 0x80460004,
|
||||||
|
FILEOPEN = 0x80460005,
|
||||||
|
FILECLOSE = 0x80460006,
|
||||||
|
FILEREAD = 0x80460007,
|
||||||
|
FILESEEK = 0x80460008,
|
||||||
|
TOOMANYOPENED = 0x80460009,
|
||||||
|
ILLEGALVERSION = 0x8046000A,
|
||||||
|
DATAINCONSISTENT = 0x8046000B,
|
||||||
|
EXPIRED = 0x8046000C,
|
||||||
|
NOSUPPORT = 0x8046000E,
|
||||||
|
NOGLYPH = 0x8046000F,
|
||||||
|
UNKNOWN = 0x8046FFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfFamilyCode :: enum c.int {
|
||||||
|
DEFAULT_FAMILY_CODE = 0,
|
||||||
|
FAMILY_SANSERIF = 1,
|
||||||
|
FAMILY_SERIF = 2,
|
||||||
|
FAMILY_ROUNDED = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfStyleCode :: enum c.int {
|
||||||
|
DEFAULT_STYLE_CODE = 0,
|
||||||
|
STYLE_REGULAR = 1,
|
||||||
|
STYLE_OBLIQUE = 2,
|
||||||
|
STYLE_NARROW = 3,
|
||||||
|
STYLE_NARROW_OBLIQUE = 4,
|
||||||
|
STYLE_BOLD = 5,
|
||||||
|
STYLE_BOLD_OBLIQUE = 6,
|
||||||
|
STYLE_BLACK = 7,
|
||||||
|
STYLE_BLACK_OBLIQUE = 8,
|
||||||
|
STYLE_L = 101,
|
||||||
|
STYLE_M = 102,
|
||||||
|
STYLE_DB = 103,
|
||||||
|
STYLE_B = 104,
|
||||||
|
STYLE_EB = 105,
|
||||||
|
STYLE_UB = 106
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfImageByfferPixelFormatType :: enum c.int {
|
||||||
|
USERIMAGE_DIRECT4_L = 0,
|
||||||
|
USERIMAGE_DIRECT8 = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfLanguageCode :: enum c.int {
|
||||||
|
DEFAULT_LANGUAGE_CODE = 0,
|
||||||
|
LANGUAGE_J = 1,
|
||||||
|
LANGUAGE_LATIN = 2,
|
||||||
|
LANGUAGE_K = 3,
|
||||||
|
LANGUAGE_C = 4,
|
||||||
|
LANGUAGE_CJK = 5
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfRegionCode :: enum c.int {
|
||||||
|
GENERIC_REGION_CODE = 0,
|
||||||
|
REGION_001 = 1,
|
||||||
|
REGION_002 = 2,
|
||||||
|
REGION_003 = 3,
|
||||||
|
REGION_004 = 4,
|
||||||
|
REGION_005 = 5,
|
||||||
|
REGION_006 = 6,
|
||||||
|
REGION_007 = 7
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfFontVendorCountryCode :: enum c.int {
|
||||||
|
GENERIC_COUNTRY_CODE = 0,
|
||||||
|
COUNTRY_JAPAN = 1,
|
||||||
|
COUNTRY_USA = 2,
|
||||||
|
COUNTRY_KOREA = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfBoolValue :: enum c.int {
|
||||||
|
FALSE = 0,
|
||||||
|
TRUE = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfSubstyle :: enum c.int {
|
||||||
|
VERTICALLAYOUT = 0x0001,
|
||||||
|
PSEUDO_BOLD = 0x0002,
|
||||||
|
PSEUDO_SLANT = 0x0004
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfDataAccessMode :: enum c.int {
|
||||||
|
FILEBASEDSTREAM = 0,
|
||||||
|
MEMORYBASEDSTREAM = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfU32 :: c.uint
|
||||||
|
ScePvfS32 :: c.int
|
||||||
|
ScePvfU16 :: c.ushort
|
||||||
|
ScePvfU8 :: c.uchar
|
||||||
|
ScePvfFloat32 :: c.float
|
||||||
|
ScePvfBool :: ScePvfU32
|
||||||
|
ScePvfLibId :: rawptr
|
||||||
|
ScePvfFontId :: rawptr
|
||||||
|
ScePvfPointer :: rawptr
|
||||||
|
ScePvfHandle :: rawptr
|
||||||
|
ScePvfError :: ScePvfS32
|
||||||
|
ScePvfInt :: ScePvfS32
|
||||||
|
ScePvfCharCode :: ScePvfU16
|
||||||
|
ScePvfFontIndex :: ScePvfS32
|
||||||
|
|
||||||
|
ScePvfIrect :: struct {
|
||||||
|
width: ScePvfU16,
|
||||||
|
height: ScePvfU16,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfIrect) == 4)
|
||||||
|
|
||||||
|
ScePvfRect :: struct {
|
||||||
|
width: ScePvfU32,
|
||||||
|
height: ScePvfU32,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfRect) == 8)
|
||||||
|
|
||||||
|
ScePvfFontCacheLockFunc :: #type ^proc "c" (cacheInstance: ScePvfPointer) -> ScePvfS32
|
||||||
|
|
||||||
|
ScePvfFontChcheUnlockFunc :: #type ^proc "c" (cacheInstance: ScePvfPointer) -> ScePvfS32
|
||||||
|
|
||||||
|
ScePvfFontChcheFindFunc :: #type ^proc "c" (
|
||||||
|
chcheInstance: ScePvfPointer,
|
||||||
|
hashValue: ScePvfU32,
|
||||||
|
key: ScePvfPointer,
|
||||||
|
result: ^ScePvfBool) -> ScePvfPointer
|
||||||
|
|
||||||
|
ScePvfFontChcheWriteKeyValueToCacheFunc :: #type ^proc "c" (
|
||||||
|
cacheInstance: ScePvfPointer,
|
||||||
|
chcheSlot: ScePvfPointer,
|
||||||
|
key: ScePvfPointer) -> ScePvfS32
|
||||||
|
|
||||||
|
ScePvfFontChcheWriteToCacheFunc :: #type ^proc "c" (
|
||||||
|
cacheInstance: ScePvfPointer,
|
||||||
|
cacheSlot: ScePvfPointer,
|
||||||
|
data0: ScePvfPointer,
|
||||||
|
size: ScePvfInt) -> ScePvfS32
|
||||||
|
|
||||||
|
ScePvfFontChcheReadFromCacheFunc :: #type ^proc "c" (
|
||||||
|
cacheInstance: ScePvfPointer,
|
||||||
|
cacheSlot: ScePvfPointer,
|
||||||
|
data0: ScePvfPointer) -> ScePvfS32
|
||||||
|
|
||||||
|
ScePvfCacheSystemInterface :: struct {
|
||||||
|
cacheInstance: ^ScePvfPointer,
|
||||||
|
lockFunc: ScePvfFontCacheLockFunc,
|
||||||
|
unlockFunc: ScePvfFontChcheUnlockFunc,
|
||||||
|
findFunc: ScePvfFontChcheFindFunc,
|
||||||
|
writeKeyValueToCacheFunc: ScePvfFontChcheWriteKeyValueToCacheFunc,
|
||||||
|
write0ToCacheFunc: ScePvfFontChcheWriteToCacheFunc,
|
||||||
|
write1ToCacheFunc: ScePvfFontChcheWriteToCacheFunc,
|
||||||
|
read0FromCacheFunc: ScePvfFontChcheReadFromCacheFunc,
|
||||||
|
read1FromCacheFunc: ScePvfFontChcheReadFromCacheFunc,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(ScePvfCacheSystemInterface) == 0x24)
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfAllocFunc :: #type ^proc "c" (userData: ScePvfPointer, size: ScePvfU32) -> ScePvfPointer
|
||||||
|
|
||||||
|
ScePvfReallocFunc :: #type ^proc "c" (
|
||||||
|
userData: ScePvfPointer,
|
||||||
|
old_ptr: ScePvfPointer,
|
||||||
|
size: ScePvfU32) -> ScePvfPointer
|
||||||
|
|
||||||
|
ScePvfFreeFunc :: #type ^proc "c" (userData: ScePvfPointer, ptr: ScePvfPointer)
|
||||||
|
|
||||||
|
ScePvfInitRec :: struct {
|
||||||
|
userData: ScePvfPointer,
|
||||||
|
maxNumFonts: ScePvfU32,
|
||||||
|
cache: ^ScePvfCacheSystemInterface,
|
||||||
|
reserved: ScePvfPointer,
|
||||||
|
allocFunc: ScePvfAllocFunc,
|
||||||
|
reallocFunc: ScePvfReallocFunc,
|
||||||
|
freeFunc: ScePvfFreeFunc,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(ScePvfInitRec) == 0x1C)
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfFontStyleInfo :: struct {
|
||||||
|
weight: ScePvfFloat32,
|
||||||
|
familyCode: ScePvfU16,
|
||||||
|
style: ScePvfU16,
|
||||||
|
subStyle: ScePvfU16, //<! One of ::ScePvfSubstyle
|
||||||
|
languageCode: ScePvfU16,
|
||||||
|
regionCode: ScePvfU16,
|
||||||
|
countryCode: ScePvfU16,
|
||||||
|
fontName: [SCE_PVF_FONTNAME_LENGTH]ScePvfU8,
|
||||||
|
styleName: [SCE_PVF_STYLENAME_LENGTH]ScePvfU8,
|
||||||
|
fileName: [SCE_PVF_FONTFILENAME_LENGTH]ScePvfU8,
|
||||||
|
extraAttributes: ScePvfU32,
|
||||||
|
expireDate: ScePvfU32,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfFontStyleInfo) == 0xD8)
|
||||||
|
|
||||||
|
ScePvfUserImageBufferRec :: struct {
|
||||||
|
pixelFormat: ScePvfU32,
|
||||||
|
xPos64: ScePvfS32,
|
||||||
|
yPos64: ScePvfS32,
|
||||||
|
rect: ScePvfIrect,
|
||||||
|
bytesPerLine: ScePvfU16,
|
||||||
|
reserved: ScePvfU16,
|
||||||
|
buffer: [^]ScePvfU8,
|
||||||
|
}
|
||||||
|
when size_of(rawptr) == 4 {
|
||||||
|
#assert(size_of(ScePvfUserImageBufferRec) == 0x18)
|
||||||
|
}
|
||||||
|
|
||||||
|
ScePvfIGlyphMetricsInfo :: struct {
|
||||||
|
width64: ScePvfU32,
|
||||||
|
height64: ScePvfU32,
|
||||||
|
ascender64: ScePvfS32,
|
||||||
|
descender64: ScePvfS32,
|
||||||
|
horizontalBearingX64: ScePvfS32,
|
||||||
|
horizontalBearingY64: ScePvfS32,
|
||||||
|
verticalBearingX64: ScePvfS32,
|
||||||
|
verticalBearingY64: ScePvfS32,
|
||||||
|
horizontalAdvance64: ScePvfS32,
|
||||||
|
verticalAdvance64: ScePvfS32,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfIGlyphMetricsInfo) == 0x28)
|
||||||
|
|
||||||
|
ScePvfCharInfo :: struct {
|
||||||
|
bitmapWidth: ScePvfU32,
|
||||||
|
bitmapHeight: ScePvfU32,
|
||||||
|
bitmapPitch: ScePvfU32,
|
||||||
|
bitmapLeft: ScePvfS32,
|
||||||
|
bitmapTop: ScePvfS32,
|
||||||
|
glyphMetrics: ScePvfIGlyphMetricsInfo,
|
||||||
|
reserved0: [2]ScePvfU8,
|
||||||
|
reserved1: ScePvfU16,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfCharInfo) == 0x40)
|
||||||
|
|
||||||
|
ScePvfFGlyphMetricsInfo :: struct {
|
||||||
|
width: ScePvfFloat32,
|
||||||
|
height: ScePvfFloat32,
|
||||||
|
ascender: ScePvfFloat32,
|
||||||
|
descender: ScePvfFloat32,
|
||||||
|
horizontalBearingX: ScePvfFloat32,
|
||||||
|
horizontalBearingY: ScePvfFloat32,
|
||||||
|
verticalBearingX: ScePvfFloat32,
|
||||||
|
verticalBearingY: ScePvfFloat32,
|
||||||
|
horizontalAdvance: ScePvfFloat32,
|
||||||
|
verticalAdvance: ScePvfFloat32,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfFGlyphMetricsInfo) == 0x28)
|
||||||
|
|
||||||
|
ScePvfFontInfo :: struct {
|
||||||
|
maxIGlyphMetrics: ScePvfIGlyphMetricsInfo,
|
||||||
|
maxFGlyphMetrics: ScePvfFGlyphMetricsInfo,
|
||||||
|
numChars: ScePvfU32,
|
||||||
|
fontStyleInfo: ScePvfFontStyleInfo,
|
||||||
|
reserved: [4]ScePvfU8,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfFontInfo) == 0x130)
|
||||||
|
|
||||||
|
ScePvfIKerningInfo :: struct {
|
||||||
|
xOffset64: ScePvfS32,
|
||||||
|
yOffset64: ScePvfS32,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfIKerningInfo) == 8)
|
||||||
|
|
||||||
|
ScePvfFKerningInfo :: struct {
|
||||||
|
xOffset: ScePvfFloat32,
|
||||||
|
yOffset: ScePvfFloat32,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfFKerningInfo) == 8)
|
||||||
|
|
||||||
|
ScePvfKerningInfo :: struct {
|
||||||
|
iKerningInfo: ScePvfIKerningInfo,
|
||||||
|
fKerningInfo: ScePvfFKerningInfo,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfKerningInfo) == 0x10)
|
||||||
|
|
||||||
|
ScePvfCacheKey :: struct {
|
||||||
|
keyValue0: c.int,
|
||||||
|
keyValue1: c.int,
|
||||||
|
keyValue2: c.float,
|
||||||
|
keyValue3: c.float,
|
||||||
|
keyValue4: c.float,
|
||||||
|
keyValue5: c.float,
|
||||||
|
keyValue6: c.float,
|
||||||
|
keyValue7: c.float,
|
||||||
|
keyValue8: c.float,
|
||||||
|
}
|
||||||
|
#assert(size_of(ScePvfCacheKey) == 0x24)
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# vitasdk-odin
|
||||||
|
|
||||||
|
[vitasdk](https://github.com/vitasdk/vita-headers) bindings for [Odin](https://orin-lang.org)
|
||||||
|
|
||||||
|
### TODO:
|
||||||
|
- [ ] Jpeg library (not sure how to bind this, might completely skip it)
|
||||||
|
- [ ] No bindings for the `psp2kern` libraries
|
||||||
|
- [ ] Clean up TODOs and make sure the types used are mostly correct
|
||||||
|
|
||||||
|
#### NOTE: The vita-headers submodule is only there to show which version the bindings currently adhere to.
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package razorcapture
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import razorcapture "system:SceRazorCapture_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceRazorGpuCapture")
|
||||||
|
foreign razorcapture {
|
||||||
|
/**
|
||||||
|
* Sets a trigger for a gpu capture in next frame from Razor debugger
|
||||||
|
*
|
||||||
|
* @param[in] filename - Filename of the file where to save capture results
|
||||||
|
*/
|
||||||
|
SetTriggerNextFrame :: proc(filename: cstring) ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables collecting of GPU captures when a gpucrash happens
|
||||||
|
*
|
||||||
|
* @param[in] filename - Filename of the file where to save capture results
|
||||||
|
*/
|
||||||
|
EnableSalvage :: proc(filename: cstring) ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package razorhud
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import razorhud "system:SceRazorHud_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceRazorGpuLive")
|
||||||
|
foreign razorhud {
|
||||||
|
/**
|
||||||
|
* Sets a metrics group to use for gpu live debugging
|
||||||
|
*
|
||||||
|
* @param[in] metrics - The metrics group to use (One of ::SceRazorGpuLiveMetricsGroup)
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
SetMetricsGroup :: proc(metrics: c.uint32_t) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the buffer in which to store gpu live debugging results for the current frame
|
||||||
|
*
|
||||||
|
* @param[in] buffer - The buffer to use
|
||||||
|
* @param[in] buf_size - The buffer size in bytes
|
||||||
|
* @param[out] results - The debugging results of the previous frame
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
SetBuffer :: proc(buffer: rawptr, buf_size: sce.Size, results: ^SceRazorGpuLiveResultInfo) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts gpu live debugging
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
Start :: proc() -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops gpu live debugging
|
||||||
|
*
|
||||||
|
* @return 0, <0 on error.
|
||||||
|
*/
|
||||||
|
Stop :: proc() -> c.int ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,132 @@
|
|||||||
|
package razorhud
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
/** Enumeration for the gpu live metrics groups */
|
||||||
|
SceRazorGpuLiveMetricsGroup :: enum c.int {
|
||||||
|
PBUFFER_USAGE,
|
||||||
|
OVERVIEW_1,
|
||||||
|
OVERVIEW_2,
|
||||||
|
OVERVIEW_3
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the gpu live results entry types */
|
||||||
|
SceRazorLiveTraceMetricEntryType :: enum c.int {
|
||||||
|
JOB,
|
||||||
|
PARAMETER_BUFFER,
|
||||||
|
FRAME
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enumeration for the gpu live results job types */
|
||||||
|
SceRazorLiveTraceMetricJobType :: enum c.int {
|
||||||
|
FIRMWARE,
|
||||||
|
VERTEX1,
|
||||||
|
FRAGMENT1,
|
||||||
|
VERTEX2,
|
||||||
|
FRAGMENT2,
|
||||||
|
VERTEX3,
|
||||||
|
FRAGMENT3,
|
||||||
|
VERTEX0,
|
||||||
|
FRAGMENT0
|
||||||
|
}
|
||||||
|
|
||||||
|
SceRazorGpuLiveResultInfo :: struct {
|
||||||
|
result_data: rawptr, //!< Pointer to the raw data results entries.
|
||||||
|
entry_count: sce.Size, //!< Number of elements stored in the results buffer
|
||||||
|
overflow_count: sce.Size, //|< Number of results elements not included in the results buffer due to buffer overflow
|
||||||
|
buffer_size: sce.Size, //!< Size of the results buffer in bytes
|
||||||
|
start_time: c.uint64_t, //!< Start time of the results collection in microseconds
|
||||||
|
end_time: c.uint64_t, //!< End time of the results collection in microseconds
|
||||||
|
metric_group: c.uint32_t, //!< Metrics group used for the results
|
||||||
|
reserved: c.int, //!< Reserved data
|
||||||
|
}
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryHeader :: struct {
|
||||||
|
entry_size: c.uint16_t, //!< Entry size in bytes
|
||||||
|
entry_type: c.uint16_t, //!< Entry type (One of ::SceRazorLiveTraceMetricEntryType)
|
||||||
|
reserved: c.int, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryHeader) == 8)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJobVertexValues1 :: struct {
|
||||||
|
usse_vertex_processing_percent: c.float, //!< USSE vertex processing percentage
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJobVertexValues1) == 4)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJobFragmentValues1 :: struct {
|
||||||
|
usse_fragment_processing_percent: c.float, //!< USSE fragment processing percentage
|
||||||
|
usse_dependent_texture_reads_percent: c.float, //!< USSE dependant texture reads requests percentage
|
||||||
|
usse_non_dependent_texture_reads_percent: c.float, //!< USSE non-dependant texture reads requests percentage
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJobFragmentValues1) == 0xC)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJobVertexValues2 :: struct {
|
||||||
|
vdm_primitives_input_num: c.uint32_t, //!< VDM input primitives number
|
||||||
|
mte_primitives_output_num: c.uint32_t, //!< MTE output primitives number
|
||||||
|
vdm_vertices_input_num: c.uint32_t, //!< VDM input vertices number
|
||||||
|
mte_vertices_output_num: c.uint32_t, //!< MTE output vertices number
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJobVertexValues2) == 0x10)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJobFragmentValues2 :: struct {
|
||||||
|
rasterized_pixels_before_hsr_num: c.uint32_t, //!< Number of rasterized pixels before Hidden Surface Removal
|
||||||
|
rasterized_output_pixels_num: c.uint32_t, //!< Number of rasterized pixels
|
||||||
|
rasterized_output_samples_num: c.uint32_t, //!< Number of rasterized samples
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJobFragmentValues2) == 0xC)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJobVertexValues3 :: struct {
|
||||||
|
tiling_accelerated_mem_writes: c.uint32_t, //!< Amount of tiling accelerated memory writes in bytes
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJobVertexValues3) == 4)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJobFragmentValues3 :: struct {
|
||||||
|
isp_parameter_fetches_mem_reads: c.uint32_t, //!< Amount of ISP parameter fetches memory reads in bytes
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJobFragmentValues3) == 4)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJobValues :: struct {
|
||||||
|
vertex_values_type1: SceRazorGpuLiveEntryJobVertexValues1, //!< Values for a job of SCE_RAZOR_LIVE_TRACE_METRIC_JOB_TYPE_VERTEX1 type
|
||||||
|
fragment_values_type1: SceRazorGpuLiveEntryJobFragmentValues1, //!< Values for a job of SCE_RAZOR_LIVE_TRACE_METRIC_JOB_TYPE_FRAGMENT1 type
|
||||||
|
vertex_values_type2: SceRazorGpuLiveEntryJobVertexValues2, //!< Values for a job of SCE_RAZOR_LIVE_TRACE_METRIC_JOB_TYPE_VERTEX2 type
|
||||||
|
fragment_values_type2: SceRazorGpuLiveEntryJobFragmentValues2, //!< Values for a job of SCE_RAZOR_LIVE_TRACE_METRIC_JOB_TYPE_FRAGMENT2 type
|
||||||
|
vertex_values_type3: SceRazorGpuLiveEntryJobVertexValues3, //!< Values for a job of SCE_RAZOR_LIVE_TRACE_METRIC_JOB_TYPE_VERTEX3 type
|
||||||
|
fragment_values_type3: SceRazorGpuLiveEntryJobFragmentValues3, //!< Values for a job of SCE_RAZOR_LIVE_TRACE_METRIC_JOB_TYPE_FRAGMENT3 type
|
||||||
|
reserved: [8]c.int, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJobValues) == 0x54)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryJob :: struct {
|
||||||
|
header: SceRazorGpuLiveEntryHeader, //!< Distinguishing header for the entry
|
||||||
|
start_time: c.uint64_t, //!< Start time of the entry in microseconds
|
||||||
|
end_time: c.uint64_t, //!< End time of the entry in microseconds
|
||||||
|
type: c.uint8_t, //!< The type of the job (One of ::SceRazorLiveTraceMetricJobType)
|
||||||
|
core: c.int8_t, //!< Core number on which the job got executed
|
||||||
|
scene_index: c.uint16_t, //!< Index of the scene in which the job got executed
|
||||||
|
frame_number: c.uint32_t, //!< Frame number in which the job got executed
|
||||||
|
job_values: SceRazorGpuLiveEntryJobValues, //!< Reported values by the job
|
||||||
|
process_id: c.uint32_t, //!< ID of the process which executed the job
|
||||||
|
unk: c.int, //!< Unknown data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryJob) == 0x80)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryParameterBuffer :: struct {
|
||||||
|
header: SceRazorGpuLiveEntryHeader, //!< Distinguishing header for the entry
|
||||||
|
peak_usage_timestamp: c.uint64_t, //!< Time of param buffer peak usage in microseconds
|
||||||
|
peak_usage_value: c.uint32_t, //!< Memory peak usage of the param buffer in bytes
|
||||||
|
partial_render: c.uint8_t, //!< Flag indicating wether a partial render occurred or not
|
||||||
|
vertex_job_paused: c.uint8_t, //!< Flag indicating wether a vertex job had been paused or not
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryParameterBuffer) == 0x18)
|
||||||
|
|
||||||
|
SceRazorGpuLiveEntryFrame :: struct {
|
||||||
|
header: SceRazorGpuLiveEntryHeader, //!< Distinguishing header for the entry
|
||||||
|
start_time: c.uint64_t, //!< Start time of the entry in microseconds
|
||||||
|
duration: c.uint32_t, //!< Duration of the frame in microseconds
|
||||||
|
frame_number: c.uint32_t, //!< Number of the frame
|
||||||
|
gpu_activity_duration_time: c.uint32_t, //!< Duration of GPU activity for the frame in microseconds
|
||||||
|
reserved: c.int, //!< Reserved data
|
||||||
|
}
|
||||||
|
#assert(size_of(SceRazorGpuLiveEntryFrame) == 0x20)
|
||||||
|
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
package registrymgr
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import registrymgr "system:SceRegistryMgr_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceRegMgr")
|
||||||
|
foreign registrymgr {
|
||||||
|
/**
|
||||||
|
* Get a key's information by category and name
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param name - Name of the key
|
||||||
|
* @param buf - Pointer to a buffer to hold the value
|
||||||
|
* @param size - The size of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetKeyBin :: proc(category: cstring, name: cstring, buf: rawptr, size: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a key's information by category and name
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param name - Name of the key
|
||||||
|
* @param buf - Pointer to a int buffer to hold the value
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetKeyInt :: proc(category: cstring, name: cstring, buf: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a key's information by category and name
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param name - Name of the key
|
||||||
|
* @param buf - Pointer to a char buffer to hold the value
|
||||||
|
* @param size - The size of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetKeyStr :: proc(category: cstring, name: cstring, buf: [^]c.char, size: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a key's information by category and name
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param name - Name of the key
|
||||||
|
* @param buf - Pointer to a buffer to hold the value
|
||||||
|
* @param size - The size of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetKeyBin :: proc(category: cstring, name: cstring, buf: rawptr, size: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a key's information by category and name
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param name - Name of the key
|
||||||
|
* @param buf - Pointer to an int buffer to hold the value
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetKeyInt :: proc(category: cstring, name: cstring, buf: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a key's information by category and name
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param name - Name of the key
|
||||||
|
* @param buf - Pointer to a char buffer to hold the value
|
||||||
|
* @param size - The size of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetKeyStr :: proc(category: cstring, name: cstring, buf: [^]c.char, size: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all keys' initial information by category (from os0:kd/registry.db0)
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param buf[out] - Pointer to a char buffer to hold the values
|
||||||
|
* @param elements_number - The number of elements of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetInitVals :: proc(category: cstring, buf: [^]c.char, elements_number: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all keys' information by category
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param buf[out] - Pointer to a char buffer to hold the values
|
||||||
|
* @param elements_number - The number of elements of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetKeys :: proc(category: cstring, buf: [^]c.char, elements_number: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set all keys' information by category
|
||||||
|
*
|
||||||
|
* @param category - The path to the directory to be opened (e.g. /CONFIG/SYSTEM)
|
||||||
|
* @param buf[out] - Pointer to a char buffer that holds the values
|
||||||
|
* @param elements_number - The number of elements of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SetKeys :: proc(category: cstring, buf: [^]c.char, elements_number: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a system param key's information by id
|
||||||
|
*
|
||||||
|
* @param id - The id of the key
|
||||||
|
* @param buf[out] - Pointer to an int to hold the value
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SystemParamGetInt :: proc(id: c.int, buf: ^c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a system param key's information by id
|
||||||
|
*
|
||||||
|
* @param id - The id of the key
|
||||||
|
* @param buf[out] - Pointer to a char buffer to hold the value
|
||||||
|
* @param size - The size of the buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
SystemParamGetStr :: proc(id: c.int, buf: [^]c.char, size: c.int) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the registry version
|
||||||
|
*
|
||||||
|
* @param id - The id of the key
|
||||||
|
* @param buf[out] - Pointer to a char buffer to hold the value
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
GetRegVersion :: proc(version: c.int, buf: [^]c.char) -> c.int ---
|
||||||
|
}
|
||||||
+301
@@ -0,0 +1,301 @@
|
|||||||
|
package rtc
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import rtc "system:SceRtc_stub"
|
||||||
|
|
||||||
|
/* Aliases */
|
||||||
|
sceRtcGetCurrentTickUtc :: sceRtcGetCurrentTick
|
||||||
|
sceRtcGetCurrentClockUtc :: proc(_p: ^sce.DateTime) -> c.int {
|
||||||
|
return sceRtcGetCurrentClock(_p,0)
|
||||||
|
}
|
||||||
|
sceRtcGetCurrentNetworkTickUtc :: sceRtcGetCurrentNetworkTick
|
||||||
|
sceRtcConvertTime_tToDateTime :: sceRtcSetTime_t
|
||||||
|
sceRtcConvertTime64_tToDateTime :: sceRtcSetTime64_t
|
||||||
|
sceRtcConvertDateTimeToTime_t :: sceRtcGetTime_t
|
||||||
|
sceRtcConvertDateTimeToTime64_t :: sceRtcGetTime64_t
|
||||||
|
sceRtcConvertDosTimeToDateTime :: sceRtcSetDosTime
|
||||||
|
sceRtcConvertDateTimeToDosTime :: sceRtcGetDosTime
|
||||||
|
sceRtcConvertWin32TimeToDateTime :: sceRtcSetWin32FileTime
|
||||||
|
sceRtcConvertDateTimeToWin32Time :: sceRtcGetWin32FileTime
|
||||||
|
sceRtcConvertTickToDateTime :: sceRtcSetTick
|
||||||
|
sceRtcConvertDateTimeToTick :: sceRtcGetTick
|
||||||
|
|
||||||
|
/* Inline SceDateTime Getters */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current year.
|
||||||
|
*
|
||||||
|
* @param[in] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return Current year.
|
||||||
|
*/
|
||||||
|
sceRtcGetYear :: #force_inline proc "c" (#by_ptr time: sce.DateTime) -> c.int {
|
||||||
|
return auto_cast time.year
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current month.
|
||||||
|
*
|
||||||
|
* @param[in] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return Current month.
|
||||||
|
*/
|
||||||
|
sceRtcGetMonth :: #force_inline proc "c" (#by_ptr time: sce.DateTime) -> c.int {
|
||||||
|
return auto_cast time.month
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current day.
|
||||||
|
*
|
||||||
|
* @param[in] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return Current day.
|
||||||
|
*/
|
||||||
|
sceRtcGetDay :: #force_inline proc "c" (#by_ptr time: sce.DateTime) -> c.int {
|
||||||
|
return auto_cast time.day
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current hour.
|
||||||
|
*
|
||||||
|
* @param[in] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return Current hour.
|
||||||
|
*/
|
||||||
|
sceRtcGetHour :: #force_inline proc "c" (#by_ptr time: sce.DateTime) -> c.int {
|
||||||
|
return auto_cast time.hour
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current minute.
|
||||||
|
*
|
||||||
|
* @param[in] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return Current minute.
|
||||||
|
*/
|
||||||
|
sceRtcGetMinute :: #force_inline proc "c" (#by_ptr time: sce.DateTime) -> c.int {
|
||||||
|
return auto_cast time.minute
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current second.
|
||||||
|
*
|
||||||
|
* @param[in] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return Current second.
|
||||||
|
*/
|
||||||
|
sceRtcGetSecond :: #force_inline proc "c" (#by_ptr time: sce.DateTime) -> c.int {
|
||||||
|
return auto_cast time.second
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current microsecond.
|
||||||
|
*
|
||||||
|
* @param[in] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return Current microsecond.
|
||||||
|
*/
|
||||||
|
sceRtcGetMicrosecond :: #force_inline proc "c" (#by_ptr time: sce.DateTime) -> c.int {
|
||||||
|
return cast(c.int)time.microsecond
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inline SceDateTime Setters */
|
||||||
|
|
||||||
|
sceRtcSetYear :: #force_inline proc "c" (time: ^sce.DateTime, year: c.int) -> c.uint {
|
||||||
|
if (year<1 || year>9999) {
|
||||||
|
return auto_cast sce.RtcErrorCode.INVALID_YEAR
|
||||||
|
}
|
||||||
|
time.year = cast(c.ushort)year
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
sceRtcSetMonth :: #force_inline proc "c" (time: ^sce.DateTime, month: c.int) -> c.uint {
|
||||||
|
if (month<1 || month>12) {
|
||||||
|
return auto_cast sce.RtcErrorCode.INVALID_MONTH
|
||||||
|
}
|
||||||
|
time.month = cast(c.ushort)month
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
sceRtcSetDay :: #force_inline proc "c" (time: ^sce.DateTime, day: c.int) -> c.uint {
|
||||||
|
if (day<1 || day>31) {
|
||||||
|
return auto_cast sce.RtcErrorCode.INVALID_DAY
|
||||||
|
}
|
||||||
|
time.day = cast(c.ushort)day
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
sceRtcSetHour :: #force_inline proc "c" (time: ^sce.DateTime, hour: c.int) -> c.uint {
|
||||||
|
if (hour<0 || hour>23) {
|
||||||
|
return auto_cast sce.RtcErrorCode.INVALID_HOUR
|
||||||
|
}
|
||||||
|
time.hour = cast(c.ushort)hour
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
sceRtcSetMinute :: #force_inline proc "c" (time: ^sce.DateTime, minute: c.int) -> c.uint {
|
||||||
|
if (minute<0 || minute>59) {
|
||||||
|
return auto_cast sce.RtcErrorCode.INVALID_MINUTE
|
||||||
|
}
|
||||||
|
time.minute = cast(c.ushort)minute
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
sceRtcSetSecond :: #force_inline proc "c" (time: ^sce.DateTime, second: c.int) -> c.uint {
|
||||||
|
if (second<0 || second>59) {
|
||||||
|
return auto_cast sce.RtcErrorCode.INVALID_SECOND
|
||||||
|
}
|
||||||
|
time.second = cast(c.ushort)second
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
sceRtcSetMicrosecond :: #force_inline proc "c" (time: ^sce.DateTime, microsecond: c.int) -> c.uint {
|
||||||
|
if (microsecond<0 || microsecond>999999) {
|
||||||
|
return auto_cast sce.RtcErrorCode.INVALID_MICROSECOND
|
||||||
|
}
|
||||||
|
time.microsecond = cast(c.uint)microsecond
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
foreign rtc {
|
||||||
|
sceRtcGetTickResolution :: proc() -> c.uint ---
|
||||||
|
|
||||||
|
sceRtcGetCurrentTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current real time clock time.
|
||||||
|
*
|
||||||
|
* @param[out] time - see ::SceDateTime.
|
||||||
|
* @param[in] time_zone - The time zone the return value will be.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceRtcGetCurrentClock :: proc(time: ^sce.DateTime, time_zone: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current real time clock time with system time zone.
|
||||||
|
*
|
||||||
|
* @param[out] time - see ::SceDateTime.
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
sceRtcGetCurrentClockLocalTime :: proc(time: sce.DateTime) -> c.int ---
|
||||||
|
|
||||||
|
sceRtcGetCurrentNetworkTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcConvertUtcToLocalTime :: proc(#by_ptr utc: sce.RtcTick, local_time: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcConvertLocalTimeToUtc :: proc(#by_ptr local_time: sce.RtcTick, utc: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcIsLeapYear :: proc(year: c.int) -> c.int ---
|
||||||
|
sceRtcCheckValid :: proc(#by_ptr time: sce.DateTime) -> c.int ---
|
||||||
|
sceRtcGetDaysInMonth :: proc(year: c.int, month: c.int) -> c.int ---
|
||||||
|
sceRtcGetDayOfWeek :: proc(year: c.int, month: c.int, day: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/* Win/POSIX compliant function */
|
||||||
|
sceRtcSetTime_t :: proc(time: ^sce.DateTime, iTime: c.long) -> c.int ---
|
||||||
|
sceRtcSetTime64_t :: proc(time: ^sce.DateTime, ullTime: sce.UInt64) -> c.int ---
|
||||||
|
sceRtcGetTime_t :: proc(#by_ptr time: sce.DateTime, piTime: ^c.long) -> c.int ---
|
||||||
|
sceRtcGetTime64_t :: proc(#by_ptr time: sce.DateTime, pullTime: ^sce.UInt64) -> c.int ---
|
||||||
|
sceRtcSetDosTime :: proc(time: ^sce.DateTime, uiDosTime: c.uint) -> c.int ---
|
||||||
|
sceRtcGetDosTime :: proc(#by_ptr time: sce.DateTime, puiDosTime: ^c.uint) -> c.int ---
|
||||||
|
sceRtcSetWin32FileTime :: proc(time: ^sce.DateTime, ulWin32Time: sce.UInt64) -> c.int ---
|
||||||
|
sceRtcGetWin32FileTime :: proc(#by_ptr time: sce.DateTime, ulWin32Time: ^sce.UInt64) -> c.int ---
|
||||||
|
sceRtcSetTick :: proc(time: ^sce.DateTime, #by_ptr tick: sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcGetTick :: proc(#by_ptr time: sce.DateTime, tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
|
||||||
|
/* Arithmetic function */
|
||||||
|
sceRtcCompareTick :: proc(#by_ptr pTick1: sce.RtcTick, #by_ptr pTick2: sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcTickAddTicks :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: sce.Long64) -> c.int ---
|
||||||
|
sceRtcTickAddMicroseconds :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: sce.Long64) -> c.int ---
|
||||||
|
sceRtcTickAddSeconds :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: sce.Long64) -> c.int ---
|
||||||
|
sceRtcTickAddMinutes :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: sce.Long64) -> c.int ---
|
||||||
|
sceRtcTickAddHours :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: c.int) -> c.int ---
|
||||||
|
sceRtcTickAddDays :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: c.int) -> c.int ---
|
||||||
|
sceRtcTickAddWeeks :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: c.int) -> c.int ---
|
||||||
|
sceRtcTickAddMonths :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: c.int) -> c.int ---
|
||||||
|
sceRtcTickAddYears :: proc(pTick0: ^sce.RtcTick, #by_ptr pTick1: sce.RtcTick, lAdd: c.int) -> c.int ---
|
||||||
|
|
||||||
|
/* Formating function */
|
||||||
|
sceRtcFormatRFC2822 :: proc(pszDateTime: [^]c.char, #by_ptr utc: sce.RtcTick, iTimeZoneMinutes: c.int) -> c.int ---
|
||||||
|
sceRtcFormatRFC2822LocalTime :: proc(pszDateTime: [^]c.char, #by_ptr utc: sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcFormatRFC3339 :: proc(pszDateTime: [^]c.char, #by_ptr utc: sce.RtcTick, iTimeZoneMinutes: c.int) -> c.int ---
|
||||||
|
sceRtcFormatRFC3339LocalTime :: proc(pszDateTime: [^]c.char, #by_ptr utc: sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcParseDateTime :: proc(utc: ^sce.RtcTick, pszDateTime: cstring) -> c.int ---
|
||||||
|
sceRtcParseRFC3339 :: proc(utc: ^sce.RtcTick, pszDateTime: cstring) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert localtime to UTC
|
||||||
|
*
|
||||||
|
* @param[in] localtime - The localtime buffer pointer
|
||||||
|
* @param[out] utc - The UTC buffer pointer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceRtcConvertLocalTimeToUtc :: proc(#by_ptr localtime: sce.RtcTick, utc: ^sce.RtcTick) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert UTC to localtime
|
||||||
|
*
|
||||||
|
* @param[in] utc - The UTC buffer pointer
|
||||||
|
* @param[out] localtime - The localtime buffer pointer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceRtcConvertUtcToLocalTime :: proc(#by_ptr utc: sce.RtcTick, localtime: ^sce.RtcTick) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert RFC2822 time string from UTC
|
||||||
|
*
|
||||||
|
* @param[out] datetime - The datetime string buffer
|
||||||
|
* @param[in] utc - The UTC time tick pointer
|
||||||
|
* @param[in] offset - A timezone offset. this value have to minute value
|
||||||
|
* @param[in] a4 - The Syscall validity buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceRtcFormatRFC2822 :: proc(datetime: [^]c.char, #by_ptr utc: sce.RtcTick, offset: c.int, a4: ^sce.UInt64) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert RFC2822 time string from UTC with localtime
|
||||||
|
*
|
||||||
|
* @param[out] datetime - The datetime string buffer
|
||||||
|
* @param[in] utc - The UTC time tick pointer
|
||||||
|
* @param[in] a3 - The Syscall validity buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceRtcFormatRFC2822LocalTime :: proc(datetime: [^]c.char, #by_ptr utc: sce.RtcTick, a3: ^sce.UInt64) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert RFC3339 time string from UTC
|
||||||
|
*
|
||||||
|
* @param[out] datetime - The datetime string buffer
|
||||||
|
* @param[in] utc - The UTC time tick pointer
|
||||||
|
* @param[in] offset - A timezone offset. this value have to minute value
|
||||||
|
* @param[in] a4 - The Syscall validity buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceRtcFormatRFC3339 :: proc(datetime: [^]c.char, #by_ptr utc: sce.RtcTick, offset: c.int, a4: ^sce.UInt64) -> c.int ---
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert RFC3339 time string from UTC with localtime
|
||||||
|
*
|
||||||
|
* @param[out] datetime - The datetime string buffer
|
||||||
|
* @param[in] utc - The UTC time tick pointer
|
||||||
|
* @param[in] a3 - The Syscall validity buffer
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
_sceRtcFormatRFC3339LocalTime :: proc(datetime: [^]c.char, #by_ptr utc: sce.RtcTick, a3: ^sce.UInt64) -> c.int ---
|
||||||
|
|
||||||
|
sceRtcGetCurrentAdNetworkTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcGetCurrentDebugNetworkTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcGetCurrentGpsTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcGetCurrentRetainedNetworkTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcGetLastAdjustedTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcGetLastReincarnatedTick :: proc(tick: ^sce.RtcTick) -> c.int ---
|
||||||
|
sceRtcGetAccumulativeTime :: proc() -> sce.ULong64 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package sblacmgr
|
||||||
|
|
||||||
|
import sce "../common"
|
||||||
|
|
||||||
|
foreign import sblacmgr "system:SceSblACMgr_stub"
|
||||||
|
|
||||||
|
@(link_prefix = "sceSblACMgr")
|
||||||
|
foreign sblacmgr {
|
||||||
|
IsGameProgram :: proc(result: ^sce.Bool) -> sce.Int32 ---
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package sblupdatemgr
|
||||||
|
|
||||||
|
import "core:c"
|
||||||
|
|
||||||
|
foreign import sblupdatemgr "system:SceSblUpdateMgr_stub"
|
||||||
|
|
||||||
|
SCE_UPDATE_MODE_SWU_GUI :: 0x10
|
||||||
|
SCE_UPDATE_MODE_SWU_CUI :: 0x30
|
||||||
|
|
||||||
|
SceUpdateMode :: c.char
|
||||||
|
|
||||||
|
GetBootMode :: GetUpdateMode
|
||||||
|
SetBootMode :: SetUpdateMode
|
||||||
|
|
||||||
|
@(link_prefix = "sceSblUs")
|
||||||
|
foreign sblupdatemgr {
|
||||||
|
/**
|
||||||
|
* Getting system update mode on boot
|
||||||
|
*
|
||||||
|
* @param[out] mode - The pointer of SceUpdateMode variable
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
GetUpdateMode :: proc(mode: ^SceUpdateMode) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setting system update mode on boot
|
||||||
|
*
|
||||||
|
* @param[in] mode - The update mode
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*/
|
||||||
|
SetUpdateMode :: proc(mode: SceUpdateMode) -> c.int ---
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify PUP
|
||||||
|
*
|
||||||
|
* @param[in] path - The PUP path
|
||||||
|
*
|
||||||
|
* @return 0 on success, < 0 on error.
|
||||||
|
*
|
||||||
|
* note - If verify CEX PUP on Devkit system, got error.
|
||||||
|
*/
|
||||||
|
VerifyPup :: proc(path: cstring) -> c.int ---
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user