?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{BLAME START}

library

?curdirlinks? -

Blame information for rev 32

Line No. Rev Author Line
1 32 kaklik /******************************************************************************
2  
3 USB Host Driver Local Header
4  
5 This file provides local definitions used by the hardware interface for a USB
6 Host application.
7  
8 File Name: usb_host_local.h
9 Dependencies: None
10 Processor: PIC24F/PIC32MX
11 Compiler: C30/C32
12 Company: Microchip Technology, Inc.
13  
14 Software License Agreement
15  
16 The software supplied herewith by Microchip Technology Incorporated
17 (the “Company”) for its PICmicro® Microcontroller is intended and
18 supplied to you, the Company’s customer, for use solely and
19 exclusively on Microchip PICmicro Microcontroller products. The
20 software is owned by the Company and/or its supplier, and is
21 protected under applicable copyright laws. All rights are reserved.
22 Any use in violation of the foregoing restrictions may subject the
23 user to criminal sanctions under applicable laws, as well as to
24 civil liability for the breach of the terms and conditions of this
25 license.
26  
27 THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
28 WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
29 TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
30 PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
31 IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
32 CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
33  
34 Change History:
35 Rev Description
36 ---------- ----------------------------------------------------------
37 2.6a Removed extraneous definition
38 2.7 No change
39 2.7a Removed freez() macro
40 *******************************************************************************/
41  
42 #ifndef _USB_HOST_LOCAL_
43 #define _USB_HOST_LOCAL_
44  
45 #include "usb_hal_local.h"
46  
47  
48 // *****************************************************************************
49 // *****************************************************************************
50 // Section: Constants
51 //
52 // These constants are internal to the stack. All constants required by the
53 // API are in the header file(s).
54 // *****************************************************************************
55 // *****************************************************************************
56  
57 // *****************************************************************************
58 // Section: State Machine Constants
59 // *****************************************************************************
60  
61 #define STATE_MASK 0x0F00 //
62 #define SUBSTATE_MASK 0x00F0 //
63 #define SUBSUBSTATE_MASK 0x000F //
64  
65 #define NEXT_STATE 0x0100 //
66 #define NEXT_SUBSTATE 0x0010 //
67 #define NEXT_SUBSUBSTATE 0x0001 //
68  
69 #define SUBSUBSTATE_ERROR 0x000F //
70  
71 #define NO_STATE 0xFFFF //
72  
73 /*
74 *******************************************************************************
75 DETACHED state machine values
76  
77 This state machine handles the condition when no device is attached.
78 */
79  
80 #define STATE_DETACHED 0x0000 //
81 #define SUBSTATE_INITIALIZE 0x0000 //
82 #define SUBSTATE_WAIT_FOR_POWER 0x0010 //
83 #define SUBSTATE_TURN_ON_POWER 0x0020 //
84 #define SUBSTATE_WAIT_FOR_DEVICE 0x0030 //
85  
86 /*
87 *******************************************************************************
88 ATTACHED state machine values
89  
90 This state machine gets the device descriptor of the remote device. We get the
91 size of the device descriptor, and use that size to get the entire device
92 descriptor. Then we check the VID and PID and make sure they appear in the TPL.
93 */
94  
95 #define STATE_ATTACHED 0x0100 //
96  
97 #define SUBSTATE_SETTLE 0x0000 //
98 #define SUBSUBSTATE_START_SETTLING_DELAY 0x0000 //
99 #define SUBSUBSTATE_WAIT_FOR_SETTLING 0x0001 //
100 #define SUBSUBSTATE_SETTLING_DONE 0x0002 //
101  
102 #define SUBSTATE_RESET_DEVICE 0x0010 //
103 #define SUBSUBSTATE_SET_RESET 0x0000 //
104 #define SUBSUBSTATE_RESET_WAIT 0x0001 //
105 #define SUBSUBSTATE_RESET_RECOVERY 0x0002 //
106 #define SUBSUBSTATE_RECOVERY_WAIT 0x0003 //
107 #define SUBSUBSTATE_RESET_COMPLETE 0x0004 //
108  
109 #define SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE 0x0020 //
110 #define SUBSUBSTATE_SEND_GET_DEVICE_DESCRIPTOR_SIZE 0x0000 //
111 #define SUBSUBSTATE_WAIT_FOR_GET_DEVICE_DESCRIPTOR_SIZE 0x0001 //
112 #define SUBSUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE_COMPLETE 0x0002 //
113  
114 #define SUBSTATE_GET_DEVICE_DESCRIPTOR 0x0030 //
115 #define SUBSUBSTATE_SEND_GET_DEVICE_DESCRIPTOR 0x0000 //
116 #define SUBSUBSTATE_WAIT_FOR_GET_DEVICE_DESCRIPTOR 0x0001 //
117 #define SUBSUBSTATE_GET_DEVICE_DESCRIPTOR_COMPLETE 0x0002 //
118  
119 #define SUBSTATE_VALIDATE_VID_PID 0x0040 //
120  
121 /*
122 *******************************************************************************
123 ADDRESSING state machine values
124  
125 This state machine sets the address of the remote device.
126 */
127  
128 #define STATE_ADDRESSING 0x0200 //
129  
130 #define SUBSTATE_SET_DEVICE_ADDRESS 0x0000 //
131 #define SUBSUBSTATE_SEND_SET_DEVICE_ADDRESS 0x0000 //
132 #define SUBSUBSTATE_WAIT_FOR_SET_DEVICE_ADDRESS 0x0001 //
133 #define SUBSUBSTATE_SET_DEVICE_ADDRESS_COMPLETE 0x0002 //
134  
135 /*
136 *******************************************************************************
137 CONFIGURING state machine values
138  
139 This state machine sets the configuration of the remote device, and sets up
140 internal variables to support the device.
141 */
142 #define STATE_CONFIGURING 0x0300 //
143  
144 #define SUBSTATE_INIT_CONFIGURATION 0x0000 //
145  
146 #define SUBSTATE_GET_CONFIG_DESCRIPTOR_SIZE 0x0010 //
147 #define SUBSUBSTATE_SEND_GET_CONFIG_DESCRIPTOR_SIZE 0x0000 //
148 #define SUBSUBSTATE_WAIT_FOR_GET_CONFIG_DESCRIPTOR_SIZE 0x0001 //
149 #define SUBSUBSTATE_GET_CONFIG_DESCRIPTOR_SIZECOMPLETE 0x0002 //
150  
151 #define SUBSTATE_GET_CONFIG_DESCRIPTOR 0x0020 //
152 #define SUBSUBSTATE_SEND_GET_CONFIG_DESCRIPTOR 0x0000 //
153 #define SUBSUBSTATE_WAIT_FOR_GET_CONFIG_DESCRIPTOR 0x0001 //
154 #define SUBSUBSTATE_GET_CONFIG_DESCRIPTOR_COMPLETE 0x0002 //
155  
156 #define SUBSTATE_SELECT_CONFIGURATION 0x0030 //
157 #define SUBSUBSTATE_SELECT_CONFIGURATION 0x0000 //
158 #define SUBSUBSTATE_SEND_SET_OTG 0x0001 //
159 #define SUBSUBSTATE_WAIT_FOR_SET_OTG_DONE 0x0002 //
160 #define SUBSUBSTATE_SET_OTG_COMPLETE 0x0003 //
161  
162 #define SUBSTATE_SET_CONFIGURATION 0x0040 //
163 #define SUBSUBSTATE_SEND_SET_CONFIGURATION 0x0000 //
164 #define SUBSUBSTATE_WAIT_FOR_SET_CONFIGURATION 0x0001 //
165 #define SUBSUBSTATE_SET_CONFIGURATION_COMPLETE 0x0002 //
166 #define SUBSUBSTATE_INIT_CLIENT_DRIVERS 0x0003 //
167  
168 /*
169 *******************************************************************************
170 RUNNING state machine values
171  
172 */
173  
174 #define STATE_RUNNING 0x0400 //
175 #define SUBSTATE_NORMAL_RUN 0x0000 //
176 #define SUBSTATE_SUSPEND_AND_RESUME 0x0010 //
177 #define SUBSUBSTATE_SUSPEND 0x0000 //
178 #define SUBSUBSTATE_RESUME 0x0001 //
179 #define SUBSUBSTATE_RESUME_WAIT 0x0002 //
180 #define SUBSUBSTATE_RESUME_RECOVERY 0x0003 //
181 #define SUBSUBSTATE_RESUME_RECOVERY_WAIT 0x0004 //
182 #define SUBSUBSTATE_RESUME_COMPLETE 0x0005 //
183  
184  
185 /*
186 *******************************************************************************
187 HOLDING state machine values
188  
189 */
190  
191 #define STATE_HOLDING 0x0500 //
192 #define SUBSTATE_HOLD_INIT 0x0000 //
193 #define SUBSTATE_HOLD 0x0001 //
194  
195  
196 // *****************************************************************************
197 // Section: Token State Machine Constants
198 // *****************************************************************************
199  
200 #define TSTATE_MASK 0x00F0 //
201 #define TSUBSTATE_MASK 0x000F //
202  
203 #define TSUBSTATE_ERROR 0x000F //
204  
205 #define TSTATE_IDLE 0x0000 //
206  
207 #define TSTATE_CONTROL_NO_DATA 0x0010 //
208 #define TSUBSTATE_CONTROL_NO_DATA_SETUP 0x0000 //
209 #define TSUBSTATE_CONTROL_NO_DATA_ACK 0x0001 //
210 #define TSUBSTATE_CONTROL_NO_DATA_COMPLETE 0x0002 //
211  
212 #define TSTATE_CONTROL_READ 0x0020 //
213 #define TSUBSTATE_CONTROL_READ_SETUP 0x0000 //
214 #define TSUBSTATE_CONTROL_READ_DATA 0x0001 //
215 #define TSUBSTATE_CONTROL_READ_ACK 0x0002 //
216 #define TSUBSTATE_CONTROL_READ_COMPLETE 0x0003 //
217  
218 #define TSTATE_CONTROL_WRITE 0x0030 //
219 #define TSUBSTATE_CONTROL_WRITE_SETUP 0x0000 //
220 #define TSUBSTATE_CONTROL_WRITE_DATA 0x0001 //
221 #define TSUBSTATE_CONTROL_WRITE_ACK 0x0002 //
222 #define TSUBSTATE_CONTROL_WRITE_COMPLETE 0x0003 //
223  
224 #define TSTATE_INTERRUPT_READ 0x0040 //
225 #define TSUBSTATE_INTERRUPT_READ_DATA 0x0000 //
226 #define TSUBSTATE_INTERRUPT_READ_COMPLETE 0x0001 //
227  
228 #define TSTATE_INTERRUPT_WRITE 0x0050 //
229 #define TSUBSTATE_INTERRUPT_WRITE_DATA 0x0000 //
230 #define TSUBSTATE_INTERRUPT_WRITE_COMPLETE 0x0001 //
231  
232 #define TSTATE_ISOCHRONOUS_READ 0x0060 //
233 #define TSUBSTATE_ISOCHRONOUS_READ_DATA 0x0000 //
234 #define TSUBSTATE_ISOCHRONOUS_READ_COMPLETE 0x0001 //
235  
236 #define TSTATE_ISOCHRONOUS_WRITE 0x0070 //
237 #define TSUBSTATE_ISOCHRONOUS_WRITE_DATA 0x0000 //
238 #define TSUBSTATE_ISOCHRONOUS_WRITE_COMPLETE 0x0001 //
239  
240 #define TSTATE_BULK_READ 0x0080 //
241 #define TSUBSTATE_BULK_READ_DATA 0x0000 //
242 #define TSUBSTATE_BULK_READ_COMPLETE 0x0001 //
243  
244 #define TSTATE_BULK_WRITE 0x0090 //
245 #define TSUBSTATE_BULK_WRITE_DATA 0x0000 //
246 #define TSUBSTATE_BULK_WRITE_COMPLETE 0x0001 //
247  
248 //******************************************************************************
249 // Section: USB Peripheral Constants
250 //******************************************************************************
251  
252 // Section: USB Control Register Constants
253  
254 // Section: U1PWRC
255  
256 #define USB_SUSPEND_MODE 0x02 // U1PWRC - Put the module in suspend mode.
257 #define USB_NORMAL_OPERATION 0x00 // U1PWRC - Normal USB operation
258 #define USB_ENABLED 0x01 // U1PWRC - Enable the USB module.
259 #define USB_DISABLED 0x00 // U1PWRC - Disable the USB module.
260  
261 // Section: U1OTGCON
262  
263 #define USB_DPLUS_PULLUP_ENABLE 0x80 // U1OTGCON - Enable D+ pull-up
264 #define USB_DMINUS_PULLUP_ENABLE 0x40 // U1OTGCON - Enable D- pull-up
265 #define USB_DPLUS_PULLDOWN_ENABLE 0x20 // U1OTGCON - Enable D+ pull-down
266 #define USB_DMINUS_PULLDOWN_ENABLE 0x10 // U1OTGCON - Enable D- pull-down
267 #define USB_VBUS_ON 0x08 // U1OTGCON - Enable Vbus
268 #define USB_OTG_ENABLE 0x04 // U1OTGCON - Enable OTG
269 #define USB_VBUS_CHARGE_ENABLE 0x02 // U1OTGCON - Vbus charge line set to 5V
270 #define USB_VBUS_DISCHARGE_ENABLE 0x01 // U1OTGCON - Discharge Vbus
271  
272 // Section: U1OTGIE/U1OTGIR
273  
274 #define USB_INTERRUPT_IDIF 0x80 // U1OTGIR - ID state change flag
275 #define USB_INTERRUPT_T1MSECIF 0x40 // U1OTGIR - 1ms timer interrupt flag
276 #define USB_INTERRUPT_LSTATEIF 0x20 // U1OTGIR - line state stable flag
277 #define USB_INTERRUPT_ACTIVIF 0x10 // U1OTGIR - bus activity flag
278 #define USB_INTERRUPT_SESVDIF 0x08 // U1OTGIR - session valid change flag
279 #define USB_INTERRUPT_SESENDIF 0x04 // U1OTGIR - B-device Vbus change flag
280 #define USB_INTERRUPT_VBUSVDIF 0x01 // U1OTGIR - A-device Vbus change flag
281  
282 // Section: U1CON
283  
284 #define USB_JSTATE_DETECTED 0x80 // U1CON - J state
285 #define USB_SE0_DETECTED 0x40 // U1CON - Single ended 0 detected
286 #define USB_TOKEN_BUSY 0x20 // U1CON - Token currently being processed
287 #define USB_ASSERT_RESET 0x10 // U1CON - RESET signalling
288 #define USB_HOST_MODE_ENABLE 0x08 // U1CON - Enable host mode
289 #define USB_RESUME_ACTIVATED 0x04 // U1CON - RESUME signalling
290 #define USB_PINGPONG_RESET 0x02 // U1CON - Reset ping-pong buffer pointer
291 #define USB_SOF_ENABLE 0x01 // U1CON - Enable SOF generation
292 #define USB_SOF_DISABLE 0x00 // U1CON - Disable SOF generation
293  
294 // Section: U1CNFG1
295  
296 #define USB_EYE_PATTERN_TEST 0x80 // U1CFG1 - Enable eye pattern test
297 #define USB_MONITOR_OE 0x40 // U1CFG1 - nOE signal active
298 #define USB_FREEZE_IN_DEBUG_MODE 0x20 // U1CFG1 - Freeze on halt when in debug mode
299 #define USB_STOP_IN_IDLE_MODE 0x10 // U1CFG1 - Stop module in idle mode
300 #define USB_PING_PONG__ALL_BUT_EP0 0x03 // U1CFG1 - Ping-pong on all endpoints except EP0
301 #define USB_PING_PONG__FULL_PING_PONG 0x02 // U1CFG1 - Ping-pong on all endpoints
302 #define USB_PING_PONG__EP0_OUT_ONLY 0x01 // U1CFG1 - Ping-pong on EP 0 out only
303 #define USB_PING_PONG__NO_PING_PONG 0x00 // U1CFG1 - No ping-pong
304  
305 // Section: U1CNFG2
306  
307 #define USB_VBUS_PULLUP_ENABLE 0x01 // U1CNFG2 - Enable Vbus pull-up
308 #define USB_EXTERNAL_IIC 0x08 // U1CNFG2 - External module controlled by I2C
309 #define USB_VBUS_BOOST_DISABLE 0x04 // U1CNFG2 - Disable Vbus boost
310 #define USB_VBUS_BOOST_ENABLE 0x00 // U1CNFG2 - Enable Vbus boost
311 #define USB_VBUS_COMPARE_DISABLE 0x02 // U1CNFG2 - Vbus comparator disabled
312 #define USB_VBUS_COMPARE_ENABLE 0x00 // U1CNFG2 - Vbus comparator enabled
313 #define USB_ONCHIP_DISABLE 0x01 // U1CNFG2 - On-chip transceiver disabled
314 #define USB_ONCHIP_ENABLE 0x00 // U1CNFG2 - On-chip transceiver enabled
315  
316 // Section: U1IE/U1IR
317  
318 #define USB_INTERRUPT_STALL 0x80 // U1IE - Stall interrupt enable
319 #define USB_INTERRUPT_ATTACH 0x40 // U1IE - Attach interrupt enable
320 #define USB_INTERRUPT_RESUME 0x20 // U1IE - Resume interrupt enable
321 #define USB_INTERRUPT_IDLE 0x10 // U1IE - Idle interrupt enable
322 #define USB_INTERRUPT_TRANSFER 0x08 // U1IE - Transfer Done interrupt enable
323 #define USB_INTERRUPT_SOF 0x04 // U1IE - Start of Frame Threshold interrupt enable
324 #define USB_INTERRUPT_ERROR 0x02 // U1IE - USB Error interrupt enable
325 #define USB_INTERRUPT_DETACH 0x01 // U1IE - Detach interrupt enable
326  
327  
328 //******************************************************************************
329 // Section: Other Constants
330 //******************************************************************************
331  
332 #define CLIENT_DRIVER_HOST 0xFF // Client driver index for indicating the host driver.
333  
334 #define DTS_DATA0 0 // DTS bit - DATA0 PID
335 #define DTS_DATA1 1 // DTS bit - DATA1 PID
336  
337 #define UEP_DIRECT_LOW_SPEED 0x80 // UEP0 - Direct connect to low speed device enabled
338 #define UEP_NO_DIRECT_LOW_SPEED 0x00 // UEP0 - Direct connect to low speed device disabled
339 #define UEP_RETRY_NAKS 0x40 // UEP0 - No automatic retry of NAK'd transactions
340 #define UEP_NO_RETRY_NAKS 0x00 // UEP0 - Automatic retry of NAK'd transactions
341 #define UEP_NO_SETUP_TRANSFERS 0x10 // UEP0 - SETUP transfers not allowed
342 #define UEP_ALLOW_SETUP_TRANSFERS 0x00 // UEP0 - SETUP transfers allowed
343 #define UEP_RX_ENABLE 0x08 // UEP0 - Endpoint can receive data
344 #define UEP_RX_DISABLE 0x00 // UEP0 - Endpoint cannot receive data
345 #define UEP_TX_ENABLE 0x04 // UEP0 - Endpoint can transmit data
346 #define UEP_TX_DISABLE 0x00 // UEP0 - Endpoint cannot transmit data
347 #define UEP_HANDSHAKE_ENABLE 0x01 // UEP0 - Endpoint handshake enabled
348 #define UEP_HANDSHAKE_DISABLE 0x00 // UEP0 - Endpoint handshake disabled (isochronous endpoints)
349  
350 #define USB_ENDPOINT_CONTROL_BULK (UEP_NO_SETUP_TRANSFERS | UEP_RX_ENABLE | UEP_TX_ENABLE | UEP_HANDSHAKE_ENABLE) //
351 #define USB_ENDPOINT_CONTROL_ISOCHRONOUS (UEP_NO_SETUP_TRANSFERS | UEP_RX_ENABLE | UEP_TX_ENABLE ) //
352 #define USB_ENDPOINT_CONTROL_INTERRUPT (UEP_NO_SETUP_TRANSFERS | UEP_RX_ENABLE | UEP_TX_ENABLE | UEP_HANDSHAKE_ENABLE) //
353 #define USB_ENDPOINT_CONTROL_SETUP (UEP_RX_ENABLE | UEP_TX_ENABLE | UEP_HANDSHAKE_ENABLE) //
354  
355 #define USB_DISABLE_ENDPOINT 0x00 // Value to disable an endpoint.
356  
357 #define USB_SOF_THRESHOLD_08 0x12 // U1SOF - Threshold for a max packet size of 8
358 #define USB_SOF_THRESHOLD_16 0x1A // U1SOF - Threshold for a max packet size of 16
359 #define USB_SOF_THRESHOLD_32 0x2A // U1SOF - Threshold for a max packet size of 32
360 #define USB_SOF_THRESHOLD_64 0x4A // U1SOF - Threshold for a max packet size of 64
361  
362 #define USB_1MS_TIMER_FLAG 0x40
363 #ifndef USB_INSERT_TIME
364 #define USB_INSERT_TIME (250+1) // Insertion delay time (spec minimum is 100 ms)
365 #endif
366 #define USB_RESET_TIME (50+1) // RESET signaling time - 50ms
367 #if defined( __C30__ )
368 #define USB_RESET_RECOVERY_TIME (10+1) // RESET recovery time.
369 #elif defined( __PIC32MX__ )
370 #define USB_RESET_RECOVERY_TIME (100+1) // RESET recovery time - Changed to 100 ms from 10ms. Some devices take longer.
371 #else
372 #error Unknown USB_RESET_RECOVERY_TIME
373 #endif
374 #define USB_RESUME_TIME (20+1) // RESUME signaling time - 20 ms
375 #define USB_RESUME_RECOVERY_TIME (10+1) // RESUME recovery time - 10 ms
376  
377  
378 //******************************************************************************
379 //******************************************************************************
380 // Section: Data Structures
381 //
382 // These data structures are all internal to the stack.
383 //******************************************************************************
384 //******************************************************************************
385  
386 // *****************************************************************************
387 /* USB Bus Information
388  
389 This structure is used to hold information about the USB bus status.
390 */
391 typedef struct _USB_BUS_INFO
392 {
393 volatile union
394 {
395 struct
396 {
397 BYTE bfControlTransfersDone : 1; // All control transfers in the current frame are complete.
398 BYTE bfInterruptTransfersDone : 1; // All interrupt transfers in the current frame are complete.
399 BYTE bfIsochronousTransfersDone : 1; // All isochronous transfers in the current frame are complete.
400 BYTE bfBulkTransfersDone : 1; // All bulk transfers in the current frame are complete.
401 BYTE bfTokenAlreadyWritten : 1; // A token has already been written to the USB module
402 };
403 WORD val; //
404 } flags; //
405 // volatile DWORD dBytesSentInFrame; // The number of bytes sent during the current frame. Isochronous use only.
406 volatile BYTE lastBulkTransaction; // The last bulk transaction sent.
407 volatile BYTE countBulkTransactions; // The number of active bulk transactions.
408 } USB_BUS_INFO;
409  
410  
411 // *****************************************************************************
412 /* USB Configuration Node
413  
414 This structure is used to make a linked list of all the configuration
415 descriptors of an attached device.
416 */
417 typedef struct _USB_CONFIGURATION
418 {
419 BYTE *descriptor; // Complete Configuration Descriptor.
420 struct _USB_CONFIGURATION *next; // Pointer to next node.
421 BYTE configNumber; // Number of this Configuration.
422 } USB_CONFIGURATION;
423  
424  
425 // *****************************************************************************
426 /* Endpoint Information Node
427  
428 This structure contains all the needed information about an endpoint. Multiple
429 endpoints form a linked list.
430 */
431 typedef struct _USB_ENDPOINT_INFO
432 {
433 struct _USB_ENDPOINT_INFO *next; // Pointer to the next node in the list.
434  
435 volatile union
436 {
437 struct
438 {
439 BYTE bfErrorCount : 5; // Not used for isochronous.
440 BYTE bfStalled : 1; // Received a STALL. Requires host interaction to clear.
441 BYTE bfError : 1; // Error count excessive. Must be cleared by the application.
442 BYTE bfUserAbort : 1; // User terminated transfer.
443 BYTE bfTransferSuccessful : 1; // Received an ACK.
444 BYTE bfTransferComplete : 1; // Transfer done, status obtained.
445 BYTE bfUseDTS : 1; // Use DTS error checking.
446 BYTE bfNextDATA01 : 1; // The value of DTS for the next transfer.
447 BYTE bfLastTransferNAKd : 1; // The last transfer attempted NAK'd.
448 BYTE bfNAKTimeoutEnabled : 1; // Endpoint will time out if too many NAKs are received.
449 };
450 WORD val;
451 } status;
452 WORD wInterval; // Polling interval for interrupt and isochronous endpoints.
453 volatile WORD wIntervalCount; // Current interval count.
454 WORD wMaxPacketSize; // Endpoint packet size.
455 DWORD dataCountMax; // Amount of data to transfer during the transfer. Not used for isochronous transfers.
456 WORD dataCountMaxSETUP; // Amount of data in the SETUP packet (if applicable).
457 volatile DWORD dataCount; // Count of bytes transferred.
458 BYTE *pUserDataSETUP; // Pointer to data for the SETUP packet (if applicable).
459 BYTE *pUserData; // Pointer to data for the transfer.
460 volatile BYTE transferState; // State of endpoint tranfer.
461 BYTE clientDriver; // Client driver index for events
462 BYTE bEndpointAddress; // Endpoint address
463 TRANSFER_ATTRIBUTES bmAttributes; // Endpoint attributes, including transfer type.
464 volatile BYTE bErrorCode; // If bfError is set, this indicates the reason
465 volatile WORD countNAKs; // Count of NAK's of current transaction.
466 WORD timeoutNAKs; // Count of NAK's for a timeout, if bfNAKTimeoutEnabled.
467  
468 } USB_ENDPOINT_INFO;
469  
470  
471 // *****************************************************************************
472 /* Interface Setting Information Structure
473  
474 This structure contains information about one interface.
475 */
476 typedef struct _USB_INTERFACE_SETTING_INFO
477 {
478 struct _USB_INTERFACE_SETTING_INFO *next; // Pointer to the next node in the list.
479  
480 BYTE interfaceAltSetting; // Alternate Interface setting
481 USB_ENDPOINT_INFO *pEndpointList; // List of endpoints associated with this interface setting
482  
483 } USB_INTERFACE_SETTING_INFO;
484  
485  
486 // *****************************************************************************
487 /* Interface Information Structure
488  
489 This structure contains information about one interface.
490 */
491 typedef struct _USB_INTERFACE_INFO
492 {
493 struct _USB_INTERFACE_INFO *next; // Pointer to the next node in the list.
494  
495 USB_INTERFACE_SETTING_INFO *pInterfaceSettings; // Pointer to the list of alternate settings.
496 USB_INTERFACE_SETTING_INFO *pCurrentSetting; // Current Alternate Interface setting
497 BYTE interface; // Interface number
498 BYTE clientDriver; // Index into client driver table for this Interface
499  
500 } USB_INTERFACE_INFO;
501  
502  
503 // *****************************************************************************
504 /* USB Device Information
505  
506 This structure is used to hold all the information about an attached device.
507 */
508 typedef struct _USB_DEVICE_INFO
509 {
510 USB_CONFIGURATION *currentConfigurationDescriptor; // Descriptor of the current Configuration.
511 BYTE currentConfiguration; // Value of current Configuration.
512 BYTE attributesOTG; // OTG attributes.
513 BYTE deviceAddressAndSpeed; // Device address and low/full speed indication.
514 BYTE deviceAddress; // Device address.
515 BYTE errorCode; // Error code of last operation.
516 BYTE deviceClientDriver; // Index of client driver for this device if bfUseDeviceClientDriver=1.
517 WORD currentConfigurationPower; // Max power in milli-amps.
518  
519 USB_CONFIGURATION *pConfigurationDescriptorList; // Pointer to the list of Cnfiguration Descriptors of the attached device.
520 USB_INTERFACE_INFO *pInterfaceList; // List of interfaces on the attached device.
521 USB_ENDPOINT_INFO *pEndpoint0; // Pointer to a structure that describes EP0.
522  
523 volatile union
524 {
525 struct
526 {
527 BYTE bfIsLowSpeed : 1; // If the device is low speed (default = 0).
528 BYTE bfSupportsOTG : 1; // If the device supports OTG (default = 0).
529 BYTE bfConfiguredOTG : 1; // If OTG on the device has been configured (default = 0).
530 BYTE bfAllowHNP : 1; // If Host Negotiation Protocol is allowed (default = 0).
531 BYTE bfPingPongIn : 1; // Ping-pong status of IN buffers (default = 0).
532 BYTE bfPingPongOut : 1; // Ping-pong status of OUT buffers (default = 0).
533 BYTE bfUseDeviceClientDriver : 1; // Indicates driver should use a single client driver (deviceClientDriver)
534 };
535 WORD val;
536 } flags;
537 } USB_DEVICE_INFO;
538  
539  
540 // *****************************************************************************
541 /* USB Root Hub Information
542  
543 This structure contains information about the USB root hub.
544 */
545  
546 typedef struct _USB_ROOT_HUB_INFO
547 {
548 union
549 {
550 struct
551 {
552 BYTE bPowerGoodPort0 : 1; // Power can turned on
553 };
554 BYTE val;
555 } flags;
556 } USB_ROOT_HUB_INFO;
557  
558  
559 // *****************************************************************************
560 /* Event Data
561  
562 This structure defines the data associated with any USB events (see USB_EVENT)
563 that can be generated by the USB ISR (see _USB1Interrupt). These events and
564 their associated data are placed in an event queue used to synchronize between
565 the main host-tasks loop (see USBHostTasks) and the ISR. This queue is required
566 only if transfer events are being used. All other events are send directly to
567 the client drivers.
568 */
569 #if defined( USB_ENABLE_TRANSFER_EVENT )
570 typedef struct
571 {
572 USB_EVENT event; // Event that occured.
573 union
574 {
575 HOST_TRANSFER_DATA TransferData; // Event: EVENT_TRANSFER,
576 // EVENT_BUS_ERROR
577  
578 // Additional items needed for new events can be added here.
579 };
580 } USB_EVENT_DATA;
581 #endif
582  
583  
584  
585 // *****************************************************************************
586 /* Event Queue
587  
588 This structure defines the queue of USB events that can be generated by the
589 ISR that need to be synchronized to the USB event tasks loop (see
590 USB_EVENT_DATA, above). See "struct_queue.h" for usage and operations.
591 */
592 #if defined( USB_ENABLE_TRANSFER_EVENT )
593 #ifndef USB_EVENT_QUEUE_DEPTH
594 #define USB_EVENT_QUEUE_DEPTH 4 // Default depth of 4 events
595 #endif
596  
597 typedef struct _usb_event_queue
598 {
599 int head;
600 int tail;
601 int count;
602 USB_EVENT_DATA buffer[USB_EVENT_QUEUE_DEPTH];
603  
604 } USB_EVENT_QUEUE;
605 #endif
606  
607  
608 /********************************************************************
609 * USB Endpoint Control Registers
610 *******************************************************************/
611  
612 // See _UEP data type for EP Control Register definitions in the
613 // processor-specific header files.
614  
615 #define UEPList (*((_UEP*)&U1EP0))
616  
617  
618 //******************************************************************************
619 //******************************************************************************
620 // Section: Macros
621 //
622 // These macros are all internal to the host layer.
623 //******************************************************************************
624 //******************************************************************************
625  
626 #define _USB_InitErrorCounters() { numCommandTries = USB_NUM_COMMAND_TRIES; }
627 #define _USB_SetDATA01(x) { pCurrentEndpoint->status.bfNextDATA01 = x; }
628 #define _USB_SetErrorCode(x) { usbDeviceInfo.errorCode = x; }
629 #define _USB_SetHoldState() { usbHostState = STATE_HOLDING; }
630 #define _USB_SetNextState() { usbHostState = (usbHostState & STATE_MASK) + NEXT_STATE; }
631 #define _USB_SetNextSubState() { usbHostState = (usbHostState & (STATE_MASK | SUBSTATE_MASK)) + NEXT_SUBSTATE; }
632 #define _USB_SetNextSubSubState() { usbHostState = usbHostState + NEXT_SUBSUBSTATE; }
633 #define _USB_SetNextTransferState() { pCurrentEndpoint->transferState ++; }
634 #define _USB_SetPreviousSubSubState() { usbHostState = usbHostState - NEXT_SUBSUBSTATE; }
635 #define _USB_SetTransferErrorState(x) { x->transferState = (x->transferState & TSTATE_MASK) | TSUBSTATE_ERROR; }
636  
637  
638 //******************************************************************************
639 //******************************************************************************
640 // Section: Local Prototypes
641 //******************************************************************************
642 //******************************************************************************
643  
644 void _USB_CheckCommandAndEnumerationAttempts( void );
645 BOOL _USB_FindClassDriver( BYTE bClass, BYTE bSubClass, BYTE bProtocol, BYTE *pbClientDrv );
646 BOOL _USB_FindDeviceLevelClientDriver( void );
647 USB_ENDPOINT_INFO * _USB_FindEndpoint( BYTE endpoint );
648 USB_INTERFACE_INFO * _USB_FindInterface ( BYTE bInterface, BYTE bAltSetting );
649 void _USB_FindNextToken( void );
650 BOOL _USB_FindServiceEndpoint( BYTE transferType );
651 void _USB_FreeConfigMemory( void );
652 void _USB_FreeMemory( void );
653 void _USB_InitControlRead( USB_ENDPOINT_INFO *pEndpoint, BYTE *pControlData, WORD controlSize,
654 BYTE *pData, WORD size );
655 void _USB_InitControlWrite( USB_ENDPOINT_INFO *pEndpoint, BYTE *pControlData, WORD controlSize,
656 BYTE *pData, WORD size );
657 void _USB_InitRead( USB_ENDPOINT_INFO *pEndpoint, BYTE *pData, WORD size );
658 void _USB_InitWrite( USB_ENDPOINT_INFO *pEndpoint, BYTE *pData, WORD size );
659 void _USB_NotifyClients( BYTE DevAddress, USB_EVENT event, void *data, unsigned int size );
660 BOOL _USB_ParseConfigurationDescriptor( void );
661 void _USB_ResetDATA0( BYTE endpoint );
662 void _USB_SendToken( BYTE endpoint, BYTE tokenType );
663 void _USB_SetBDT( BYTE direction );
664 BOOL _USB_TransferInProgress( void );
665  
666  
667 #endif // _USB_HOST_LOCAL_
668  
669  
{BLAME END}
{FOOTER START}

Powered by WebSVN v2.8.3