sl@0: using Microsoft.Win32.SafeHandles; sl@0: using System; sl@0: using System.Runtime.InteropServices; sl@0: sl@0: namespace GenericHid sl@0: { sl@0: /// sl@0: /// API declarations for HID communications. sl@0: /// sl@0: internal sealed partial class Hid sl@0: { sl@0: internal static class NativeMethods sl@0: { sl@0: // from hidpi.h sl@0: // Typedef enum defines a set of integer constants for HidP_Report_Type sl@0: sl@0: internal const Int16 HidP_Input = 0; sl@0: internal const Int16 HidP_Output = 1; sl@0: internal const Int16 HidP_Feature = 2; sl@0: sl@0: [StructLayout(LayoutKind.Sequential)] sl@0: internal struct HIDD_ATTRIBUTES sl@0: { sl@0: internal Int32 Size; sl@0: internal UInt16 VendorID; sl@0: internal UInt16 ProductID; sl@0: internal UInt16 VersionNumber; sl@0: } sl@0: sl@0: internal struct HIDP_CAPS sl@0: { sl@0: internal Int16 Usage; sl@0: internal Int16 UsagePage; sl@0: internal Int16 InputReportByteLength; sl@0: internal Int16 OutputReportByteLength; sl@0: internal Int16 FeatureReportByteLength; sl@0: [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)] internal Int16[] Reserved; sl@0: internal Int16 NumberLinkCollectionNodes; sl@0: internal Int16 NumberInputButtonCaps; sl@0: internal Int16 NumberInputValueCaps; sl@0: internal Int16 NumberInputDataIndices; sl@0: internal Int16 NumberOutputButtonCaps; sl@0: internal Int16 NumberOutputValueCaps; sl@0: internal Int16 NumberOutputDataIndices; sl@0: internal Int16 NumberFeatureButtonCaps; sl@0: internal Int16 NumberFeatureValueCaps; sl@0: internal Int16 NumberFeatureDataIndices; sl@0: } sl@0: sl@0: // If IsRange is false, UsageMin is the Usage and UsageMax is unused. sl@0: // If IsStringRange is false, StringMin is the String index and StringMax is unused. sl@0: // If IsDesignatorRange is false, DesignatorMin is the designator index and DesignatorMax is unused. sl@0: sl@0: internal struct HidP_Value_Caps sl@0: { sl@0: internal Int16 UsagePage; sl@0: internal Byte ReportID; sl@0: internal Int32 IsAlias; sl@0: internal Int16 BitField; sl@0: internal Int16 LinkCollection; sl@0: internal Int16 LinkUsage; sl@0: internal Int16 LinkUsagePage; sl@0: internal Int32 IsRange; sl@0: internal Int32 IsStringRange; sl@0: internal Int32 IsDesignatorRange; sl@0: internal Int32 IsAbsolute; sl@0: internal Int32 HasNull; sl@0: internal Byte Reserved; sl@0: internal Int16 BitSize; sl@0: internal Int16 ReportCount; sl@0: internal Int16 Reserved2; sl@0: internal Int16 Reserved3; sl@0: internal Int16 Reserved4; sl@0: internal Int16 Reserved5; sl@0: internal Int16 Reserved6; sl@0: internal Int32 LogicalMin; sl@0: internal Int32 LogicalMax; sl@0: internal Int32 PhysicalMin; sl@0: internal Int32 PhysicalMax; sl@0: internal Int16 UsageMin; sl@0: internal Int16 UsageMax; sl@0: internal Int16 StringMin; sl@0: internal Int16 StringMax; sl@0: internal Int16 DesignatorMin; sl@0: internal Int16 DesignatorMax; sl@0: internal Int16 DataIndexMin; sl@0: internal Int16 DataIndexMax; sl@0: } sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_FlushQueue(SafeFileHandle HidDeviceObject); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_FreePreparsedData(IntPtr PreparsedData); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_GetAttributes(SafeFileHandle HidDeviceObject, ref HIDD_ATTRIBUTES Attributes); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_GetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, sl@0: Int32 ReportBufferLength); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_GetInputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, sl@0: Int32 ReportBufferLength); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern void HidD_GetHidGuid(ref Guid HidGuid); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_GetNumInputBuffers(SafeFileHandle HidDeviceObject, ref Int32 NumberBuffers); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_GetPreparsedData(SafeFileHandle HidDeviceObject, ref IntPtr PreparsedData); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_SetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, sl@0: Int32 ReportBufferLength); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_SetNumInputBuffers(SafeFileHandle HidDeviceObject, Int32 NumberBuffers); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Boolean HidD_SetOutputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer, sl@0: Int32 ReportBufferLength); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Int32 HidP_GetCaps(IntPtr PreparsedData, ref HIDP_CAPS Capabilities); sl@0: sl@0: [DllImport("hid.dll", SetLastError = true)] sl@0: internal static extern Int32 HidP_GetValueCaps(Int32 ReportType, Byte[] ValueCaps, ref Int32 ValueCapsLength, sl@0: IntPtr PreparsedData); sl@0: } sl@0: } sl@0: }