// Copyright © 2015, Peter Atashian
// Licensed under the MIT License <LICENSE.md>
//! XInput procedure declarations, constant definitions and macros
pub const XINPUT_DEVTYPE_GAMEPAD: ::BYTE = 0x01;
pub const XINPUT_DEVSUBTYPE_GAMEPAD: ::BYTE = 0x01;
pub const XINPUT_DEVSUBTYPE_WHEEL: ::BYTE = 0x02;
pub const XINPUT_DEVSUBTYPE_ARCADE_STICK: ::BYTE = 0x03;
pub const XINPUT_DEVSUBTYPE_FLIGHT_SICK: ::BYTE = 0x04;
pub const XINPUT_DEVSUBTYPE_DANCE_PAD: ::BYTE = 0x05;
pub const XINPUT_DEVSUBTYPE_GUITAR: ::BYTE = 0x06;
pub const XINPUT_DEVSUBTYPE_DRUM_KIT: ::BYTE = 0x08;
pub const XINPUT_CAPS_VOICE_SUPPORTED: ::WORD = 0x0004;
pub const XINPUT_GAMEPAD_DPAD_UP: ::WORD = 0x0001;
pub const XINPUT_GAMEPAD_DPAD_DOWN: ::WORD = 0x0002;
pub const XINPUT_GAMEPAD_DPAD_LEFT: ::WORD = 0x0004;
pub const XINPUT_GAMEPAD_DPAD_RIGHT: ::WORD = 0x0008;
pub const XINPUT_GAMEPAD_START: ::WORD = 0x0010;
pub const XINPUT_GAMEPAD_BACK: ::WORD = 0x0020;
pub const XINPUT_GAMEPAD_LEFT_THUMB: ::WORD = 0x0040;
pub const XINPUT_GAMEPAD_RIGHT_THUMB: ::WORD = 0x0080;
pub const XINPUT_GAMEPAD_LEFT_SHOULDER: ::WORD = 0x0100;
pub const XINPUT_GAMEPAD_RIGHT_SHOULDER: ::WORD = 0x0200;
pub const XINPUT_GAMEPAD_A: ::WORD = 0x1000;
pub const XINPUT_GAMEPAD_B: ::WORD = 0x2000;
pub const XINPUT_GAMEPAD_X: ::WORD = 0x4000;
pub const XINPUT_GAMEPAD_Y: ::WORD = 0x8000;
pub const XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE: ::SHORT = 7849;
pub const XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE: ::SHORT = 8689;
pub const XINPUT_GAMEPAD_TRIGGER_THRESHOLD: ::BYTE = 30;
pub const XINPUT_FLAG_GAMEPAD: ::DWORD = 0x00000001;
pub const BATTERY_DEVTYPE_GAMEPAD: ::BYTE = 0x00;
pub const BATTERY_DEVTYPE_HEADSET: ::BYTE = 0x01;
pub const BATTERY_TYPE_DISCONNECTED: ::BYTE = 0x00;
pub const BATTERY_TYPE_WIRED: ::BYTE = 0x01;
pub const BATTERY_TYPE_ALKALINE: ::BYTE = 0x02;
pub const BATTERY_TYPE_NIMH: ::BYTE = 0x03;
pub const BATTERY_TYPE_UNKNOWN: ::BYTE = 0xFF;
pub const BATTERY_LEVEL_EMPTY: ::BYTE = 0x00;
pub const BATTERY_LEVEL_LOW: ::BYTE = 0x01;
pub const BATTERY_LEVEL_MEDIUM: ::BYTE = 0x02;
pub const BATTERY_LEVEL_FULL: ::BYTE = 0x03;
pub const XUSER_MAX_COUNT: ::DWORD = 4;
pub const XUSER_INDEX_ANY: ::DWORD = 0x000000FF;
pub const VK_PAD_A: ::WORD = 0x5800;
pub const VK_PAD_B: ::WORD = 0x5801;
pub const VK_PAD_X: ::WORD = 0x5802;
pub const VK_PAD_Y: ::WORD = 0x5803;
pub const VK_PAD_RSHOULDER: ::WORD = 0x5804;
pub const VK_PAD_LSHOULDER: ::WORD = 0x5805;
pub const VK_PAD_LTRIGGER: ::WORD = 0x5806;
pub const VK_PAD_RTRIGGER: ::WORD = 0x5807;
pub const VK_PAD_DPAD_UP: ::WORD = 0x5810;
pub const VK_PAD_DPAD_DOWN: ::WORD = 0x5811;
pub const VK_PAD_DPAD_LEFT: ::WORD = 0x5812;
pub const VK_PAD_DPAD_RIGHT: ::WORD = 0x5813;
pub const VK_PAD_START: ::WORD = 0x5814;
pub const VK_PAD_BACK: ::WORD = 0x5815;
pub const VK_PAD_LTHUMB_PRESS: ::WORD = 0x5816;
pub const VK_PAD_RTHUMB_PRESS: ::WORD = 0x5817;
pub const VK_PAD_LTHUMB_UP: ::WORD = 0x5820;
pub const VK_PAD_LTHUMB_DOWN: ::WORD = 0x5821;
pub const VK_PAD_LTHUMB_RIGHT: ::WORD = 0x5822;
pub const VK_PAD_LTHUMB_LEFT: ::WORD = 0x5823;
pub const VK_PAD_LTHUMB_UPLEFT: ::WORD = 0x5824;
pub const VK_PAD_LTHUMB_UPRIGHT: ::WORD = 0x5825;
pub const VK_PAD_LTHUMB_DOWNRIGHT: ::WORD = 0x5826;
pub const VK_PAD_LTHUMB_DOWNLEFT: ::WORD = 0x5827;
pub const VK_PAD_RTHUMB_UP: ::WORD = 0x5830;
pub const VK_PAD_RTHUMB_DOWN: ::WORD = 0x5831;
pub const VK_PAD_RTHUMB_RIGHT: ::WORD = 0x5832;
pub const VK_PAD_RTHUMB_LEFT: ::WORD = 0x5833;
pub const VK_PAD_RTHUMB_UPLEFT: ::WORD = 0x5834;
pub const VK_PAD_RTHUMB_UPRIGHT: ::WORD = 0x5835;
pub const VK_PAD_RTHUMB_DOWNRIGHT: ::WORD = 0x5836;
pub const VK_PAD_RTHUMB_DOWNLEFT: ::WORD = 0x5837;
pub const XINPUT_KEYSTROKE_KEYDOWN: ::WORD = 0x0001;
pub const XINPUT_KEYSTROKE_KEYUP: ::WORD = 0x0002;
pub const XINPUT_KEYSTROKE_REPEAT: ::WORD = 0x0004;
STRUCT!{struct XINPUT_GAMEPAD {
    wButtons: ::WORD,
    bLeftTrigger: ::BYTE,
    bRightTrigger: ::BYTE,
    sThumbLX: ::SHORT,
    sThumbLY: ::SHORT,
    sThumbRX: ::SHORT,
    sThumbRY: ::SHORT,
}}
pub type PXINPUT_GAMEPAD = *mut XINPUT_GAMEPAD;
STRUCT!{struct XINPUT_STATE {
    dwPacketNumber: ::DWORD,
    Gamepad: ::XINPUT_GAMEPAD,
}}
pub type PXINPUT_STATE = *mut XINPUT_STATE;
STRUCT!{struct XINPUT_VIBRATION {
    wLeftMotorSpeed: ::WORD,
    wRightMotorSpeed: ::WORD,
}}
pub type PXINPUT_VIBRATION = *mut XINPUT_VIBRATION;
STRUCT!{struct XINPUT_CAPABILITIES {
    Type: ::BYTE,
    SubType: ::BYTE,
    Flags: ::WORD,
    Gamepad: ::XINPUT_GAMEPAD,
    Vibration: ::XINPUT_VIBRATION,
}}
pub type PXINPUT_CAPABILITIES = *mut XINPUT_CAPABILITIES;
STRUCT!{struct XINPUT_BATTERY_INFORMATION {
    BatteryType: ::BYTE,
    BatteryLevel: ::BYTE,
}}
pub type PXINPUT_BATTERY_INFORMATION = *mut XINPUT_BATTERY_INFORMATION;
STRUCT!{struct XINPUT_KEYSTROKE {
    VirtualKey: ::WORD,
    Unicode: ::WCHAR,
    UserIndex: ::BYTE,
    HidCode: ::BYTE,
}}
pub type PXINPUT_KEYSTROKE = *mut XINPUT_KEYSTROKE;
