| Line No. | Rev | Author | Line |
|---|---|---|---|
| 1 | 32 | kaklik | /****************************************************************************** |
| 2 | |||
| 3 | USB Host Human Interface Device Driver Header File |
||
| 4 | |||
| 5 | Description: |
||
| 6 | This is the header file for a USB Embedded Host that is Human Interface |
||
| 7 | Device Class . |
||
| 8 | |||
| 9 | This file should be included with usb_host.h to provide the USB hardware |
||
| 10 | interface. It must be included after the application-specific usb_config.h |
||
| 11 | file and after the USB Embedded Host header file usb_host.h, as definitions |
||
| 12 | in those files are required for proper compilation. |
||
| 13 | |||
| 14 | Acronyms/abbreviations used by this class: |
||
| 15 | * HID - Human Interface Device |
||
| 16 | |||
| 17 | To interface with usb_host.c, the routine USBHostHIDInitialize() should be |
||
| 18 | specified as the Initialize() function, and USBHostHIDEventHandler() should |
||
| 19 | be specified as the EventHandler() function in the usbClientDrvTable[] array |
||
| 20 | declared in usb_config.h. |
||
| 21 | |||
| 22 | This driver can be configured to use transfer events from usb_host.c. Transfer |
||
| 23 | events require more RAM and ROM than polling, but it cuts down or even |
||
| 24 | eliminates the required polling of the various USBxxxTasks functions. For this |
||
| 25 | class, USBHostHIDTasks() is compiled out if transfer events from usb_host.c |
||
| 26 | are used. However, USBHostTasks() still must be called to provide attach, |
||
| 27 | enumeration, and detach services. If transfer events from usb_host.c |
||
| 28 | are going to be used, USB_ENABLE_TRANSFER_EVENT should be defined. If transfer |
||
| 29 | status is going to be polled, USB_ENABLE_TRANSFER_EVENT should not be defined. |
||
| 30 | |||
| 31 | This driver can also be configured to provide HID transfer events to |
||
| 32 | the next layer. Generating these events requires a small amount of extra ROM, |
||
| 33 | but no extra RAM. The layer above this driver must be configured to receive |
||
| 34 | and respond to the events. If HID transfer events are going to be |
||
| 35 | sent to the next layer, USB_HID_ENABLE_TRANSFER_EVENT should be defined. If |
||
| 36 | HID transfer status is going to be polled, USB_HID_ENABLE_TRANSFER_EVENT |
||
| 37 | should not be defined. In any case transfer event EVENT_HID_RPT_DESC_PARSED |
||
| 38 | will be sent to interface layer. Application must provide a function |
||
| 39 | to collect the report descriptor information. Report descriptor information will |
||
| 40 | be overwritten with new report descriptor(in case multiple interface are present) |
||
| 41 | information when cotrol returns to HID driver . This is done to avoid using |
||
| 42 | extra RAM. |
||
| 43 | |||
| 44 | Since HID transfers are performed with interrupt taransfers, |
||
| 45 | USB_SUPPORT_INTERRUPT_TRANSFERS must be defined. |
||
| 46 | |||
| 47 | Summary: |
||
| 48 | This is the header file for a USB Embedded Host that is Human Interface |
||
| 49 | Device Class . |
||
| 50 | |||
| 51 | *******************************************************************************/ |
||
| 52 | //DOM-IGNORE-BEGIN |
||
| 53 | /******************************************************************************* |
||
| 54 | |||
| 55 | * FileName: usb_host_hid.h |
||
| 56 | * Dependencies: None |
||
| 57 | * Processor: PIC24/dsPIC30/dsPIC33/PIC32MX |
||
| 58 | * Compiler: C30 v2.01/C32 v0.00.18 |
||
| 59 | * Company: Microchip Technology, Inc. |
||
| 60 | |||
| 61 | Software License Agreement |
||
| 62 | |||
| 63 | The software supplied herewith by Microchip Technology Incorporated |
||
| 64 | (the Company) for its PICmicro® Microcontroller is intended and |
||
| 65 | supplied to you, the Companys customer, for use solely and |
||
| 66 | exclusively on Microchip PICmicro Microcontroller products. The |
||
| 67 | software is owned by the Company and/or its supplier, and is |
||
| 68 | protected under applicable copyright laws. All rights are reserved. |
||
| 69 | Any use in violation of the foregoing restrictions may subject the |
||
| 70 | user to criminal sanctions under applicable laws, as well as to |
||
| 71 | civil liability for the breach of the terms and conditions of this |
||
| 72 | license. |
||
| 73 | |||
| 74 | THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION. NO WARRANTIES, |
||
| 75 | WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED |
||
| 76 | TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
||
| 77 | PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, |
||
| 78 | IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR |
||
| 79 | CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. |
||
| 80 | |||
| 81 | Change History: |
||
| 82 | Rev Description |
||
| 83 | ---- ----------------------------------------------- |
||
| 84 | 2.6a- No change |
||
| 85 | 2.7a |
||
| 86 | *******************************************************************************/ |
||
| 87 | //DOM-IGNORE-END |
||
| 88 | |||
| 89 | //DOM-IGNORE-BEGIN |
||
| 90 | #ifndef _USB_HOST_HID_H_ |
||
| 91 | #define _USB_HOST_HID_H_ |
||
| 92 | //DOM-IGNORE-END |
||
| 93 | |||
| 94 | |||
| 95 | #include "usb_host_hid_parser.h" |
||
| 96 | |||
| 97 | // ***************************************************************************** |
||
| 98 | // ***************************************************************************** |
||
| 99 | // Section: Constants |
||
| 100 | // ***************************************************************************** |
||
| 101 | // ***************************************************************************** |
||
| 102 | |||
| 103 | // ***************************************************************************** |
||
| 104 | // Section: HID Class Error Codes |
||
| 105 | // ***************************************************************************** |
||
| 106 | |||
| 107 | #define USB_HID_CLASS_ERROR USB_ERROR_CLASS_DEFINED |
||
| 108 | |||
| 109 | #define USB_HID_COMMAND_PASSED USB_SUCCESS // Command was successful. |
||
| 110 | #define USB_HID_COMMAND_FAILED (USB_HID_CLASS_ERROR | HID_COMMAND_FAILED) // Command failed at the device. |
||
| 111 | #define USB_HID_PHASE_ERROR (USB_HID_CLASS_ERROR | HID_PHASE_ERROR) // Command had a phase error at the device. |
||
| 112 | #define USB_HID_DEVICE_NOT_FOUND (USB_HID_CLASS_ERROR | 0x03) // Device with the specified address is not available. |
||
| 113 | #define USB_HID_DEVICE_BUSY (USB_HID_CLASS_ERROR | 0x04) // A transfer is currently in progress. |
||
| 114 | #define USB_HID_NO_REPORT_DESCRIPTOR (USB_HID_CLASS_ERROR | 0x05) // No report descriptor found |
||
| 115 | #define USB_HID_INTERFACE_ERROR (USB_HID_CLASS_ERROR | 0x06) // The interface layer cannot support the device. |
||
| 116 | #define USB_HID_REPORT_DESCRIPTOR_BAD (USB_HID_CLASS_ERROR | 0x07) // Report Descriptor for not proper |
||
| 117 | #define USB_HID_RESET_ERROR (USB_HID_CLASS_ERROR | 0x0A) // An error occurred while resetting the device. |
||
| 118 | #define USB_HID_ILLEGAL_REQUEST (USB_HID_CLASS_ERROR | 0x0B) // Cannot perform requested operation. |
||
| 119 | |||
| 120 | |||
| 121 | // ***************************************************************************** |
||
| 122 | // Section: Interface and Protocol Constants |
||
| 123 | // ***************************************************************************** |
||
| 124 | |||
| 125 | #define DEVICE_CLASS_HID 0x03 /* HID Interface Class Code */ |
||
| 126 | |||
| 127 | #define DSC_HID 0x21 /* HID Descriptor Code */ |
||
| 128 | #define DSC_RPT 0x2200 /* Report Descriptor Code */ |
||
| 129 | #define DSC_PHY 0x23 /* Pysical Descriptor Code */ |
||
| 130 | |||
| 131 | // ***************************************************************************** |
||
| 132 | // Section: Additional return values for USBHostHIDDeviceStatus (see USBHostDeviceStatus also) |
||
| 133 | // ***************************************************************************** |
||
| 134 | |||
| 135 | #define USB_HID_DEVICE_DETACHED 0x50 // Device is detached. |
||
| 136 | #define USB_HID_INITIALIZING 0x51 // Device is initializing. |
||
| 137 | #define USB_PROCESSING_REPORT_DESCRIPTOR 0x52 // Parser is processing report descriptor. |
||
| 138 | #define USB_HID_NORMAL_RUNNING 0x53 // Device is running and available for data transfers. |
||
| 139 | #define USB_HID_DEVICE_HOLDING 0x54 // Device is holding due to error |
||
| 140 | #define USB_HID_RESETTING_DEVICE 0x55 // Device is being reset. |
||
| 141 | |||
| 142 | // ***************************************************************************** |
||
| 143 | // Section: HID Event Definition |
||
| 144 | // ***************************************************************************** |
||
| 145 | |||
| 146 | // If the application has not defined an offset for HID events, set it to 0. |
||
| 147 | #ifndef EVENT_HID_OFFSET |
||
| 148 | #define EVENT_HID_OFFSET 0 |
||
| 149 | #endif |
||
| 150 | |||
| 151 | // No event occured (NULL event) |
||
| 152 | #define EVENT_HID_NONE EVENT_HID_BASE + EVENT_HID_OFFSET + 0 |
||
| 153 | // A Report Descriptor has been parsed. The returned data pointer is NULL. |
||
| 154 | // The application must collect details, or simply return TRUE if the |
||
| 155 | // application is already aware of the data format. |
||
| 156 | #define EVENT_HID_RPT_DESC_PARSED EVENT_HID_BASE + EVENT_HID_OFFSET + 1 |
||
| 157 | //#define EVENT_HID_TRANSFER EVENT_HID_BASE + EVENT_HID_OFFSET + 3 // Unused - value retained for legacy. |
||
| 158 | // A HID Read transfer has completed. The returned data pointer points to a |
||
| 159 | // HID_TRANSFER_DATA structure, with information about the transfer. |
||
| 160 | #define EVENT_HID_READ_DONE EVENT_HID_BASE + EVENT_HID_OFFSET + 4 |
||
| 161 | // A HID Write transfer has completed. The returned data pointer points to a |
||
| 162 | // HID_TRANSFER_DATA structure, with information about the transfer. |
||
| 163 | #define EVENT_HID_WRITE_DONE EVENT_HID_BASE + EVENT_HID_OFFSET + 5 |
||
| 164 | // HID reset complete. The returned data pointer is NULL. |
||
| 165 | #define EVENT_HID_RESET EVENT_HID_BASE + EVENT_HID_OFFSET + 6 |
||
| 166 | // A HID device has attached. The returned data pointer points to a |
||
| 167 | // USB_HID_DEVICE_ID structure. |
||
| 168 | #define EVENT_HID_ATTACH EVENT_HID_BASE + EVENT_HID_OFFSET + 7 |
||
| 169 | // A HID device has detached. The returned data pointer points to a |
||
| 170 | // byte with the previous address of the detached device. |
||
| 171 | #define EVENT_HID_DETACH EVENT_HID_BASE + EVENT_HID_OFFSET + 8 |
||
| 172 | // There was a problem parsing the report descriptor of the attached device. |
||
| 173 | // Communication with the device is not allowed, and the device should be |
||
| 174 | // detached. |
||
| 175 | #define EVENT_HID_BAD_REPORT_DESCRIPTOR EVENT_HID_BASE + EVENT_HID_OFFSET + 9 |
||
| 176 | // An error occurred while trying to do a HID reset. The returned data pointer |
||
| 177 | // is NULL. |
||
| 178 | #define EVENT_HID_RESET_ERROR EVENT_HID_BASE + EVENT_HID_OFFSET + 10 |
||
| 179 | |||
| 180 | |||
| 181 | |||
| 182 | // ***************************************************************************** |
||
| 183 | // ***************************************************************************** |
||
| 184 | // Section: Data Structures |
||
| 185 | // ***************************************************************************** |
||
| 186 | // ***************************************************************************** |
||
| 187 | |||
| 188 | //****************************************************************************** |
||
| 189 | /* HID Data Details |
||
| 190 | |||
| 191 | This structure defines the objects used by the application to access required |
||
| 192 | report. Application must use parser interface functions to fill these details. |
||
| 193 | e.g. USBHostHID_ApiFindValue |
||
| 194 | */ |
||
| 195 | typedef struct _HID_DATA_DETAILS |
||
| 196 | { |
||
| 197 | WORD reportLength; // reportLength - the expected length of the parent report. |
||
| 198 | WORD reportID; // reportID - report ID - the first byte of the parent report. |
||
| 199 | BYTE bitOffset; // BitOffset - bit offset within the report. |
||
| 200 | BYTE bitLength; // bitlength - length of the data in bits. |
||
| 201 | BYTE count; // count - what's left of the message after this data. |
||
| 202 | BYTE signExtend; // extend - sign extend the data. |
||
| 203 | BYTE interfaceNum; // interfaceNum - informs HID layer about interface number. |
||
| 204 | } HID_DATA_DETAILS; |
||
| 205 | // Note: One would ordinarily get these values from a parser |
||
| 206 | // find. (e.g. USBHostHID_ApiFindValue) |
||
| 207 | |||
| 208 | |||
| 209 | // ***************************************************************************** |
||
| 210 | /* HID User Data Size |
||
| 211 | |||
| 212 | This defines the data type required to hold the maximum field size data. |
||
| 213 | */ |
||
| 214 | #if((HID_MAX_DATA_FIELD_SIZE >= 1) && (HID_MAX_DATA_FIELD_SIZE <= 8)) /* Maximum size of data field within a report */ |
||
| 215 | typedef unsigned char HID_USER_DATA_SIZE; |
||
| 216 | #elif((HID_MAX_DATA_FIELD_SIZE >= 9) && (HID_MAX_DATA_FIELD_SIZE <= 16)) |
||
| 217 | typedef unsigned int HID_USER_DATA_SIZE; |
||
| 218 | #elif((HID_MAX_DATA_FIELD_SIZE >= 17) && (HID_MAX_DATA_FIELD_SIZE <= 32)) |
||
| 219 | typedef unsigned long HID_USER_DATA_SIZE; |
||
| 220 | #else |
||
| 221 | typedef unsigned char HID_USER_DATA_SIZE; |
||
| 222 | #endif |
||
| 223 | |||
| 224 | |||
| 225 | // ***************************************************************************** |
||
| 226 | /* HID Device ID Information |
||
| 227 | |||
| 228 | This structure contains identification information about an attached device. |
||
| 229 | */ |
||
| 230 | typedef struct _USB_HID_DEVICE_ID |
||
| 231 | { |
||
| 232 | WORD vid; // Vendor ID of the device |
||
| 233 | WORD pid; // Product ID of the device |
||
| 234 | BYTE deviceAddress; // Address of the device on the USB |
||
| 235 | BYTE clientDriverID; // Client driver ID for device requests |
||
| 236 | } USB_HID_DEVICE_ID; |
||
| 237 | |||
| 238 | |||
| 239 | // ***************************************************************************** |
||
| 240 | /* HID Transfer Information |
||
| 241 | |||
| 242 | This structure is used when the event handler is used to notify the upper layer |
||
| 243 | of transfer completion (EVENT_HID_READ_DONE or EVENT_HID_WRITE_DONE). |
||
| 244 | */ |
||
| 245 | |||
| 246 | typedef struct _HID_TRANSFER_DATA |
||
| 247 | { |
||
| 248 | DWORD dataCount; // Count of bytes transferred. |
||
| 249 | BYTE bErrorCode; // Transfer error code. |
||
| 250 | } HID_TRANSFER_DATA; |
||
| 251 | |||
| 252 | |||
| 253 | // ***************************************************************************** |
||
| 254 | // ***************************************************************************** |
||
| 255 | // Section: Function Prototypes |
||
| 256 | // ***************************************************************************** |
||
| 257 | // ***************************************************************************** |
||
| 258 | |||
| 259 | /******************************************************************************* |
||
| 260 | Function: |
||
| 261 | BOOL USBHostHIDDeviceDetect( BYTE deviceAddress ) |
||
| 262 | |||
| 263 | Description: |
||
| 264 | This function determines if a HID device is attached and ready to use. |
||
| 265 | |||
| 266 | Precondition: |
||
| 267 | None |
||
| 268 | |||
| 269 | Parameters: |
||
| 270 | BYTE deviceAddress - Address of the attached device. |
||
| 271 | |||
| 272 | Return Values: |
||
| 273 | TRUE - HID present and ready |
||
| 274 | FALSE - HID not present or not ready |
||
| 275 | |||
| 276 | Remarks: |
||
| 277 | None |
||
| 278 | *******************************************************************************/ |
||
| 279 | BOOL USBHostHIDDeviceDetect( BYTE deviceAddress ); |
||
| 280 | |||
| 281 | |||
| 282 | /******************************************************************************* |
||
| 283 | Function: |
||
| 284 | BYTE USBHostHIDDeviceStatus( BYTE deviceAddress ) |
||
| 285 | |||
| 286 | Summary: |
||
| 287 | |||
| 288 | Description: |
||
| 289 | This function determines the status of a HID device. |
||
| 290 | |||
| 291 | Preconditions: None |
||
| 292 | |||
| 293 | Parameters: |
||
| 294 | BYTE deviceAddress - address of device to query |
||
| 295 | |||
| 296 | Return Values: |
||
| 297 | USB_HID_DEVICE_NOT_FOUND - Illegal device address, or the |
||
| 298 | device is not an HID |
||
| 299 | USB_HID_INITIALIZING - HID is attached and in the |
||
| 300 | process of initializing |
||
| 301 | USB_PROCESSING_REPORT_DESCRIPTOR - HID device is detected and report |
||
| 302 | descriptor is being parsed |
||
| 303 | USB_HID_NORMAL_RUNNING - HID Device is running normal, |
||
| 304 | ready to send and receive reports |
||
| 305 | USB_HID_DEVICE_HOLDING - Driver has encountered error and |
||
| 306 | could not recover |
||
| 307 | USB_HID_DEVICE_DETACHED - HID detached. |
||
| 308 | |||
| 309 | Remarks: |
||
| 310 | None |
||
| 311 | *******************************************************************************/ |
||
| 312 | BYTE USBHostHIDDeviceStatus( BYTE deviceAddress ); |
||
| 313 | |||
| 314 | /******************************************************************************* |
||
| 315 | Function: |
||
| 316 | BYTE USBHostHIDRead( BYTE deviceAddress,BYTE reportid, BYTE interface, |
||
| 317 | BYTE size, BYTE *data) |
||
| 318 | |||
| 319 | Summary: |
||
| 320 | This function starts a Get report transfer reuest from the device, |
||
| 321 | utilizing the function USBHostHIDTransfer(); |
||
| 322 | |||
| 323 | Precondition: |
||
| 324 | None |
||
| 325 | |||
| 326 | Parameters: |
||
| 327 | BYTE deviceAddress - Device address |
||
| 328 | BYTE reportid - Report ID of the requested report |
||
| 329 | BYTE interface - Interface number |
||
| 330 | BYTE size - Byte size of the data buffer |
||
| 331 | BYTE *data - Pointer to the data buffer |
||
| 332 | |||
| 333 | Return Values: |
||
| 334 | USB_SUCCESS - Request started successfully |
||
| 335 | USB_HID_DEVICE_NOT_FOUND - No device with specified address |
||
| 336 | USB_HID_DEVICE_BUSY - Device not in proper state for |
||
| 337 | performing a transfer |
||
| 338 | Others - Return values from USBHostRead() |
||
| 339 | |||
| 340 | Remarks: |
||
| 341 | None |
||
| 342 | *******************************************************************************/ |
||
| 343 | #define USBHostHIDRead( deviceAddress,reportid,interface,size,data) \ |
||
| 344 | USBHostHIDTransfer( deviceAddress,1,interface,reportid,size,data) |
||
| 345 | |||
| 346 | |||
| 347 | /******************************************************************************* |
||
| 348 | Function: |
||
| 349 | BYTE USBHostHIDResetDevice( BYTE deviceAddress ) |
||
| 350 | |||
| 351 | Summary: |
||
| 352 | This function starts a HID reset. |
||
| 353 | |||
| 354 | Description: |
||
| 355 | This function starts a HID reset. A reset can be |
||
| 356 | issued only if the device is attached and not being initialized. |
||
| 357 | |||
| 358 | Precondition: |
||
| 359 | None |
||
| 360 | |||
| 361 | Parameters: |
||
| 362 | BYTE deviceAddress - Device address |
||
| 363 | |||
| 364 | Return Values: |
||
| 365 | USB_SUCCESS - Reset started |
||
| 366 | USB_MSD_DEVICE_NOT_FOUND - No device with specified address |
||
| 367 | USB_MSD_ILLEGAL_REQUEST - Device is in an illegal state for reset |
||
| 368 | |||
| 369 | Remarks: |
||
| 370 | None |
||
| 371 | *******************************************************************************/ |
||
| 372 | BYTE USBHostHIDResetDevice( BYTE deviceAddress ); |
||
| 373 | |||
| 374 | /******************************************************************************* |
||
| 375 | Function: |
||
| 376 | void USBHostHIDTasks( void ) |
||
| 377 | |||
| 378 | Summary: |
||
| 379 | This function performs the maintenance tasks required by HID class |
||
| 380 | |||
| 381 | Description: |
||
| 382 | This function performs the maintenance tasks required by the HID |
||
| 383 | class. If transfer events from the host layer are not being used, then |
||
| 384 | it should be called on a regular basis by the application. If transfer |
||
| 385 | events from the host layer are being used, this function is compiled out, |
||
| 386 | and does not need to be called. |
||
| 387 | |||
| 388 | Precondition: |
||
| 389 | USBHostHIDInitialize() has been called. |
||
| 390 | |||
| 391 | Parameters: |
||
| 392 | None - None |
||
| 393 | |||
| 394 | Returns: |
||
| 395 | None |
||
| 396 | |||
| 397 | Remarks: |
||
| 398 | None |
||
| 399 | *******************************************************************************/ |
||
| 400 | void USBHostHIDTasks( void ); |
||
| 401 | |||
| 402 | /******************************************************************************* |
||
| 403 | Function: |
||
| 404 | BYTE USBHostHIDTerminateTransfer( BYTE deviceAddress, BYTE direction, BYTE interfaceNum ) |
||
| 405 | |||
| 406 | Summary: |
||
| 407 | This function terminates a transfer that is in progress. |
||
| 408 | |||
| 409 | Description: |
||
| 410 | This function terminates a transfer that is in progress. |
||
| 411 | |||
| 412 | Precondition: |
||
| 413 | None |
||
| 414 | |||
| 415 | Parameters: |
||
| 416 | BYTE deviceAddress - Device address |
||
| 417 | BYTE direction - Transfer direction. Valid values are: |
||
| 418 | * 1 = In (Read) |
||
| 419 | * 0 = Out (Write) |
||
| 420 | BYTE interfaceNum - Interface number |
||
| 421 | |||
| 422 | Return Values: |
||
| 423 | USB_SUCCESS - Transfer terminated |
||
| 424 | USB_HID_DEVICE_NOT_FOUND - No device with specified address |
||
| 425 | |||
| 426 | Remarks: |
||
| 427 | None |
||
| 428 | *******************************************************************************/ |
||
| 429 | BYTE USBHostHIDTerminateTransfer( BYTE deviceAddress, BYTE direction, BYTE interfaceNum ); |
||
| 430 | |||
| 431 | /******************************************************************************* |
||
| 432 | Function: |
||
| 433 | USBHostHIDTransfer( BYTE deviceAddress, BYTE direction, BYTE interfaceNum, |
||
| 434 | BYTE reportid, BYTE size, BYTE *data) |
||
| 435 | |||
| 436 | Summary: |
||
| 437 | This function starts a HID transfer. |
||
| 438 | |||
| 439 | Description: |
||
| 440 | This function starts a HID transfer. A read/write wrapper is provided in application |
||
| 441 | interface file to access this function. |
||
| 442 | |||
| 443 | Preconditions: |
||
| 444 | None |
||
| 445 | |||
| 446 | Parameters: |
||
| 447 | BYTE deviceAddress - Device address |
||
| 448 | BYTE direction - 1=read, 0=write |
||
| 449 | BYTE interfaceNum - Interface number |
||
| 450 | BYTE reportid - Report ID of the requested report |
||
| 451 | BYTE size - Byte size of the data buffer |
||
| 452 | BYTE *data - Pointer to the data buffer |
||
| 453 | |||
| 454 | Return Values: |
||
| 455 | USB_SUCCESS - Request started successfully |
||
| 456 | USB_HID_DEVICE_NOT_FOUND - No device with specified address |
||
| 457 | USB_HID_DEVICE_BUSY - Device not in proper state for |
||
| 458 | performing a transfer |
||
| 459 | Remarks: |
||
| 460 | None |
||
| 461 | *******************************************************************************/ |
||
| 462 | BYTE USBHostHIDTransfer( BYTE deviceAddress, BYTE direction, BYTE interfaceNum, WORD reportid, WORD size, BYTE *data); |
||
| 463 | |||
| 464 | /******************************************************************************* |
||
| 465 | Function: |
||
| 466 | BOOL USBHostHIDTransferIsComplete( BYTE deviceAddress, |
||
| 467 | BYTE *errorCode, DWORD *byteCount ) |
||
| 468 | |||
| 469 | Summary: |
||
| 470 | This function indicates whether or not the last transfer is complete. |
||
| 471 | |||
| 472 | Description: |
||
| 473 | This function indicates whether or not the last transfer is complete. |
||
| 474 | If the functions returns TRUE, the returned byte count and error |
||
| 475 | code are valid. Since only one transfer can be performed at once |
||
| 476 | and only one endpoint can be used, we only need to know the |
||
| 477 | device address. |
||
| 478 | |||
| 479 | Precondition: |
||
| 480 | None |
||
| 481 | |||
| 482 | Parameters: |
||
| 483 | BYTE deviceAddress - Device address |
||
| 484 | BYTE *errorCode - Error code from last transfer |
||
| 485 | DWORD *byteCount - Number of bytes transferred |
||
| 486 | |||
| 487 | Return Values: |
||
| 488 | TRUE - Transfer is complete, errorCode is valid |
||
| 489 | FALSE - Transfer is not complete, errorCode is not valid |
||
| 490 | *******************************************************************************/ |
||
| 491 | BOOL USBHostHIDTransferIsComplete( BYTE deviceAddress, BYTE *errorCode, BYTE *byteCount ); |
||
| 492 | |||
| 493 | |||
| 494 | /******************************************************************************* |
||
| 495 | Function: |
||
| 496 | BYTE USBHostHIDWrite( BYTE deviceAddress,BYTE reportid, BYTE interface, |
||
| 497 | BYTE size, BYTE *data) |
||
| 498 | |||
| 499 | Summary: |
||
| 500 | This function starts a Set report transfer request to the device, |
||
| 501 | utilizing the function USBHostHIDTransfer(); |
||
| 502 | |||
| 503 | Precondition: |
||
| 504 | None |
||
| 505 | |||
| 506 | Parameters: |
||
| 507 | BYTE deviceAddress - Device address |
||
| 508 | BYTE reportid - Report ID of the requested report |
||
| 509 | BYTE interface - Interface number |
||
| 510 | BYTE size - Byte size of the data buffer |
||
| 511 | BYTE *data - Pointer to the data buffer |
||
| 512 | |||
| 513 | Return Values: |
||
| 514 | USB_SUCCESS - Request started successfully |
||
| 515 | USB_HID_DEVICE_NOT_FOUND - No device with specified address |
||
| 516 | USB_HID_DEVICE_BUSY - Device not in proper state for |
||
| 517 | performing a transfer |
||
| 518 | Others - Return values from USBHostIssueDeviceRequest(), |
||
| 519 | and USBHostWrite() |
||
| 520 | |||
| 521 | Remarks: |
||
| 522 | None |
||
| 523 | *******************************************************************************/ |
||
| 524 | #define USBHostHIDWrite( address,reportid,interface,size,data) \ |
||
| 525 | USBHostHIDTransfer( address,0,interface,reportid,size,data) |
||
| 526 | |||
| 527 | /******************************************************************************* |
||
| 528 | Function: |
||
| 529 | BOOL USBHostHID_ApiFindBit(WORD usagePage,WORD usage,HIDReportTypeEnum type, |
||
| 530 | BYTE* Report_ID, BYTE* Report_Length, BYTE* Start_Bit) |
||
| 531 | |||
| 532 | Description: |
||
| 533 | This function is used to locate a specific button or indicator. |
||
| 534 | Once the report descriptor is parsed by the HID layer without any error, |
||
| 535 | data from the report descriptor is stored in pre defined dat structures. |
||
| 536 | This function traverses these data structure and exract data required |
||
| 537 | by application |
||
| 538 | |||
| 539 | Precondition: |
||
| 540 | None |
||
| 541 | |||
| 542 | Parameters: |
||
| 543 | WORD usagePage - usage page supported by application |
||
| 544 | WORD usage - usage supported by application |
||
| 545 | HIDReportTypeEnum type - report type Input/Output for the particular |
||
| 546 | usage |
||
| 547 | BYTE* Report_ID - returns the report ID of the required usage |
||
| 548 | BYTE* Report_Length - returns the report length of the required usage |
||
| 549 | BYTE* Start_Bit - returns the start bit of the usage in a |
||
| 550 | particular report |
||
| 551 | |||
| 552 | Return Values: |
||
| 553 | TRUE - If the required usage is located in the report descriptor |
||
| 554 | FALSE - If the application required usage is not supported by the |
||
| 555 | device(i.e report descriptor). |
||
| 556 | |||
| 557 | Remarks: |
||
| 558 | Application event handler with event 'EVENT_HID_RPT_DESC_PARSED' is called. |
||
| 559 | Application is suppose to fill in data details in structure 'HID_DATA_DETAILS'. |
||
| 560 | This function can be used to the get the details of the required usages. |
||
| 561 | *******************************************************************************/ |
||
| 562 | BOOL USBHostHID_ApiFindBit(WORD usagePage,WORD usage,HIDReportTypeEnum type,BYTE* Report_ID, |
||
| 563 | BYTE* Report_Length, BYTE* Start_Bit); |
||
| 564 | |||
| 565 | |||
| 566 | /******************************************************************************* |
||
| 567 | Function: |
||
| 568 | BOOL USBHostHID_ApiFindValue(WORD usagePage,WORD usage, |
||
| 569 | HIDReportTypeEnum type,BYTE* Report_ID,BYTE* Report_Length,BYTE* |
||
| 570 | Start_Bit, BYTE* Bit_Length) |
||
| 571 | |||
| 572 | Description: |
||
| 573 | Find a specific Usage Value. Once the report descriptor is parsed by the HID |
||
| 574 | layer without any error, data from the report descriptor is stored in |
||
| 575 | pre defined dat structures. This function traverses these data structure and |
||
| 576 | exract data required by application. |
||
| 577 | |||
| 578 | Precondition: |
||
| 579 | None |
||
| 580 | |||
| 581 | Parameters: |
||
| 582 | WORD usagePage - usage page supported by application |
||
| 583 | WORD usage - usage supported by application |
||
| 584 | HIDReportTypeEnum type - report type Input/Output for the particular |
||
| 585 | usage |
||
| 586 | BYTE* Report_ID - returns the report ID of the required usage |
||
| 587 | BYTE* Report_Length - returns the report length of the required usage |
||
| 588 | BYTE* Start_Bit - returns the start bit of the usage in a |
||
| 589 | particular report |
||
| 590 | BYTE* Bit_Length - returns size of requested usage type data in bits |
||
| 591 | |||
| 592 | Return Values: |
||
| 593 | TRUE - If the required usage is located in the report descriptor |
||
| 594 | FALSE - If the application required usage is not supported by the |
||
| 595 | device(i.e report descriptor). |
||
| 596 | |||
| 597 | Remarks: |
||
| 598 | Application event handler with event 'EVENT_HID_RPT_DESC_PARSED' is called. |
||
| 599 | Application is suppose to fill in data details structure 'HID_DATA_DETAILS' |
||
| 600 | This function can be used to the get the details of the required usages. |
||
| 601 | *******************************************************************************/ |
||
| 602 | BOOL USBHostHID_ApiFindValue(WORD usagePage,WORD usage,HIDReportTypeEnum type,BYTE* Report_ID, |
||
| 603 | BYTE* Report_Length,BYTE* Start_Bit, BYTE* Bit_Length); |
||
| 604 | |||
| 605 | |||
| 606 | /******************************************************************************* |
||
| 607 | Function: |
||
| 608 | BYTE USBHostHID_ApiGetCurrentInterfaceNum(void) |
||
| 609 | |||
| 610 | Description: |
||
| 611 | This function reurns the interface number of the cuurent report descriptor |
||
| 612 | parsed. This function must be called to fill data interface detail data |
||
| 613 | structure and passed as parameter when requesinf for report transfers. |
||
| 614 | |||
| 615 | Precondition: |
||
| 616 | None |
||
| 617 | |||
| 618 | Parameters: |
||
| 619 | BYTE *errorCode - Error code from last transfer |
||
| 620 | DWORD *byteCount - Number of bytes transferred |
||
| 621 | |||
| 622 | Return Values: |
||
| 623 | TRUE - Transfer is complete, errorCode is valid |
||
| 624 | FALSE - Transfer is not complete, errorCode is not valid |
||
| 625 | |||
| 626 | Remarks: |
||
| 627 | None |
||
| 628 | *******************************************************************************/ |
||
| 629 | BYTE USBHostHID_ApiGetCurrentInterfaceNum(void); |
||
| 630 | |||
| 631 | |||
| 632 | /**************************************************************************** |
||
| 633 | Function: |
||
| 634 | BYTE* USBHostHID_GetCurrentReportInfo() |
||
| 635 | |||
| 636 | Description: |
||
| 637 | This function returns a pointer to the current report info structure. |
||
| 638 | |||
| 639 | Precondition: |
||
| 640 | None |
||
| 641 | |||
| 642 | Parameters: |
||
| 643 | None |
||
| 644 | |||
| 645 | Returns: |
||
| 646 | BYTE * - Pointer to the report Info structure. |
||
| 647 | |||
| 648 | Remarks: |
||
| 649 | None |
||
| 650 | ***************************************************************************/ |
||
| 651 | |||
| 652 | #define USBHostHID_GetCurrentReportInfo() (&deviceRptInfo) |
||
| 653 | |||
| 654 | |||
| 655 | /**************************************************************************** |
||
| 656 | Function: |
||
| 657 | BYTE* USBHostHID_GetItemListPointers() |
||
| 658 | |||
| 659 | Description: |
||
| 660 | This function returns a pointer to list of item pointers storedin a |
||
| 661 | structure. |
||
| 662 | |||
| 663 | Precondition: |
||
| 664 | None |
||
| 665 | |||
| 666 | Parameters: |
||
| 667 | None |
||
| 668 | |||
| 669 | Returns: |
||
| 670 | BYTE * - Pointer to list of item pointers structure. |
||
| 671 | |||
| 672 | Remarks: |
||
| 673 | None |
||
| 674 | ***************************************************************************/ |
||
| 675 | #define USBHostHID_GetItemListPointers() (&itemListPtrs) |
||
| 676 | |||
| 677 | |||
| 678 | /******************************************************************************* |
||
| 679 | Function: |
||
| 680 | BOOL USBHostHID_ApiImportData(BYTE *report, WORD reportLength, |
||
| 681 | HID_USER_DATA_SIZE *buffer,HID_DATA_DETAILS *pDataDetails) |
||
| 682 | Description: |
||
| 683 | This function can be used by application to extract data from the input |
||
| 684 | reports. On receiving the input report from the device application can call |
||
| 685 | the function with required inputs 'HID_DATA_DETAILS'. |
||
| 686 | |||
| 687 | Precondition: |
||
| 688 | None |
||
| 689 | |||
| 690 | Parameters: |
||
| 691 | BYTE *report - Input report received from device |
||
| 692 | WORD reportLength - Length of input report report |
||
| 693 | HID_USER_DATA_SIZE *buffer - Buffer into which data needs to be |
||
| 694 | populated |
||
| 695 | HID_DATA_DETAILS *pDataDetails - data details extracted from report |
||
| 696 | descriptor |
||
| 697 | Return Values: |
||
| 698 | TRUE - If the required data is retrieved from the report |
||
| 699 | FALSE - If required data is not found. |
||
| 700 | |||
| 701 | Remarks: |
||
| 702 | None |
||
| 703 | *******************************************************************************/ |
||
| 704 | BOOL USBHostHID_ApiImportData(BYTE *report,WORD reportLength,HID_USER_DATA_SIZE *buffer, HID_DATA_DETAILS *pDataDetails);; |
||
| 705 | |||
| 706 | |||
| 707 | // ***************************************************************************** |
||
| 708 | // ***************************************************************************** |
||
| 709 | // Section: USB Host Callback Function Prototypes |
||
| 710 | // ***************************************************************************** |
||
| 711 | // ***************************************************************************** |
||
| 712 | |||
| 713 | /******************************************************************************* |
||
| 714 | Function: |
||
| 715 | BOOL USBHostHIDInitialize( BYTE address, WORD flags, BYTE clientDriverID ) |
||
| 716 | |||
| 717 | Summary: |
||
| 718 | This function is the initialization routine for this client driver. |
||
| 719 | |||
| 720 | Description: |
||
| 721 | This function is the initialization routine for this client driver. It |
||
| 722 | is called by the host layer when the USB device is being enumerated.For a |
||
| 723 | HID device we need to look into HID descriptor, interface descriptor and |
||
| 724 | endpoint descriptor. |
||
| 725 | |||
| 726 | Precondition: |
||
| 727 | None |
||
| 728 | |||
| 729 | Parameters: |
||
| 730 | BYTE address - Address of the new device |
||
| 731 | DWORD flags - Initialization flags |
||
| 732 | BYTE clientDriverID - Client driver identification for device requests |
||
| 733 | |||
| 734 | Return Values: |
||
| 735 | TRUE - We can support the device. |
||
| 736 | FALSE - We cannot support the device. |
||
| 737 | |||
| 738 | Remarks: |
||
| 739 | None |
||
| 740 | *******************************************************************************/ |
||
| 741 | BOOL USBHostHIDInitialize( BYTE address, DWORD flags, BYTE clientDriverID ); |
||
| 742 | |||
| 743 | /******************************************************************************* |
||
| 744 | Function: |
||
| 745 | BOOL USBHostHIDEventHandler( BYTE address, USB_EVENT event, |
||
| 746 | void *data, DWORD size ) |
||
| 747 | |||
| 748 | Precondition: |
||
| 749 | The device has been initialized. |
||
| 750 | |||
| 751 | Summary: |
||
| 752 | This function is the event handler for this client driver. |
||
| 753 | |||
| 754 | Description: |
||
| 755 | This function is the event handler for this client driver. It is called |
||
| 756 | by the host layer when various events occur. |
||
| 757 | |||
| 758 | Parameters: |
||
| 759 | BYTE address - Address of the device |
||
| 760 | USB_EVENT event - Event that has occurred |
||
| 761 | void *data - Pointer to data pertinent to the event |
||
| 762 | DWORD size - Size of the data |
||
| 763 | |||
| 764 | Return Values: |
||
| 765 | TRUE - Event was handled |
||
| 766 | FALSE - Event was not handled |
||
| 767 | |||
| 768 | Remarks: |
||
| 769 | None |
||
| 770 | *******************************************************************************/ |
||
| 771 | BOOL USBHostHIDEventHandler( BYTE address, USB_EVENT event, void *data, DWORD size ); |
||
| 772 | |||
| 773 | |||
| 774 | |||
| 775 | // ***************************************************************************** |
||
| 776 | // ***************************************************************************** |
||
| 777 | // Section: Legacy Macros |
||
| 778 | // ***************************************************************************** |
||
| 779 | // ***************************************************************************** |
||
| 780 | |||
| 781 | // This macro provides legacy support for an older API function. |
||
| 782 | #define USBHostHID_ApiDeviceDetect() USBHostHIDDeviceDetect( 1 ) |
||
| 783 | |||
| 784 | // This macro provides legacy support for an older API function. |
||
| 785 | #define USBHostHID_ApiGetReport( r, i, s, d ) USBHostHIDRead( 1, r, i, s, d ) |
||
| 786 | |||
| 787 | // This macro provides legacy support for an older API function. |
||
| 788 | #define USBHostHID_ApiSendReport( r, i, s, d ) USBHostHIDWrite( 1, r, i, s, d ) |
||
| 789 | |||
| 790 | // This macro provides legacy support for an older API function. |
||
| 791 | #define USBHostHID_ApiResetDevice() USBHostHIDResetDeviceWithWait( 1 ) |
||
| 792 | |||
| 793 | // This macro provides legacy support for an older API function. |
||
| 794 | #define USBHostHID_ApiTransferIsComplete( e, c ) USBHostHIDTransferIsComplete( 1, e, c ) |
||
| 795 | |||
| 796 | |||
| 797 | #endif |
Powered by WebSVN v2.8.3