mirror of
https://github.com/IllusionMan1212/vitasdk-odin.git
synced 2026-10-24 02:12:38 +00:00
added kernel libraries bindings and cleaned up todos
This commit is contained in:
+206
@@ -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 ---
|
||||
}
|
||||
|
||||
+19
-2
@@ -1,9 +1,9 @@
|
||||
package ctrl
|
||||
|
||||
import "core:c"
|
||||
import sce "../common"
|
||||
|
||||
// TODO: this should be a c.int
|
||||
SceCtrlErrorCode :: enum i64 {
|
||||
SceCtrlErrorCode :: enum c.uint {
|
||||
INVALID_ARG = 0x80340001,
|
||||
PRIV_REQUIRED = 0x80340002,
|
||||
NO_DEVICE = 0x80340020,
|
||||
@@ -132,3 +132,20 @@ SceCtrlPortInfo :: struct {
|
||||
}
|
||||
#assert(size_of(SceCtrlPortInfo) == 0x10)
|
||||
|
||||
/** Structure to pass as argument to ::ksceCtrlRegisterVirtualControllerDriver */
|
||||
SceCtrlVirtualControllerDriver :: struct {
|
||||
readButtons: #type ^proc "c" (port: c.int, pad_data: ^SceCtrlData, count: c.int) -> c.int,
|
||||
setActuator: #type ^proc "c" (port: c.int, #by_ptr pState: SceCtrlActuator) -> c.int,
|
||||
getBatteryInfo: #type ^proc "c" (port: c.int, batt: ^sce.UInt8) -> c.int,
|
||||
disconnect: #type ^proc "c" (port: c.int) -> c.int,
|
||||
setTurnOffInterval: #type ^proc "c" (port: c.int) -> c.int,
|
||||
getActiveControllerPort: #type ^proc "c" () -> c.int,
|
||||
changePortAssign: #type ^proc "c" (port1: c.int, port2: c.int) -> c.int,
|
||||
unk0: #type ^proc "c" () -> c.int,
|
||||
getControllerPortInfo: #type ^proc "c" (info: ^SceCtrlPortInfo) -> c.int,
|
||||
setLightBar: #type ^proc "c" (port: c.int, r: sce.UInt8, g: sce.UInt8, b: sce.UInt8) -> c.int,
|
||||
resetLightBar: #type ^proc "c" (port: c.int) -> c.int,
|
||||
unk1: #type ^proc "c" (port: c.int) -> c.int,
|
||||
singleControllerMode: #type ^proc "c" (port: c.int) -> c.int,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user