Files
odin-sdl3-static-linking/sdl3/sdl3_gamepad.odin
2025-12-15 12:37:50 -05:00

193 lines
9.1 KiB
Odin

package sdl3
import "core:c"
Gamepad :: struct {}
GamepadType :: enum c.int {
UNKNOWN = 0,
STANDARD,
XBOX360,
XBOXONE,
PS3,
PS4,
PS5,
NINTENDO_SWITCH_PRO,
NINTENDO_SWITCH_JOYCON_LEFT,
NINTENDO_SWITCH_JOYCON_RIGHT,
NINTENDO_SWITCH_JOYCON_PAIR,
}
GamepadButton :: enum c.int {
INVALID = -1,
SOUTH, /**< Bottom face button (e.g. Xbox A button) */
EAST, /**< Right face button (e.g. Xbox B button) */
WEST, /**< Left face button (e.g. Xbox X button) */
NORTH, /**< Top face button (e.g. Xbox Y button) */
BACK,
GUIDE,
START,
LEFT_STICK,
RIGHT_STICK,
LEFT_SHOULDER,
RIGHT_SHOULDER,
DPAD_UP,
DPAD_DOWN,
DPAD_LEFT,
DPAD_RIGHT,
MISC1, /**< Additional button (e.g. Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button, Google Stadia capture button) */
RIGHT_PADDLE1, /**< Upper or primary paddle, under your right hand (e.g. Xbox Elite paddle P1) */
LEFT_PADDLE1, /**< Upper or primary paddle, under your left hand (e.g. Xbox Elite paddle P3) */
RIGHT_PADDLE2, /**< Lower or secondary paddle, under your right hand (e.g. Xbox Elite paddle P2) */
LEFT_PADDLE2, /**< Lower or secondary paddle, under your left hand (e.g. Xbox Elite paddle P4) */
TOUCHPAD, /**< PS4/PS5 touchpad button */
MISC2, /**< Additional button */
MISC3, /**< Additional button */
MISC4, /**< Additional button */
MISC5, /**< Additional button */
MISC6, /**< Additional button */
}
GamepadButtonLabel :: enum c.int {
UNKNOWN,
A,
B,
X,
Y,
CROSS,
CIRCLE,
SQUARE,
TRIANGLE,
}
GamepadAxis :: enum c.int {
INVALID = -1,
LEFTX,
LEFTY,
RIGHTX,
RIGHTY,
LEFT_TRIGGER,
RIGHT_TRIGGER,
}
GamepadBindingType :: enum c.int {
NONE = 0,
BUTTON,
AXIS,
HAT,
}
GamepadBinding :: struct {
input_type: GamepadBindingType,
input: struct #raw_union {
button: c.int,
axis: struct {
axis: c.int,
axis_min: c.int,
axis_max: c.int,
},
hat: struct {
hat: c.int,
hat_mask: c.int,
},
},
output_type: GamepadBindingType,
output: struct #raw_union {
button: GamepadButton,
axis: struct {
axis: GamepadAxis,
axis_min: c.int,
axis_max: c.int,
},
},
}
PROP_GAMEPAD_CAP_MONO_LED_BOOLEAN :: PROP_JOYSTICK_CAP_MONO_LED_BOOLEAN
PROP_GAMEPAD_CAP_RGB_LED_BOOLEAN :: PROP_JOYSTICK_CAP_RGB_LED_BOOLEAN
PROP_GAMEPAD_CAP_PLAYER_LED_BOOLEAN :: PROP_JOYSTICK_CAP_PLAYER_LED_BOOLEAN
PROP_GAMEPAD_CAP_RUMBLE_BOOLEAN :: PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN
PROP_GAMEPAD_CAP_TRIGGER_RUMBLE_BOOLEAN :: PROP_JOYSTICK_CAP_TRIGGER_RUMBLE_BOOLEAN
@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {
AddGamepadMapping :: proc(mapping: cstring) -> c.int ---
AddGamepadMappingsFromIO :: proc(src: ^IOStream, closeio: bool) -> c.int ---
AddGamepadMappingsFromFile :: proc(file: cstring) -> c.int ---
ReloadGamepadMappings :: proc() -> bool ---
GetGamepadMappings :: proc(count: ^c.int) -> [^][^]byte ---
GetGamepadMappingForGUID :: proc(guid: GUID) -> [^]byte---
GetGamepadMapping :: proc(gamepad: ^Gamepad) -> [^]byte ---
SetGamepadMapping :: proc(instance_id: JoystickID, mapping: cstring) -> bool ---
HasGamepad :: proc() -> bool ---
GetGamepads :: proc(count: ^c.int) -> [^]JoystickID ---
IsGamepad :: proc(instance_id: JoystickID) -> bool ---
GetGamepadNameForID :: proc(instance_id: JoystickID) -> cstring ---
GetGamepadPathForID :: proc(instance_id: JoystickID) -> cstring ---
GetGamepadPlayerIndexForID :: proc(instance_id: JoystickID) -> c.int ---
GetGamepadGUIDForID :: proc(instance_id: JoystickID) -> GUID ---
GetGamepadVendorForID :: proc(instance_id: JoystickID) -> Uint16 ---
GetGamepadProductForID :: proc(instance_id: JoystickID) -> Uint16 ---
GetGamepadProductVersionForID :: proc(instance_id: JoystickID) -> Uint16 ---
GetGamepadTypeForID :: proc(instance_id: JoystickID) -> GamepadType ---
GetRealGamepadTypeForID :: proc(instance_id: JoystickID) -> GamepadType ---
GetGamepadMappingForID :: proc(instance_id: JoystickID) -> [^]byte ---
OpenGamepad :: proc(instance_id: JoystickID) -> ^Gamepad ---
GetGamepadFromID :: proc(instance_id: JoystickID) -> ^Gamepad ---
GetGamepadFromPlayerIndex :: proc(player_index: c.int) -> ^Gamepad ---
GetGamepadProperties :: proc(gamepad: ^Gamepad) -> PropertiesID ---
GetGamepadID :: proc(gamepad: ^Gamepad) -> JoystickID ---
GetGamepadName :: proc(gamepad: ^Gamepad) -> cstring ---
GetGamepadPath :: proc(gamepad: ^Gamepad) -> cstring ---
GetGamepadType :: proc(gamepad: ^Gamepad) -> GamepadType ---
GetRealGamepadType :: proc(gamepad: ^Gamepad) -> GamepadType ---
GetGamepadPlayerIndex :: proc(gamepad: ^Gamepad) -> c.int ---
SetGamepadPlayerIndex :: proc(gamepad: ^Gamepad, player_index: c.int) -> bool ---
GetGamepadVendor :: proc(gamepad: ^Gamepad) -> Uint16 ---
GetGamepadProduct :: proc(gamepad: ^Gamepad) -> Uint16 ---
GetGamepadProductVersion :: proc(gamepad: ^Gamepad) -> Uint16 ---
GetGamepadFirmwareVersion :: proc(gamepad: ^Gamepad) -> Uint16 ---
GetGamepadSerial :: proc(gamepad: ^Gamepad) -> cstring ---
GetGamepadSteamHandle :: proc(gamepad: ^Gamepad) -> Uint64 ---
GetGamepadConnectionState :: proc(gamepad: ^Gamepad) -> JoystickConnectionState ---
GetGamepadPowerInfo :: proc(gamepad: ^Gamepad, percent: ^c.int) -> PowerState ---
GamepadConnected :: proc(gamepad: ^Gamepad) -> bool ---
GetGamepadJoystick :: proc(gamepad: ^Gamepad) -> ^Joystick ---
SetGamepadEventsEnabled :: proc(enabled: bool) ---
GamepadEventsEnabled :: proc() -> bool ---
GetGamepadBindings :: proc(gamepad: ^Gamepad, count: ^c.int) -> [^]^GamepadBinding ---
UpdateGamepads :: proc() ---
GetGamepadTypeFromString :: proc(str: cstring) -> GamepadType ---
GetGamepadStringForType :: proc(type: GamepadType) -> cstring ---
GetGamepadAxisFromString :: proc(str: cstring) -> GamepadAxis ---
GetGamepadStringForAxis :: proc(axis: GamepadAxis) -> cstring ---
GamepadHasAxis :: proc(gamepad: ^Gamepad, axis: GamepadAxis) -> bool ---
GetGamepadAxis :: proc(gamepad: ^Gamepad, axis: GamepadAxis) -> Sint16 ---
GetGamepadButtonFromString :: proc(str: cstring) -> GamepadButton ---
GetGamepadStringForButton :: proc(button: GamepadButton) -> cstring ---
GamepadHasButton :: proc(gamepad: ^Gamepad, button: GamepadButton) -> bool ---
GetGamepadButton :: proc(gamepad: ^Gamepad, button: GamepadButton) -> bool ---
GetGamepadButtonLabelForType :: proc(type: GamepadType, button: GamepadButton) -> GamepadButtonLabel ---
GetGamepadButtonLabel :: proc(gamepad: ^Gamepad, button: GamepadButton) -> GamepadButtonLabel ---
GetNumGamepadTouchpads :: proc(gamepad: ^Gamepad) -> c.int ---
GetNumGamepadTouchpadFingers :: proc(gamepad: ^Gamepad, touchpad: c.int) -> c.int ---
GetGamepadTouchpadFinger :: proc(gamepad: ^Gamepad, touchpad: c.int, finger: c.int, down: ^bool, x, y: ^f32, pressure: ^f32) -> bool ---
GamepadHasSensor :: proc(gamepad: ^Gamepad, type: SensorType) -> bool ---
SetGamepadSensorEnabled :: proc(gamepad: ^Gamepad, type: SensorType, enabled: bool) -> bool ---
GamepadSensorEnabled :: proc(gamepad: ^Gamepad, type: SensorType) -> bool ---
GetGamepadSensorDataRate :: proc(gamepad: ^Gamepad, type: SensorType) -> f32 ---
GetGamepadSensorData :: proc(gamepad: ^Gamepad, type: SensorType, data: [^]f32, num_values: c.int) -> bool ---
RumbleGamepad :: proc(gamepad: ^Gamepad, low_frequency_rumble, high_frequency_rumble: Uint16, duration_ms: Uint32) -> bool ---
RumbleGamepadTriggers :: proc(gamepad: ^Gamepad, left_rumble, right_rumble: Uint16, duration_ms: Uint32) -> bool ---
SetGamepadLED :: proc(gamepad: ^Gamepad, red, green, blue: Uint8) -> bool ---
SendGamepadEffect :: proc(gamepad: ^Gamepad, data: rawptr, size: c.int) -> bool ---
CloseGamepad :: proc(gamepad: ^Gamepad) ---
GetGamepadAppleSFSymbolsNameForButton :: proc(gamepad: ^Gamepad, button: GamepadButton) -> cstring ---
GetGamepadAppleSFSymbolsNameForAxis :: proc(gamepad: ^Gamepad, axis: GamepadAxis) -> cstring ---
}