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