1 /******************************************************************************
2  *
3  *  Copyright (C) 2001-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This file contains usb definitions from Widcomm's Universal Embedded
22  *  Drivers API.
23  *
24  ******************************************************************************/
25 
26 #ifndef UUSB_H
27 #define UUSB_H
28 
29 #include "bt_target.h"
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 
35 /*******************************************************************************
36 ** Codec APIs
37 *******************************************************************************/
38 
39 
40 /**** Status ****/
41 #define UUSB_SUCCESS                                  0
42 #define UUSB_DRV_INVALID_PARM                         1   // Invalid parameter(s) passed to Driver
43 #define UUSB_DRV_INVALID_STATE                        2   // Driver is not in correct state to accept
44 #define UUSB_DRV_UNSUPPORTED_SETUP_REQ                3   // Unsupported SETUP request (use with tUSER_EP0_SETUP_CB)
45 #define UUSB_DRV_NO_BUFFER_AVAILABLE                  4   // User cannot provide a Buffer (use with CB functions)
46 
47 typedef UINT8 tUUSB_STATUS;
48 
49 
50 #define  UUSB_EP1   0
51 #define  UUSB_EP2   1
52 #define  UUSB_EP3   2
53 #define  UUSB_EP4   3
54 #define  UUSB_EP5   4
55 #define  UUSB_EP6   5
56 #define  UUSB_EP7   6
57 
58 typedef UINT8 tUUSB_EP_ID;
59 
60 typedef enum {
61   UUSB_EP_TYPE_CONTROL = 0,
62   UUSB_EP_TYPE_ISOCHRONOUS,
63   UUSB_EP_TYPE_BULK,
64   UUSB_EP_TYPE_INTERRUPT
65 } tUUSB_EP_TYPE;
66 
67 typedef enum {
68   UUSB_DIR_OUT = 0,
69   UUSB_DIR_IN
70 } tUUSB_EP_DIRECTION;
71 
72 typedef struct tUUSB_SETUP_PKTTag
73 {
74 /* Definition of "USBbmRequestType" */
75 #define UUSB_DATA_PHASE_DIR      0x80    /* Mask to get data phase transfer direction */
76 #define UUSB_HOST_TO_DEVICE      0x00    /* Data transfer directions */
77 #define UUSB_DEVICE_TO_HOST      0x80    /* Data transfer directions */
78 /* Types of requests */
79 #define UUSB_REQUEST_TYPE		0x60	/* Mask to get request type */
80 #define UUSB_STANDARD_REQUEST	0x00	/* Standard request */
81 #define	UUSB_CLASS_REQUEST		0x20	/* Class request */
82 #define	UUSB_VENDOR_REQUEST		0x40	/* Vendor request */
83   UINT8 bmRequestType;
84   UINT8 bRequest;
85   UINT16 wValue;
86   UINT16 wIndex;
87   UINT16 wLength;
88 } tUUSB_SETUP_PKT;
89 
90 typedef union
91 {
92 #define UUSB_HEAD_SIZE (8)
93 	UINT8           HeadBytes[UUSB_HEAD_SIZE];
94     tUUSB_SETUP_PKT Setup;
95 } tSETUP_OR_HEAD;
96 
97 typedef struct
98 {
99   UINT8        BufSize;
100   UINT8        NumBytesInBuf;
101   tSETUP_OR_HEAD Buf;
102 } tUUSB_RX_HEAD;
103 
104 typedef enum
105 {
106   UUSB_EP_DISABLE,
107   UUSB_EP_ENABLE,
108   UUSB_EP_STALL
109 } tUUSB_EP_STATE;
110 
111 typedef UINT8 tEndPoint;
112 
113 #if 0
114 #define  UUSB_ATTACHED      0
115 #define  UUSB_POWERED       1
116 #define  UUSB_DEFAULT       2
117 #define  UUSB_ADDRESS       3
118 #define  UUSB_CONFIGURED    4
119 #define  UUSB_SUSPENDED     5
120 
121 typedef UINT8 tUUSB_BUS_STATE;
122 #else
123 typedef enum
124 {
125   UUSB_ATTACHED,
126   UUSB_POWERED,
127   UUSB_DEFAULT,
128   UUSB_ADDRESS,
129   UUSB_CONFIGURED,
130   UUSB_SUSPENDED
131 } tUUSB_BUS_STATE;
132 #endif
133 
134 typedef enum _tUUSB_STANDART_REQ
135 {
136 	UUSB_GET_STATUS = 0,
137 	UUSB_CLEAR_FEATURE,
138 	UUSB_RESERVED1,
139 	UUSB_SET_FEATURE,
140 	UUSB_RESERVED2,
141 	UUSB_SET_ADDRESS,
142 	UUSB_GET_DESCRIPTOR,
143 	UUSB_SET_DESCRIPTOR,
144 	UUSB_GET_CONFIGURATION,
145 	UUSB_SET_CONFIGURATION,
146 	UUSB_GET_INTERFACE,
147 	UUSB_SET_INTERFACE,
148 	UUSB_TOTAL_sREQUEST,				/* Total number of Standard request */
149 	UUSB_SYNCH_FRAME = 12
150 } tUUSB_STANDART_REQ;
151 
152 
153 typedef void (*tUUSB_STATE_CB)          (tUUSB_BUS_STATE State);
154 typedef void (*tUUSB_PROT_COMPLETE_CB ) (UINT8 *pBuf,UINT16 NumBytesInBuf);
155 
156 typedef tUUSB_STATUS (*tUUSB_PROT_SETUP_CB ) (UINT8 **ppBuf,UINT16 *pBufSize);
157 
158 typedef void (*tUUSB_RX_START_CB )      (tUUSB_EP_ID EndPoint,
159                                         UINT8 **ppBuf,
160                                         UINT16 *pBufSize);
161 
162 typedef void (*tUUSB_RX_COMPLETE_CB )   (tUUSB_EP_ID EndPoint,
163                                         UINT8 *pRxBuf,
164                                         UINT16 NumBytesInBuf);
165 
166 typedef void (*tUUSB_TX_COMPLETE_CB )   (tUUSB_EP_ID EndPoint,
167                                         UINT8 *pRxBuf);
168 /*******************************************************************************
169 ** Function Prototypes
170 *******************************************************************************/
171 
172 /******************************************************************************
173 **
174 ** Function         UCODEC_Init
175 **
176 ** Description      Startup initialisation function. This function is called
177 **                  before any orther function of UUSB it initialize UUSB
178 **                  internal structure an the external hw.
179 **
180 **                  Input :
181 **
182 **                  Output Parameters :
183 **
184 ** Returns          UUSB_SUCCESS if The action was performed with sucess.
185 **                  Error code else.
186 **
187 ******************************************************************************/
188 BT_API extern tUUSB_STATUS    UUSB_Init    (tUUSB_PROT_SETUP_CB       userProtSetupCallBack,
189                                             tUUSB_PROT_COMPLETE_CB    userProtCompleteCallBack,
190                                             tUUSB_RX_START_CB         userRxStartCallBack,
191                                             tUUSB_STATE_CB            userStateCallBack,
192                                             tUUSB_TX_COMPLETE_CB      userTxCompleteCallBack,
193                                             tUUSB_RX_COMPLETE_CB      userRxCompleteCallBack);
194 
195 
196 
197 
198 /******************************************************************************
199 **
200 ** Function         UUSB_Start
201 **
202 ** Description
203 **
204 **
205 **
206 **
207 **
208 ** Returns          UUSB_SUCCESS if The action was performed with sucess.
209 **
210 ******************************************************************************/
211 BT_API extern tUUSB_STATUS    UUSB_Start  (void);
212 
213 /******************************************************************************
214 **
215 ** Function         UUSB_Stop
216 **
217 ** Description
218 **
219 **
220 **
221 **
222 ** Returns          UUSB_SUCCESS if The action was performed with sucess.
223 **                  Error code else.
224 **
225 ******************************************************************************/
226 BT_API extern tUUSB_STATUS    UUSB_Stop      (void);
227 
228 /******************************************************************************
229 **
230 ** Function         UUSB_SetEndPointCnf
231 **
232 ** Description
233 **
234 **
235 ** Returns
236 **
237 ******************************************************************************/
238 BT_API extern tUUSB_STATUS    UUSB_SetEndPointCnf ( BOOLEAN         IsIN_EndPoint,
239                                                     tUUSB_EP_ID     EndPoint,
240                                                     UINT8           MaxPacketSize,
241                                                     tUUSB_EP_TYPE   EndPointType,
242                                                     tUUSB_RX_HEAD   *pRxHead,
243                                                     UINT16          RxTimeOut);
244 
245 
246 /******************************************************************************
247 **
248 ** Function         UUSB_SetEndPointState
249 **
250 ** Description
251 **
252 **
253 ** Returns
254 **
255 ******************************************************************************/
256 BT_API extern tUUSB_STATUS UUSB_SetEndPointState (tUUSB_EP_ID    EndPoint,
257                                                     tUUSB_EP_STATE EndPointState);
258 
259 /******************************************************************************
260 **
261 ** Function         UUSB_WriteEndPoint
262 **
263 ** Description
264 **
265 **
266 ** Returns
267 **
268 ******************************************************************************/
269 BT_API extern tUUSB_STATUS UUSB_WriteEndPoint (tUUSB_EP_ID     EndPoint,
270                                                 UINT16     Length,
271                                                 UINT8*    pBuf);
272 
273 /******************************************************************************
274 **
275 ** Function         UUSB_GenerateRemoteWakeUp
276 **
277 ** Description
278 **
279 **
280 ** Returns
281 **
282 ******************************************************************************/
283 BT_API extern tUUSB_STATUS UUSB_GenerateRemoteWakeUp (void);
284 
285 #ifdef __cplusplus
286 };
287 #endif
288 
289 
290 #endif /* UUSB_H */
291