Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers hidpi.h Source File

hidpi.h

00001 /*
00002  * hidpi.h
00003  *
00004  * Public Interface for HID parsing library.
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __HIDPI_H
00024 #define __HIDPI_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 #include "hidusage.h"
00036 
00037 #if defined(_HIDPI_)
00038   #define HIDAPI DECLSPEC_EXPORT
00039 #else
00040   #define HIDAPI DECLSPEC_IMPORT
00041 #endif
00042 
00043 typedef PUCHAR PHIDP_REPORT_DESCRIPTOR;
00044 typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA;
00045 
00046 typedef struct _HIDP_UNKNOWN_TOKEN {
00047   UCHAR  Token;
00048   UCHAR  Reserved[3];
00049   ULONG  BitField;
00050 } HIDP_UNKNOWN_TOKEN, *PHIDP_UNKNOWN_TOKEN;
00051 
00052 typedef enum _HIDP_KEYBOARD_DIRECTION {
00053   HidP_Keyboard_Break,
00054   HidP_Keyboard_Make
00055 } HIDP_KEYBOARD_DIRECTION;
00056 
00057 typedef struct _HIDP_KEYBOARD_MODIFIER_STATE {
00058   _ANONYMOUS_UNION union {
00059     _ANONYMOUS_STRUCT struct {
00060       ULONG  LeftControl : 1;
00061       ULONG  LeftShift : 1;
00062       ULONG  LeftAlt : 1;
00063       ULONG  LeftGUI : 1;
00064       ULONG  RightControl : 1;
00065       ULONG  RightShift : 1;
00066       ULONG  RightAlt : 1;
00067       ULONG  RigthGUI : 1;
00068       ULONG  CapsLock : 1;
00069       ULONG  ScollLock : 1;
00070       ULONG  NumLock : 1;
00071       ULONG  Reserved : 21;
00072     } DUMMYSTRUCTNAME;
00073     ULONG ul;
00074   } DUMMYUNIONNAME;
00075 } HIDP_KEYBOARD_MODIFIER_STATE, *PHIDP_KEYBOARD_MODIFIER_STATE;
00076 
00077 typedef BOOLEAN (DDKAPI *PHIDP_INSERT_SCANCODES)(
00078   /*IN*/ PVOID  Context,
00079   /*IN*/ PCHAR  NewScanCodes,
00080   /*IN*/ ULONG  Length);
00081 
00082 typedef struct _USAGE_AND_PAGE {
00083   USAGE  Usage;
00084   USAGE  UsagePage;
00085 } USAGE_AND_PAGE, *PUSAGE_AND_PAGE;
00086 
00087 HIDAPI
00088 NTSTATUS
00089 DDKAPI
00090 HidP_TranslateUsageAndPagesToI8042ScanCodes(
00091   /*IN*/ PUSAGE_AND_PAGE  ChangedUsageList,
00092   /*IN*/ ULONG  UsageListLength,
00093   /*IN*/ HIDP_KEYBOARD_DIRECTION  KeyAction,
00094   /*IN OUT*/ PHIDP_KEYBOARD_MODIFIER_STATE  ModifierState,
00095   /*IN*/ PHIDP_INSERT_SCANCODES  InsertCodesProcedure,
00096   /*IN*/ PVOID  InsertCodesContext);
00097 
00098 HIDAPI
00099 NTSTATUS
00100 DDKAPI
00101 HidP_TranslateUsagesToI8042ScanCodes(
00102   /*IN*/ PUSAGE  ChangedUsageList,
00103   /*IN*/ ULONG  UsageListLength,
00104   /*IN*/ HIDP_KEYBOARD_DIRECTION  KeyAction,
00105   /*IN OUT*/ PHIDP_KEYBOARD_MODIFIER_STATE  ModifierState,
00106   /*IN*/ PHIDP_INSERT_SCANCODES  InsertCodesProcedure,
00107   /*IN*/ PVOID  InsertCodesContext);
00108 
00109 typedef struct _HIDP_BUTTON_CAPS {
00110   USAGE  UsagePage;
00111   UCHAR  ReportID;
00112   BOOLEAN  IsAlias;
00113   USHORT  BitField;
00114   USHORT  LinkCollection;
00115   USAGE  LinkUsage;
00116   USAGE  LinkUsagePage;
00117   BOOLEAN  IsRange;
00118   BOOLEAN  IsStringRange;
00119   BOOLEAN  IsDesignatorRange;
00120   BOOLEAN  IsAbsolute;
00121   ULONG  Reserved[10];
00122   _ANONYMOUS_UNION union {
00123     struct {
00124       USAGE  UsageMin, UsageMax;
00125       USHORT  StringMin, StringMax;
00126       USHORT  DesignatorMin, DesignatorMax;
00127       USHORT  DataIndexMin, DataIndexMax;
00128     } Range;
00129     struct  {
00130        USAGE  Usage, Reserved1;
00131        USHORT  StringIndex, Reserved2;
00132        USHORT  DesignatorIndex, Reserved3;
00133        USHORT  DataIndex, Reserved4;
00134     } NotRange;
00135   } DUMMYUNIONNAME;
00136 } HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS;
00137 
00138 typedef struct _HIDP_CAPS {
00139   USAGE  Usage;
00140   USAGE  UsagePage;
00141   USHORT  InputReportByteLength;
00142   USHORT  OutputReportByteLength;
00143   USHORT  FeatureReportByteLength;
00144   USHORT  Reserved[17];
00145   USHORT  NumberLinkCollectionNodes;
00146   USHORT  NumberInputButtonCaps;
00147   USHORT  NumberInputValueCaps;
00148   USHORT  NumberInputDataIndices;
00149   USHORT  NumberOutputButtonCaps;
00150   USHORT  NumberOutputValueCaps;
00151   USHORT  NumberOutputDataIndices;
00152   USHORT  NumberFeatureButtonCaps;
00153   USHORT  NumberFeatureValueCaps;
00154   USHORT  NumberFeatureDataIndices;
00155 } HIDP_CAPS, *PHIDP_CAPS;
00156 
00157 typedef struct _HIDP_DATA {
00158   USHORT  DataIndex;
00159   USHORT  Reserved;
00160   _ANONYMOUS_UNION union {
00161     ULONG  RawValue;
00162     BOOLEAN  On;
00163   }  DUMMYUNIONNAME;
00164 } HIDP_DATA, *PHIDP_DATA;
00165 
00166 typedef struct _HIDP_EXTENDED_ATTRIBUTES {
00167   UCHAR  NumGlobalUnknowns;
00168   UCHAR  Reserved[3];
00169   PHIDP_UNKNOWN_TOKEN  GlobalUnknowns;
00170   ULONG  Data[1];
00171 } HIDP_EXTENDED_ATTRIBUTES, *PHIDP_EXTENDED_ATTRIBUTES;
00172 
00173 #define HIDP_LINK_COLLECTION_ROOT         ((USHORT) -1)
00174 #define HIDP_LINK_COLLECTION_UNSPECIFIED  ((USHORT) 0)
00175 
00176 typedef struct _HIDP_LINK_COLLECTION_NODE {
00177   USAGE  LinkUsage;
00178   USAGE  LinkUsagePage;
00179   USHORT  Parent;
00180   USHORT  NumberOfChildren;
00181   USHORT  NextSibling;
00182   USHORT  FirstChild;
00183   ULONG  CollectionType: 8;
00184   ULONG  IsAlias: 1;
00185   ULONG  Reserved: 23;
00186   PVOID  UserContext;
00187 } HIDP_LINK_COLLECTION_NODE, *PHIDP_LINK_COLLECTION_NODE;
00188 
00189 typedef struct _HIDP_VALUE_CAPS {
00190   USAGE  UsagePage;
00191   UCHAR  ReportID;
00192   BOOLEAN  IsAlias;
00193   USHORT  BitField;
00194   USHORT  LinkCollection;
00195   USAGE  LinkUsage;
00196   USAGE  LinkUsagePage;
00197   BOOLEAN  IsRange;
00198   BOOLEAN  IsStringRange;
00199   BOOLEAN  IsDesignatorRange;
00200   BOOLEAN  IsAbsolute;
00201   BOOLEAN  HasNull;
00202   UCHAR  Reserved;
00203   USHORT  BitSize;
00204   USHORT  ReportCount;
00205   USHORT  Reserved2[5];
00206   ULONG  UnitsExp;
00207   ULONG  Units;
00208   LONG  LogicalMin, LogicalMax;
00209   LONG  PhysicalMin, PhysicalMax;
00210     _ANONYMOUS_UNION union {
00211       struct {
00212         USAGE  UsageMin, UsageMax;
00213         USHORT  StringMin, StringMax;
00214         USHORT  DesignatorMin, DesignatorMax;
00215         USHORT  DataIndexMin, DataIndexMax;
00216       } Range;
00217       struct {
00218         USAGE  Usage, Reserved1;
00219         USHORT  StringIndex, Reserved2;
00220         USHORT  DesignatorIndex, Reserved3;
00221         USHORT  DataIndex, Reserved4;
00222       } NotRange;
00223     } DUMMYUNIONNAME;
00224 } HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS;
00225 
00226 typedef enum _HIDP_REPORT_TYPE {
00227   HidP_Input,
00228   HidP_Output,
00229   HidP_Feature
00230 } HIDP_REPORT_TYPE;
00231 
00232 #define FACILITY_HID_ERROR_CODE           0x11
00233 
00234 #define HIDP_ERROR_CODES(SEV, CODE) \
00235   ((NTSTATUS) (((SEV) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (CODE)))
00236 
00237 #define HIDP_STATUS_SUCCESS                 (HIDP_ERROR_CODES(0x0, 0))
00238 #define HIDP_STATUS_NULL                    (HIDP_ERROR_CODES(0x8, 1))
00239 #define HIDP_STATUS_INVALID_PREPARSED_DATA  (HIDP_ERROR_CODES(0xC, 1))
00240 #define HIDP_STATUS_INVALID_REPORT_TYPE     (HIDP_ERROR_CODES(0xC, 2))
00241 #define HIDP_STATUS_INVALID_REPORT_LENGTH   (HIDP_ERROR_CODES(0xC, 3))
00242 #define HIDP_STATUS_USAGE_NOT_FOUND         (HIDP_ERROR_CODES(0xC, 4))
00243 #define HIDP_STATUS_VALUE_OUT_OF_RANGE      (HIDP_ERROR_CODES(0xC, 5))
00244 #define HIDP_STATUS_BAD_LOG_PHY_VALUES      (HIDP_ERROR_CODES(0xC, 6))
00245 #define HIDP_STATUS_BUFFER_TOO_SMALL        (HIDP_ERROR_CODES(0xC, 7))
00246 #define HIDP_STATUS_INTERNAL_ERROR          (HIDP_ERROR_CODES(0xC, 8))
00247 #define HIDP_STATUS_I8042_TRANS_UNKNOWN     (HIDP_ERROR_CODES(0xC, 9))
00248 #define HIDP_STATUS_INCOMPATIBLE_REPORT_ID  (HIDP_ERROR_CODES(0xC, 0xA))
00249 #define HIDP_STATUS_NOT_VALUE_ARRAY         (HIDP_ERROR_CODES(0xC, 0xB))
00250 #define HIDP_STATUS_IS_VALUE_ARRAY          (HIDP_ERROR_CODES(0xC, 0xC))
00251 #define HIDP_STATUS_DATA_INDEX_NOT_FOUND    (HIDP_ERROR_CODES(0xC, 0xD))
00252 #define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC, 0xE))
00253 #define HIDP_STATUS_BUTTON_NOT_PRESSED      (HIDP_ERROR_CODES(0xC, 0xF))
00254 #define HIDP_STATUS_REPORT_DOES_NOT_EXIST   (HIDP_ERROR_CODES(0xC, 0x10))
00255 #define HIDP_STATUS_NOT_IMPLEMENTED         (HIDP_ERROR_CODES(0xC, 0x20))
00256 #define HIDP_STATUS_I8242_TRANS_UNKNOWN     HIDP_STATUS_I8042_TRANS_UNKNOWN
00257 
00258 
00259 
00260 /*
00261  * NTSTATUS
00262  * HidP_GetButtonCaps(
00263  * IN HIDP_REPORT_TYPE  ReportType,
00264  * OUT PHIDP_BUTTON_CAPS  ButtonCaps,
00265  * IN OUT PULONG  ButtonCapsLength,
00266  * IN PHIDP_PREPARSED_DATA  PreparsedData);
00267  */
00268 #define HidP_GetButtonCaps(_Type_, _Caps_, _Len_, _Data_) \
00269   HidP_GetSpecificButtonCaps(_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
00270 
00271 /*
00272  * NTSTATUS
00273  * HidP_GetButtons(
00274  * IN HIDP_REPORT_TYPE  ReportType,
00275  * IN USAGE  UsagePage,
00276  * IN USHORT  LinkCollection,
00277  * OUT USAGE  *UsageList,
00278  * IN OUT ULONG  *UsageLength,
00279  * IN PHIDP_PREPARSED_DATA  PreparsedData,
00280  * IN PCHAR  Report,
00281  * IN ULONG  ReportLength);
00282  */
00283 #define HidP_GetButtons(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) \
00284   HidP_GetUsages(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe)
00285 
00286 #define HidP_GetButtonListLength(RTy, UPa, Ppd) \
00287   HidP_GetUsageListLength(Rty, UPa, Ppd)
00288 
00289 
00290 /*
00291  * NTSTATUS
00292  * HidP_GetButtonsEx(
00293  * IN HIDP_REPORT_TYPE  ReportType,
00294  * IN USHORT  LinkCollection,
00295  * OUT PUSAGE_AND_PAGE  ButtonList,
00296  * IN OUT ULONG  *UsageLength,
00297  * IN PHIDP_PREPARSED_DATA  PreparsedData,
00298  * IN PCHAR  Report,
00299  * IN ULONG  ReportLength);
00300  */
00301 #define HidP_GetButtonsEx(RT, LC, BL, UL, PD, R, RL)  \
00302   HidP_GetUsagesEx(RT, LC, BL, UL, PD, R, RL)
00303 
00304 HIDAPI
00305 NTSTATUS
00306 DDKAPI
00307 HidP_GetCaps(
00308   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00309   /*OUT*/ PHIDP_CAPS  Capabilities);
00310 
00311 HIDAPI
00312 NTSTATUS
00313 DDKAPI
00314 HidP_GetData(
00315   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00316   /*OUT*/ PHIDP_DATA  DataList,
00317   /*IN OUT*/ PULONG  DataLength,
00318   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00319   /*IN*/ PCHAR  Report,
00320   /*IN*/ ULONG  ReportLength);
00321 
00322 HIDAPI
00323 NTSTATUS
00324 DDKAPI
00325 HidP_GetExtendedAttributes(
00326   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00327   /*IN*/ USHORT  DataIndex,
00328   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00329   /*OUT*/ PHIDP_EXTENDED_ATTRIBUTES  Attributes,
00330   /*IN OUT*/ PULONG  LengthAttributes);
00331 
00332 HIDAPI
00333 NTSTATUS
00334 DDKAPI
00335 HidP_GetLinkCollectionNodes(
00336   /*OUT*/ PHIDP_LINK_COLLECTION_NODE  LinkCollectionNodes,
00337   /*IN OUT*/ PULONG  LinkCollectionNodesLength,
00338   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
00339 
00340 HIDAPI
00341 NTSTATUS
00342 DDKAPI
00343 HidP_GetScaledUsageValue(
00344   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00345   /*IN*/ USAGE  UsagePage,
00346   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
00347   /*IN*/ USAGE  Usage,
00348   /*OUT*/ PLONG  UsageValue,
00349   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00350   /*IN*/ PCHAR  Report,
00351   /*IN*/ ULONG  ReportLength);
00352 
00353 HIDAPI
00354 NTSTATUS
00355 DDKAPI
00356 HidP_GetSpecificButtonCaps(
00357   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00358   /*IN*/ USAGE  UsagePage,
00359   /*IN*/ USHORT  LinkCollection,
00360   /*IN*/ USAGE  Usage,
00361   /*OUT*/ PHIDP_BUTTON_CAPS  ButtonCaps,
00362   /*IN OUT*/ PULONG  ButtonCapsLength,
00363   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
00364 
00365 HIDAPI
00366 NTSTATUS
00367 DDKAPI
00368 HidP_GetSpecificValueCaps(
00369   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00370   /*IN*/ USAGE  UsagePage,
00371   /*IN*/ USHORT  LinkCollection,
00372   /*IN*/ USAGE  Usage,
00373   /*OUT*/ PHIDP_VALUE_CAPS  ValueCaps,
00374   /*IN OUT*/ PULONG  ValueCapsLength,
00375   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
00376 
00377 HIDAPI
00378 NTSTATUS
00379 DDKAPI
00380 HidP_GetUsages(
00381   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00382   /*IN*/ USAGE  UsagePage,
00383   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
00384   /*OUT*/ USAGE  *UsageList,
00385   /*IN OUT*/ ULONG  *UsageLength,
00386   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00387   /*IN*/ PCHAR  Report,
00388   /*IN*/ ULONG  ReportLength);
00389 
00390 HIDAPI
00391 NTSTATUS
00392 DDKAPI
00393 HidP_GetUsagesEx(
00394   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00395   /*IN*/ USHORT  LinkCollection,
00396   /*OUT*/ PUSAGE_AND_PAGE  ButtonList,
00397   /*IN OUT*/ ULONG  *UsageLength,
00398   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00399   /*IN*/ PCHAR  Report,
00400   /*IN*/ ULONG  ReportLength);
00401 
00402 HIDAPI
00403 NTSTATUS
00404 DDKAPI
00405 HidP_GetUsageValue(
00406   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00407   /*IN*/ USAGE  UsagePage,
00408   /*IN*/ USHORT  LinkCollection,
00409   /*IN*/ USAGE  Usage,
00410   /*OUT*/ PULONG  UsageValue,
00411   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00412   /*IN*/ PCHAR  Report,
00413   /*IN*/ ULONG  ReportLength);
00414 
00415 HIDAPI
00416 NTSTATUS
00417 DDKAPI
00418 HidP_GetUsageValueArray(
00419   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00420   /*IN*/ USAGE  UsagePage,
00421   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
00422   /*IN*/ USAGE  Usage,
00423   /*OUT*/ PCHAR  UsageValue,
00424   /*IN*/ USHORT  UsageValueByteLength,
00425   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00426   /*IN*/ PCHAR  Report,
00427   /*IN*/ ULONG  ReportLength);
00428 
00429 /*
00430  * NTSTATUS
00431  * HidP_GetValueCaps(
00432  * IN HIDP_REPORT_TYPE  ReportType,
00433  * OUT PHIDP_VALUE_CAPS  ValueCaps,
00434  * IN OUT PULONG  ValueCapsLength,
00435  * IN PHIDP_PREPARSED_DATA  PreparsedData);
00436  */
00437 #define HidP_GetValueCaps(_Type_, _Caps_, _Len_, _Data_) \
00438   HidP_GetSpecificValueCaps (_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
00439 
00440 HIDAPI
00441 NTSTATUS
00442 DDKAPI
00443 HidP_InitializeReportForID(
00444   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00445   /*IN*/ UCHAR  ReportID,
00446   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00447   /*IN OUT*/ PCHAR  Report,
00448   /*IN*/ ULONG  ReportLength);
00449 
00450 /*
00451  * BOOLEAN
00452  * HidP_IsSameUsageAndPage(
00453  *   USAGE_AND_PAGE  u1,
00454  *   USAGE_AND_PAGE  u2);
00455  */
00456 #define HidP_IsSameUsageAndPage(u1, u2) ((* (PULONG) &u1) == (* (PULONG) &u2))
00457 
00458 HIDAPI
00459 ULONG
00460 DDKAPI
00461 HidP_MaxDataListLength(
00462   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00463   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
00464 
00465 HIDAPI
00466 ULONG
00467 DDKAPI
00468 HidP_MaxUsageListLength(
00469   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00470   /*IN*/ USAGE  UsagePage  /*OPTIONAL*/,
00471   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData);
00472 
00473 /*
00474  * NTSTATUS
00475  * HidP_SetButtons(
00476  * IN HIDP_REPORT_TYPE  ReportType,
00477  * IN USAGE  UsagePage,
00478  * IN USHORT  LinkCollection,
00479  * IN PUSAGE  UsageList,
00480  * IN OUT PULONG  UsageLength,
00481  * IN PHIDP_PREPARSED_DATA  PreparsedData,
00482  * IN OUT PCHAR  Report,
00483  * IN ULONG  ReportLength);
00484  */
00485 #define HidP_SetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
00486   HidP_SetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
00487 
00488 HIDAPI
00489 NTSTATUS
00490 DDKAPI
00491 HidP_SetData(
00492   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00493   /*IN*/ PHIDP_DATA  DataList,
00494   /*IN OUT*/ PULONG  DataLength,
00495   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00496   /*IN OUT*/ PCHAR  Report,
00497   /*IN*/ ULONG  ReportLength);
00498 
00499 HIDAPI
00500 NTSTATUS
00501 DDKAPI
00502 HidP_SetScaledUsageValue(
00503   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00504   /*IN*/ USAGE  UsagePage, 
00505   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
00506   /*IN*/ USAGE  Usage,
00507   /*IN*/ LONG  UsageValue,
00508   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00509   /*IN OUT*/ PCHAR  Report,
00510   /*IN*/ ULONG  ReportLength);
00511 
00512 HIDAPI
00513 NTSTATUS
00514 DDKAPI
00515 HidP_SetUsages(
00516   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00517   /*IN*/ USAGE  UsagePage,
00518   /*IN*/ USHORT  LinkCollection /*OPTIONAL*/,
00519   /*IN*/ PUSAGE  UsageList,
00520   /*IN OUT*/ PULONG  UsageLength,
00521   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00522   /*IN OUT*/ PCHAR  Report,
00523   /*IN*/ ULONG  ReportLength);
00524 
00525 HIDAPI
00526 NTSTATUS
00527 DDKAPI
00528 HidP_SetUsageValue(
00529   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00530   /*IN*/ USAGE  UsagePage,
00531   /*IN*/ USHORT  LinkCollection,
00532   /*IN*/ USAGE  Usage,
00533   /*IN*/ ULONG  UsageValue,
00534   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00535   /*IN OUT*/ PCHAR  Report,
00536   /*IN*/ ULONG  ReportLength);
00537 
00538 HIDAPI
00539 NTSTATUS
00540 DDKAPI
00541 HidP_SetUsageValueArray(
00542   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00543   /*IN*/ USAGE  UsagePage,
00544   /*IN*/ USHORT  LinkCollection  /*OPTIONAL*/,
00545   /*IN*/ USAGE  Usage,
00546   /*IN*/ PCHAR  UsageValue,
00547   /*IN*/ USHORT  UsageValueByteLength,
00548   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00549   /*OUT*/ PCHAR  Report,
00550   /*IN*/ ULONG  ReportLength);
00551 
00552 /*
00553  * NTSTATUS
00554  * HidP_UnsetButtons(
00555  * IN HIDP_REPORT_TYPE  ReportType,
00556  * IN USAGE  UsagePage,
00557  * IN USHORT  LinkCollection,
00558  * IN PUSAGE  UsageList,
00559  * IN OUT PULONG  UsageLength,
00560  * IN PHIDP_PREPARSED_DATA  PreparsedData,
00561  * IN OUT PCHAR  Report,
00562  * IN ULONG  ReportLength);
00563  */
00564 #define HidP_UnsetButtons(RT, UP, LC, UL1, UL2, PD, R, RL) \
00565   HidP_UnsetUsages(RT, UP, LC, UL1, UL2, PD, R, RL)
00566 
00567 HIDAPI
00568 NTSTATUS
00569 DDKAPI
00570 HidP_UnsetUsages(
00571   /*IN*/ HIDP_REPORT_TYPE  ReportType,
00572   /*IN*/ USAGE  UsagePage,
00573   /*IN*/ USHORT  LinkCollection,
00574   /*IN*/ PUSAGE  UsageList,
00575   /*IN OUT*/ PULONG  UsageLength,
00576   /*IN*/ PHIDP_PREPARSED_DATA  PreparsedData,
00577   /*IN OUT*/ PCHAR  Report,
00578   /*IN*/ ULONG  ReportLength);
00579 
00580 HIDAPI
00581 NTSTATUS
00582 DDKAPI
00583 HidP_UsageAndPageListDifference(
00584   /*IN*/ PUSAGE_AND_PAGE  PreviousUsageList,
00585   /*IN*/ PUSAGE_AND_PAGE  CurrentUsageList,
00586   /*OUT*/ PUSAGE_AND_PAGE  BreakUsageList,
00587   /*OUT*/ PUSAGE_AND_PAGE  MakeUsageList,
00588   /*IN*/ ULONG  UsageListLength);
00589 
00590 HIDAPI
00591 NTSTATUS
00592 DDKAPI
00593 HidP_UsageListDifference(
00594   /*IN*/ PUSAGE  PreviousUsageList,
00595   /*IN*/ PUSAGE  CurrentUsageList,
00596   /*OUT*/ PUSAGE  BreakUsageList,
00597   /*OUT*/ PUSAGE  MakeUsageList,
00598   /*IN*/ ULONG  UsageListLength);
00599 
00600 #ifdef __cplusplus
00601 }
00602 #endif
00603 
00604 #endif /* __HIDPI_H */