2
0

sdl_joystick.odin 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. Joystick :: struct {}
  11. JoystickGUID :: struct {
  12. data: [16]u8,
  13. }
  14. JoystickID :: distinct i32
  15. JoystickType :: enum c.int {
  16. UNKNOWN,
  17. GAMECONTROLLER,
  18. WHEEL,
  19. ARCADE_STICK,
  20. FLIGHT_STICK,
  21. DANCE_PAD,
  22. GUITAR,
  23. DRUM_KIT,
  24. ARCADE_PAD,
  25. THROTTLE,
  26. }
  27. JoystickPowerLevel :: enum c.int {
  28. UNKNOWN = -1,
  29. EMPTY, /* <= 5% */
  30. LOW, /* <= 20% */
  31. MEDIUM, /* <= 70% */
  32. FULL, /* <= 100% */
  33. WIRED,
  34. MAX,
  35. }
  36. IPHONE_MAX_GFORCE :: 5.0
  37. JOYSTICK_AXIS_MAX :: +32767
  38. JOYSTICK_AXIS_MIN :: -32768
  39. HAT_CENTERED :: 0x00
  40. HAT_UP :: 0x01
  41. HAT_RIGHT :: 0x02
  42. HAT_DOWN :: 0x04
  43. HAT_LEFT :: 0x08
  44. HAT_RIGHTUP :: HAT_RIGHT|HAT_UP
  45. HAT_RIGHTDOWN :: HAT_RIGHT|HAT_DOWN
  46. HAT_LEFTUP :: HAT_LEFT|HAT_UP
  47. HAT_LEFTDOWN :: HAT_LEFT|HAT_DOWN
  48. @(default_calling_convention="c", link_prefix="SDL_")
  49. foreign lib {
  50. LockJoysticks :: proc() ---
  51. UnlockJoysticks :: proc() ---
  52. NumJoysticks :: proc() -> c.int ---
  53. JoystickNameForIndex :: proc(device_index: c.int) -> cstring ---
  54. JoystickGetDevicePlayerIndex :: proc(device_index: c.int) -> c.int ---
  55. JoystickGetDeviceGUID :: proc(device_index: c.int) -> JoystickGUID ---
  56. JoystickGetDeviceVendor :: proc(device_index: c.int) -> u16 ---
  57. JoystickGetDeviceProduct :: proc(device_index: c.int) -> u16 ---
  58. JoystickGetDeviceProductVersion :: proc(device_index: c.int) -> u16 ---
  59. JoystickGetDeviceType :: proc(device_index: c.int) -> JoystickType ---
  60. JoystickGetDeviceInstanceID :: proc(device_index: c.int) -> JoystickID ---
  61. JoystickOpen :: proc(device_index: c.int) -> ^Joystick ---
  62. JoystickFromInstanceID :: proc(instance_id: JoystickID ) -> ^Joystick ---
  63. JoystickFromPlayerIndex :: proc(player_index: c.int) -> ^Joystick ---
  64. JoystickAttachVirtual :: proc(type: JoystickType, naxes, nbuttons, nhats: c.int) -> c.int ---
  65. JoystickDetachVirtual :: proc(device_index: c.int) -> c.int ---
  66. JoystickIsVirtual :: proc(device_index: c.int) -> bool ---
  67. JoystickSetVirtualAxis :: proc(joystick: ^Joystick, axis: c.int, value: i16) -> c.int ---
  68. JoystickSetVirtualButton :: proc(joystick: ^Joystick, button: c.int, value: u8) -> c.int ---
  69. JoystickSetVirtualHat :: proc(joystick: ^Joystick, hat: c.int, value: u8) -> c.int ---
  70. JoystickName :: proc(joystick: ^Joystick) -> cstring ---
  71. JoystickGetPlayerIndex :: proc(joystick: ^Joystick) -> c.int ---
  72. JoystickSetPlayerIndex :: proc(joystick: ^Joystick, player_index: c.int) ---
  73. JoystickGetGUID :: proc(joystick: ^Joystick) -> JoystickGUID ---
  74. JoystickGetVendor :: proc(joystick: ^Joystick) -> u16 ---
  75. JoystickGetProduct :: proc(joystick: ^Joystick) -> u16 ---
  76. JoystickGetProductVersion :: proc(joystick: ^Joystick) -> u16 ---
  77. JoystickGetSerial :: proc(joystick: ^Joystick) -> cstring ---
  78. JoystickGetType :: proc(joystick: ^Joystick) -> JoystickType ---
  79. JoystickGetGUIDString :: proc(guid: JoystickGUID, pszGUID: [^]u8, cbGUID: c.int) ---
  80. JoystickGetGUIDFromString :: proc(pchGUID: cstring) -> JoystickGUID ---
  81. JoystickGetAttached :: proc(joystick: ^Joystick) -> bool ---
  82. JoystickInstanceID :: proc(joystick: ^Joystick) -> JoystickID ---
  83. JoystickNumAxes :: proc(joystick: ^Joystick) -> c.int ---
  84. JoystickNumBalls :: proc(joystick: ^Joystick) -> c.int ---
  85. JoystickNumHats :: proc(joystick: ^Joystick) -> c.int ---
  86. JoystickNumButtons :: proc(joystick: ^Joystick) -> c.int ---
  87. JoystickUpdate :: proc() ---
  88. JoystickEventState :: proc(state: c.int) -> c.int ---
  89. JoystickGetAxis :: proc(joystick: ^Joystick, axis: c.int) -> i64 ---
  90. JoystickGetAxisInitialState :: proc(joystick: ^Joystick, axis: c.int, state: ^i16) -> bool ---
  91. JoystickGetHat :: proc(joystick: ^Joystick, hat: c.int) -> u8 ---
  92. JoystickGetBall :: proc(joystick: ^Joystick, ball: c.int, dx, dy: ^c.int) -> c.int ---
  93. JoystickGetButton :: proc(joystick: ^Joystick, button: c.int) -> u8 ---
  94. JoystickRumble :: proc(joystick: ^Joystick, low_frequency_rumble, high_frequency_rumble: u16, duration_ms: u32) -> c.int ---
  95. JoystickRumbleTriggers :: proc(joystick: ^Joystick, left_rumble, right_rumble: u16, duration_ms: u32) -> c.int ---
  96. JoystickHasLED :: proc(joystick: ^Joystick) -> bool ---
  97. JoystickSetLED :: proc(joystick: ^Joystick, red, green, blue: u8) -> c.int ---
  98. JoystickSendEffect :: proc(joystick: ^Joystick, data: rawptr, size: c.int) -> c.int ---
  99. JoystickClose :: proc(joystick: ^Joystick) ---
  100. JoystickCurrentPowerLevel :: proc(joystick: ^Joystick) -> JoystickPowerLevel ---
  101. }