added kernel libraries bindings and cleaned up todos

This commit is contained in:
2024-05-12 16:16:15 +02:00
parent e9824cbd95
commit 8a5e2870f6
68 changed files with 3278 additions and 92 deletions
+206
View File
@@ -4,6 +4,7 @@ import "core:c"
import sce "../common"
foreign import ctrl "system:SceCtrl_stub"
foreign import ctrlkern "system:SceCtrlForDriver_stub"
@(link_prefix = "sceCtrl")
foreign ctrl {
@@ -273,3 +274,208 @@ foreign ctrl {
*/
sceCtrlIsMultiControllerSupported :: proc() -> c.int ---
}
@(link_prefix = "ksceCtrl")
foreign ctrlkern {
/**
* Set the controller mode.
*
* @param[in] mode - One of ::SceCtrlPadInputMode.
*
* @return The previous mode, <0 on error.
*/
SetSamplingMode :: proc(mode: c.int) -> c.int ---
/**
* Get the current controller mode.
*
* @param[out] pMode - Return value, see ::SceCtrlPadInputMode.
*
* @return The current mode, <0 on error.
*/
GetSamplingMode :: proc(pMode: ^c.int) -> 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.
*
* @return Buffers count, between 1 and 'count'. <0 on error.
*/
PeekBufferPositive :: 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.
*
* @return Buffers count, between 1 and 'count'. <0 on error.
*/
PeekBufferNegative :: 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.
*
* @return Buffers count, between 1 and 'count'. <0 on error.
*/
ReadBufferPositive :: 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.
*
* @return Buffers count, between 1 and 'count'. <0 on error.
*/
ReadBufferNegative :: 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.
*/
SetRapidFire :: proc(port: c.int, idx: c.int, #by_ptr 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.
*/
ClearRapidFire :: proc(port: c.int, idx: c.int) -> c.int ---
/**
* Get controller port information.
*
* @param[out] info - see ::SceCtrlPortInfo
* @return 0, <0 on error
*/
GetControllerPortInfo :: proc(info: ^SceCtrlPortInfo) -> 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
*/
SetButtonIntercept :: proc(intercept: c.int) -> c.int ---
/**
* Gets intercept
*
* @param[out] intercept Boolean value
*
* @return 0, < 0 on error
*/
GetButtonIntercept :: proc(intercept: ^c.int) -> c.int ---
/**
* Emulate buttons for the digital pad.
* @param port Use 0
* @param slot The slot used to set the custom values. Between 0 - 3. If multiple slots are used,
* their settings are combined.
* @param userButtons Emulated user buttons of ::SceCtrlButtons. You cannot emulate kernel
* buttons and the emulated buttons will only be applied for applications
* running in user mode.
* @param kernelButtons Emulated buttons of ::SceCtrlButtons (you can emulate both user and
* kernel buttons). The emulated buttons will only be applied for applications
* running in kernel mode.
* @param uiMake Specifies the duration of the emulation. Measured in sampling counts.
*
* @return 0 on success.
*/
SetButtonEmulation :: proc(port: c.uint, slot: c.uchar, userButtons: c.uint, kernelButtons: c.uint, uiMake: c.uint) -> c.int ---
/**
* Emulate values for the analog pad's X- and Y-axis.
*
* @param port Use 0
* @param slot The slot used to set the custom values. Between 0 - 3. If multiple slots are used,
* their settings are combined.
* @param user_lX New emulated value for the left joystick's X-axis (userspace). Between 0 - 0xFF.
* @param user_lY New emulate value for the left joystick's Y-axis (userspace). Between 0 - 0xFF.
* @param user_rX New emulated value for the right joystick's X-axis (userspace). Between 0 - 0xFF.
* @param user_rY New emulate value for the right joystick's Y-axis (userspace). Between 0 - 0xFF.
* @param kernel_lX New emulated value for the left joystick's X-axis (kernelspace). Between 0 - 0xFF.
* @param kernel_lY New emulate value for the left joystick's Y-axis (kernelspace). Between 0 - 0xFF.
* @param kernel_rX New emulated value for the right joystick's X-axis (kernelspace). Between 0 - 0xFF.
* @param kernel_rY New emulate value for the right joystick's Y-axis (kernelspace). Between 0 - 0xFF.
* @param uiMake Specifies the duration of the emulation. Measured in sampling counts.
*
* @return 0 on success.
*/
SetAnalogEmulation :: proc(port: c.uint, slot: c.uchar, user_lX: c.uchar, user_lY: c.uchar, user_rX: c.uchar, user_rY: c.uchar, kernel_lX: c.uchar, kernel_lY: c.uchar, kernel_rX: c.uchar, kernel_rY: c.uchar, uiMake: c.uint) -> c.int ---
/**
* Register virtual controller driver.
*
* This function always overwrites global settings and not exist unregister method.
*
* @param[in] driver - See ::SceCtrlVirtualControllerDriver
*
* @return 0 on success. <0 on error
*/
RegisterVirtualControllerDriver :: proc(driver: ^SceCtrlVirtualControllerDriver) -> c.int ---
/**
* Update ctrl mask for non shell process
*
* @param[in] clear_mask - The SceCtrlButtons type value
* @param[in] set_mask - The SceCtrlButtons type value
*
* @return always 0.
*
* note - Some values cannot be clear/set.
*/
UpdateMaskForNonShell :: proc(clear_mask: c.int, set_mask: c.int) -> c.int ---
/**
* Update ctrl mask for all process
*
* @param[in] clear_mask - The SceCtrlButtons type value
* @param[in] set_mask - The SceCtrlButtons type value
*
* @return always 0.
*
* note - Some values cannot be clear/set.
*/
UpdateMaskForAll :: proc(clear_mask: c.int, set_mask: c.int) -> c.int ---
/**
* Get ctrl mask for non shell process
*
* @param[out] mask - The pointer of SceCtrlButtons type value output
*
* @return 0 on success. < 0 on error.
*/
GetMaskForNonShell :: proc(mask: ^c.uint32_t) -> c.int ---
/**
* Get ctrl mask for all process
*
* @param[out] mask - The pointer of SceCtrlButtons type value output
*
* @return 0 on success. < 0 on error.
*/
GetMaskForAll :: proc(mask: ^c.uint32_t) -> c.int ---
}