| Line No. | Rev | Author | Line | 
|---|---|---|---|
| 1 | 32 | kaklik | /******************************************************************************* | 
         
| 2 |   File Information: | 
         ||
| 3 |     FileName:     	usb_function_hid.h | 
         ||
| 4 |     Dependencies:	See INCLUDES section | 
         ||
| 5 |     Processor:		PIC18 or PIC24 USB Microcontrollers | 
         ||
| 6 |     Hardware:		The code is natively intended to be used on the following | 
         ||
| 7 |     				hardware platforms: PICDEM FS USB Demo Board,  | 
         ||
| 8 |     				PIC18F87J50 FS USB Plug-In Module, or | 
         ||
| 9 |     				Explorer 16 + PIC24 USB PIM.  The firmware may be | 
         ||
| 10 |     				modified for use on other USB platforms by editing the | 
         ||
| 11 |     				HardwareProfile.h file. | 
         ||
| 12 |     Complier:  	Microchip C18 (for PIC18) or C30 (for PIC24) | 
         ||
| 13 |     Company:		Microchip Technology, Inc. | 
         ||
| 14 | |||
| 15 |     Software License Agreement: | 
         ||
| 16 | |||
| 17 |     The software supplied herewith by Microchip Technology Incorporated | 
         ||
| 18 |     (the Company) for its PIC® Microcontroller is intended and | 
         ||
| 19 |     supplied to you, the Companys customer, for use solely and | 
         ||
| 20 |     exclusively on Microchip PIC Microcontroller products. The | 
         ||
| 21 |     software is owned by the Company and/or its supplier, and is | 
         ||
| 22 |     protected under applicable copyright laws. All rights are reserved. | 
         ||
| 23 |     Any use in violation of the foregoing restrictions may subject the | 
         ||
| 24 |     user to criminal sanctions under applicable laws, as well as to | 
         ||
| 25 |     civil liability for the breach of the terms and conditions of this | 
         ||
| 26 |     license. | 
         ||
| 27 | |||
| 28 |     THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION. NO WARRANTIES, | 
         ||
| 29 |     WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED | 
         ||
| 30 |     TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | 
         ||
| 31 |     PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, | 
         ||
| 32 |     IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR | 
         ||
| 33 |     CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.   | 
         ||
| 34 | |||
| 35 |   Summary: | 
         ||
| 36 |     This file contains all of functions, macros, definitions, variables, | 
         ||
| 37 |     datatypes, etc. that are required for usage with the HID function | 
         ||
| 38 |     driver. This file should be included in projects that use the HID | 
         ||
| 39 |     \function driver.  This file should also be included into the  | 
         ||
| 40 |     usb_descriptors.c file and any other user file that requires access to the | 
         ||
| 41 |     HID interface. | 
         ||
| 42 | |||
| 43 | |||
| 44 | |||
| 45 |     This file is located in the "\<Install Directory\>\\Microchip\\Include\\USB" | 
         ||
| 46 |     directory. | 
         ||
| 47 | |||
| 48 |   Description: | 
         ||
| 49 |     USB HID Function Driver File | 
         ||
| 50 | |||
| 51 |     This file contains all of functions, macros, definitions, variables, | 
         ||
| 52 |     datatypes, etc. that are required for usage with the HID function | 
         ||
| 53 |     driver. This file should be included in projects that use the HID | 
         ||
| 54 |     \function driver.  This file should also be included into the  | 
         ||
| 55 |     usb_descriptors.c file and any other user file that requires access to the | 
         ||
| 56 |     HID interface. | 
         ||
| 57 | |||
| 58 |     This file is located in the "\<Install Directory\>\\Microchip\\Include\\USB" | 
         ||
| 59 |     directory. | 
         ||
| 60 | |||
| 61 |     When including this file in a new project, this file can either be | 
         ||
| 62 |     referenced from the directory in which it was installed or copied | 
         ||
| 63 |     directly into the user application folder. If the first method is | 
         ||
| 64 |     chosen to keep the file located in the folder in which it is installed | 
         ||
| 65 |     then include paths need to be added so that the library and the | 
         ||
| 66 |     application both know where to reference each others files. If the | 
         ||
| 67 |     application folder is located in the same folder as the Microchip | 
         ||
| 68 |     folder (like the current demo folders), then the following include | 
         ||
| 69 |     paths need to be added to the application's project: | 
         ||
| 70 | |||
| 71 |     ..\\..\\Microchip\\Include | 
         ||
| 72 |     . | 
         ||
| 73 | |||
| 74 |     If a different directory structure is used, modify the paths as | 
         ||
| 75 |     required. An example using absolute paths instead of relative paths | 
         ||
| 76 |     would be the following: | 
         ||
| 77 | |||
| 78 |     C:\\Microchip Solutions\\Microchip\\Include | 
         ||
| 79 | |||
| 80 |     C:\\Microchip Solutions\\My Demo Application  | 
         ||
| 81 | |||
| 82 | |||
| 83 |  Change History: | 
         ||
| 84 |    Rev    Description | 
         ||
| 85 |    ----   ------------------------------------------ | 
         ||
| 86 |    1.0    Initial release | 
         ||
| 87 |    2.1    Updated for simplicity and to use common | 
         ||
| 88 |           coding style | 
         ||
| 89 |    2.6    Minor changes in defintions | 
         ||
| 90 |    2.6a-  No change | 
         ||
| 91 |    2.7a | 
         ||
| 92 | *******************************************************************/ | 
         ||
| 93 | #ifndef HID_H | 
         ||
| 94 | #define HID_H | 
         ||
| 95 | //DOM-IGNORE-END | 
         ||
| 96 | |||
| 97 | /** INCLUDES *******************************************************/ | 
         ||
| 98 | |||
| 99 | /** DEFINITIONS ****************************************************/ | 
         ||
| 100 | |||
| 101 | /* Class-Specific Requests */ | 
         ||
| 102 | #define GET_REPORT      0x01 | 
         ||
| 103 | #define GET_IDLE        0x02 | 
         ||
| 104 | #define GET_PROTOCOL    0x03 | 
         ||
| 105 | #define SET_REPORT      0x09 | 
         ||
| 106 | #define SET_IDLE        0x0A | 
         ||
| 107 | #define SET_PROTOCOL    0x0B | 
         ||
| 108 | |||
| 109 | /* Class Descriptor Types */ | 
         ||
| 110 | #define DSC_HID         0x21 | 
         ||
| 111 | #define DSC_RPT         0x22 | 
         ||
| 112 | #define DSC_PHY         0x23 | 
         ||
| 113 | |||
| 114 | /* Protocol Selection */ | 
         ||
| 115 | #define BOOT_PROTOCOL   0x00 | 
         ||
| 116 | #define RPT_PROTOCOL    0x01 | 
         ||
| 117 | |||
| 118 | /* HID Interface Class Code */ | 
         ||
| 119 | #define HID_INTF                    0x03 | 
         ||
| 120 | |||
| 121 | /* HID Interface Class SubClass Codes */ | 
         ||
| 122 | #define BOOT_INTF_SUBCLASS          0x01 | 
         ||
| 123 | |||
| 124 | /* HID Interface Class Protocol Codes */ | 
         ||
| 125 | #define HID_PROTOCOL_NONE           0x00 | 
         ||
| 126 | #define HID_PROTOCOL_KEYBOARD       0x01 | 
         ||
| 127 | #define HID_PROTOCOL_MOUSE          0x02 | 
         ||
| 128 | |||
| 129 | |||
| 130 | /******************************************************************** | 
         ||
| 131 |     Function: | 
         ||
| 132 |         BOOL HIDTxHandleBusy(USB_HANDLE handle) | 
         ||
| 133 | |||
| 134 |     Summary: | 
         ||
| 135 |         Retreives the status of the buffer ownership | 
         ||
| 136 | |||
| 137 |     Description: | 
         ||
| 138 |         Retreives the status of the buffer ownership.  This function will | 
         ||
| 139 |         indicate if the previous transfer is complete or not. | 
         ||
| 140 | |||
| 141 |         This function will take the input handle (pointer to a BDT entry) and  | 
         ||
| 142 |         will check the UOWN bit.  If the UOWN bit is set then that indicates  | 
         ||
| 143 |         that the transfer is not complete and the USB module still owns the data | 
         ||
| 144 |         memory.  If the UOWN bit is clear that means that the transfer is  | 
         ||
| 145 |         complete and that the CPU now owns the data memory.   | 
         ||
| 146 | |||
| 147 |         For more information about the BDT, please refer to the appropriate  | 
         ||
| 148 |         datasheet for the device in use. | 
         ||
| 149 | |||
| 150 |         Typical Usage: | 
         ||
| 151 |         <code> | 
         ||
| 152 |         //make sure that the last transfer isn't busy by checking the handle | 
         ||
| 153 |         if(!HIDTxHandleBusy(USBInHandle)) | 
         ||
| 154 |         { | 
         ||
| 155 |             //Send the data contained in the ToSendDataBuffer[] array out on | 
         ||
| 156 |             //  endpoint HID_EP | 
         ||
| 157 |             USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); | 
         ||
| 158 |         } | 
         ||
| 159 |         </code> | 
         ||
| 160 | |||
| 161 |     PreCondition: | 
         ||
| 162 |         None. | 
         ||
| 163 | |||
| 164 |     Parameters: | 
         ||
| 165 |         USB_HANDLE handle - the handle for the transfer in question. | 
         ||
| 166 |         The handle is returned by the HIDTxPacket() and HIDRxPacket() | 
         ||
| 167 |         functions.  Please insure that USB_HANDLE objects are initialized | 
         ||
| 168 |         to NULL. | 
         ||
| 169 | |||
| 170 |     Return Values: | 
         ||
| 171 |         TRUE - the HID handle is still busy | 
         ||
| 172 |         FALSE - the HID handle is not busy and is ready to send | 
         ||
| 173 |                 additional data. | 
         ||
| 174 | |||
| 175 |    Remarks: | 
         ||
| 176 |         None | 
         ||
| 177 | |||
| 178 |  *******************************************************************/ | 
         ||
| 179 | #define HIDTxHandleBusy(handle) USBHandleBusy(handle) | 
         ||
| 180 | |||
| 181 | /******************************************************************** | 
         ||
| 182 |     Function: | 
         ||
| 183 |         BOOL HIDRxHandleBusy(USB_HANDLE handle) | 
         ||
| 184 | |||
| 185 |     Summary: | 
         ||
| 186 |         Retreives the status of the buffer ownership | 
         ||
| 187 | |||
| 188 |     Description: | 
         ||
| 189 |         Retreives the status of the buffer ownership.  This function will | 
         ||
| 190 |         indicate if the previous transfer is complete or not. | 
         ||
| 191 | |||
| 192 |         This function will take the input handle (pointer to a BDT entry) and  | 
         ||
| 193 |         will check the UOWN bit.  If the UOWN bit is set then that indicates  | 
         ||
| 194 |         that the transfer is not complete and the USB module still owns the data | 
         ||
| 195 |         memory.  If the UOWN bit is clear that means that the transfer is  | 
         ||
| 196 |         complete and that the CPU now owns the data memory.   | 
         ||
| 197 | |||
| 198 |         For more information about the BDT, please refer to the appropriate  | 
         ||
| 199 |         datasheet for the device in use. | 
         ||
| 200 | |||
| 201 |         Typical Usage: | 
         ||
| 202 |         <code> | 
         ||
| 203 |         if(!HIDRxHandleBusy(USBOutHandle)) | 
         ||
| 204 |         { | 
         ||
| 205 |             //The data is available in the buffer that was specified when the | 
         ||
| 206 |             //  HIDRxPacket() was called. | 
         ||
| 207 |         } | 
         ||
| 208 |         </code> | 
         ||
| 209 | |||
| 210 |     PreCondition: | 
         ||
| 211 |         None | 
         ||
| 212 | |||
| 213 |     Parameters: | 
         ||
| 214 |         None | 
         ||
| 215 | |||
| 216 |     Return Values: | 
         ||
| 217 |         TRUE - the HID handle is still busy | 
         ||
| 218 |         FALSE - the HID handle is not busy and is ready to receive | 
         ||
| 219 |                 additional data. | 
         ||
| 220 | |||
| 221 |    Remarks: | 
         ||
| 222 |         None | 
         ||
| 223 | |||
| 224 |  *******************************************************************/ | 
         ||
| 225 | #define HIDRxHandleBusy(handle) USBHandleBusy(handle) | 
         ||
| 226 | |||
| 227 | /******************************************************************** | 
         ||
| 228 |     Function: | 
         ||
| 229 |         USB_HANDLE HIDTxPacket(BYTE ep, BYTE* data, WORD len) | 
         ||
| 230 | |||
| 231 |     Summary: | 
         ||
| 232 |         Sends the specified data out the specified endpoint | 
         ||
| 233 | |||
| 234 |     Description: | 
         ||
| 235 |         This function sends the specified data out the specified  | 
         ||
| 236 |         endpoint and returns a handle to the transfer information. | 
         ||
| 237 | |||
| 238 |         Typical Usage: | 
         ||
| 239 |         <code> | 
         ||
| 240 |         //make sure that the last transfer isn't busy by checking the handle | 
         ||
| 241 |         if(!HIDTxHandleBusy(USBInHandle)) | 
         ||
| 242 |         { | 
         ||
| 243 |             //Send the data contained in the ToSendDataBuffer[] array out on | 
         ||
| 244 |             //  endpoint HID_EP | 
         ||
| 245 |             USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],sizeof(ToSendDataBuffer)); | 
         ||
| 246 |         } | 
         ||
| 247 |         </code> | 
         ||
| 248 | |||
| 249 |     PreCondition: | 
         ||
| 250 |         None | 
         ||
| 251 | |||
| 252 |     Parameters: | 
         ||
| 253 |         ep - the endpoint you want to send the data out of | 
         ||
| 254 |         data - pointer to the data that you wish to send | 
         ||
| 255 |         len - the length of the data that you wish to send | 
         ||
| 256 | |||
| 257 |     Return Values: | 
         ||
| 258 |         USB_HANDLE - a handle for the transfer.  This information | 
         ||
| 259 |         should be kept to track the status of the transfer | 
         ||
| 260 | |||
| 261 |     Remarks: | 
         ||
| 262 |         None | 
         ||
| 263 | |||
| 264 |  *******************************************************************/ | 
         ||
| 265 | #define HIDTxPacket USBTxOnePacket | 
         ||
| 266 | |||
| 267 | /******************************************************************** | 
         ||
| 268 |     Function: | 
         ||
| 269 |         USB_HANDLE HIDRxPacket(BYTE ep, BYTE* data, WORD len) | 
         ||
| 270 | |||
| 271 |     Summary: | 
         ||
| 272 |         Receives the specified data out the specified endpoint | 
         ||
| 273 | |||
| 274 |     Description: | 
         ||
| 275 |         Receives the specified data out the specified endpoint. | 
         ||
| 276 | |||
| 277 |         Typical Usage: | 
         ||
| 278 |         <code> | 
         ||
| 279 |         //Read 64-bytes from endpoint HID_EP, into the ReceivedDataBuffer array. | 
         ||
| 280 |         //  Make sure to save the return handle so that we can check it later | 
         ||
| 281 |         //  to determine when the transfer is complete. | 
         ||
| 282 |         USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64); | 
         ||
| 283 |         </code> | 
         ||
| 284 | |||
| 285 |     PreCondition: | 
         ||
| 286 |         None | 
         ||
| 287 | |||
| 288 |     Parameters: | 
         ||
| 289 |         ep - the endpoint you want to receive the data into | 
         ||
| 290 |         data - pointer to where the data will go when it arrives | 
         ||
| 291 |         len - the length of the data that you wish to receive | 
         ||
| 292 | |||
| 293 |     Return Values: | 
         ||
| 294 |         USB_HANDLE - a handle for the transfer.  This information | 
         ||
| 295 |         should be kept to track the status of the transfer | 
         ||
| 296 | |||
| 297 |     Remarks: | 
         ||
| 298 |         None | 
         ||
| 299 | |||
| 300 |  *******************************************************************/ | 
         ||
| 301 | #define HIDRxPacket USBRxOnePacket | 
         ||
| 302 | |||
| 303 | // Section: STRUCTURES *********************************************/ | 
         ||
| 304 | |||
| 305 | //USB HID Descriptor header as detailed in section  | 
         ||
| 306 | //"6.2.1 HID Descriptor" of the HID class definition specification | 
         ||
| 307 | typedef struct _USB_HID_DSC_HEADER | 
         ||
| 308 | { | 
         ||
| 309 |     BYTE bDescriptorType;	//offset 9 | 
         ||
| 310 |     WORD wDscLength;		//offset 10 | 
         ||
| 311 | } USB_HID_DSC_HEADER; | 
         ||
| 312 | |||
| 313 | //USB HID Descriptor header as detailed in section  | 
         ||
| 314 | //"6.2.1 HID Descriptor" of the HID class definition specification | 
         ||
| 315 | typedef struct _USB_HID_DSC | 
         ||
| 316 | { | 
         ||
| 317 |     BYTE bLength;			//offset 0  | 
         ||
| 318 | 	BYTE bDescriptorType;	//offset 1 | 
         ||
| 319 | 	WORD bcdHID;			//offset 2 | 
         ||
| 320 |     BYTE bCountryCode;		//offset 4 | 
         ||
| 321 | 	BYTE bNumDsc;			//offset 5 | 
         ||
| 322 | |||
| 323 | |||
| 324 |     //USB_HID_DSC_HEADER hid_dsc_header[HID_NUM_OF_DSC]; | 
         ||
| 325 |     /* HID_NUM_OF_DSC is defined in usbcfg.h */ | 
         ||
| 326 | |||
| 327 | } USB_HID_DSC; | 
         ||
| 328 | |||
| 329 | /** Section: EXTERNS ********************************************************/ | 
         ||
| 330 | extern volatile unsigned char hid_report_in[HID_INT_IN_EP_SIZE]; | 
         ||
| 331 | extern volatile unsigned char hid_report_out[HID_INT_OUT_EP_SIZE]; | 
         ||
| 332 | extern volatile CTRL_TRF_SETUP SetupPkt; | 
         ||
| 333 | extern ROM BYTE configDescriptor1[]; | 
         ||
| 334 | extern volatile BYTE CtrlTrfData[USB_EP0_BUFF_SIZE]; | 
         ||
| 335 | |||
| 336 | #if !defined(__USB_DESCRIPTORS_C) | 
         ||
| 337 | extern ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01; | 
         ||
| 338 | #endif | 
         ||
| 339 | |||
| 340 | /** Section: PUBLIC PROTOTYPES **********************************************/ | 
         ||
| 341 | void USBCheckHIDRequest(void); | 
         ||
| 342 | |||
| 343 | #endif //HID_H | 
         
Powered by WebSVN v2.8.3