home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / hidclass.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  5KB  |  154 lines

  1. /*
  2.  * hidclass.h
  3.  *
  4.  * HID class driver interface
  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 __HIDCLASS_H
  24. #define __HIDCLASS_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 "hidpi.h"
  36.  
  37. #define HID_REVISION                      0x00000001
  38.  
  39. DEFINE_GUID (GUID_DEVINTERFACE_HID, \
  40.   0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30);
  41. DEFINE_GUID (GUID_HID_INTERFACE_NOTIFY, \
  42.   0x2c4e2e88L, 0x25e6, 0x4c33, 0x88, 0x2f, 0x3d, 0x82, 0xe6, 0x07, 0x36, 0x81);
  43. DEFINE_GUID (GUID_HID_INTERFACE_HIDPARSE, \
  44.   0xf5c315a5, 0x69ac, 0x4bc2, 0x92, 0x79, 0xd0, 0xb6, 0x45, 0x76, 0xf4, 0x4b);
  45.  
  46. #define GUID_CLASS_INPUT GUID_DEVINTERFACE_HID
  47.  
  48. #define GUID_CLASS_INPUT_STR "4D1E55B2-F16F-11CF-88CB-001111000030"
  49.  
  50.  
  51. #define HID_CTL_CODE(id) \
  52.   CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_NEITHER, FILE_ANY_ACCESS)
  53. #define HID_BUFFER_CTL_CODE(id) \
  54.   CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_BUFFERED, FILE_ANY_ACCESS)
  55. #define HID_IN_CTL_CODE(id) \
  56.   CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_IN_DIRECT, FILE_ANY_ACCESS)
  57. #define HID_OUT_CTL_CODE(id) \
  58.   CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  59.  
  60.  
  61. #define IOCTL_GET_PHYSICAL_DESCRIPTOR         HID_OUT_CTL_CODE(102)
  62. #define IOCTL_HID_FLUSH_QUEUE                 HID_CTL_CODE(101)
  63. #define IOCTL_HID_GET_COLLECTION_DESCRIPTOR   HID_CTL_CODE(100)
  64. #define IOCTL_HID_GET_COLLECTION_INFORMATION  HID_BUFFER_CTL_CODE(106)
  65. #define IOCTL_HID_GET_FEATURE                 HID_OUT_CTL_CODE(100)
  66. #define IOCTL_HID_GET_HARDWARE_ID             HID_OUT_CTL_CODE(103)
  67. #define IOCTL_HID_GET_INDEXED_STRING          HID_OUT_CTL_CODE(120)
  68. #define IOCTL_HID_GET_INPUT_REPORT            HID_OUT_CTL_CODE(104)
  69. #define IOCTL_HID_GET_MANUFACTURER_STRING     HID_OUT_CTL_CODE(110)
  70. #define IOCTL_GET_NUM_DEVICE_INPUT_BUFFERS    HID_BUFFER_CTL_CODE(104)
  71. #define IOCTL_HID_GET_POLL_FREQUENCY_MSEC     HID_BUFFER_CTL_CODE(102)
  72. #define IOCTL_HID_GET_PRODUCT_STRING          HID_OUT_CTL_CODE(111)
  73. #define IOCTL_HID_GET_SERIALNUMBER_STRING     HID_OUT_CTL_CODE(112)
  74. #define IOCTL_HID_SET_FEATURE                 HID_IN_CTL_CODE(100)
  75. #define IOCTL_SET_NUM_DEVICE_INPUT_BUFFERS    HID_BUFFER_CTL_CODE(105)
  76. #define IOCTL_HID_SET_OUTPUT_REPORT           HID_IN_CTL_CODE(101)
  77. #define IOCTL_HID_SET_POLL_FREQUENCY_MSEC     HID_BUFFER_CTL_CODE(103)
  78.  
  79. #define IOCTL_HID_GET_DRIVER_CONFIG           HID_BUFFER_CTL_CODE(100)
  80. #define IOCTL_HID_SET_DRIVER_CONFIG           HID_BUFFER_CTL_CODE(101)
  81. #define IOCTL_HID_GET_MS_GENRE_DESCRIPTOR     HID_OUT_CTL_CODE(121)
  82.  
  83.  
  84. enum DeviceObjectState {
  85.   DeviceObjectStarted = 0,
  86.   DeviceObjectStopped,
  87.   DeviceObjectRemoved
  88. };
  89.  
  90. typedef VOID DDKAPI (*PHID_STATUS_CHANGE)(
  91.   PVOID  Context,
  92.   enum DeviceObjectState  State);
  93.  
  94. typedef NTSTATUS DDKAPI (*PHIDP_GETCAPS)(
  95.   IN PHIDP_PREPARSED_DATA  PreparsedData,
  96.   OUT PHIDP_CAPS  Capabilities);
  97.  
  98. typedef struct _HID_COLLECTION_INFORMATION {
  99.   ULONG  DescriptorSize;
  100.   BOOLEAN  Polled;
  101.   UCHAR  Reserved1[1];
  102.   USHORT  VendorID;
  103.   USHORT  ProductID;
  104.   USHORT  VersionNumber;
  105. } HID_COLLECTION_INFORMATION, *PHID_COLLECTION_INFORMATION;
  106.  
  107. typedef struct _HID_DRIVER_CONFIG {
  108.   ULONG  Size;
  109.   ULONG  RingBufferSize;
  110. } HID_DRIVER_CONFIG, *PHID_DRIVER_CONFIG;
  111.  
  112. typedef struct _HID_INTERFACE_HIDPARSE {
  113. #ifdef __cplusplus
  114.   INTERFACE  i;
  115. #else
  116.   /* GCC doesn't support including unnamed structs, so INTERFACE is
  117.      expanded here */
  118.   USHORT  Size;
  119.   USHORT  Version;
  120.   PVOID  Context;
  121.   PINTERFACE_REFERENCE  InterfaceReference;
  122.   PINTERFACE_DEREFERENCE  InterfaceDereference;
  123. #endif
  124.   PHIDP_GETCAPS  HidpGetCaps;
  125. } HID_INTERFACE_HIDPARSE, *PHID_INTERFACE_HIDPARSE;
  126.  
  127. typedef struct _HID_INTERFACE_NOTIFY_PNP {
  128. #ifdef __cplusplus
  129.   INTERFACE  i;
  130. #else
  131.   /* GCC doesn't support including unnamed structs, so INTERFACE is
  132.      expanded here */
  133.   USHORT  Size;
  134.   USHORT  Version;
  135.   PVOID  Context;
  136.   PINTERFACE_REFERENCE  InterfaceReference;
  137.   PINTERFACE_DEREFERENCE  InterfaceDereference;
  138. #endif
  139.   PHID_STATUS_CHANGE  StatusChangeFn;
  140.   PVOID  CallbackContext;
  141. } HID_INTERFACE_NOTIFY_PNP, *PHID_INTERFACE_NOTIFY_PNP;
  142.  
  143. typedef struct _HID_XFER_PACKET {
  144.   PUCHAR  reportBuffer;
  145.   ULONG  reportBufferLen;
  146.   UCHAR  reportId;
  147. } HID_XFER_PACKET, *PHID_XFER_PACKET;
  148.  
  149. #ifdef __cplusplus
  150. }
  151. #endif
  152.  
  153. #endif /* __HIDCLASS_H */
  154.