1 using Microsoft.Win32.SafeHandles;
3 using System.Runtime.InteropServices;
8 /// API declarations for HID communications.
10 internal sealed partial class Hid
12 internal static class NativeMethods
15 // Typedef enum defines a set of integer constants for HidP_Report_Type
17 internal const Int16 HidP_Input = 0;
18 internal const Int16 HidP_Output = 1;
19 internal const Int16 HidP_Feature = 2;
21 [StructLayout(LayoutKind.Sequential)]
22 internal struct HIDD_ATTRIBUTES
25 internal UInt16 VendorID;
26 internal UInt16 ProductID;
27 internal UInt16 VersionNumber;
30 internal struct HIDP_CAPS
33 internal Int16 UsagePage;
34 internal Int16 InputReportByteLength;
35 internal Int16 OutputReportByteLength;
36 internal Int16 FeatureReportByteLength;
37 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)] internal Int16[] Reserved;
38 internal Int16 NumberLinkCollectionNodes;
39 internal Int16 NumberInputButtonCaps;
40 internal Int16 NumberInputValueCaps;
41 internal Int16 NumberInputDataIndices;
42 internal Int16 NumberOutputButtonCaps;
43 internal Int16 NumberOutputValueCaps;
44 internal Int16 NumberOutputDataIndices;
45 internal Int16 NumberFeatureButtonCaps;
46 internal Int16 NumberFeatureValueCaps;
47 internal Int16 NumberFeatureDataIndices;
50 // If IsRange is false, UsageMin is the Usage and UsageMax is unused.
51 // If IsStringRange is false, StringMin is the String index and StringMax is unused.
52 // If IsDesignatorRange is false, DesignatorMin is the designator index and DesignatorMax is unused.
54 internal struct HidP_Value_Caps
56 internal Int16 UsagePage;
57 internal Byte ReportID;
58 internal Int32 IsAlias;
59 internal Int16 BitField;
60 internal Int16 LinkCollection;
61 internal Int16 LinkUsage;
62 internal Int16 LinkUsagePage;
63 internal Int32 IsRange;
64 internal Int32 IsStringRange;
65 internal Int32 IsDesignatorRange;
66 internal Int32 IsAbsolute;
67 internal Int32 HasNull;
68 internal Byte Reserved;
69 internal Int16 BitSize;
70 internal Int16 ReportCount;
71 internal Int16 Reserved2;
72 internal Int16 Reserved3;
73 internal Int16 Reserved4;
74 internal Int16 Reserved5;
75 internal Int16 Reserved6;
76 internal Int32 LogicalMin;
77 internal Int32 LogicalMax;
78 internal Int32 PhysicalMin;
79 internal Int32 PhysicalMax;
80 internal Int16 UsageMin;
81 internal Int16 UsageMax;
82 internal Int16 StringMin;
83 internal Int16 StringMax;
84 internal Int16 DesignatorMin;
85 internal Int16 DesignatorMax;
86 internal Int16 DataIndexMin;
87 internal Int16 DataIndexMax;
90 [DllImport("hid.dll", SetLastError = true)]
91 internal static extern Boolean HidD_FlushQueue(SafeFileHandle HidDeviceObject);
93 [DllImport("hid.dll", SetLastError = true)]
94 internal static extern Boolean HidD_FreePreparsedData(IntPtr PreparsedData);
96 [DllImport("hid.dll", SetLastError = true)]
97 internal static extern Boolean HidD_GetAttributes(SafeFileHandle HidDeviceObject, ref HIDD_ATTRIBUTES Attributes);
99 [DllImport("hid.dll", SetLastError = true)]
100 internal static extern Boolean HidD_GetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
101 Int32 ReportBufferLength);
103 [DllImport("hid.dll", SetLastError = true)]
104 internal static extern Boolean HidD_GetInputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
105 Int32 ReportBufferLength);
107 [DllImport("hid.dll", SetLastError = true)]
108 internal static extern void HidD_GetHidGuid(ref Guid HidGuid);
110 [DllImport("hid.dll", SetLastError = true)]
111 internal static extern Boolean HidD_GetNumInputBuffers(SafeFileHandle HidDeviceObject, ref Int32 NumberBuffers);
113 [DllImport("hid.dll", SetLastError = true)]
114 internal static extern Boolean HidD_GetPreparsedData(SafeFileHandle HidDeviceObject, ref IntPtr PreparsedData);
116 [DllImport("hid.dll", SetLastError = true)]
117 internal static extern Boolean HidD_SetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
118 Int32 ReportBufferLength);
120 [DllImport("hid.dll", SetLastError = true)]
121 internal static extern Boolean HidD_SetNumInputBuffers(SafeFileHandle HidDeviceObject, Int32 NumberBuffers);
123 [DllImport("hid.dll", SetLastError = true)]
124 internal static extern Boolean HidD_SetOutputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
125 Int32 ReportBufferLength);
127 [DllImport("hid.dll", SetLastError = true)]
128 internal static extern Int32 HidP_GetCaps(IntPtr PreparsedData, ref HIDP_CAPS Capabilities);
130 [DllImport("hid.dll", SetLastError = true)]
131 internal static extern Int32 HidP_GetValueCaps(Int32 ReportType, Byte[] ValueCaps, ref Int32 ValueCapsLength,
132 IntPtr PreparsedData);