USB Component  Version 5.1
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-2013 ARM Germany GmbH. All rights reserved.
4  *------------------------------------------------------------------------------
5  * Name: rl_usbd.h
6  * Purpose: USB Device header file
7  * Rev.: V5.10
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  uint8_t num_interfaces;
71  union {
72  uint8_t flags;
73  struct {
74  uint8_t high_speed : 1;
75  uint8_t zlp : 1;
76  uint8_t ext_handle : 1;
77  };
78  };
79 
81  USB_SETUP_PACKET setup_packet;
82  uint8_t *buf;
83  int32_t len;
84  int32_t len_cur;
85 } usbd_data_t;
86 
88 typedef struct _usbd_dev_t {
89  ARM_DRIVER_USBD *driver;
90  uint8_t *alt_setting;
91  uint8_t *ep0_buf;
93  uint8_t bmattributes;
94  uint8_t hs;
95  uint16_t if_num;
96  uint8_t ep_num;
97  uint8_t max_packet0;
98 } const usbd_dev_t;
99 
101 typedef struct _usbd_custom_class_t {
102  uint8_t dev_num;
103  uint8_t if0_num;
104  uint8_t if1_num;
105  uint8_t if2_num;
106  uint8_t if3_num;
107  uint8_t ep_msk;
108  uint8_t if0_ep_bulk_out;
109  uint8_t if0_ep_bulk_in;
110  uint8_t if0_ep_int_out;
111  uint8_t if0_ep_int_in;
112  uint8_t if0_ep_iso_out;
113  uint8_t if0_ep_iso_in;
114  uint8_t if1_ep_bulk_out;
115  uint8_t if1_ep_bulk_in;
116  uint8_t if1_ep_int_out;
117  uint8_t if1_ep_int_in;
118  uint8_t if1_ep_iso_out;
119  uint8_t if1_ep_iso_in;
120  uint8_t if2_ep_bulk_out;
121  uint8_t if2_ep_bulk_in;
122  uint8_t if2_ep_int_out;
123  uint8_t if2_ep_int_in;
124  uint8_t if2_ep_iso_out;
125  uint8_t if2_ep_iso_in;
126  uint8_t if3_ep_bulk_out;
127  uint8_t if3_ep_bulk_in;
128  uint8_t if3_ep_int_out;
129  uint8_t if3_ep_int_in;
130  uint8_t if3_ep_iso_out;
131  uint8_t if3_ep_iso_in;
132 } const usbd_custom_class_t;
133 
135 typedef struct _usbd_adc_data_t {
136  uint16_t vol_cur;
137  uint16_t vol_min;
138  uint16_t vol_max;
139  uint16_t vol_res;
140  uint8_t mute;
141  uint32_t volume;
142  uint16_t data_out;
143  uint16_t data_in;
144  uint8_t data_run;
146 
148 typedef struct _usbd_adc_t {
149  int16_t *data_buf;
151  uint8_t dev_num;
152  uint8_t cif_num;
153  uint8_t sif_num;
154  uint8_t ep_iso_out;
155  uint32_t cfg_data_freq;
156  uint32_t cfg_p_s;
157  uint32_t cfg_p_c;
158  uint32_t cfg_b_s;
159 } const usbd_adc_t;
160 
162 typedef struct _usbd_cdc_data_t {
163  struct {
164  uint32_t data_send_active : 1;
165  uint32_t data_send_zlp : 1;
166  uint32_t data_receive_active : 1;
167  uint32_t notify_active : 1;
168  };
169  uint8_t *ptr_data_to_send;
170  uint8_t *ptr_data_sent;
171  uint8_t *ptr_data_received;
172  uint8_t *ptr_data_read;
173  int32_t data_to_send_wr;
174  int32_t data_to_send_rd;
176  CDC_LINE_CODING line_coding;
178 
180 typedef struct _usbd_cdc_t {
181  uint8_t *send_buf;
182  uint8_t *receive_buf;
183  uint8_t *notify_buf;
185  uint8_t dev_num;
186  uint8_t cif_num;
187  uint8_t dif_num;
188  uint8_t ep_int_in;
189  uint8_t ep_bulk_in;
190  uint8_t ep_bulk_out;
191  uint16_t send_buf_sz;
192  uint16_t receive_buf_sz;
193  uint16_t max_packet_size [2];
194  uint16_t max_packet_size1[2];
195 } const usbd_cdc_t;
196 
198 typedef struct _usbd_hid_data_t {
199  uint8_t protocol;
202  uint8_t *ptr_data_out;
203  volatile uint16_t data_out_to_send_len;
204  uint16_t data_out_sent_len;
206  uint8_t *ptr_data_in;
207  uint16_t data_in_rece_len;
208  uint8_t *ptr_data_feat;
210  uint16_t polling_count;
212 
214 typedef struct _usbd_hid_t {
215  uint16_t *idle_count;
216  uint16_t *idle_reload;
217  uint8_t *idle_set;
218  uint8_t *in_report;
219  uint8_t *out_report;
220  uint8_t *feat_report;
222  uint8_t dev_num;
223  uint8_t if_num;
224  uint8_t ep_int_in;
225  uint8_t ep_int_out;
226  uint16_t interval [2];
227  uint16_t max_packet_size[2];
228  uint8_t in_report_num;
229  uint8_t out_report_num;
230  uint16_t in_report_max_sz;
231  uint16_t out_report_max_sz;
233 } const usbd_hid_t;
234 
236 typedef struct _usbd_msc_data_t {
237  MSC_CBW cbw;
238  MSC_CSW csw;
239  uint32_t block;
240  uint32_t offset;
241  uint32_t length;
242  bool mem_ok;
243  uint8_t bulk_stage;
244  uint32_t bulk_len;
245  uint32_t bulk_req_len;
246  bool media_ready;
247  bool read_only;
248  uint32_t memory_size;
249  uint32_t block_size;
250  uint32_t block_group;
251  uint32_t block_count;
252  uint8_t *block_buf;
255 
257 typedef struct _usbd_msc_t {
258  uint8_t *bulk_buf;
260  uint8_t dev_num;
261  uint8_t if_num;
262  uint8_t ep_bulk_in;
263  uint8_t ep_bulk_out;
264  uint32_t bulk_buf_sz;
265  uint16_t max_packet_size[2];
266  uint8_t *inquiry_data;
267 } const usbd_msc_t;
268 
270 typedef struct _usbd_hid_desc_t {
271  uint8_t *report_descriptor;
275 
277 typedef struct _usbd_desc_t {
278  uint8_t *ep0_descriptor;
279  uint8_t *device_descriptor;
286  uint8_t *string_descriptor;
287 } usbd_desc_t;
288 
289 /* -------------------- End of section using anonymous unions ------------------- */
290 #if defined(__CC_ARM)
291  #pragma pop
292 #elif defined(__ICCARM__)
293  /* leave anonymous unions enabled */
294 #elif defined(__GNUC__)
295  /* anonymous unions are enabled by default */
296 #elif defined(__TMS470__)
297  /* anonymous unions are enabled by default */
298 #elif defined(__TASKING__)
299  #pragma warning restore
300 #else
301  #warning Not supported compiler type
302 #endif
303 
304 #endif