Line No. | Rev | Author | Line |
---|---|---|---|
1 | 32 | kaklik | /****************************************************************************** |
2 | |||
3 | Common USB Library Definitions (Header File) |
||
4 | |||
5 | Summary: |
||
6 | This file defines data types, constants, and macros that are common to |
||
7 | multiple layers of the Microchip USB Firmware Stack. |
||
8 | |||
9 | Description: |
||
10 | This file defines data types, constants, and macros that are common to |
||
11 | multiple layers of the Microchip USB Firmware Stack. |
||
12 | |||
13 | This file is located in the "\<Install Directory\>\\Microchip\\Include\\USB" |
||
14 | directory. |
||
15 | |||
16 | When including this file in a new project, this file can either be |
||
17 | referenced from the directory in which it was installed or copied |
||
18 | directly into the user application folder. If the first method is |
||
19 | chosen to keep the file located in the folder in which it is installed |
||
20 | then include paths need to be added so that the library and the |
||
21 | application both know where to reference each others files. If the |
||
22 | application folder is located in the same folder as the Microchip |
||
23 | folder (like the current demo folders), then the following include |
||
24 | paths need to be added to the application's project: |
||
25 | |||
26 | . |
||
27 | ..\\..\\MicrochipInclude |
||
28 | |||
29 | If a different directory structure is used, modify the paths as |
||
30 | required. An example using absolute paths instead of relative paths |
||
31 | would be the following: |
||
32 | |||
33 | C:\\Microchip Solutions\\Microchip\\Include |
||
34 | |||
35 | C:\\Microchip Solutions\\My Demo Application |
||
36 | *******************************************************************************/ |
||
37 | //DOM-IGNORE-BEGIN |
||
38 | /******************************************************************************* |
||
39 | |||
40 | FileName: usb_common.h |
||
41 | Dependencies: See included files, below. |
||
42 | Processor: PIC18/PIC24/PIC32MX microcontrollers with USB module |
||
43 | Compiler: C18 v3.13+/C30 v2.01+/C32 v0.00.18+ |
||
44 | Company: Microchip Technology, Inc. |
||
45 | |||
46 | Software License Agreement |
||
47 | |||
48 | The software supplied herewith by Microchip Technology Incorporated |
||
49 | (the Company) for its PICmicro® Microcontroller is intended and |
||
50 | supplied to you, the Companys customer, for use solely and |
||
51 | exclusively on Microchip PICmicro Microcontroller products. The |
||
52 | software is owned by the Company and/or its supplier, and is |
||
53 | protected under applicable copyright laws. All rights are reserved. |
||
54 | Any use in violation of the foregoing restrictions may subject the |
||
55 | user to criminal sanctions under applicable laws, as well as to |
||
56 | civil liability for the breach of the terms and conditions of this |
||
57 | license. |
||
58 | |||
59 | THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION. NO WARRANTIES, |
||
60 | WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED |
||
61 | TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
||
62 | PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, |
||
63 | IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR |
||
64 | CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. |
||
65 | |||
66 | *******************************************************************************/ |
||
67 | //DOM-IGNORE-END |
||
68 | |||
69 | //DOM-IGNORE-BEGIN |
||
70 | /******************************************************************** |
||
71 | Change History: |
||
72 | Rev Description |
||
73 | ---- ----------- |
||
74 | 2.6 Moved many of the USB events |
||
75 | 2.6a Changed the limit of USB_EVENT from UINT_MAX to INT_MAX |
||
76 | 2.7 No change |
||
77 | 2.7a Minor changes to include isochronous events |
||
78 | ********************************************************************/ |
||
79 | //DOM-IGNORE-END |
||
80 | |||
81 | |||
82 | //DOM-IGNORE-BEGIN |
||
83 | #ifndef _USB_COMMON_H_ |
||
84 | #define _USB_COMMON_H_ |
||
85 | //DOM-IGNORE-END |
||
86 | |||
87 | #include <limits.h> |
||
88 | |||
89 | // ***************************************************************************** |
||
90 | // ***************************************************************************** |
||
91 | // Section: USB Constants |
||
92 | // ***************************************************************************** |
||
93 | // ***************************************************************************** |
||
94 | |||
95 | // Section: Error Code Values |
||
96 | |||
97 | #define USB_SUCCESS 0x00 // USB operation successful. |
||
98 | #define USB_INVALID_STATE 0x01 // Operation cannot be performed in current state. |
||
99 | #define USB_BUSY 0x02 // A transaction is already in progress. |
||
100 | #define USB_ILLEGAL_REQUEST 0x03 // Cannot perform requested operation. |
||
101 | #define USB_INVALID_CONFIGURATION 0x04 // Configuration descriptor not found. |
||
102 | #define USB_MEMORY_ALLOCATION_ERROR 0x05 // Out of dynamic memory. |
||
103 | #define USB_UNKNOWN_DEVICE 0x06 // Device with specified address is not attached. |
||
104 | #define USB_CANNOT_ENUMERATE 0x07 // Cannot enumerate the attached device. |
||
105 | #define USB_EVENT_QUEUE_FULL 0x08 // Event queue was full when an event occured. |
||
106 | #define USB_ENDPOINT_BUSY 0x10 // Endpoint is currently processing a transaction. |
||
107 | #define USB_ENDPOINT_STALLED 0x11 // Endpoint is currently stalled. User must clear the condition. |
||
108 | #define USB_ENDPOINT_ERROR 0x12 // Will need more than this eventually |
||
109 | #define USB_ENDPOINT_ERROR_ILLEGAL_PID 0x13 // Illegal PID received. |
||
110 | #define USB_ENDPOINT_NOT_FOUND 0x14 // Requested endpoint does not exist on device. |
||
111 | #define USB_ENDPOINT_ILLEGAL_DIRECTION 0x15 // Reads must be performe on IN endpoints, writes on OUT endpoints. |
||
112 | //#define USB_ENDPOINT_TRANSACTION_IN_PROGRESS 0x16 |
||
113 | #define USB_ENDPOINT_NAK_TIMEOUT 0x17 // Too many NAK's occurred while waiting for the current transaction. |
||
114 | #define USB_ENDPOINT_ILLEGAL_TYPE 0x18 // Transfer type must match endpoint description. |
||
115 | #define USB_ENDPOINT_UNRESOLVED_STATE 0x19 // Endpoint is in an unknown state after completing a transaction. |
||
116 | #define USB_ENDPOINT_ERROR_BIT_STUFF 0x20 // USB Module - Bit stuff error. |
||
117 | #define USB_ENDPOINT_ERROR_DMA 0x21 // USB Module - DMA error. |
||
118 | #define USB_ENDPOINT_ERROR_TIMEOUT 0x22 // USB Module - Bus timeout. |
||
119 | #define USB_ENDPOINT_ERROR_DATA_FIELD 0x23 // USB Module - Data field size error. |
||
120 | #define USB_ENDPOINT_ERROR_CRC16 0x24 // USB Module - CRC16 failure. |
||
121 | #define USB_ENDPOINT_ERROR_END_OF_FRAME 0x25 // USB Module - End of Frame error. |
||
122 | #define USB_ENDPOINT_ERROR_PID_CHECK 0x26 // USB Module - Illegal PID received. |
||
123 | #define USB_ENDPOINT_ERROR_BMX 0x27 // USB Module - Bus Matrix error. |
||
124 | #define USB_ERROR_INSUFFICIENT_POWER 0x28 // Too much power was requested |
||
125 | |||
126 | // Section: Return values for USBHostDeviceStatus() |
||
127 | |||
128 | #define USB_DEVICE_STATUS 0x30 // Offset for USBHostDeviceStatus() return codes |
||
129 | #define USB_DEVICE_ATTACHED (USB_DEVICE_STATUS | 0x30) // Device is attached and running |
||
130 | #define USB_DEVICE_DETACHED (USB_DEVICE_STATUS | 0x01) // No device is attached |
||
131 | #define USB_DEVICE_ENUMERATING (USB_DEVICE_STATUS | 0x02) // Device is enumerating |
||
132 | #define USB_HOLDING_OUT_OF_MEMORY (USB_DEVICE_STATUS | 0x03) // Not enough heap space available |
||
133 | #define USB_HOLDING_UNSUPPORTED_DEVICE (USB_DEVICE_STATUS | 0x04) // Invalid configuration or unsupported class |
||
134 | #define USB_HOLDING_UNSUPPORTED_HUB (USB_DEVICE_STATUS | 0x05) // Hubs are not supported |
||
135 | #define USB_HOLDING_INVALID_CONFIGURATION (USB_DEVICE_STATUS | 0x06) // Invalid configuration requested |
||
136 | #define USB_HOLDING_PROCESSING_CAPACITY (USB_DEVICE_STATUS | 0x07) // Processing requirement excessive |
||
137 | #define USB_HOLDING_POWER_REQUIREMENT (USB_DEVICE_STATUS | 0x08) // Power requirement excessive |
||
138 | #define USB_HOLDING_CLIENT_INIT_ERROR (USB_DEVICE_STATUS | 0x09) // Client driver failed to initialize |
||
139 | #define USB_DEVICE_SUSPENDED (USB_DEVICE_STATUS | 0x0A) // Device is suspended |
||
140 | |||
141 | #define USB_ERROR_CLASS_DEFINED 0x50 // Offset for application defined errors |
||
142 | |||
143 | #define USB_SINGLE_DEVICE_ADDRESS 0x01 // Default USB device address (single device support) |
||
144 | |||
145 | |||
146 | // ***************************************************************************** |
||
147 | // ***************************************************************************** |
||
148 | // Section: USB Data Types |
||
149 | // ***************************************************************************** |
||
150 | // ***************************************************************************** |
||
151 | |||
152 | // ***************************************************************************** |
||
153 | /* Data Transfer Flags |
||
154 | |||
155 | The following flags are used in the flags parameter of the "USBDEVTransferData" |
||
156 | and "USBHALTransferData" routines. They can be accessed by the bitfield |
||
157 | definitions or the macros can be OR'd together to identify the endpoint number |
||
158 | and properties of the data transfer. |
||
159 | |||
160 | <code> |
||
161 | 7 6 5 4 3 2 1 0 - Field name |
||
162 | | | | | \_____/ |
||
163 | | | | | +----- ep_num - Endpoint number |
||
164 | | | | +---------- zero_pkt - End transfer with short or zero-sized packet |
||
165 | | | +------------ dts - 0=DATA0 packet, 1=DATA1 packet |
||
166 | | +-------------- force_dts - Force data toggle sync to match dts field |
||
167 | +---------------- direction - Transfer direction: 0=Receive, 1=Transmit |
||
168 | </code> |
||
169 | */ |
||
170 | |||
171 | typedef union |
||
172 | { |
||
173 | BYTE bitmap; |
||
174 | struct |
||
175 | { |
||
176 | BYTE ep_num: 4; |
||
177 | BYTE zero_pkt: 1; |
||
178 | BYTE dts: 1; |
||
179 | BYTE force_dts: 1; |
||
180 | BYTE direction: 1; |
||
181 | }field; |
||
182 | |||
183 | } TRANSFER_FLAGS; |
||
184 | |||
185 | // ***************************************************************************** |
||
186 | /* Data Transfer Flags, Endpoint Number Constants |
||
187 | |||
188 | These macros can be used as values for the "ep_num" field of the TRANSFER_FLAGS |
||
189 | data type. |
||
190 | */ |
||
191 | #define USB_EP0 0 // |
||
192 | #define USB_EP1 1 // |
||
193 | #define USB_EP2 2 // |
||
194 | #define USB_EP3 3 // |
||
195 | #define USB_EP4 4 // |
||
196 | #define USB_EP5 5 // |
||
197 | #define USB_EP6 6 // |
||
198 | #define USB_EP7 7 // |
||
199 | #define USB_EP8 8 // |
||
200 | #define USB_EP9 9 // |
||
201 | #define USB_EP10 10 // |
||
202 | #define USB_EP11 11 // |
||
203 | #define USB_EP12 12 // |
||
204 | #define USB_EP13 13 // |
||
205 | #define USB_EP14 14 // |
||
206 | #define USB_EP15 15 // |
||
207 | |||
208 | // ***************************************************************************** |
||
209 | /* Data Transfer Flags, Bitmap Constants |
||
210 | |||
211 | These macros can be used as values for the "bitmap" field of the TRANSFER_FLAGS |
||
212 | data type. |
||
213 | */ |
||
214 | #define USB_TRANSMIT 0x80 // Data will be transmitted to the USB |
||
215 | #define USB_RECEIVE 0x00 // Data will be received from the USB |
||
216 | #define USB_FORCE_DTS 0x40 // Forces data toggle sync as below: |
||
217 | #define USB_DTS_MASK 0x20 // Mask for DTS bit (below) |
||
218 | #define USB_ZERO_PKT 0x10 // End transfer w/a short or zero-length packet |
||
219 | #define USB_DATA0 0x00|USB_FORCE_DTS // Force DATA0 |
||
220 | #define USB_DATA1 0x20|USB_FORCE_DTS // Force DATA1 |
||
221 | #define USB_SETUP_PKT USB_RECEIVE|USB_DATA0|USB_EP0 // Setup Packet |
||
222 | #define USB_SETUP_DATA USB_DATA1|USB_ZERO_PKT|USB_EP0 // Setup-transfer Data Packet |
||
223 | #define USB_SETUP_STATUS USB_DATA1|USB_EP0 // Setup-transfer Status Packet |
||
224 | #define USB_EP_NUM_MASK 0x0F // Endpoint number (ep_num) mask |
||
225 | |||
226 | // ***************************************************************************** |
||
227 | /* Data Transfer Flags, Initialization Macro |
||
228 | |||
229 | This macro can be used with the above bitmap constants to initialize a |
||
230 | TRANSFER_FLAGS value. It provides the correct data type to avoid compiler |
||
231 | warnings. |
||
232 | */ |
||
233 | #define XFLAGS(f) ((TRANSFER_FLAGS)((BYTE)(f))) // Initialization Macro |
||
234 | |||
235 | |||
236 | // ***************************************************************************** |
||
237 | /* USB Events |
||
238 | |||
239 | This enumeration identifies USB events that occur. It is used to |
||
240 | inform USB drivers and applications of events on the bus. It is passed |
||
241 | as a parameter to the event-handling routine, which must match the |
||
242 | prototype of the USB_CLIENT_EVENT_HANDLER data type, when an event occurs. |
||
243 | */ |
||
244 | |||
245 | typedef enum |
||
246 | { |
||
247 | // No event occured (NULL event) |
||
248 | EVENT_NONE = 0, |
||
249 | |||
250 | EVENT_DEVICE_STACK_BASE = 1, |
||
251 | |||
252 | EVENT_HOST_STACK_BASE = 100, |
||
253 | |||
254 | // A USB hub has been attached. Hub support is not currently available. |
||
255 | EVENT_HUB_ATTACH, |
||
256 | |||
257 | // A stall has occured. This event is not used by the Host stack. |
||
258 | EVENT_STALL, |
||
259 | |||
260 | // VBus SRP Pulse, (VBus > 2.0v), Data: BYTE Port Number (For future support) |
||
261 | EVENT_VBUS_SES_REQUEST, |
||
262 | |||
263 | // The voltage on Vbus has dropped below 4.4V/4.7V. The application is |
||
264 | // responsible for monitoring Vbus and calling USBHostVbusEvent() with this |
||
265 | // event. This event is not generated by the stack. |
||
266 | EVENT_VBUS_OVERCURRENT, |
||
267 | |||
268 | // An enumerating device is requesting power. The data associated with this |
||
269 | // event is of the data type USB_VBUS_POWER_EVENT_DATA. Note that |
||
270 | // the requested current is specified in 2mA units, identical to the power |
||
271 | // specification in a device's Configuration Descriptor. |
||
272 | EVENT_VBUS_REQUEST_POWER, |
||
273 | |||
274 | // Release power from a detaching device. The data associated with this |
||
275 | // event is of the data type USB_VBUS_POWER_EVENT_DATA. The current value |
||
276 | // specified in the data can be ignored. |
||
277 | EVENT_VBUS_RELEASE_POWER, |
||
278 | |||
279 | // The voltage on Vbus is good, and the USB OTG module can be powered on. |
||
280 | // The application is responsible for monitoring Vbus and calling |
||
281 | // USBHostVbusEvent() with this event. This event is not generated by the |
||
282 | // stack. If the application issues an EVENT_VBUS_OVERCURRENT, then no |
||
283 | // power will be applied to that port, and no device can attach to that |
||
284 | // port, until the application issues the EVENT_VBUS_POWER_AVAILABLE for |
||
285 | // the port. |
||
286 | EVENT_VBUS_POWER_AVAILABLE, |
||
287 | |||
288 | // The attached device is not supported by the application. The attached |
||
289 | // device is not allowed to enumerate. |
||
290 | EVENT_UNSUPPORTED_DEVICE, |
||
291 | |||
292 | // Cannot enumerate the attached device. This is generated if communication |
||
293 | // errors prevent the device from enumerating. |
||
294 | EVENT_CANNOT_ENUMERATE, |
||
295 | |||
296 | // The client driver cannot initialize the the attached device. The |
||
297 | // attached is not allowed to enumerate. |
||
298 | EVENT_CLIENT_INIT_ERROR, |
||
299 | |||
300 | // The Host stack does not have enough heap space to enumerate the device. |
||
301 | // Check the amount of heap space allocated to the application. In MPLAB, |
||
302 | // select Project> Build Options...> Project. Select the appropriate |
||
303 | // linker tab, and inspect the "Heap size" entry. |
||
304 | EVENT_OUT_OF_MEMORY, |
||
305 | |||
306 | // Unspecified host error. (This error should not occur). |
||
307 | EVENT_UNSPECIFIED_ERROR, |
||
308 | |||
309 | // USB cable has been detached. The data associated with this event is the |
||
310 | // address of detached device, a single BYTE. |
||
311 | EVENT_DETACH, |
||
312 | |||
313 | // A USB transfer has completed. The data associated with this event is of |
||
314 | // the data type HOST_TRANSFER_DATA if the event is generated from the host |
||
315 | // stack. |
||
316 | EVENT_TRANSFER, |
||
317 | |||
318 | // A USB Start of Frame token has been received. This event is not |
||
319 | // used by the Host stack. |
||
320 | EVENT_SOF, |
||
321 | |||
322 | // Device-mode resume received. This event is not used by the Host stack. |
||
323 | EVENT_RESUME, |
||
324 | |||
325 | // Device-mode suspend/idle event received. This event is not used by the |
||
326 | // Host stack. |
||
327 | EVENT_SUSPEND, |
||
328 | |||
329 | // Device-mode bus reset received. This event is not used by the Host |
||
330 | // stack. |
||
331 | EVENT_RESET, |
||
332 | |||
333 | // In Host mode, an isochronous data read has completed. This event will only |
||
334 | // be passed to the DataEventHandler, which is only utilized if it is defined. |
||
335 | // Note that the DataEventHandler is called from within the USB interrupt, so |
||
336 | // it is critical that it return in time for the next isochronous data packet. |
||
337 | EVENT_DATA_ISOC_READ, |
||
338 | |||
339 | // In Host mode, an isochronous data write has completed. This event will only |
||
340 | // be passed to the DataEventHandler, which is only utilized if it is defined. |
||
341 | // Note that the DataEventHandler is called from within the USB interrupt, so |
||
342 | // it is critical that it return in time for the next isochronous data packet. |
||
343 | EVENT_DATA_ISOC_WRITE, |
||
344 | |||
345 | // Class-defined event offsets start here: |
||
346 | EVENT_GENERIC_BASE = 400, // Offset for Generic class events |
||
347 | |||
348 | EVENT_MSD_BASE = 500, // Offset for Mass Storage Device class events |
||
349 | |||
350 | EVENT_HID_BASE = 600, // Offset for Human Interface Device class events |
||
351 | |||
352 | EVENT_PRINTER_BASE = 700, // Offset for Printer class events |
||
353 | |||
354 | EVENT_CDC_BASE = 800, // Offset for CDC class events |
||
355 | |||
356 | EVENT_CHARGER_BASE = 900, // Offset for Charger client driver events. |
||
357 | |||
358 | EVENT_AUDIO_BASE = 1000, // Offset for Audio client driver events. |
||
359 | |||
360 | EVENT_USER_BASE = 10000, // Add integral values to this event number |
||
361 | // to create user-defined events. |
||
362 | |||
363 | // There was a transfer error on the USB. The data associated with this |
||
364 | // event is of data type HOST_TRANSFER_DATA. |
||
365 | EVENT_BUS_ERROR = INT_MAX |
||
366 | |||
367 | } USB_EVENT; |
||
368 | |||
369 | |||
370 | // ***************************************************************************** |
||
371 | /* EVENT_TRANSFER Data |
||
372 | |||
373 | This data structure is passed to the appropriate layer's |
||
374 | USB_EVENT_HANDLER when an EVT_XFER event has occured, indicating |
||
375 | that a transfer has completed on the USB. It provides the endpoint, |
||
376 | direction, and actual size of the transfer. |
||
377 | */ |
||
378 | |||
379 | typedef struct _transfer_event_data |
||
380 | { |
||
381 | TRANSFER_FLAGS flags; // Transfer flags (see above) |
||
382 | UINT32 size; // Actual number of bytes transferred |
||
383 | BYTE pid; // Packet ID |
||
384 | |||
385 | } USB_TRANSFER_EVENT_DATA; |
||
386 | |||
387 | |||
388 | // ***************************************************************************** |
||
389 | /* EVENT_VBUS_REQUEST_POWER and EVENT_VBUS_RELEASE_POWER Data |
||
390 | |||
391 | This data structure is passed to the appropriate layer's |
||
392 | USB_EVENT_HANDLER when an EVENT_VBUS_REQUEST_POWER or EVENT_VBUS_RELEASE_POWER |
||
393 | event has occured, indicating that a change in Vbus power is being requested. |
||
394 | */ |
||
395 | |||
396 | typedef struct _vbus_power_data |
||
397 | { |
||
398 | BYTE port; // Physical port number |
||
399 | BYTE current; // Current in 2mA units |
||
400 | } USB_VBUS_POWER_EVENT_DATA; |
||
401 | |||
402 | |||
403 | // ***************************************************************************** |
||
404 | /* EVT_STALL Data |
||
405 | |||
406 | The EVT_STALL event has a 16-bit data value associated with it where |
||
407 | a bit is set in the position for each endpoint that is currently |
||
408 | stalled (ie. bit 0 = EP0, bit 1 = EP1, etc.) |
||
409 | */ |
||
410 | |||
411 | |||
412 | // ***************************************************************************** |
||
413 | // ***************************************************************************** |
||
414 | // Section: Event Handling Routines |
||
415 | // ***************************************************************************** |
||
416 | // ***************************************************************************** |
||
417 | |||
418 | /******************************************************************************* |
||
419 | Function: |
||
420 | BOOL <Event-handling Function Name> ( USB_EVENT event, |
||
421 | void *data, unsigned int size ) |
||
422 | |||
423 | Description: |
||
424 | This routine is a "call out" routine that must be implemented by |
||
425 | any layer of the USB SW Stack (except the HAL which is at the |
||
426 | root of the event-call tree that needs to receive events. When |
||
427 | an event occurs, the HAL calls the next higher layer in the |
||
428 | stack to handle the event. Each layer either handles the event |
||
429 | or calls the layer above it to handle the event. Events are |
||
430 | identified by the "event" parameter and may have associated |
||
431 | data. If the higher layer was able to handle the event, it |
||
432 | should return TRUE. If not, it should return FALSE. |
||
433 | |||
434 | Preconditions: |
||
435 | USBInitialize must have been called to initialize the USB SW |
||
436 | Stack. |
||
437 | |||
438 | Paramters: |
||
439 | USB_EVENT event - Identifies the bus event that occured |
||
440 | void *data - Pointer to event-specific data |
||
441 | unsigned int size - Size of the event-specific data |
||
442 | |||
443 | Return Values: |
||
444 | None |
||
445 | |||
446 | Remarks: |
||
447 | The function is name is defined by the layer that implements |
||
448 | it. A pointer to the function will be placed by into a table |
||
449 | that the lower-layer will use to call it. This requires the |
||
450 | function to use a specific call "signature" (return data type |
||
451 | and values and data parameter types and values). |
||
452 | |||
453 | *******************************************************************************/ |
||
454 | |||
455 | typedef BOOL (*USB_EVENT_HANDLER) ( USB_EVENT event, void *data, unsigned int size ); |
||
456 | |||
457 | |||
458 | // ***************************************************************************** |
||
459 | // ***************************************************************************** |
||
460 | // Section: USB Application Program Interface (API) Routines |
||
461 | // ***************************************************************************** |
||
462 | // ***************************************************************************** |
||
463 | |||
464 | /**************************************************************************** |
||
465 | Function: |
||
466 | BOOL USBInitialize ( unsigned long flags ) |
||
467 | |||
468 | Summary: |
||
469 | This interface initializes the variables of the USB host stack. |
||
470 | |||
471 | Description: |
||
472 | This interface initializes the USB stack. |
||
473 | |||
474 | Precondition: |
||
475 | None |
||
476 | |||
477 | Parameters: |
||
478 | flags - reserved |
||
479 | |||
480 | Return Values: |
||
481 | TRUE - Initialization successful |
||
482 | FALSE - Initialization failure |
||
483 | |||
484 | Remarks: |
||
485 | This interface is implemented as a macro that can be defined by the |
||
486 | application or by default is defined correctly for the stack mode. |
||
487 | |||
488 | ***************************************************************************/ |
||
489 | |||
490 | #ifndef USBInitialize |
||
491 | #if defined( USB_SUPPORT_DEVICE ) |
||
492 | #if defined( USB_SUPPORT_HOST ) |
||
493 | #if defined( USB_SUPPORT_OTG ) |
||
494 | #error "USB OTG is not yet supported." |
||
495 | #else |
||
496 | #define USBInitialize(f) \ |
||
497 | (USBDEVInitialize(f) && USBHostInit(f)) ? \ |
||
498 | TRUE : FALSE |
||
499 | #endif |
||
500 | #else |
||
501 | #define USBInitialize(f) USBDeviceInit() |
||
502 | #endif |
||
503 | #else |
||
504 | #if defined( USB_SUPPORT_HOST ) |
||
505 | #define USBInitialize(f) USBHostInit(f) |
||
506 | #else |
||
507 | #error "Application must define support mode in usb_config.h" |
||
508 | #endif |
||
509 | #endif |
||
510 | #endif |
||
511 | |||
512 | |||
513 | /**************************************************************************** |
||
514 | Function: |
||
515 | void USBTasks( void ) |
||
516 | |||
517 | Summary: |
||
518 | This function executes the tasks for USB operation. |
||
519 | |||
520 | Description: |
||
521 | This function executes the tasks for USB host operation. It must be |
||
522 | executed on a regular basis to keep everything functioning. |
||
523 | |||
524 | Precondition: |
||
525 | USBInitialize() has been called. |
||
526 | |||
527 | Parameters: |
||
528 | None |
||
529 | |||
530 | Returns: |
||
531 | None |
||
532 | |||
533 | Remarks: |
||
534 | This interface is implemented as a macro that can be defined by the |
||
535 | application or by default is defined correctly for the stack mode. |
||
536 | |||
537 | ***************************************************************************/ |
||
538 | |||
539 | #ifndef USBTasks // Implemented as a macro that can be overridden. |
||
540 | #if defined( USB_SUPPORT_DEVICE ) |
||
541 | #if defined( USB_SUPPORT_HOST ) |
||
542 | #if defined( USB_SUPPORT_OTG ) |
||
543 | #error "USB OTG is not yet supported." |
||
544 | #else |
||
545 | #define USBTasks() {USBHostTasks(); USBHALHandleBusEvent();} |
||
546 | #endif |
||
547 | #else |
||
548 | #define USBTasks() USBDeviceTasks() |
||
549 | #endif |
||
550 | #else |
||
551 | #if defined( USB_SUPPORT_HOST ) |
||
552 | #define USBTasks() USBHostTasks() |
||
553 | #else |
||
554 | #error "Application must define support mode in usb_config.h" |
||
555 | #endif |
||
556 | #endif |
||
557 | #endif |
||
558 | |||
559 | #define USB_PING_PONG__NO_PING_PONG 0x00 //0b00 |
||
560 | #define USB_PING_PONG__EP0_OUT_ONLY 0x01 //0b01 |
||
561 | #define USB_PING_PONG__FULL_PING_PONG 0x02 //0b10 |
||
562 | #define USB_PING_PONG__ALL_BUT_EP0 0x03 //0b11 |
||
563 | |||
564 | #endif // _USB_COMMON_H_ |
||
565 | /************************************************************************* |
||
566 | * EOF |
||
567 | */ |
||
568 |
Powered by WebSVN v2.8.3