Win32Hid.cs
author StephaneLenclud
Sat, 14 Feb 2015 22:13:31 +0100
changeset 51 5f1f1053a595
parent 50 e6c103ebb155
child 56 cace0afae0fa
permissions -rw-r--r--
Now using spaces instead of tabs for indentation.
     1 using System;
     2 using System.Runtime.InteropServices;
     3 using Microsoft.Win32.SafeHandles;
     4 using System.Text;
     5 
     6 namespace Win32
     7 {
     8 
     9     static partial class Function
    10     {
    11         [DllImport("hid.dll", CharSet = CharSet.Unicode)]
    12         public static extern HidStatus HidP_GetUsagesEx(HIDP_REPORT_TYPE ReportType, ushort LinkCollection, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3)] USAGE_AND_PAGE[] ButtonList, ref uint UsageLength, IntPtr PreparsedData, [MarshalAs(UnmanagedType.LPArray)] byte[] Report, uint ReportLength);
    13 
    14         [DllImport("hid.dll", CharSet = CharSet.Auto, SetLastError = true)]
    15         public static extern Boolean HidD_GetManufacturerString(SafeFileHandle HidDeviceObject, StringBuilder Buffer, Int32 BufferLength);
    16 
    17         [DllImport("hid.dll", CharSet = CharSet.Auto, SetLastError = true)]
    18         public static extern Boolean HidD_GetProductString(SafeFileHandle HidDeviceObject, StringBuilder Buffer, Int32 BufferLength);
    19 
    20         [DllImport("hid.dll", CharSet = CharSet.Auto, SetLastError = true)]
    21         public static extern Boolean HidD_GetAttributes(SafeFileHandle HidDeviceObject, ref HIDD_ATTRIBUTES Attributes);
    22 
    23         /// Return Type: NTSTATUS->LONG->int
    24         ///PreparsedData: PHIDP_PREPARSED_DATA->_HIDP_PREPARSED_DATA*
    25         ///Capabilities: PHIDP_CAPS->_HIDP_CAPS*
    26         [DllImportAttribute("hid.dll", EntryPoint = "HidP_GetCaps", CallingConvention = CallingConvention.StdCall)]
    27         public static extern int HidP_GetCaps(System.IntPtr PreparsedData, ref HIDP_CAPS Capabilities);
    28 
    29         /// Return Type: NTSTATUS->LONG->int
    30         ///ReportType: HIDP_REPORT_TYPE->_HIDP_REPORT_TYPE
    31         ///ButtonCaps: PHIDP_BUTTON_CAPS->_HIDP_BUTTON_CAPS*
    32         ///ButtonCapsLength: PUSHORT->USHORT*
    33         ///PreparsedData: PHIDP_PREPARSED_DATA->_HIDP_PREPARSED_DATA*
    34         [System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint = "HidP_GetButtonCaps", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
    35         public static extern int HidP_GetButtonCaps(HIDP_REPORT_TYPE ReportType, ref HIDP_BUTTON_CAPS ButtonCaps, ref ushort ButtonCapsLength, System.IntPtr PreparsedData);
    36 
    37         /// Return Type: NTSTATUS->LONG->int
    38         ///ReportType: HIDP_REPORT_TYPE->_HIDP_REPORT_TYPE
    39         ///ValueCaps: PHIDP_VALUE_CAPS->_HIDP_VALUE_CAPS*
    40         ///ValueCapsLength: PUSHORT->USHORT*
    41         ///PreparsedData: PHIDP_PREPARSED_DATA->_HIDP_PREPARSED_DATA*
    42         [System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint = "HidP_GetValueCaps", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
    43         public static extern int HidP_GetValueCaps(HIDP_REPORT_TYPE ReportType, ref HIDP_VALUE_CAPS ValueCaps, ref ushort ValueCapsLength, System.IntPtr PreparsedData);
    44 
    45     }
    46 
    47 
    48     static partial class Macro
    49     {
    50 
    51 
    52     }
    53 
    54 
    55     static partial class Const
    56     {
    57 
    58 
    59     }
    60 
    61 
    62     public enum HIDP_REPORT_TYPE : ushort
    63     {
    64         HidP_Input = 0,
    65         HidP_Output,
    66         HidP_Feature
    67     }
    68 
    69 
    70     public enum HidStatus : uint
    71     {
    72         HIDP_STATUS_SUCCESS = 0x110000,
    73         HIDP_STATUS_NULL = 0x80110001,
    74         HIDP_STATUS_INVALID_PREPARSED_DATA = 0xc0110001,
    75         HIDP_STATUS_INVALID_REPORT_TYPE = 0xc0110002,
    76         HIDP_STATUS_INVALID_REPORT_LENGTH = 0xc0110003,
    77         HIDP_STATUS_USAGE_NOT_FOUND = 0xc0110004,
    78         HIDP_STATUS_VALUE_OUT_OF_RANGE = 0xc0110005,
    79         HIDP_STATUS_BAD_LOG_PHY_VALUES = 0xc0110006,
    80         HIDP_STATUS_BUFFER_TOO_SMALL = 0xc0110007,
    81         HIDP_STATUS_INTERNAL_ERROR = 0xc0110008,
    82         HIDP_STATUS_I8042_TRANS_UNKNOWN = 0xc0110009,
    83         HIDP_STATUS_INCOMPATIBLE_REPORT_ID = 0xc011000a,
    84         HIDP_STATUS_NOT_VALUE_ARRAY = 0xc011000b,
    85         HIDP_STATUS_IS_VALUE_ARRAY = 0xc011000c,
    86         HIDP_STATUS_DATA_INDEX_NOT_FOUND = 0xc011000d,
    87         HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE = 0xc011000e,
    88         HIDP_STATUS_BUTTON_NOT_PRESSED = 0xc011000f,
    89         HIDP_STATUS_REPORT_DOES_NOT_EXIST = 0xc0110010,
    90         HIDP_STATUS_NOT_IMPLEMENTED = 0xc0110020,
    91         HIDP_STATUS_I8242_TRANS_UNKNOWN = 0xc0110009
    92     }
    93 
    94 
    95     [StructLayout(LayoutKind.Sequential)]
    96     public struct USAGE_AND_PAGE
    97     {
    98         public ushort Usage;
    99         public ushort UsagePage;
   100     };
   101 
   102     [StructLayout(LayoutKind.Sequential)]
   103     public struct HIDD_ATTRIBUTES
   104     {
   105         public uint Size;
   106         public ushort VendorID;
   107         public ushort ProductID;
   108         public ushort VersionNumber;
   109     }
   110 
   111 
   112     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
   113     public struct HIDP_CAPS
   114     {
   115 
   116         /// USAGE->USHORT->unsigned short
   117         public ushort Usage;
   118 
   119         /// USAGE->USHORT->unsigned short
   120         public ushort UsagePage;
   121 
   122         /// USHORT->unsigned short
   123         public ushort InputReportByteLength;
   124 
   125         /// USHORT->unsigned short
   126         public ushort OutputReportByteLength;
   127 
   128         /// USHORT->unsigned short
   129         public ushort FeatureReportByteLength;
   130 
   131         /// USHORT[17]
   132         [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 17, ArraySubType = System.Runtime.InteropServices.UnmanagedType.U2)]
   133         public ushort[] Reserved;
   134 
   135         /// USHORT->unsigned short
   136         public ushort NumberLinkCollectionNodes;
   137 
   138         /// USHORT->unsigned short
   139         public ushort NumberInputButtonCaps;
   140 
   141         /// USHORT->unsigned short
   142         public ushort NumberInputValueCaps;
   143 
   144         /// USHORT->unsigned short
   145         public ushort NumberInputDataIndices;
   146 
   147         /// USHORT->unsigned short
   148         public ushort NumberOutputButtonCaps;
   149 
   150         /// USHORT->unsigned short
   151         public ushort NumberOutputValueCaps;
   152 
   153         /// USHORT->unsigned short
   154         public ushort NumberOutputDataIndices;
   155 
   156         /// USHORT->unsigned short
   157         public ushort NumberFeatureButtonCaps;
   158 
   159         /// USHORT->unsigned short
   160         public ushort NumberFeatureValueCaps;
   161 
   162         /// USHORT->unsigned short
   163         public ushort NumberFeatureDataIndices;
   164     }
   165 
   166     /// <summary>
   167     /// Type created in place of an anonymous struct
   168     /// </summary>
   169     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
   170     public struct HIDP_BUTTON_CAPS_RANGE
   171     {
   172 
   173         /// USAGE->USHORT->unsigned short
   174         public ushort UsageMin;
   175 
   176         /// USAGE->USHORT->unsigned short
   177         public ushort UsageMax;
   178 
   179         /// USHORT->unsigned short
   180         public ushort StringMin;
   181 
   182         /// USHORT->unsigned short
   183         public ushort StringMax;
   184 
   185         /// USHORT->unsigned short
   186         public ushort DesignatorMin;
   187 
   188         /// USHORT->unsigned short
   189         public ushort DesignatorMax;
   190 
   191         /// USHORT->unsigned short
   192         public ushort DataIndexMin;
   193 
   194         /// USHORT->unsigned short
   195         public ushort DataIndexMax;
   196     }
   197 
   198     /// <summary>
   199     /// Type created in place of an anonymous struct
   200     /// </summary>
   201     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
   202     public struct HIDP_BUTTON_CAPS_NOT_RANGE
   203     {
   204 
   205         /// USAGE->USHORT->unsigned short
   206         public ushort Usage;
   207 
   208         /// USAGE->USHORT->unsigned short
   209         public ushort Reserved1;
   210 
   211         /// USHORT->unsigned short
   212         public ushort StringIndex;
   213 
   214         /// USHORT->unsigned short
   215         public ushort Reserved2;
   216 
   217         /// USHORT->unsigned short
   218         public ushort DesignatorIndex;
   219 
   220         /// USHORT->unsigned short
   221         public ushort Reserved3;
   222 
   223         /// USHORT->unsigned short
   224         public ushort DataIndex;
   225 
   226         /// USHORT->unsigned short
   227         public ushort Reserved4;
   228     }
   229 
   230     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)]
   231     public struct HIDP_BUTTON_CAPS_UNION
   232     {
   233 
   234         /// 
   235         [System.Runtime.InteropServices.FieldOffsetAttribute(0)]
   236         public HIDP_BUTTON_CAPS_RANGE Range;
   237 
   238         /// 
   239         [System.Runtime.InteropServices.FieldOffsetAttribute(0)]
   240         public HIDP_BUTTON_CAPS_NOT_RANGE NotRange;
   241     }
   242 
   243     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
   244     public struct HIDP_BUTTON_CAPS
   245     {
   246 
   247         /// USAGE->USHORT->unsigned short
   248         public ushort UsagePage;
   249 
   250         /// UCHAR->unsigned char
   251         public byte ReportID;
   252 
   253         /// BOOLEAN->BYTE->unsigned char
   254         public byte IsAlias;
   255 
   256         /// USHORT->unsigned short
   257         public ushort BitField;
   258 
   259         /// USHORT->unsigned short
   260         public ushort LinkCollection;
   261 
   262         /// USAGE->USHORT->unsigned short
   263         public ushort LinkUsage;
   264 
   265         /// USAGE->USHORT->unsigned short
   266         public ushort LinkUsagePage;
   267 
   268         /// BOOLEAN->BYTE->unsigned char
   269         public byte IsRange;
   270 
   271         /// BOOLEAN->BYTE->unsigned char
   272         public byte IsStringRange;
   273 
   274         /// BOOLEAN->BYTE->unsigned char
   275         public byte IsDesignatorRange;
   276 
   277         /// BOOLEAN->BYTE->unsigned char
   278         public byte IsAbsolute;
   279 
   280         /// ULONG[10]
   281         [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 10, ArraySubType = System.Runtime.InteropServices.UnmanagedType.U4)]
   282         public uint[] Reserved;
   283 
   284         /// TODO: get the proper field offset to make it nicer and get rid of union type
   285         public HIDP_BUTTON_CAPS_UNION Union;
   286     }
   287 
   288     /// <summary>
   289     /// Type created in place of an anonymous struct
   290     /// </summary>
   291     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
   292     public struct HIDP_VALUE_CAPS_RANGE
   293     {
   294 
   295         /// USAGE->USHORT->unsigned short
   296         public ushort UsageMin;
   297 
   298         /// USAGE->USHORT->unsigned short
   299         public ushort UsageMax;
   300 
   301         /// USHORT->unsigned short
   302         public ushort StringMin;
   303 
   304         /// USHORT->unsigned short
   305         public ushort StringMax;
   306 
   307         /// USHORT->unsigned short
   308         public ushort DesignatorMin;
   309 
   310         /// USHORT->unsigned short
   311         public ushort DesignatorMax;
   312 
   313         /// USHORT->unsigned short
   314         public ushort DataIndexMin;
   315 
   316         /// USHORT->unsigned short
   317         public ushort DataIndexMax;
   318     }
   319 
   320     /// <summary>
   321     /// Type created in place of an anonymous struct
   322     /// </summary>
   323     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
   324     public struct HIDP_VALUE_CAPS_NOT_RANGE
   325     {
   326 
   327         /// USAGE->USHORT->unsigned short
   328         public ushort Usage;
   329 
   330         /// USAGE->USHORT->unsigned short
   331         public ushort Reserved1;
   332 
   333         /// USHORT->unsigned short
   334         public ushort StringIndex;
   335 
   336         /// USHORT->unsigned short
   337         public ushort Reserved2;
   338 
   339         /// USHORT->unsigned short
   340         public ushort DesignatorIndex;
   341 
   342         /// USHORT->unsigned short
   343         public ushort Reserved3;
   344 
   345         /// USHORT->unsigned short
   346         public ushort DataIndex;
   347 
   348         /// USHORT->unsigned short
   349         public ushort Reserved4;
   350     }
   351 
   352     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)]
   353     public struct HIDP_VALUE_CAPS_UNION
   354     {
   355 
   356         /// 
   357         [System.Runtime.InteropServices.FieldOffsetAttribute(0)]
   358         public HIDP_VALUE_CAPS_RANGE Range;
   359 
   360         /// 
   361         [System.Runtime.InteropServices.FieldOffsetAttribute(0)]
   362         public HIDP_VALUE_CAPS_NOT_RANGE NotRange;
   363     }
   364 
   365     [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
   366     public struct HIDP_VALUE_CAPS
   367     {
   368 
   369         /// USAGE->USHORT->unsigned short
   370         public ushort UsagePage;
   371 
   372         /// UCHAR->unsigned char
   373         public byte ReportID;
   374 
   375         /// BOOLEAN->BYTE->unsigned char
   376         public byte IsAlias;
   377 
   378         /// USHORT->unsigned short
   379         public ushort BitField;
   380 
   381         /// USHORT->unsigned short
   382         public ushort LinkCollection;
   383 
   384         /// USAGE->USHORT->unsigned short
   385         public ushort LinkUsage;
   386 
   387         /// USAGE->USHORT->unsigned short
   388         public ushort LinkUsagePage;
   389 
   390         /// BOOLEAN->BYTE->unsigned char
   391         public byte IsRange;
   392 
   393         /// BOOLEAN->BYTE->unsigned char
   394         public byte IsStringRange;
   395 
   396         /// BOOLEAN->BYTE->unsigned char
   397         public byte IsDesignatorRange;
   398 
   399         /// BOOLEAN->BYTE->unsigned char
   400         public byte IsAbsolute;
   401 
   402         /// BOOLEAN->BYTE->unsigned char
   403         public byte HasNull;
   404 
   405         /// UCHAR->unsigned char
   406         public byte Reserved;
   407 
   408         /// USHORT->unsigned short
   409         public ushort BitSize;
   410 
   411         /// USHORT->unsigned short
   412         public ushort ReportCount;
   413 
   414         /// USHORT[5]
   415         [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst = 5, ArraySubType = System.Runtime.InteropServices.UnmanagedType.U2)]
   416         public ushort[] Reserved2;
   417 
   418         /// ULONG->unsigned int
   419         public uint UnitsExp;
   420 
   421         /// ULONG->unsigned int
   422         public uint Units;
   423 
   424         /// LONG->int
   425         public int LogicalMin;
   426 
   427         /// LONG->int
   428         public int LogicalMax;
   429 
   430         /// LONG->int
   431         public int PhysicalMin;
   432 
   433         /// LONG->int
   434         public int PhysicalMax;
   435 
   436         /// 
   437         public HIDP_VALUE_CAPS_UNION Union;
   438     }
   439 }
   440 
   441