HidDeclarations.cs
author sl
Wed, 14 May 2014 18:54:30 +0200
changeset 6 597a95926637
permissions -rw-r--r--
Not searching device on every character input from our vendor and product text field.
Selecting a device in our tree now triggers a search for it.
     1 using Microsoft.Win32.SafeHandles; 
     2 using System;
     3 using System.Runtime.InteropServices; 
     4 
     5 namespace GenericHid
     6 {    
     7 	/// <summary>
     8 	/// API declarations for HID communications.
     9 	/// </summary>
    10     internal sealed partial class Hid  
    11     {
    12 		internal static class NativeMethods
    13 		{
    14 			//  from hidpi.h
    15 			//  Typedef enum defines a set of integer constants for HidP_Report_Type
    16 
    17 			internal const Int16 HidP_Input = 0;
    18 			internal const Int16 HidP_Output = 1;
    19 			internal const Int16 HidP_Feature = 2;
    20 
    21 			[StructLayout(LayoutKind.Sequential)]
    22 			internal struct HIDD_ATTRIBUTES
    23 			{
    24 				internal Int32 Size;
    25 				internal UInt16 VendorID;
    26 				internal UInt16 ProductID;
    27 				internal UInt16 VersionNumber;
    28 			}
    29 
    30 			internal struct HIDP_CAPS
    31 			{
    32 				internal Int16 Usage;
    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;
    48 			}
    49 
    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.
    53 
    54 			internal struct HidP_Value_Caps
    55 			{
    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;
    88 			}
    89 
    90 			[DllImport("hid.dll", SetLastError = true)]
    91 			internal static extern Boolean HidD_FlushQueue(SafeFileHandle HidDeviceObject);
    92 
    93 			[DllImport("hid.dll", SetLastError = true)]
    94 			internal static extern Boolean HidD_FreePreparsedData(IntPtr PreparsedData);
    95 
    96 			[DllImport("hid.dll", SetLastError = true)]
    97 			internal static extern Boolean HidD_GetAttributes(SafeFileHandle HidDeviceObject, ref HIDD_ATTRIBUTES Attributes);
    98 
    99 			[DllImport("hid.dll", SetLastError = true)]
   100 			internal static extern Boolean HidD_GetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
   101 			                                               Int32 ReportBufferLength);
   102 
   103 			[DllImport("hid.dll", SetLastError = true)]
   104 			internal static extern Boolean HidD_GetInputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
   105 			                                                   Int32 ReportBufferLength);
   106 
   107 			[DllImport("hid.dll", SetLastError = true)]
   108 			internal static extern void HidD_GetHidGuid(ref Guid HidGuid);
   109 
   110 			[DllImport("hid.dll", SetLastError = true)]
   111 			internal static extern Boolean HidD_GetNumInputBuffers(SafeFileHandle HidDeviceObject, ref Int32 NumberBuffers);
   112 
   113 			[DllImport("hid.dll", SetLastError = true)]
   114 			internal static extern Boolean HidD_GetPreparsedData(SafeFileHandle HidDeviceObject, ref IntPtr PreparsedData);
   115 
   116 			[DllImport("hid.dll", SetLastError = true)]
   117 			internal static extern Boolean HidD_SetFeature(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
   118 			                                               Int32 ReportBufferLength);
   119 
   120 			[DllImport("hid.dll", SetLastError = true)]
   121 			internal static extern Boolean HidD_SetNumInputBuffers(SafeFileHandle HidDeviceObject, Int32 NumberBuffers);
   122 
   123 			[DllImport("hid.dll", SetLastError = true)]
   124 			internal static extern Boolean HidD_SetOutputReport(SafeFileHandle HidDeviceObject, Byte[] lpReportBuffer,
   125 			                                                    Int32 ReportBufferLength);
   126 
   127 			[DllImport("hid.dll", SetLastError = true)]
   128 			internal static extern Int32 HidP_GetCaps(IntPtr PreparsedData, ref HIDP_CAPS Capabilities);
   129 
   130 			[DllImport("hid.dll", SetLastError = true)]
   131 			internal static extern Int32 HidP_GetValueCaps(Int32 ReportType, Byte[] ValueCaps, ref Int32 ValueCapsLength,
   132 			                                               IntPtr PreparsedData);
   133 		}
   134     } 
   135 }