User | Revision | Line number | New contents of line |
mbed714 |
0:d616ece2d859
|
1
|
|
mbed714 |
0:d616ece2d859
|
2
|
/*
|
mbed714 |
0:d616ece2d859
|
3
|
Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
|
mbed714 |
0:d616ece2d859
|
4
|
|
mbed714 |
0:d616ece2d859
|
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
mbed714 |
0:d616ece2d859
|
6
|
of this software and associated documentation files (the "Software"), to deal
|
mbed714 |
0:d616ece2d859
|
7
|
in the Software without restriction, including without limitation the rights
|
mbed714 |
0:d616ece2d859
|
8
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
mbed714 |
0:d616ece2d859
|
9
|
copies of the Software, and to permit persons to whom the Software is
|
mbed714 |
0:d616ece2d859
|
10
|
furnished to do so, subject to the following conditions:
|
mbed714 |
0:d616ece2d859
|
11
|
|
mbed714 |
0:d616ece2d859
|
12
|
The above copyright notice and this permission notice shall be included in
|
mbed714 |
0:d616ece2d859
|
13
|
all copies or substantial portions of the Software.
|
mbed714 |
0:d616ece2d859
|
14
|
|
mbed714 |
0:d616ece2d859
|
15
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
mbed714 |
0:d616ece2d859
|
16
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
mbed714 |
0:d616ece2d859
|
17
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
mbed714 |
0:d616ece2d859
|
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
mbed714 |
0:d616ece2d859
|
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
mbed714 |
0:d616ece2d859
|
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
mbed714 |
0:d616ece2d859
|
21
|
THE SOFTWARE.
|
mbed714 |
0:d616ece2d859
|
22
|
*/
|
mbed714 |
0:d616ece2d859
|
23
|
|
mbed714 |
0:d616ece2d859
|
24
|
#ifndef USB_INC_H
|
mbed714 |
0:d616ece2d859
|
25
|
#define USB_INC_H
|
mbed714 |
0:d616ece2d859
|
26
|
|
mbed714 |
0:d616ece2d859
|
27
|
#include "mbed.h"
|
mbed714 |
0:d616ece2d859
|
28
|
|
mbed714 |
0:d616ece2d859
|
29
|
#define MIN(a,b) ((a)<(b)?(a):(b))
|
mbed714 |
0:d616ece2d859
|
30
|
#define MAX(a,b) ((a)>(b)?(a):(b))
|
mbed714 |
0:d616ece2d859
|
31
|
|
mbed714 |
0:d616ece2d859
|
32
|
//typedef int32_t RC;
|
mbed714 |
0:d616ece2d859
|
33
|
|
mbed714 |
0:d616ece2d859
|
34
|
typedef uint8_t byte;
|
mbed714 |
0:d616ece2d859
|
35
|
typedef uint16_t word;
|
mbed714 |
0:d616ece2d859
|
36
|
|
mbed714 |
0:d616ece2d859
|
37
|
enum UsbErr
|
mbed714 |
0:d616ece2d859
|
38
|
{
|
mbed714 |
0:d616ece2d859
|
39
|
__USBERR_MIN = -0xFFFF,
|
mbed714 |
0:d616ece2d859
|
40
|
USBERR_DISCONNECTED,
|
mbed714 |
0:d616ece2d859
|
41
|
USBERR_NOTFOUND,
|
mbed714 |
0:d616ece2d859
|
42
|
USBERR_BADCONFIG,
|
mbed714 |
0:d616ece2d859
|
43
|
USBERR_PROCESSING,
|
mbed714 |
0:d616ece2d859
|
44
|
USBERR_HALTED, //Transfer on an ep is stalled
|
mbed714 |
0:d616ece2d859
|
45
|
USBERR_BUSY,
|
mbed714 |
0:d616ece2d859
|
46
|
USBERR_TDFAIL,
|
mbed714 |
0:d616ece2d859
|
47
|
USBERR_ERROR,
|
mbed714 |
0:d616ece2d859
|
48
|
USBERR_OK = 0
|
mbed714 |
0:d616ece2d859
|
49
|
};
|
mbed714 |
0:d616ece2d859
|
50
|
|
mbed714 |
0:d616ece2d859
|
51
|
|
mbed714 |
0:d616ece2d859
|
52
|
/* From NXP's USBHostLite stack's usbhost_lpc17xx.h */
|
mbed714 |
0:d616ece2d859
|
53
|
/* Only the types names have been changed to avoid unecessary typedefs */
|
mbed714 |
0:d616ece2d859
|
54
|
|
mbed714 |
0:d616ece2d859
|
55
|
|
mbed714 |
0:d616ece2d859
|
56
|
/*
|
mbed714 |
0:d616ece2d859
|
57
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
58
|
* NXP USB Host Stack
|
mbed714 |
0:d616ece2d859
|
59
|
*
|
mbed714 |
0:d616ece2d859
|
60
|
* (c) Copyright 2008, NXP SemiConductors
|
mbed714 |
0:d616ece2d859
|
61
|
* (c) Copyright 2008, OnChip Technologies LLC
|
mbed714 |
0:d616ece2d859
|
62
|
* All Rights Reserved
|
mbed714 |
0:d616ece2d859
|
63
|
*
|
mbed714 |
0:d616ece2d859
|
64
|
* www.nxp.com
|
mbed714 |
0:d616ece2d859
|
65
|
* www.onchiptech.com
|
mbed714 |
0:d616ece2d859
|
66
|
*
|
mbed714 |
0:d616ece2d859
|
67
|
* File : usbhost_lpc17xx.h
|
mbed714 |
0:d616ece2d859
|
68
|
* Programmer(s) : Ravikanth.P
|
mbed714 |
0:d616ece2d859
|
69
|
* Version :
|
mbed714 |
0:d616ece2d859
|
70
|
*
|
mbed714 |
0:d616ece2d859
|
71
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
72
|
*/
|
mbed714 |
0:d616ece2d859
|
73
|
|
mbed714 |
0:d616ece2d859
|
74
|
|
mbed714 |
0:d616ece2d859
|
75
|
|
mbed714 |
0:d616ece2d859
|
76
|
/*
|
mbed714 |
0:d616ece2d859
|
77
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
78
|
* OHCI OPERATIONAL REGISTER FIELD DEFINITIONS
|
mbed714 |
0:d616ece2d859
|
79
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
80
|
*/
|
mbed714 |
0:d616ece2d859
|
81
|
|
mbed714 |
0:d616ece2d859
|
82
|
/* ------------------ HcControl Register --------------------- */
|
mbed714 |
0:d616ece2d859
|
83
|
#define OR_CONTROL_CLE 0x00000010
|
mbed714 |
0:d616ece2d859
|
84
|
#define OR_CONTROL_BLE 0x00000020
|
mbed714 |
0:d616ece2d859
|
85
|
#define OR_CONTROL_HCFS 0x000000C0
|
mbed714 |
0:d616ece2d859
|
86
|
#define OR_CONTROL_HC_OPER 0x00000080
|
mbed714 |
0:d616ece2d859
|
87
|
/* ----------------- HcCommandStatus Register ----------------- */
|
mbed714 |
0:d616ece2d859
|
88
|
#define OR_CMD_STATUS_HCR 0x00000001
|
mbed714 |
0:d616ece2d859
|
89
|
#define OR_CMD_STATUS_CLF 0x00000002
|
mbed714 |
0:d616ece2d859
|
90
|
#define OR_CMD_STATUS_BLF 0x00000004
|
mbed714 |
0:d616ece2d859
|
91
|
/* --------------- HcInterruptStatus Register ----------------- */
|
mbed714 |
0:d616ece2d859
|
92
|
#define OR_INTR_STATUS_WDH 0x00000002
|
mbed714 |
0:d616ece2d859
|
93
|
#define OR_INTR_STATUS_RHSC 0x00000040
|
mbed714 |
0:d616ece2d859
|
94
|
#define OR_INTR_STATUS_UE 0x00000010
|
mbed714 |
0:d616ece2d859
|
95
|
/* --------------- HcInterruptEnable Register ----------------- */
|
mbed714 |
0:d616ece2d859
|
96
|
#define OR_INTR_ENABLE_WDH 0x00000002
|
mbed714 |
0:d616ece2d859
|
97
|
#define OR_INTR_ENABLE_RHSC 0x00000040
|
mbed714 |
0:d616ece2d859
|
98
|
#define OR_INTR_ENABLE_MIE 0x80000000
|
mbed714 |
0:d616ece2d859
|
99
|
/* ---------------- HcRhDescriptorA Register ------------------ */
|
mbed714 |
0:d616ece2d859
|
100
|
#define OR_RH_STATUS_LPSC 0x00010000
|
mbed714 |
0:d616ece2d859
|
101
|
#define OR_RH_STATUS_DRWE 0x00008000
|
mbed714 |
0:d616ece2d859
|
102
|
/* -------------- HcRhPortStatus[1:NDP] Register -------------- */
|
mbed714 |
0:d616ece2d859
|
103
|
#define OR_RH_PORT_CCS 0x00000001
|
mbed714 |
0:d616ece2d859
|
104
|
#define OR_RH_PORT_PRS 0x00000010
|
mbed714 |
0:d616ece2d859
|
105
|
#define OR_RH_PORT_CSC 0x00010000
|
mbed714 |
0:d616ece2d859
|
106
|
#define OR_RH_PORT_PRSC 0x00100000
|
mbed714 |
0:d616ece2d859
|
107
|
|
mbed714 |
0:d616ece2d859
|
108
|
|
mbed714 |
0:d616ece2d859
|
109
|
/*
|
mbed714 |
0:d616ece2d859
|
110
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
111
|
* FRAME INTERVAL
|
mbed714 |
0:d616ece2d859
|
112
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
113
|
*/
|
mbed714 |
0:d616ece2d859
|
114
|
|
mbed714 |
0:d616ece2d859
|
115
|
#define FI 0x2EDF /* 12000 bits per frame (-1) */
|
mbed714 |
0:d616ece2d859
|
116
|
#define DEFAULT_FMINTERVAL ((((6 * (FI - 210)) / 7) << 16) | FI)
|
mbed714 |
0:d616ece2d859
|
117
|
|
mbed714 |
0:d616ece2d859
|
118
|
/*
|
mbed714 |
0:d616ece2d859
|
119
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
120
|
* ENDPOINT DESCRIPTOR CONTROL FIELDS
|
mbed714 |
0:d616ece2d859
|
121
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
122
|
*/
|
mbed714 |
0:d616ece2d859
|
123
|
|
mbed714 |
0:d616ece2d859
|
124
|
#define ED_SKIP (uint32_t) (0x00001000) /* Skip this ep in queue */
|
mbed714 |
0:d616ece2d859
|
125
|
|
mbed714 |
0:d616ece2d859
|
126
|
/*
|
mbed714 |
0:d616ece2d859
|
127
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
128
|
* TRANSFER DESCRIPTOR CONTROL FIELDS
|
mbed714 |
0:d616ece2d859
|
129
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
130
|
*/
|
mbed714 |
0:d616ece2d859
|
131
|
|
mbed714 |
0:d616ece2d859
|
132
|
#define TD_ROUNDING (uint32_t) (0x00040000) /* Buffer Rounding */
|
mbed714 |
0:d616ece2d859
|
133
|
#define TD_SETUP (uint32_t)(0) /* Direction of Setup Packet */
|
mbed714 |
0:d616ece2d859
|
134
|
#define TD_IN (uint32_t)(0x00100000) /* Direction In */
|
mbed714 |
0:d616ece2d859
|
135
|
#define TD_OUT (uint32_t)(0x00080000) /* Direction Out */
|
mbed714 |
0:d616ece2d859
|
136
|
#define TD_DELAY_INT(x) (uint32_t)((x) << 21) /* Delay Interrupt */
|
mbed714 |
0:d616ece2d859
|
137
|
#define TD_TOGGLE_0 (uint32_t)(0x02000000) /* Toggle 0 */
|
mbed714 |
0:d616ece2d859
|
138
|
#define TD_TOGGLE_1 (uint32_t)(0x03000000) /* Toggle 1 */
|
mbed714 |
0:d616ece2d859
|
139
|
#define TD_CC (uint32_t)(0xF0000000) /* Completion Code */
|
mbed714 |
0:d616ece2d859
|
140
|
|
mbed714 |
0:d616ece2d859
|
141
|
/*
|
mbed714 |
0:d616ece2d859
|
142
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
143
|
* USB STANDARD REQUEST DEFINITIONS
|
mbed714 |
0:d616ece2d859
|
144
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
145
|
*/
|
mbed714 |
0:d616ece2d859
|
146
|
|
mbed714 |
0:d616ece2d859
|
147
|
#define USB_DESCRIPTOR_TYPE_DEVICE 1
|
mbed714 |
0:d616ece2d859
|
148
|
#define USB_DESCRIPTOR_TYPE_CONFIGURATION 2
|
mbed714 |
0:d616ece2d859
|
149
|
#define USB_DESCRIPTOR_TYPE_INTERFACE 4
|
mbed714 |
0:d616ece2d859
|
150
|
#define USB_DESCRIPTOR_TYPE_ENDPOINT 5
|
mbed714 |
0:d616ece2d859
|
151
|
/* ----------- Control RequestType Fields ----------- */
|
mbed714 |
0:d616ece2d859
|
152
|
#define USB_DEVICE_TO_HOST 0x80
|
mbed714 |
0:d616ece2d859
|
153
|
#define USB_HOST_TO_DEVICE 0x00
|
mbed714 |
0:d616ece2d859
|
154
|
#define USB_REQUEST_TYPE_CLASS 0x20
|
mbed714 |
0:d616ece2d859
|
155
|
#define USB_RECIPIENT_DEVICE 0x00
|
mbed714 |
0:d616ece2d859
|
156
|
#define USB_RECIPIENT_INTERFACE 0x01
|
mbed714 |
0:d616ece2d859
|
157
|
/* -------------- USB Standard Requests -------------- */
|
mbed714 |
0:d616ece2d859
|
158
|
#define SET_ADDRESS 5
|
mbed714 |
0:d616ece2d859
|
159
|
#define GET_DESCRIPTOR 6
|
mbed714 |
0:d616ece2d859
|
160
|
#define SET_CONFIGURATION 9
|
mbed714 |
0:d616ece2d859
|
161
|
#define SET_INTERFACE 11
|
mbed714 |
0:d616ece2d859
|
162
|
|
mbed714 |
0:d616ece2d859
|
163
|
/*
|
mbed714 |
0:d616ece2d859
|
164
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
165
|
* TYPE DEFINITIONS
|
mbed714 |
0:d616ece2d859
|
166
|
**************************************************************************************************************
|
mbed714 |
0:d616ece2d859
|
167
|
*/
|
mbed714 |
0:d616ece2d859
|
168
|
|
mbed714 |
0:d616ece2d859
|
169
|
typedef struct hcEd { /* ----------- HostController EndPoint Descriptor ------------- */
|
mbed714 |
0:d616ece2d859
|
170
|
volatile uint32_t Control; /* Endpoint descriptor control */
|
mbed714 |
0:d616ece2d859
|
171
|
volatile uint32_t TailTd; /* Physical address of tail in Transfer descriptor list */
|
mbed714 |
0:d616ece2d859
|
172
|
volatile uint32_t HeadTd; /* Physcial address of head in Transfer descriptor list */
|
mbed714 |
0:d616ece2d859
|
173
|
volatile uint32_t Next; /* Physical address of next Endpoint descriptor */
|
mbed714 |
0:d616ece2d859
|
174
|
} HCED;
|
mbed714 |
0:d616ece2d859
|
175
|
|
mbed714 |
0:d616ece2d859
|
176
|
typedef struct hcTd { /* ------------ HostController Transfer Descriptor ------------ */
|
mbed714 |
0:d616ece2d859
|
177
|
volatile uint32_t Control; /* Transfer descriptor control */
|
mbed714 |
0:d616ece2d859
|
178
|
volatile uint32_t CurrBufPtr; /* Physical address of current buffer pointer */
|
mbed714 |
0:d616ece2d859
|
179
|
volatile uint32_t Next; /* Physical pointer to next Transfer Descriptor */
|
mbed714 |
0:d616ece2d859
|
180
|
volatile uint32_t BufEnd; /* Physical address of end of buffer */
|
mbed714 |
0:d616ece2d859
|
181
|
} HCTD;
|
mbed714 |
0:d616ece2d859
|
182
|
|
mbed714 |
0:d616ece2d859
|
183
|
typedef struct hcca { /* ----------- Host Controller Communication Area ------------ */
|
mbed714 |
0:d616ece2d859
|
184
|
volatile uint32_t IntTable[32]; /* Interrupt Table */
|
mbed714 |
0:d616ece2d859
|
185
|
volatile uint32_t FrameNumber; /* Frame Number */
|
mbed714 |
0:d616ece2d859
|
186
|
volatile uint32_t DoneHead; /* Done Head */
|
mbed714 |
0:d616ece2d859
|
187
|
volatile uint8_t Reserved[116]; /* Reserved for future use */
|
mbed714 |
0:d616ece2d859
|
188
|
volatile uint8_t Unknown[4]; /* Unused */
|
mbed714 |
0:d616ece2d859
|
189
|
} HCCA;
|
mbed714 |
0:d616ece2d859
|
190
|
|
mbed714 |
0:d616ece2d859
|
191
|
|
mbed714 |
0:d616ece2d859
|
192
|
|
mbed714 |
0:d616ece2d859
|
193
|
#endif
|