{
  "header": "SDL_haptic.h",
  "opaque_types": [
    {
      "name": "SDL_Haptic"
    }
  ],
  "typedefs": [
    {
      "name": "SDL_HapticEffectType",
      "underlying_type": "Uint16"
    },
    {
      "name": "SDL_HapticDirectionType",
      "underlying_type": "Uint8"
    },
    {
      "name": "SDL_HapticEffectID",
      "underlying_type": "int"
    },
    {
      "name": "SDL_HapticID",
      "underlying_type": "Uint32"
    }
  ],
  "function_pointers": [],
  "c_type_aliases": [],
  "enums": [],
  "structs": [
    {
      "name": "SDL_HapticDirection",
      "fields": [
        {
          "name": "_type",
          "type": "SDL_HapticDirectionType",
          "comment": "The type of encoding."
        },
        {
          "name": "dir",
          "type": "Sint32[3]",
          "comment": "The encoded direction."
        }
      ]
    },
    {
      "name": "SDL_HapticConstant",
      "fields": [
        {
          "name": "_type",
          "type": "SDL_HapticEffectType",
          "comment": "SDL_HAPTIC_CONSTANT"
        },
        {
          "name": "direction",
          "type": "SDL_HapticDirection",
          "comment": "Direction of the effect."
        },
        {
          "name": "length",
          "type": "Uint32",
          "comment": "Duration of the effect."
        },
        {
          "name": "delay",
          "type": "Uint16",
          "comment": "Delay before starting the effect."
        },
        {
          "name": "button",
          "type": "Uint16",
          "comment": "Button that triggers the effect."
        },
        {
          "name": "interval",
          "type": "Uint16",
          "comment": "How soon it can be triggered again after button."
        },
        {
          "name": "level",
          "type": "Sint16",
          "comment": "Strength of the constant effect."
        },
        {
          "name": "attack_length",
          "type": "Uint16",
          "comment": "Duration of the attack."
        },
        {
          "name": "attack_level",
          "type": "Uint16",
          "comment": "Level at the start of the attack."
        },
        {
          "name": "fade_length",
          "type": "Uint16",
          "comment": "Duration of the fade."
        },
        {
          "name": "fade_level",
          "type": "Uint16",
          "comment": "Level at the end of the fade."
        }
      ]
    },
    {
      "name": "SDL_HapticPeriodic",
      "fields": [
        {
          "name": "direction",
          "type": "SDL_HapticDirection",
          "comment": "Direction of the effect."
        },
        {
          "name": "length",
          "type": "Uint32",
          "comment": "Duration of the effect."
        },
        {
          "name": "delay",
          "type": "Uint16",
          "comment": "Delay before starting the effect."
        },
        {
          "name": "button",
          "type": "Uint16",
          "comment": "Button that triggers the effect."
        },
        {
          "name": "interval",
          "type": "Uint16",
          "comment": "How soon it can be triggered again after button."
        },
        {
          "name": "period",
          "type": "Uint16",
          "comment": "Period of the wave."
        },
        {
          "name": "magnitude",
          "type": "Sint16",
          "comment": "Peak value; if negative, equivalent to 180 degrees extra phase shift."
        },
        {
          "name": "offset",
          "type": "Sint16",
          "comment": "Mean value of the wave."
        },
        {
          "name": "phase",
          "type": "Uint16",
          "comment": "Positive phase shift given by hundredth of a degree."
        },
        {
          "name": "attack_length",
          "type": "Uint16",
          "comment": "Duration of the attack."
        },
        {
          "name": "attack_level",
          "type": "Uint16",
          "comment": "Level at the start of the attack."
        },
        {
          "name": "fade_length",
          "type": "Uint16",
          "comment": "Duration of the fade."
        },
        {
          "name": "fade_level",
          "type": "Uint16",
          "comment": "Level at the end of the fade."
        }
      ]
    },
    {
      "name": "SDL_HapticCondition",
      "fields": [
        {
          "name": "direction",
          "type": "SDL_HapticDirection",
          "comment": "Direction of the effect."
        },
        {
          "name": "length",
          "type": "Uint32",
          "comment": "Duration of the effect."
        },
        {
          "name": "delay",
          "type": "Uint16",
          "comment": "Delay before starting the effect."
        },
        {
          "name": "button",
          "type": "Uint16",
          "comment": "Button that triggers the effect."
        },
        {
          "name": "interval",
          "type": "Uint16",
          "comment": "How soon it can be triggered again after button."
        },
        {
          "name": "right_sat",
          "type": "Uint16[3]",
          "comment": "Level when joystick is to the positive side; max 0xFFFF."
        },
        {
          "name": "left_sat",
          "type": "Uint16[3]",
          "comment": "Level when joystick is to the negative side; max 0xFFFF."
        },
        {
          "name": "right_coeff",
          "type": "Sint16[3]",
          "comment": "How fast to increase the force towards the positive side."
        },
        {
          "name": "left_coeff",
          "type": "Sint16[3]",
          "comment": "How fast to increase the force towards the negative side."
        },
        {
          "name": "deadband",
          "type": "Uint16[3]",
          "comment": "Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered."
        },
        {
          "name": "center",
          "type": "Sint16[3]",
          "comment": "Position of the dead zone."
        }
      ]
    },
    {
      "name": "SDL_HapticRamp",
      "fields": [
        {
          "name": "_type",
          "type": "SDL_HapticEffectType",
          "comment": "SDL_HAPTIC_RAMP"
        },
        {
          "name": "direction",
          "type": "SDL_HapticDirection",
          "comment": "Direction of the effect."
        },
        {
          "name": "length",
          "type": "Uint32",
          "comment": "Duration of the effect."
        },
        {
          "name": "delay",
          "type": "Uint16",
          "comment": "Delay before starting the effect."
        },
        {
          "name": "button",
          "type": "Uint16",
          "comment": "Button that triggers the effect."
        },
        {
          "name": "interval",
          "type": "Uint16",
          "comment": "How soon it can be triggered again after button."
        },
        {
          "name": "start",
          "type": "Sint16",
          "comment": "Beginning strength level."
        },
        {
          "name": "end",
          "type": "Sint16",
          "comment": "Ending strength level."
        },
        {
          "name": "attack_length",
          "type": "Uint16",
          "comment": "Duration of the attack."
        },
        {
          "name": "attack_level",
          "type": "Uint16",
          "comment": "Level at the start of the attack."
        },
        {
          "name": "fade_length",
          "type": "Uint16",
          "comment": "Duration of the fade."
        },
        {
          "name": "fade_level",
          "type": "Uint16",
          "comment": "Level at the end of the fade."
        }
      ]
    },
    {
      "name": "SDL_HapticLeftRight",
      "fields": [
        {
          "name": "_type",
          "type": "SDL_HapticEffectType",
          "comment": "SDL_HAPTIC_LEFTRIGHT"
        },
        {
          "name": "length",
          "type": "Uint32",
          "comment": "Duration of the effect in milliseconds."
        },
        {
          "name": "large_magnitude",
          "type": "Uint16",
          "comment": "Control of the large controller motor."
        },
        {
          "name": "small_magnitude",
          "type": "Uint16",
          "comment": "Control of the small controller motor."
        }
      ]
    },
    {
      "name": "SDL_HapticCustom",
      "fields": [
        {
          "name": "_type",
          "type": "SDL_HapticEffectType",
          "comment": "SDL_HAPTIC_CUSTOM"
        },
        {
          "name": "direction",
          "type": "SDL_HapticDirection",
          "comment": "Direction of the effect."
        },
        {
          "name": "length",
          "type": "Uint32",
          "comment": "Duration of the effect."
        },
        {
          "name": "delay",
          "type": "Uint16",
          "comment": "Delay before starting the effect."
        },
        {
          "name": "button",
          "type": "Uint16",
          "comment": "Button that triggers the effect."
        },
        {
          "name": "interval",
          "type": "Uint16",
          "comment": "How soon it can be triggered again after button."
        },
        {
          "name": "channels",
          "type": "Uint8",
          "comment": "Axes to use, minimum of one."
        },
        {
          "name": "period",
          "type": "Uint16",
          "comment": "Sample periods."
        },
        {
          "name": "samples",
          "type": "Uint16",
          "comment": "Amount of samples."
        },
        {
          "name": "data",
          "type": "Uint16 *",
          "comment": "Should contain channels*samples items."
        },
        {
          "name": "attack_length",
          "type": "Uint16",
          "comment": "Duration of the attack."
        },
        {
          "name": "attack_level",
          "type": "Uint16",
          "comment": "Level at the start of the attack."
        },
        {
          "name": "fade_length",
          "type": "Uint16",
          "comment": "Duration of the fade."
        },
        {
          "name": "fade_level",
          "type": "Uint16",
          "comment": "Level at the end of the fade."
        }
      ]
    }
  ],
  "unions": [
    {
      "name": "SDL_HapticEffect",
      "fields": [
        {
          "name": "_type",
          "type": "SDL_HapticEffectType",
          "comment": "Effect type."
        },
        {
          "name": "constant",
          "type": "SDL_HapticConstant",
          "comment": "Constant effect."
        },
        {
          "name": "periodic",
          "type": "SDL_HapticPeriodic",
          "comment": "Periodic effect."
        },
        {
          "name": "condition",
          "type": "SDL_HapticCondition",
          "comment": "Condition effect."
        },
        {
          "name": "ramp",
          "type": "SDL_HapticRamp",
          "comment": "Ramp effect."
        },
        {
          "name": "leftright",
          "type": "SDL_HapticLeftRight",
          "comment": "Left/Right effect."
        },
        {
          "name": "custom",
          "type": "SDL_HapticCustom",
          "comment": "Custom effect."
        }
      ]
    }
  ],
  "flags": [],
  "functions": [
    {
      "name": "SDL_GetHaptics",
      "return_type": "SDL_HapticID *",
      "parameters": [
        {
          "name": "count",
          "type": "int *"
        }
      ]
    },
    {
      "name": "SDL_GetHapticNameForID",
      "return_type": "const char *",
      "parameters": [
        {
          "name": "instance_id",
          "type": "SDL_HapticID"
        }
      ]
    },
    {
      "name": "SDL_OpenHaptic",
      "return_type": "SDL_Haptic *",
      "parameters": [
        {
          "name": "instance_id",
          "type": "SDL_HapticID"
        }
      ]
    },
    {
      "name": "SDL_GetHapticFromID",
      "return_type": "SDL_Haptic *",
      "parameters": [
        {
          "name": "instance_id",
          "type": "SDL_HapticID"
        }
      ]
    },
    {
      "name": "SDL_GetHapticID",
      "return_type": "SDL_HapticID",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_GetHapticName",
      "return_type": "const char *",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_IsMouseHaptic",
      "return_type": "bool",
      "parameters": []
    },
    {
      "name": "SDL_OpenHapticFromMouse",
      "return_type": "SDL_Haptic *",
      "parameters": []
    },
    {
      "name": "SDL_IsJoystickHaptic",
      "return_type": "bool",
      "parameters": [
        {
          "name": "joystick",
          "type": "SDL_Joystick *"
        }
      ]
    },
    {
      "name": "SDL_OpenHapticFromJoystick",
      "return_type": "SDL_Haptic *",
      "parameters": [
        {
          "name": "joystick",
          "type": "SDL_Joystick *"
        }
      ]
    },
    {
      "name": "SDL_CloseHaptic",
      "return_type": "void",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_GetMaxHapticEffects",
      "return_type": "int",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_GetMaxHapticEffectsPlaying",
      "return_type": "int",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_GetHapticFeatures",
      "return_type": "Uint32",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_GetNumHapticAxes",
      "return_type": "int",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_HapticEffectSupported",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "effect",
          "type": "const SDL_HapticEffect *"
        }
      ]
    },
    {
      "name": "SDL_CreateHapticEffect",
      "return_type": "SDL_HapticEffectID",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "effect",
          "type": "const SDL_HapticEffect *"
        }
      ]
    },
    {
      "name": "SDL_UpdateHapticEffect",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "effect",
          "type": "SDL_HapticEffectID"
        },
        {
          "name": "data",
          "type": "const SDL_HapticEffect *"
        }
      ]
    },
    {
      "name": "SDL_RunHapticEffect",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "effect",
          "type": "SDL_HapticEffectID"
        },
        {
          "name": "iterations",
          "type": "Uint32"
        }
      ]
    },
    {
      "name": "SDL_StopHapticEffect",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "effect",
          "type": "SDL_HapticEffectID"
        }
      ]
    },
    {
      "name": "SDL_DestroyHapticEffect",
      "return_type": "void",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "effect",
          "type": "SDL_HapticEffectID"
        }
      ]
    },
    {
      "name": "SDL_GetHapticEffectStatus",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "effect",
          "type": "SDL_HapticEffectID"
        }
      ]
    },
    {
      "name": "SDL_SetHapticGain",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "gain",
          "type": "int"
        }
      ]
    },
    {
      "name": "SDL_SetHapticAutocenter",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "autocenter",
          "type": "int"
        }
      ]
    },
    {
      "name": "SDL_PauseHaptic",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_ResumeHaptic",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_StopHapticEffects",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_HapticRumbleSupported",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_InitHapticRumble",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    },
    {
      "name": "SDL_PlayHapticRumble",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        },
        {
          "name": "strength",
          "type": "float"
        },
        {
          "name": "length",
          "type": "Uint32"
        }
      ]
    },
    {
      "name": "SDL_StopHapticRumble",
      "return_type": "bool",
      "parameters": [
        {
          "name": "haptic",
          "type": "SDL_Haptic *"
        }
      ]
    }
  ]
}