sdl_joystick.odin 5.0 KB

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