thindx-xinput 0.0.0-2024-02-04

Thin XInput wrappers
Documentation
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

    <Type Name="xinput::error::Error">
        <DisplayString>{__1} ({__0->thindx_method,sb})</DisplayString>
        <!--
        <DisplayString>{__1} - Error({__0}, ...)</DisplayString>
        <DisplayString>Error({__0}, {__1})</DisplayString>
        -->
    </Type>

    <!-- xinput.h enumerations -->

    <Type Name="xinput::enumerations::battery_devtype::BatteryDevType">
        <DisplayString Condition="__0 == 0x00">xinput::BatteryDevType::Gamepad</DisplayString>
        <DisplayString Condition="__0 == 0x01">xinput::BatteryDevType::Headset</DisplayString>
        <DisplayString>xinput::BatteryDevType({__0,x})</DisplayString>
    </Type>

    <Type Name="xinput::enumerations::battery_level::BatteryLevel">
        <DisplayString Condition="__0 == 0x00">xinput::BatteryLevel::Empty</DisplayString>
        <DisplayString Condition="__0 == 0x01">xinput::BatteryLevel::Low</DisplayString>
        <DisplayString Condition="__0 == 0x02">xinput::BatteryLevel::Medium</DisplayString>
        <DisplayString Condition="__0 == 0x03">xinput::BatteryLevel::Full</DisplayString>
        <DisplayString>xinput::BatteryLevel({__0,x})</DisplayString>
    </Type>

    <Type Name="xinput::enumerations::battery_type::BatteryType">
        <DisplayString Condition="__0 == 0x00">xinput::BatteryType::Disconnected</DisplayString>
        <DisplayString Condition="__0 == 0x01">xinput::BatteryType::Wired</DisplayString>
        <DisplayString Condition="__0 == 0x02">xinput::BatteryType::Alkaline</DisplayString>
        <DisplayString Condition="__0 == 0x03">xinput::BatteryType::NiMH</DisplayString>
        <DisplayString Condition="__0 == 0xFF">xinput::BatteryType::Unknown</DisplayString>
        <DisplayString>xinput::BatteryType({__0,x})</DisplayString>
    </Type>

    <Type Name="xinput::enumerations::devsubtype::DevSubType">
        <DisplayString Condition="__0 == 0x00">xinput::DevSubType::Unknown</DisplayString>
        <DisplayString Condition="__0 == 0x01">xinput::DevSubType::Gamepad</DisplayString>
        <DisplayString Condition="__0 == 0x02">xinput::DevSubType::Wheel</DisplayString>
        <DisplayString Condition="__0 == 0x03">xinput::DevSubType::ArcadeStick</DisplayString>
        <DisplayString Condition="__0 == 0x04">xinput::DevSubType::FlightStick</DisplayString>
        <DisplayString Condition="__0 == 0x05">xinput::DevSubType::DancePad</DisplayString>
        <DisplayString Condition="__0 == 0x06">xinput::DevSubType::Guitar</DisplayString>
        <DisplayString Condition="__0 == 0x07">xinput::DevSubType::GuitarAlternate</DisplayString>
        <DisplayString Condition="__0 == 0x08">xinput::DevSubType::DrumKit</DisplayString>
        <DisplayString Condition="__0 == 0x0B">xinput::DevSubType::GuitarBass</DisplayString>
        <DisplayString Condition="__0 == 0x13">xinput::DevSubType::ArcadePad</DisplayString>
        <DisplayString>xinput::DevSubType({__0,x})</DisplayString>
    </Type>

    <Type Name="xinput::enumerations::devtype::DevType">
        <DisplayString Condition="__0 == 0x01">xinput::DevType::Gamepad</DisplayString>
        <DisplayString>xinput::DevType({__0,x})</DisplayString>
    </Type>

    <Type Name="xinput::enumerations::vk::VK">
        <DisplayString Condition="__0 == 0x0000">xinput::VK::None</DisplayString>

        <DisplayString Condition="__0 == 0x5800">xinput::VK::PadA</DisplayString>
        <DisplayString Condition="__0 == 0x5801">xinput::VK::PadB</DisplayString>
        <DisplayString Condition="__0 == 0x5802">xinput::VK::PadX</DisplayString>
        <DisplayString Condition="__0 == 0x5803">xinput::VK::PadY</DisplayString>
        <DisplayString Condition="__0 == 0x5804">xinput::VK::PadRShoulder</DisplayString>
        <DisplayString Condition="__0 == 0x5805">xinput::VK::PadLShoulder</DisplayString>
        <DisplayString Condition="__0 == 0x5806">xinput::VK::PadLTrigger</DisplayString>
        <DisplayString Condition="__0 == 0x5807">xinput::VK::PadRTrigger</DisplayString>

        <DisplayString Condition="__0 == 0x5810">xinput::VK::PadDPadUp</DisplayString>
        <DisplayString Condition="__0 == 0x5811">xinput::VK::PadDPadDown</DisplayString>
        <DisplayString Condition="__0 == 0x5812">xinput::VK::PadDPadLeft</DisplayString>
        <DisplayString Condition="__0 == 0x5813">xinput::VK::PadDPadRight</DisplayString>
        <DisplayString Condition="__0 == 0x5814">xinput::VK::PadStart</DisplayString>
        <DisplayString Condition="__0 == 0x5815">xinput::VK::PadBack</DisplayString>
        <DisplayString Condition="__0 == 0x5816">xinput::VK::PadLThumbPress</DisplayString>
        <DisplayString Condition="__0 == 0x5817">xinput::VK::PadRThumbPress</DisplayString>

        <DisplayString Condition="__0 == 0x5820">xinput::VK::PadLThumbUp</DisplayString>
        <DisplayString Condition="__0 == 0x5821">xinput::VK::PadLThumbDown</DisplayString>
        <DisplayString Condition="__0 == 0x5822">xinput::VK::PadLThumbRight</DisplayString>
        <DisplayString Condition="__0 == 0x5823">xinput::VK::PadLThumbLeft</DisplayString>
        <DisplayString Condition="__0 == 0x5824">xinput::VK::PadLThumbUpLeft</DisplayString>
        <DisplayString Condition="__0 == 0x5825">xinput::VK::PadLThumbUpRight</DisplayString>
        <DisplayString Condition="__0 == 0x5826">xinput::VK::PadLThumbDownRight</DisplayString>
        <DisplayString Condition="__0 == 0x5827">xinput::VK::PadLThumbDownLeft</DisplayString>

        <DisplayString Condition="__0 == 0x5830">xinput::VK::PadRThumbUp</DisplayString>
        <DisplayString Condition="__0 == 0x5831">xinput::VK::PadRThumbDown</DisplayString>
        <DisplayString Condition="__0 == 0x5832">xinput::VK::PadRThumbRight</DisplayString>
        <DisplayString Condition="__0 == 0x5833">xinput::VK::PadRThumbLeft</DisplayString>
        <DisplayString Condition="__0 == 0x5834">xinput::VK::PadRThumbUpLeft</DisplayString>
        <DisplayString Condition="__0 == 0x5835">xinput::VK::PadRThumbUpRight</DisplayString>
        <DisplayString Condition="__0 == 0x5836">xinput::VK::PadRThumbDownRight</DisplayString>
        <DisplayString Condition="__0 == 0x5837">xinput::VK::PadRThumbDownLeft</DisplayString>

        <DisplayString>xinput::VK({__0,x})</DisplayString>
    </Type>

    <!-- xinput.h flags -->

    <Type Name="xinput::flags::caps::Caps">
        <DisplayString Condition="__0 == 0x0000">xinput::Caps::None</DisplayString>
        <DisplayString Condition="__0 == 0x0001">xinput::Caps::FfbSupported</DisplayString>
        <DisplayString Condition="__0 == 0x0002">xinput::Caps::Wireless</DisplayString>
        <DisplayString Condition="__0 == 0x0004">xinput::Caps::VoiceSupported</DisplayString>
        <DisplayString Condition="__0 == 0x0008">xinput::Caps::PmdSupported</DisplayString>
        <DisplayString Condition="__0 == 0x0010">xinput::Caps::NoNavigation</DisplayString>
        <!--<DisplayString>xinput::Caps({__0,b})</DisplayString>-->
        <Expand>
            <Item Name="FfbSupported"   Condition="(__0 &amp; 0x0001) != 0" ExcludeView="sparse">(__0 &amp; 0x0001) != 0</Item>
            <Item Name="Wireless"       Condition="(__0 &amp; 0x0002) != 0" ExcludeView="sparse">(__0 &amp; 0x0002) != 0</Item>
            <Item Name="VoiceSupported" Condition="(__0 &amp; 0x0004) != 0" ExcludeView="sparse">(__0 &amp; 0x0004) != 0</Item>
            <Item Name="PmdSupported"   Condition="(__0 &amp; 0x0008) != 0" ExcludeView="sparse">(__0 &amp; 0x0008) != 0</Item>
            <Item Name="NoNavigation"   Condition="(__0 &amp; 0x0010) != 0" ExcludeView="sparse">(__0 &amp; 0x0010) != 0</Item>
            <Item Name="Other"          Condition="(__0 &amp; 0xFFE0)     " ExcludeView="sparse">(__0 &amp; 0xFFE0),x   </Item>
        </Expand>
    </Type>

    <Type Name="xinput::flags::buttons::Buttons">
        <DisplayString Condition="__0 == 0x0000">xinput::Buttons::None</DisplayString>
        <DisplayString Condition="__0 == 0x0001">xinput::Buttons::DPadUp</DisplayString>
        <DisplayString Condition="__0 == 0x0002">xinput::Buttons::DPadDown</DisplayString>
        <DisplayString Condition="__0 == 0x0004">xinput::Buttons::DPadLeft</DisplayString>
        <DisplayString Condition="__0 == 0x0008">xinput::Buttons::DPadRight</DisplayString>
        <DisplayString Condition="__0 == 0x0010">xinput::Buttons::Start</DisplayString>
        <DisplayString Condition="__0 == 0x0020">xinput::Buttons::Back</DisplayString>
        <DisplayString Condition="__0 == 0x0040">xinput::Buttons::LeftThumb</DisplayString>
        <DisplayString Condition="__0 == 0x0080">xinput::Buttons::RightThumb</DisplayString>
        <DisplayString Condition="__0 == 0x0100">xinput::Buttons::LeftShoulder</DisplayString>
        <DisplayString Condition="__0 == 0x0200">xinput::Buttons::RightShoulder</DisplayString>
        <DisplayString Condition="__0 == 0x0400">xinput::Buttons::Guide</DisplayString>
        <DisplayString Condition="__0 == 0x0800">xinput::Buttons::Unknown</DisplayString>
        <DisplayString Condition="__0 == 0x1000">xinput::Buttons::A</DisplayString>
        <DisplayString Condition="__0 == 0x2000">xinput::Buttons::B</DisplayString>
        <DisplayString Condition="__0 == 0x4000">xinput::Buttons::X</DisplayString>
        <DisplayString Condition="__0 == 0x8000">xinput::Buttons::Y</DisplayString>
        <!--<DisplayString>xinput::Buttons({__0,b})</DisplayString>-->
        <Expand>
            <Item Name="DPadUp"         Condition="(__0 &amp; 0x0001) != 0" ExcludeView="sparse">(__0 &amp; 0x0001) != 0</Item>
            <Item Name="DPadDown"       Condition="(__0 &amp; 0x0002) != 0" ExcludeView="sparse">(__0 &amp; 0x0002) != 0</Item>
            <Item Name="DPadLeft"       Condition="(__0 &amp; 0x0004) != 0" ExcludeView="sparse">(__0 &amp; 0x0004) != 0</Item>
            <Item Name="DPadRight"      Condition="(__0 &amp; 0x0008) != 0" ExcludeView="sparse">(__0 &amp; 0x0008) != 0</Item>
            <Item Name="Start"          Condition="(__0 &amp; 0x0010) != 0" ExcludeView="sparse">(__0 &amp; 0x0010) != 0</Item>
            <Item Name="Back"           Condition="(__0 &amp; 0x0020) != 0" ExcludeView="sparse">(__0 &amp; 0x0020) != 0</Item>
            <Item Name="LeftThumb"      Condition="(__0 &amp; 0x0040) != 0" ExcludeView="sparse">(__0 &amp; 0x0040) != 0</Item>
            <Item Name="RightThumb"     Condition="(__0 &amp; 0x0080) != 0" ExcludeView="sparse">(__0 &amp; 0x0080) != 0</Item>
            <Item Name="LeftShoulder"   Condition="(__0 &amp; 0x0100) != 0" ExcludeView="sparse">(__0 &amp; 0x0100) != 0</Item>
            <Item Name="RightShoulder"  Condition="(__0 &amp; 0x0200) != 0" ExcludeView="sparse">(__0 &amp; 0x0200) != 0</Item>
            <Item Name="Guide"          Condition="(__0 &amp; 0x0400) != 0" ExcludeView="sparse">(__0 &amp; 0x0400) != 0</Item>
            <Item Name="Unknown"        Condition="(__0 &amp; 0x0800) != 0" ExcludeView="sparse">(__0 &amp; 0x0800) != 0</Item>
            <Item Name="A"              Condition="(__0 &amp; 0x1000) != 0" ExcludeView="sparse">(__0 &amp; 0x1000) != 0</Item>
            <Item Name="B"              Condition="(__0 &amp; 0x2000) != 0" ExcludeView="sparse">(__0 &amp; 0x2000) != 0</Item>
            <Item Name="X"              Condition="(__0 &amp; 0x4000) != 0" ExcludeView="sparse">(__0 &amp; 0x4000) != 0</Item>
            <Item Name="Y"              Condition="(__0 &amp; 0x8000) != 0" ExcludeView="sparse">(__0 &amp; 0x8000) != 0</Item>
        </Expand>
    </Type>

    <Type Name="xinput::flags::caps::Caps">
        <DisplayString Condition="__0 == 0x0000">xinput::Caps::None</DisplayString>
        <DisplayString Condition="__0 == 0x0001">xinput::Caps::FfbSupported</DisplayString>
        <DisplayString Condition="__0 == 0x0002">xinput::Caps::Wireless</DisplayString>
        <DisplayString Condition="__0 == 0x0004">xinput::Caps::VoiceSupported</DisplayString>
        <DisplayString Condition="__0 == 0x0008">xinput::Caps::PmdSupported</DisplayString>
        <DisplayString Condition="__0 == 0x0010">xinput::Caps::NoNavigation</DisplayString>
        <!--<DisplayString>xinput::Caps({__0,b})</DisplayString>-->
        <Expand>
            <Item Name="FfbSupported"   Condition="(__0 &amp; 0x0001) != 0" ExcludeView="sparse">(__0 &amp; 0x0001) != 0</Item>
            <Item Name="Wireless"       Condition="(__0 &amp; 0x0002) != 0" ExcludeView="sparse">(__0 &amp; 0x0002) != 0</Item>
            <Item Name="VoiceSupported" Condition="(__0 &amp; 0x0004) != 0" ExcludeView="sparse">(__0 &amp; 0x0004) != 0</Item>
            <Item Name="PmdSupported"   Condition="(__0 &amp; 0x0008) != 0" ExcludeView="sparse">(__0 &amp; 0x0008) != 0</Item>
            <Item Name="NoNavigation"   Condition="(__0 &amp; 0x0010) != 0" ExcludeView="sparse">(__0 &amp; 0x0010) != 0</Item>
            <Item Name="Other"          Condition="(__0 &amp; 0xFFE0)     " ExcludeView="sparse">(__0 &amp; 0xFFE0),x   </Item>
        </Expand>
    </Type>

    <Type Name="xinput::flags::flag::Flag">
        <DisplayString Condition="__0 == 0x0000">xinput::Flag::None</DisplayString>
        <DisplayString Condition="__0 == 0x0001">xinput::Flag::Gamepad</DisplayString>
        <!--<DisplayString>xinput::Flag({__0,b})</DisplayString>-->
        <Expand>
            <Item Name="Gamepad"        Condition="(__0 &amp; 0x0001) != 0" ExcludeView="sparse">(__0 &amp; 0x0001) != 0</Item>
            <Item Name="Other"          Condition="(__0 &amp; 0xFFFE)     " ExcludeView="sparse">(__0 &amp; 0xFFFE),x   </Item>
        </Expand>
    </Type>

    <Type Name="xinput::flags::keystroke::KeystrokeFlags">
        <DisplayString Condition="__0 == 0x0000">xinput::KeystrokeFlags::None</DisplayString>
        <DisplayString Condition="__0 == 0x0001">xinput::KeystrokeFlags::KeyDown</DisplayString>
        <DisplayString Condition="__0 == 0x0002">xinput::KeystrokeFlags::KeyUp</DisplayString>
        <DisplayString Condition="__0 == 0x0004">xinput::KeystrokeFlags::Repeat</DisplayString>
        <!--<DisplayString>xinput::KeystrokeFlags({__0,b})</DisplayString>-->
        <Expand>
            <Item Name="KeyDown"        Condition="(__0 &amp; 0x0001) != 0" ExcludeView="sparse">(__0 &amp; 0x0001) != 0</Item>
            <Item Name="KeyUp"          Condition="(__0 &amp; 0x0002) != 0" ExcludeView="sparse">(__0 &amp; 0x0002) != 0</Item>
            <Item Name="Repeat"         Condition="(__0 &amp; 0x0004) != 0" ExcludeView="sparse">(__0 &amp; 0x0004) != 0</Item>
            <Item Name="Other"          Condition="(__0 &amp; 0xFFF8)     " ExcludeView="sparse">(__0 &amp; 0xFFF8),x   </Item>
        </Expand>
    </Type>

    <Type Name="xinput::structures::dsound_audio_device_guids::DSoundAudioDeviceGuid">
        <DisplayString>{{{__0.Data1,xb}-{__0.Data2,xb}-{__0.Data3,xb}-{__0.Data4[0],nvoxb}{__0.Data4[1],nvoxb}-{__0.Data4[2],nvoxb}{__0.Data4[3],nvoxb}{__0.Data4[4],nvoxb}{__0.Data4[5],nvoxb}{__0.Data4[6],nvoxb}{__0.Data4[7],nvoxb}}}</DisplayString>
    </Type>

</AutoVisualizer>