holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/hidpi.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     1 /*
       
     2  * hidpi.h
       
     3  *
       
     4  * Public Interface for HID parsing library.
       
     5  *
       
     6  * This file is part of the w32api package.
       
     7  *
       
     8  * Contributors:
       
     9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
       
    10  *
       
    11  * THIS SOFTWARE IS NOT COPYRIGHTED
       
    12  *
       
    13  * This source code is offered for use in the public domain. You may
       
    14  * use, modify or distribute it freely.
       
    15  *
       
    16  * This code is distributed in the hope that it will be useful but
       
    17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
       
    18  * DISCLAIMED. This includes but is not limited to warranties of
       
    19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       
    20  *
       
    21  */
       
    22 
       
    23 #ifndef __HIDPI_H
       
    24 #define __HIDPI_H
       
    25 
       
    26 #if __GNUC__ >=3
       
    27 #pragma GCC system_header
       
    28 #endif
       
    29 
       
    30 #ifdef __cplusplus
       
    31 extern "C" {
       
    32 #endif
       
    33 
       
    34 #include "ntddk.h"
       
    35 #include "hidusage.h"
       
    36 
       
    37 #if defined(_HIDPI_)
       
    38   #define HIDAPI DECLSPEC_EXPORT
       
    39 #else
       
    40   #define HIDAPI DECLSPEC_IMPORT
       
    41 #endif
       
    42 
       
    43 typedef PUCHAR PHIDP_REPORT_DESCRIPTOR;
       
    44 typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA;
       
    45 
       
    46 typedef struct _HIDP_UNKNOWN_TOKEN {
       
    47   UCHAR  Token;
       
    48   UCHAR  Reserved[3];
       
    49   ULONG  BitField;
       
    50 } HIDP_UNKNOWN_TOKEN, *PHIDP_UNKNOWN_TOKEN;
       
    51 
       
    52 typedef enum _HIDP_KEYBOARD_DIRECTION {
       
    53   HidP_Keyboard_Break,
       
    54   HidP_Keyboard_Make
       
    55 } HIDP_KEYBOARD_DIRECTION;
       
    56 
       
    57 typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
       
    58   _ANONYMOUS_UNION union {
       
    59     _ANONYMOUS_STRUCT struct {
       
    60       ULONG  LeftControl : 1;
       
    61       ULONG  LeftShift : 1;
       
    62       ULONG  LeftAlt : 1;
       
    63       ULONG  LeftGUI : 1;
       
    64       ULONG  RightControl : 1;
       
    65       ULONG  RightShift : 1;
       
    66       ULONG  RightAlt : 1;
       
    67       ULONG  RigthGUI : 1;
       
    68       ULONG  CapsLock : 1;
       
    69       ULONG  ScollLock : 1;
       
    70       ULONG  NumLock : 1;
       
    71       ULONG  Reserved : 21;
       
    72     } DUMMYSTRUCTNAME;
       
    73     ULONG ul;
       
    74   } DUMMYUNIONNAME;
       
    75 } HIDP_KEYBOARD_MODIFIER_STATE, *PHIDP_KEYBOARD_MODIFIER_STATE;
       
    76 
       
    77 typedef BOOLEAN (DDKAPI *PHIDP_INSERT_SCANCODES)(
       
    78   /*IN*/ PVOID  Context,
       
    79   /*IN*/ PCHAR  NewScanCodes,
       
    80   /*IN*/ ULONG  Length);
       
    81 
       
    82 typedef struct _USAGE_AND_PAGE {
       
    83   USAGE  Usage;
       
    84   USAGE  UsagePage;
       
    85 } USAGE_AND_PAGE, *PUSAGE_AND_PAGE;
       
    86 
       
    87 HIDAPI
       
    88 NTSTATUS
       
    89 DDKAPI
       
    90 HidP_TranslateUsageAndPagesToI8042ScanCodes(
       
    91   /*IN*/ PUSAGE_AND_PAGE  ChangedUsageList,
       
    92   /*IN*/ ULONG  UsageListLength,
       
    93   /*IN*/ HIDP_KEYBOARD_DIRECTION  KeyAction,
       
    94   /*IN OUT*/ PHIDP_KEYBOARD_MODIFIER_STATE  ModifierState,
       
    95   /*IN*/ PHIDP_INSERT_SCANCODES  InsertCodesProcedure,
       
    96   /*IN*/ PVOID  InsertCodesContext);
       
    97 
       
    98 HIDAPI
       
    99 NTSTATUS
       
   100 DDKAPI
       
   101 HidP_TranslateUsagesToI8042ScanCodes(
       
   102   /*IN*/ PUSAGE  ChangedUsageList,
       
   103   /*IN*/ ULONG  UsageListLength,
       
   104   /*IN*/ HIDP_KEYBOARD_DIRECTION  KeyAction,
       
   105   /*IN OUT*/ PHIDP_KEYBOARD_MODIFIER_STATE  ModifierState,
       
   106   /*IN*/ PHIDP_INSERT_SCANCODES  InsertCodesProcedure,
       
   107   /*IN*/ PVOID  InsertCodesContext);
       
   108 
       
   109 typedef struct _HIDP_BUTTON_CAPS {
       
   110   USAGE  UsagePage;
       
   111   UCHAR  ReportID;
       
   112   BOOLEAN  IsAlias;
       
   113   USHORT  BitField;
       
   114   USHORT  LinkCollection;
       
   115   USAGE  LinkUsage;
       
   116   USAGE  LinkUsagePage;
       
   117   BOOLEAN  IsRange;
       
   118   BOOLEAN  IsStringRange;
       
   119   BOOLEAN  IsDesignatorRange;
       
   120   BOOLEAN  IsAbsolute;
       
   121   ULONG  Reserved[10];
       
   122   _ANONYMOUS_UNION union {
       
   123     struct {
       
   124       USAGE  UsageMin, UsageMax;
       
   125       USHORT  StringMin, StringMax;
       
   126       USHORT  DesignatorMin, DesignatorMax;
       
   127       USHORT  DataIndexMin, DataIndexMax;
       
   128     } Range;
       
   129     struct  {
       
   130        USAGE  Usage, Reserved1;
       
   131        USHORT  StringIndex, Reserved2;
       
   132        USHORT  DesignatorIndex, Reserved3;
       
   133        USHORT  DataIndex, Reserved4;
       
   134     } NotRange;
       
   135   } DUMMYUNIONNAME;
       
   136 } HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS;
       
   137 
       
   138 typedef struct _HIDP_CAPS {
       
   139   USAGE  Usage;
       
   140   USAGE  UsagePage;
       
   141   USHORT  InputReportByteLength;
       
   142   USHORT  OutputReportByteLength;
       
   143   USHORT  FeatureReportByteLength;
       
   144   USHORT  Reserved[17];
       
   145   USHORT  NumberLinkCollectionNodes;
       
   146   USHORT  NumberInputButtonCaps;
       
   147   USHORT  NumberInputValueCaps;
       
   148   USHORT  NumberInputDataIndices;
       
   149   USHORT  NumberOutputButtonCaps;
       
   150   USHORT  NumberOutputValueCaps;
       
   151   USHORT  NumberOutputDataIndices;
       
   152   USHORT  NumberFeatureButtonCaps;
       
   153   USHORT  NumberFeatureValueCaps;
       
   154   USHORT  NumberFeatureDataIndices;
       
   155 } HIDP_CAPS, *PHIDP_CAPS;
       
   156 
       
   157 typedef struct _HIDP_DATA {
       
   158   USHORT  DataIndex;
       
   159   USHORT  Reserved;
       
   160   _ANONYMOUS_UNION union {
       
   161     ULONG  RawValue;
       
   162     BOOLEAN  On;
       
   163   }  DUMMYUNIONNAME;
       
   164 } HIDP_DATA, *PHIDP_DATA;
       
   165 
       
   166 typedef struct _HIDP_EXTENDED_ATTRIBUTES {
       
   167   UCHAR  NumGlobalUnknowns;
       
   168   UCHAR  Reserved[3];
       
   169   PHIDP_UNKNOWN_TOKEN  GlobalUnknowns;
       
   170   ULONG  Data[1];
       
   171 } HIDP_EXTENDED_ATTRIBUTES, *PHIDP_EXTENDED_ATTRIBUTES;
       
   172 
       
   173 #define HIDP_LINK_COLLECTION_ROOT         ((USHORT) -1)
       
   174 #define HIDP_LINK_COLLECTION_UNSPECIFIED  ((USHORT) 0)
       
   175 
       
   176 typedef struct _HIDP_LINK_COLLECTION_NODE {
       
   177   USAGE  LinkUsage;
       
   178   USAGE  LinkUsagePage;
       
   179   USHORT  Parent;
       
   180   USHORT  NumberOfChildren;
       
   181   USHORT  NextSibling;
       
   182   USHORT  FirstChild;
       
   183   ULONG  CollectionType: 8;
       
   184   ULONG  IsAlias: 1;
       
   185   ULONG  Reserved: 23;
       
   186   PVOID  UserContext;
       
   187 } HIDP_LINK_COLLECTION_NODE, *PHIDP_LINK_COLLECTION_NODE;
       
   188 
       
   189 typedef struct _HIDP_VALUE_CAPS {
       
   190   USAGE  UsagePage;
       
   191   UCHAR  ReportID;
       
   192   BOOLEAN  IsAlias;
       
   193   USHORT  BitField;
       
   194   USHORT  LinkCollection;
       
   195   USAGE  LinkUsage;
       
   196   USAGE  LinkUsagePage;
       
   197   BOOLEAN  IsRange;
       
   198   BOOLEAN  IsStringRange;
       
   199   BOOLEAN  IsDesignatorRange;
       
   200   BOOLEAN  IsAbsolute;
       
   201   BOOLEAN  HasNull;
       
   202   UCHAR  Reserved;
       
   203   USHORT  BitSize;
       
   204   USHORT  ReportCount;
       
   205   USHORT  Reserved2[5];
       
   206   ULONG  UnitsExp;
       
   207   ULONG  Units;
       
   208   LONG  LogicalMin, LogicalMax;
       
   209   LONG  PhysicalMin, PhysicalMax;
       
   210     _ANONYMOUS_UNION union {
       
   211       struct {
       
   212         USAGE  UsageMin, UsageMax;
       
   213         USHORT  StringMin, StringMax;
       
   214         USHORT  DesignatorMin, DesignatorMax;
       
   215         USHORT  DataIndexMin, DataIndexMax;
       
   216       } Range;
       
   217       struct {
       
   218         USAGE  Usage, Reserved1;
       
   219         USHORT  StringIndex, Reserved2;
       
   220         USHORT  DesignatorIndex, Reserved3;
       
   221         USHORT  DataIndex, Reserved4;
       
   222       } NotRange;
       
   223     } DUMMYUNIONNAME;
       
   224 } HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS;
       
   225 
       
   226 typedef enum _HIDP_REPORT_TYPE {
       
   227   HidP_Input,
       
   228   HidP_Output,
       
   229   HidP_Feature
       
   230 } HIDP_REPORT_TYPE;
       
   231 
       
   232 #define FACILITY_HID_ERROR_CODE           0x11
       
   233 
       
   234 #define HIDP_ERROR_CODES(SEV, CODE) \
       
   235   ((NTSTATUS) (((SEV) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (CODE)))
       
   236 
       
   237 #define HIDP_STATUS_SUCCESS                 (HIDP_ERROR_CODES(0x0, 0))
       
   238 #define HIDP_STATUS_NULL                    (HIDP_ERROR_CODES(0x8, 1))
       
   239 #define HIDP_STATUS_INVALID_PREPARSED_DATA  (HIDP_ERROR_CODES(0xC, 1))
       
   240 #define HIDP_STATUS_INVALID_REPORT_TYPE     (HIDP_ERROR_CODES(0xC, 2))
       
   241 #define HIDP_STATUS_INVALID_REPORT_LENGTH   (HIDP_ERROR_CODES(0xC, 3))
       
   242 #define HIDP_STATUS_USAGE_NOT_FOUND         (HIDP_ERROR_CODES(0xC, 4))
       
   243 #define HIDP_STATUS_VALUE_OUT_OF_RANGE      (HIDP_ERROR_CODES(0xC, 5))
       
   244 #define HIDP_STATUS_BAD_LOG_PHY_VALUES      (HIDP_ERROR_CODES(0xC, 6))
       
   245 #define HIDP_STATUS_BUFFER_TOO_SMALL        (HIDP_ERROR_CODES(0xC, 7))
       
   246 #define HIDP_STATUS_INTERNAL_ERROR          (HIDP_ERROR_CODES(0xC, 8))
       
   247 #define HIDP_STATUS_I8042_TRANS_UNKNOWN     (HIDP_ERROR_CODES(0xC, 9))
       
   248 #define HIDP_STATUS_INCOMPATIBLE_REPORT_ID  (HIDP_ERROR_CODES(0xC, 0xA))
       
   249 #define HIDP_STATUS_NOT_VALUE_ARRAY         (HIDP_ERROR_CODES(0xC, 0xB))
       
   250 #define HIDP_STATUS_IS_VALUE_ARRAY          (HIDP_ERROR_CODES(0xC, 0xC))
       
   251 #define HIDP_STATUS_DATA_INDEX_NOT_FOUND    (HIDP_ERROR_CODES(0xC, 0xD))
       
   252 #define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC, 0xE))
       
   253 #define HIDP_STATUS_BUTTON_NOT_PRESSED      (HIDP_ERROR_CODES(0xC, 0xF))
       
   254 #define HIDP_STATUS_REPORT_DOES_NOT_EXIST   (HIDP_ERROR_CODES(0xC, 0x10))
       
   255 #define HIDP_STATUS_NOT_IMPLEMENTED         (HIDP_ERROR_CODES(0xC, 0x20))
       
   256 #define HIDP_STATUS_I8242_TRANS_UNKNOWN     HIDP_STATUS_I8042_TRANS_UNKNOWN
       
   257 
       
   258 
       
   259 
       
   260 /*
       
   261  * NTSTATUS
       
   262  * HidP_GetButtonCaps(
       
   263  * IN HIDP_REPORT_TYPE  ReportType,
       
   264  * OUT PHIDP_BUTTON_CAPS  ButtonCaps,
       
   265  * IN OUT PULONG  ButtonCapsLength,
       
   266  * IN PHIDP_PREPARSED_DATA  PreparsedData);
       
   267  */
       
   268 #define HidP_GetButtonCaps(_Type_, _Caps_, _Len_, _Data_) \
       
   269   HidP_GetSpecificButtonCaps(_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
       
   270 
       
   271 /*
       
   272  * NTSTATUS
       
   273  * HidP_GetButtons(
       
   274  * IN HIDP_REPORT_TYPE  ReportType,
       
   275  * IN USAGE  UsagePage,
       
   276  * IN USHORT  LinkCollection,
       
   277  * OUT USAGE  *UsageList,
       
   278  * IN OUT ULONG  *UsageLength,
       
   279  * IN PHIDP_PREPARSED_DATA  PreparsedData,
       
   280  * IN PCHAR  Report,
       
   281  * IN ULONG  ReportLength);
       
   282  */
       
   283 #define HidP_GetButtons(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) \
       
   284   HidP_GetUsages(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe)
       
   285 
       
   286 #define HidP_GetButtonListLength(RTy, UPa, Ppd) \
       
   287   HidP_GetUsageListLength(Rty, UPa, Ppd)
       
   288 
       
   289 
       
   290 /*
       
   291  * NTSTATUS
       
   292  * HidP_GetButtonsEx(
       
   293  * IN HIDP_REPORT_TYPE  ReportType,
       
   294  * IN USHORT  LinkCollection,
       
   295  * OUT PUSAGE_AND_PAGE  ButtonList,
       
   296  * IN OUT ULONG  *UsageLength,
       
   297  * IN PHIDP_PREPARSED_DATA  PreparsedData,
       
   298  * IN PCHAR  Report,
       
   299  * IN ULONG  ReportLength);
       
   300  */
       
   301 #define HidP_GetButtonsEx(RT, LC, BL, UL, PD, R, RL)  \
       
   302   HidP_GetUsagesEx(RT, LC, BL, UL, PD, R, RL)
       
   303 
       
   304 HIDAPI
       
   305 NTSTATUS
       
   306 DDKAPI
       
   307 HidP_GetCaps(
       
   308   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   309   /*OUT*/ PHIDP_CAPS  Capabilities);
       
   310 
       
   311 HIDAPI
       
   312 NTSTATUS
       
   313 DDKAPI
       
   314 HidP_GetData(
       
   315   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   316   /*OUT*/ PHIDP_DATA  DataList,
       
   317   /*IN OUT*/ PULONG  DataLength,
       
   318   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   319   /*IN*/ PCHAR  Report,
       
   320   /*IN*/ ULONG  ReportLength);
       
   321 
       
   322 HIDAPI
       
   323 NTSTATUS
       
   324 DDKAPI
       
   325 HidP_GetExtendedAttributes(
       
   326   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   327   /*IN*/ USHORT  DataIndex,
       
   328   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   329   /*OUT*/ PHIDP_EXTENDED_ATTRIBUTES  Attributes,
       
   330   /*IN OUT*/ PULONG  LengthAttributes);
       
   331 
       
   332 HIDAPI
       
   333 NTSTATUS
       
   334 DDKAPI
       
   335 HidP_GetLinkCollectionNodes(
       
   336   /*OUT*/ PHIDP_LINK_COLLECTION_NODE  LinkCollectionNodes,
       
   337   /*IN OUT*/ PULONG  LinkCollectionNodesLength,
       
   338   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
       
   339 
       
   340 HIDAPI
       
   341 NTSTATUS
       
   342 DDKAPI
       
   343 HidP_GetScaledUsageValue(
       
   344   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   345   /*IN*/ USAGE  UsagePage,
       
   346   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
       
   347   /*IN*/ USAGE  Usage,
       
   348   /*OUT*/ PLONG  UsageValue,
       
   349   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   350   /*IN*/ PCHAR  Report,
       
   351   /*IN*/ ULONG  ReportLength);
       
   352 
       
   353 HIDAPI
       
   354 NTSTATUS
       
   355 DDKAPI
       
   356 HidP_GetSpecificButtonCaps(
       
   357   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   358   /*IN*/ USAGE  UsagePage,
       
   359   /*IN*/ USHORT  LinkCollection,
       
   360   /*IN*/ USAGE  Usage,
       
   361   /*OUT*/ PHIDP_BUTTON_CAPS  ButtonCaps,
       
   362   /*IN OUT*/ PULONG  ButtonCapsLength,
       
   363   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
       
   364 
       
   365 HIDAPI
       
   366 NTSTATUS
       
   367 DDKAPI
       
   368 HidP_GetSpecificValueCaps(
       
   369   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   370   /*IN*/ USAGE  UsagePage,
       
   371   /*IN*/ USHORT  LinkCollection,
       
   372   /*IN*/ USAGE  Usage,
       
   373   /*OUT*/ PHIDP_VALUE_CAPS  ValueCaps,
       
   374   /*IN OUT*/ PULONG  ValueCapsLength,
       
   375   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
       
   376 
       
   377 HIDAPI
       
   378 NTSTATUS
       
   379 DDKAPI
       
   380 HidP_GetUsages(
       
   381   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   382   /*IN*/ USAGE  UsagePage,
       
   383   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
       
   384   /*OUT*/ USAGE  *UsageList,
       
   385   /*IN OUT*/ ULONG  *UsageLength,
       
   386   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   387   /*IN*/ PCHAR  Report,
       
   388   /*IN*/ ULONG  ReportLength);
       
   389 
       
   390 HIDAPI
       
   391 NTSTATUS
       
   392 DDKAPI
       
   393 HidP_GetUsagesEx(
       
   394   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   395   /*IN*/ USHORT  LinkCollection,
       
   396   /*OUT*/ PUSAGE_AND_PAGE  ButtonList,
       
   397   /*IN OUT*/ ULONG  *UsageLength,
       
   398   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   399   /*IN*/ PCHAR  Report,
       
   400   /*IN*/ ULONG  ReportLength);
       
   401 
       
   402 HIDAPI
       
   403 NTSTATUS
       
   404 DDKAPI
       
   405 HidP_GetUsageValue(
       
   406   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   407   /*IN*/ USAGE  UsagePage,
       
   408   /*IN*/ USHORT  LinkCollection,
       
   409   /*IN*/ USAGE  Usage,
       
   410   /*OUT*/ PULONG  UsageValue,
       
   411   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   412   /*IN*/ PCHAR  Report,
       
   413   /*IN*/ ULONG  ReportLength);
       
   414 
       
   415 HIDAPI
       
   416 NTSTATUS
       
   417 DDKAPI
       
   418 HidP_GetUsageValueArray(
       
   419   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   420   /*IN*/ USAGE  UsagePage,
       
   421   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
       
   422   /*IN*/ USAGE  Usage,
       
   423   /*OUT*/ PCHAR  UsageValue,
       
   424   /*IN*/ USHORT  UsageValueByteLength,
       
   425   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   426   /*IN*/ PCHAR  Report,
       
   427   /*IN*/ ULONG  ReportLength);
       
   428 
       
   429 /*
       
   430  * NTSTATUS
       
   431  * HidP_GetValueCaps(
       
   432  * IN HIDP_REPORT_TYPE  ReportType,
       
   433  * OUT PHIDP_VALUE_CAPS  ValueCaps,
       
   434  * IN OUT PULONG  ValueCapsLength,
       
   435  * IN PHIDP_PREPARSED_DATA  PreparsedData);
       
   436  */
       
   437 #define HidP_GetValueCaps(_Type_, _Caps_, _Len_, _Data_) \
       
   438   HidP_GetSpecificValueCaps (_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
       
   439 
       
   440 HIDAPI
       
   441 NTSTATUS
       
   442 DDKAPI
       
   443 HidP_InitializeReportForID(
       
   444   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   445   /*IN*/ UCHAR  ReportID,
       
   446   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   447   /*IN OUT*/ PCHAR  Report,
       
   448   /*IN*/ ULONG  ReportLength);
       
   449 
       
   450 /*
       
   451  * BOOLEAN
       
   452  * HidP_IsSameUsageAndPage(
       
   453  *   USAGE_AND_PAGE  u1,
       
   454  *   USAGE_AND_PAGE  u2);
       
   455  */
       
   456 #define HidP_IsSameUsageAndPage(u1, u2) ((* (PULONG) &u1) == (* (PULONG) &u2))
       
   457 
       
   458 HIDAPI
       
   459 ULONG
       
   460 DDKAPI
       
   461 HidP_MaxDataListLength(
       
   462   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   463   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
       
   464 
       
   465 HIDAPI
       
   466 ULONG
       
   467 DDKAPI
       
   468 HidP_MaxUsageListLength(
       
   469   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   470   /*IN*/ USAGE  UsagePage  /*OPTIONAL*/,
       
   471   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
       
   472 
       
   473 /*
       
   474  * NTSTATUS
       
   475  * HidP_SetButtons(
       
   476  * IN HIDP_REPORT_TYPE  ReportType,
       
   477  * IN USAGE  UsagePage,
       
   478  * IN USHORT  LinkCollection,
       
   479  * IN PUSAGE  UsageList,
       
   480  * IN OUT PULONG  UsageLength,
       
   481  * IN PHIDP_PREPARSED_DATA  PreparsedData,
       
   482  * IN OUT PCHAR  Report,
       
   483  * IN ULONG  ReportLength);
       
   484  */
       
   485 #define HidP_SetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
       
   486   HidP_SetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
       
   487 
       
   488 HIDAPI
       
   489 NTSTATUS
       
   490 DDKAPI
       
   491 HidP_SetData(
       
   492   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   493   /*IN*/ PHIDP_DATA  DataList,
       
   494   /*IN OUT*/ PULONG  DataLength,
       
   495   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   496   /*IN OUT*/ PCHAR  Report,
       
   497   /*IN*/ ULONG  ReportLength);
       
   498 
       
   499 HIDAPI
       
   500 NTSTATUS
       
   501 DDKAPI
       
   502 HidP_SetScaledUsageValue(
       
   503   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   504   /*IN*/ USAGE  UsagePage, 
       
   505   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
       
   506   /*IN*/ USAGE  Usage,
       
   507   /*IN*/ LONG  UsageValue,
       
   508   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   509   /*IN OUT*/ PCHAR  Report,
       
   510   /*IN*/ ULONG  ReportLength);
       
   511 
       
   512 HIDAPI
       
   513 NTSTATUS
       
   514 DDKAPI
       
   515 HidP_SetUsages(
       
   516   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   517   /*IN*/ USAGE  UsagePage,
       
   518   /*IN*/ USHORT  LinkCollection /*OPTIONAL*/,
       
   519   /*IN*/ PUSAGE  UsageList,
       
   520   /*IN OUT*/ PULONG  UsageLength,
       
   521   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   522   /*IN OUT*/ PCHAR  Report,
       
   523   /*IN*/ ULONG  ReportLength);
       
   524 
       
   525 HIDAPI
       
   526 NTSTATUS
       
   527 DDKAPI
       
   528 HidP_SetUsageValue(
       
   529   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   530   /*IN*/ USAGE  UsagePage,
       
   531   /*IN*/ USHORT  LinkCollection,
       
   532   /*IN*/ USAGE  Usage,
       
   533   /*IN*/ ULONG  UsageValue,
       
   534   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   535   /*IN OUT*/ PCHAR  Report,
       
   536   /*IN*/ ULONG  ReportLength);
       
   537 
       
   538 HIDAPI
       
   539 NTSTATUS
       
   540 DDKAPI
       
   541 HidP_SetUsageValueArray(
       
   542   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   543   /*IN*/ USAGE  UsagePage,
       
   544   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
       
   545   /*IN*/ USAGE  Usage,
       
   546   /*IN*/ PCHAR  UsageValue,
       
   547   /*IN*/ USHORT  UsageValueByteLength,
       
   548   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   549   /*OUT*/ PCHAR  Report,
       
   550   /*IN*/ ULONG  ReportLength);
       
   551 
       
   552 /*
       
   553  * NTSTATUS
       
   554  * HidP_UnsetButtons(
       
   555  * IN HIDP_REPORT_TYPE  ReportType,
       
   556  * IN USAGE  UsagePage,
       
   557  * IN USHORT  LinkCollection,
       
   558  * IN PUSAGE  UsageList,
       
   559  * IN OUT PULONG  UsageLength,
       
   560  * IN PHIDP_PREPARSED_DATA  PreparsedData,
       
   561  * IN OUT PCHAR  Report,
       
   562  * IN ULONG  ReportLength);
       
   563  */
       
   564 #define HidP_UnsetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
       
   565   HidP_UnsetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
       
   566 
       
   567 HIDAPI
       
   568 NTSTATUS
       
   569 DDKAPI
       
   570 HidP_UnsetUsages(
       
   571   /*IN*/ HIDP_REPORT_TYPE  ReportType,
       
   572   /*IN*/ USAGE  UsagePage,
       
   573   /*IN*/ USHORT  LinkCollection,
       
   574   /*IN*/ PUSAGE  UsageList,
       
   575   /*IN OUT*/ PULONG  UsageLength,
       
   576   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
       
   577   /*IN OUT*/ PCHAR  Report,
       
   578   /*IN*/ ULONG  ReportLength);
       
   579 
       
   580 HIDAPI
       
   581 NTSTATUS
       
   582 DDKAPI
       
   583 HidP_UsageAndPageListDifference(
       
   584   /*IN*/ PUSAGE_AND_PAGE  PreviousUsageList,
       
   585   /*IN*/ PUSAGE_AND_PAGE  CurrentUsageList,
       
   586   /*OUT*/ PUSAGE_AND_PAGE  BreakUsageList,
       
   587   /*OUT*/ PUSAGE_AND_PAGE  MakeUsageList,
       
   588   /*IN*/ ULONG  UsageListLength);
       
   589 
       
   590 HIDAPI
       
   591 NTSTATUS
       
   592 DDKAPI
       
   593 HidP_UsageListDifference(
       
   594   /*IN*/ PUSAGE  PreviousUsageList,
       
   595   /*IN*/ PUSAGE  CurrentUsageList,
       
   596   /*OUT*/ PUSAGE  BreakUsageList,
       
   597   /*OUT*/ PUSAGE  MakeUsageList,
       
   598   /*IN*/ ULONG  UsageListLength);
       
   599 
       
   600 #ifdef __cplusplus
       
   601 }
       
   602 #endif
       
   603 
       
   604 #endif /* __HIDPI_H */