2
0

sdl_joystick.odin 5.1 KB

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