2
0

sdl_gamecontroller.odin 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package sdl2
  2. import "core:c"
  3. when ODIN_OS == .Windows {
  4. @(ignore_duplicates)
  5. foreign import lib "SDL2.lib"
  6. } else {
  7. @(ignore_duplicates)
  8. foreign import lib "system:SDL2"
  9. }
  10. GameController :: struct {}
  11. GameControllerType :: enum c.int {
  12. UNKNOWN = 0,
  13. XBOX360,
  14. XBOXONE,
  15. PS3,
  16. PS4,
  17. NINTENDO_SWITCH_PRO,
  18. VIRTUAL,
  19. PS5,
  20. AMAZON_LUNA,
  21. GOOGLE_STADIA,
  22. }
  23. GameControllerBindType :: enum c.int {
  24. NONE = 0,
  25. BUTTON,
  26. AXIS,
  27. HAT,
  28. }
  29. GameControllerButtonBind :: struct {
  30. bindType: GameControllerBindType,
  31. value: struct #raw_union {
  32. button: c.int,
  33. axis: c.int,
  34. hat: struct {
  35. hat: c.int,
  36. hat_mask: c.int,
  37. },
  38. },
  39. }
  40. GameControllerAxis :: enum c.int {
  41. INVALID = -1,
  42. LEFTX,
  43. LEFTY,
  44. RIGHTX,
  45. RIGHTY,
  46. TRIGGERLEFT,
  47. TRIGGERRIGHT,
  48. MAX,
  49. }
  50. GameControllerButton :: enum c.int {
  51. INVALID = -1,
  52. A,
  53. B,
  54. X,
  55. Y,
  56. BACK,
  57. GUIDE,
  58. START,
  59. LEFTSTICK,
  60. RIGHTSTICK,
  61. LEFTSHOULDER,
  62. RIGHTSHOULDER,
  63. DPAD_UP,
  64. DPAD_DOWN,
  65. DPAD_LEFT,
  66. DPAD_RIGHT,
  67. MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */
  68. PADDLE1, /* Xbox Elite paddle P1 */
  69. PADDLE2, /* Xbox Elite paddle P3 */
  70. PADDLE3, /* Xbox Elite paddle P2 */
  71. PADDLE4, /* Xbox Elite paddle P4 */
  72. TOUCHPAD, /* PS4/PS5 touchpad button */
  73. MAX,
  74. }
  75. GameControllerAddMappingsFromFile :: #force_inline proc "c" (file: cstring) -> c.int {
  76. return GameControllerAddMappingsFromRW(RWFromFile(file, "rb"), true)
  77. }
  78. @(default_calling_convention="c", link_prefix="SDL_")
  79. foreign lib {
  80. GameControllerAddMappingsFromRW :: proc(rw: ^RWops, freerw: bool) -> c.int ---
  81. GameControllerAddMapping :: proc(mappingString: cstring) -> c.int ---
  82. GameControllerNumMappings :: proc() -> c.int ---
  83. GameControllerMappingForIndex :: proc(mapping_index: c.int) -> cstring ---
  84. GameControllerMappingForGUID :: proc(guid: JoystickGUID) -> cstring ---
  85. GameControllerMapping :: proc(gamecontroller: ^GameController) -> cstring ---
  86. IsGameController :: proc(joystick_index: c.int) -> bool ---
  87. GameControllerNameForIndex :: proc(joystick_index: c.int) -> cstring ---
  88. GameControllerTypeForIndex :: proc(joystick_index: c.int) -> GameControllerType ---
  89. GameControllerMappingForDeviceIndex :: proc(joystick_index: c.int) -> cstring ---
  90. GameControllerOpen :: proc(joystick_index: c.int) -> ^GameController ---
  91. GameControllerFromInstanceID :: proc(joyid: JoystickID) -> ^GameController ---
  92. GameControllerFromPlayerIndex :: proc(player_index: c.int) -> ^GameController ---
  93. GameControllerName :: proc(gamecontroller: ^GameController) -> cstring ---
  94. GameControllerGetType :: proc(gamecontroller: ^GameController) -> GameControllerType ---
  95. GameControllerGetPlayerIndex :: proc(gamecontroller: ^GameController) -> c.int ---
  96. GameControllerSetPlayerIndex :: proc(gamecontroller: ^GameController, player_index: c.int) ---
  97. GameControllerGetVendor :: proc(gamecontroller: ^GameController) -> u16 ---
  98. GameControllerGetProduct :: proc(gamecontroller: ^GameController) -> u16 ---
  99. GameControllerGetProductVersion :: proc(gamecontroller: ^GameController) -> u16 ---
  100. GameControllerGetSerial :: proc(gamecontroller: ^GameController) -> cstring ---
  101. GameControllerGetAttached :: proc(gamecontroller: ^GameController) -> bool ---
  102. GameControllerGetJoystick :: proc(gamecontroller: ^GameController) -> ^Joystick ---
  103. GameControllerEventState :: proc(state: c.int) -> c.int ---
  104. GameControllerUpdate :: proc() ---
  105. GameControllerGetAxisFromString :: proc(str: cstring) -> GameControllerAxis ---
  106. GameControllerGetStringForAxis :: proc(axis: GameControllerAxis) -> cstring ---
  107. GameControllerGetBindForAxis :: proc(gamecontroller: ^GameController, axis: GameControllerAxis) -> GameControllerButtonBind---
  108. GameControllerHasAxis :: proc(gamecontroller: ^GameController, axis: GameControllerAxis) -> bool ---
  109. GameControllerGetAxis :: proc(gamecontroller: ^GameController, axis: GameControllerAxis) -> i16 ---
  110. GameControllerGetButtonFromString :: proc(str: cstring) -> GameControllerButton ---
  111. GameControllerGetStringForButton :: proc(button: GameControllerButton) -> cstring ---
  112. GameControllerGetBindForButton :: proc(gamecontroller: ^GameController, button: GameControllerButton) -> GameControllerButtonBind ---
  113. GameControllerHasButton :: proc(gamecontroller: ^GameController, button: GameControllerButton) -> bool ---
  114. GameControllerGetButton :: proc(gamecontroller: ^GameController, button: GameControllerButton) -> u8 ---
  115. GameControllerGetNumTouchpads :: proc(gamecontroller: ^GameController) -> c.int ---
  116. GameControllerGetNumTouchpadFingers :: proc(gamecontroller: ^GameController, touchpad: c.int) -> c.int ---
  117. GameControllerGetTouchpadFinger :: proc(gamecontroller: ^GameController, touchpad: c.int, finger: c.int, state: ^u8, x, y: ^f32, pressure: ^f32) -> c.int ---
  118. GameControllerHasSensor :: proc(gamecontroller: ^GameController, type: SensorType) -> bool ---
  119. GameControllerSetSensorEnabled :: proc(gamecontroller: ^GameController, type: SensorType, enabled: bool) -> c.int ---
  120. GameControllerIsSensorEnabled :: proc(gamecontroller: ^GameController, type: SensorType) -> bool ---
  121. GameControllerGetSensorDataRate :: proc(gamecontroller: ^GameController, type: SensorType) -> f32 ---
  122. GameControllerGetSensorData :: proc(gamecontroller: ^GameController, type: SensorType, data: [^]f32, num_values: c.int) -> c.int ---
  123. GameControllerRumble :: proc(gamecontroller: ^GameController, low_frequency_rumble, high_frequency_rumble: u16, duration_ms: u32) -> c.int ---
  124. GameControllerRumbleTriggers :: proc(gamecontroller: ^GameController, left_rumble, right_rumble: u16, duration_ms: u32) -> c.int ---
  125. GameControllerHasLED :: proc(gamecontroller: ^GameController) -> bool ---
  126. GameControllerSetLED :: proc(gamecontroller: ^GameController, red, green, blue: u8) -> c.int ---
  127. GameControllerSendEffect :: proc(gamecontroller: ^GameController, data: rawptr, size: c.int) -> c.int ---
  128. GameControllerClose :: proc(gamecontroller: ^GameController) ---
  129. }