sig
  external isConnected : joystick:int -> bool = "caml_sfJoystick_isConnected"
  external getButtonCount : joystick:int -> int
    = "caml_sfJoystick_getButtonCount"
  external update : unit -> unit = "caml_sfJoystick_update"
  external isButtonPressed : joystick:int -> button:int -> bool
    = "caml_sfJoystick_isButtonPressed"
  external getMaxJoystickCount : unit -> int = "caml_sfJoystickCount"
  external getMaxJoystickButtonCount : unit -> int
    = "caml_sfJoystickButtonCount"
  external getMaxJoystickAxisCount : unit -> int = "caml_sfJoystickAxisCount"
  external normaliseDirectionProportional :
    x:float -> y:float -> float * float
    = "caml_sfJoystick_normaliseDirectionProportional"
  type axis = X | Y | Z | R | U | V | PovX | PovY
  external hasAxis : joystick:int -> axis:SFJoystick.axis -> bool
    = "caml_sfJoystick_hasAxis"
  external getAxisPosition : joystick:int -> axis:SFJoystick.axis -> float
    = "caml_sfJoystick_getAxisPosition"
  val string_of_axis : SFJoystick.axis -> string
  val axis_of_string : string -> SFJoystick.axis
  type identification = {
    name : string;
    vendor_id : nativeint;
    product_id : nativeint;
  }
  external get_identification : joystick:int -> SFJoystick.identification
    = "caml_sfJoystick_getIdentification"
end