home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / ddk / hidpi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  14.9 KB  |  609 lines

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