USB Component  Version 6.0
MDK-Professional Middleware for USB Device and Host
 All Data Structures Functions Variables Enumerations Enumerator Groups Pages
rl_usbd.h
1 /*------------------------------------------------------------------------------
2  * MDK Middleware - Component ::USB:Device
3  * Copyright (c) 2004-2014 ARM Germany GmbH. All rights reserved.
4  *------------------------------------------------------------------------------
5  * Name: rl_usbd.h
6  * Purpose: USB Device header file
7  * Rev.: V6.00
8  *----------------------------------------------------------------------------*/
9 
10 #ifndef __RL_USBD_H__
11 #define __RL_USBD_H__
12 
13 #include <stdint.h>
14 #include "usb_cdc.h"
15 #include "usb_msc.h"
16 #include "Driver_USBD.h"
17 
18 
19 /* ------------------- Start of section using anonymous unions ------------------ */
20 #if defined(__CC_ARM)
21  #pragma push
22  #pragma anon_unions
23 #elif defined(__ICCARM__)
24  #pragma language=extended
25 #elif defined(__GNUC__)
26  /* anonymous unions are enabled by default */
27 #elif defined(__TMS470__)
28  /* anonymous unions are enabled by default */
29 #elif defined(__TASKING__)
30  #pragma warning 586
31 #else
32  #warning Not supported compiler type
33 #endif
34 
35 // ==== USB Device Constants and Defines ====
36 
38 typedef enum {
44 
46 typedef enum {
51 
52 
53 // ==== USB Device Structures ====
54 
56 typedef struct _usbd_ep_data_t {
57  uint8_t *data;
58  uint16_t cnt;
60 
62 typedef struct _usbd_data_t {
63  uint16_t device_status;
64  uint8_t device_address;
65  uint8_t configuration;
66  uint8_t interface;
67  uint32_t endpoint_mask;
68  uint32_t endpoint_halt;
69  uint32_t endpoint_stall;
70  uint32_t endpoint_active;
71  uint8_t num_interfaces;
72  union {
73  uint8_t flags;
74  struct {
75  uint8_t high_speed : 1;
76  uint8_t zlp : 1;
77  uint8_t ext_handle : 1;
78  };
79  };
80 
82  USB_SETUP_PACKET setup_packet;
83  uint8_t *buf;
84  int32_t len;
85  int32_t len_cur;
86 } usbd_data_t;
87 
89 typedef struct _usbd_dev_t {
90  ARM_DRIVER_USBD *driver;
91  uint8_t *alt_setting;
92  uint8_t *ep0_buf;
94  uint8_t bmattributes;
95  uint8_t hs;
96  uint16_t if_num;
97  uint8_t ep_num;
98  uint8_t max_packet0;
99 } const usbd_dev_t;
100 
102 typedef struct _usbd_custom_class_t {
103  uint8_t dev_num;
104  uint8_t if0_num;
105  uint8_t if1_num;
106  uint8_t if2_num;
107  uint8_t if3_num;
108  uint8_t ep_msk;
109  uint8_t if0_ep_bulk_out;
110  uint8_t if0_ep_bulk_in;
111  uint8_t if0_ep_int_out;
112  uint8_t if0_ep_int_in;
113  uint8_t if0_ep_iso_out;
114  uint8_t if0_ep_iso_in;
115  uint8_t if1_ep_bulk_out;
116  uint8_t if1_ep_bulk_in;
117  uint8_t if1_ep_int_out;
118  uint8_t if1_ep_int_in;
119  uint8_t if1_ep_iso_out;
120  uint8_t if1_ep_iso_in;
121  uint8_t if2_ep_bulk_out;
122  uint8_t if2_ep_bulk_in;
123  uint8_t if2_ep_int_out;
124  uint8_t if2_ep_int_in;
125  uint8_t if2_ep_iso_out;
126  uint8_t if2_ep_iso_in;
127  uint8_t if3_ep_bulk_out;
128  uint8_t if3_ep_bulk_in;
129  uint8_t if3_ep_int_out;
130  uint8_t if3_ep_int_in;
131  uint8_t if3_ep_iso_out;
132  uint8_t if3_ep_iso_in;
133 } const usbd_custom_class_t;
134 
136 typedef struct _usbd_adc_data_t {
137  uint16_t vol_cur;
138  uint16_t vol_min;
139  uint16_t vol_max;
140  uint16_t vol_res;
141  uint8_t mute;
142  uint32_t volume;
143  uint16_t data_out;
144  uint16_t data_in;
145  uint8_t data_run;
147 
149 typedef struct _usbd_adc_t {
150  int16_t *data_buf;
152  uint8_t dev_num;
153  uint8_t cif_num;
154  uint8_t sif_num;
155  uint8_t ep_iso_out;
156  uint32_t cfg_data_freq;
157  uint32_t cfg_p_s;
158  uint32_t cfg_p_c;
159  uint32_t cfg_b_s;
160 } const usbd_adc_t;
161 
163 typedef struct _usbd_cdc_data_t {
164  struct {
165  uint32_t data_send_active : 1;
166  uint32_t data_send_zlp : 1;
167  uint32_t data_receive_active : 1;
168  uint32_t notify_active : 1;
169  };
170  uint8_t *ptr_data_to_send;
171  uint8_t *ptr_data_sent;
172  uint8_t *ptr_data_received;
173  uint8_t *ptr_data_read;
174  int32_t data_to_send_wr;
175  int32_t data_to_send_rd;
177  CDC_LINE_CODING line_coding;
179 
181 typedef struct _usbd_cdc_t {
182  uint8_t *send_buf;
183  uint8_t *receive_buf;
184  uint8_t *notify_buf;
186  uint8_t dev_num;
187  uint8_t cif_num;
188  uint8_t dif_num;
189  uint8_t ep_int_in;
190  uint8_t ep_bulk_in;
191  uint8_t ep_bulk_out;
192  uint16_t send_buf_sz;
193  uint16_t receive_buf_sz;
194  uint16_t max_packet_size [2];
195  uint16_t max_packet_size1[2];
196 } const usbd_cdc_t;
197 
199 typedef struct _usbd_hid_data_t {
200  uint8_t protocol;
204  uint8_t *ptr_data_out;
205  volatile uint16_t data_out_to_send_len;
206  uint16_t data_out_sent_len;
208  uint8_t *ptr_data_in;
209  uint16_t data_in_rece_len;
210  uint8_t *ptr_data_feat;
212  uint16_t polling_count;
214 
216 typedef struct _usbd_hid_t {
217  uint16_t *idle_count;
218  uint16_t *idle_reload;
219  uint8_t *idle_set;
220  uint8_t *in_report;
221  uint8_t *out_report;
222  uint8_t *feat_report;
224  uint8_t dev_num;
225  uint8_t if_num;
226  uint8_t ep_int_in;
227  uint8_t ep_int_out;
228  uint16_t interval [2];
229  uint16_t max_packet_size[2];
230  uint8_t in_report_num;
231  uint8_t out_report_num;
232  uint16_t in_report_max_sz;
233  uint16_t out_report_max_sz;
235 } const usbd_hid_t;
236 
238 typedef struct _usbd_msc_data_t {
239  MSC_CBW cbw;
240  MSC_CSW csw;
241  uint32_t block;
242  uint32_t offset;
243  uint32_t length;
244  bool mem_ok;
245  uint8_t bulk_stage;
246  uint32_t bulk_len;
247  uint32_t bulk_req_len;
248  bool media_ready;
249  bool read_only;
250  uint32_t memory_size;
251  uint32_t block_size;
252  uint32_t block_group;
253  uint32_t block_count;
254  uint8_t *block_buf;
257 
259 typedef struct _usbd_msc_t {
260  uint8_t *bulk_buf;
262  uint8_t dev_num;
263  uint8_t if_num;
264  uint8_t ep_bulk_in;
265  uint8_t ep_bulk_out;
266  uint32_t bulk_buf_sz;
267  uint16_t max_packet_size[2];
268  uint8_t *inquiry_data;
269 } const usbd_msc_t;
270 
272 typedef struct _usbd_hid_desc_t {
273  uint8_t *report_descriptor;
277 
279 typedef struct _usbd_desc_t {
280  uint8_t *ep0_descriptor;
281  uint8_t *device_descriptor;
288  uint8_t *string_descriptor;
289 } usbd_desc_t;
290 
291 /* -------------------- End of section using anonymous unions ------------------- */
292 #if defined(__CC_ARM)
293  #pragma pop
294 #elif defined(__ICCARM__)
295  /* leave anonymous unions enabled */
296 #elif defined(__GNUC__)
297  /* anonymous unions are enabled by default */
298 #elif defined(__TMS470__)
299  /* anonymous unions are enabled by default */
300 #elif defined(__TASKING__)
301  #pragma warning restore
302 #else
303  #warning Not supported compiler type
304 #endif
305 
306 #endif