USB Component  Version 5.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-2013 ARM Germany GmbH. All rights reserved.
4  *------------------------------------------------------------------------------
5  * Name: rl_usbd.h
6  * Purpose: USB Device header file
7  * Rev.: V5.04
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 // ==== USB Device Constants and Defines ====
20 
22 typedef enum {
23  USBD_HID_REQ_EP_CTRL = 0,
24  USBD_HID_REQ_EP_INT,
25  USBD_HID_REQ_PERIOD_UPDATE
26 } USBD_HID_REQ_t;
27 
28 
29 // ==== USB Device Structures ====
30 
32 typedef struct usbd_ep_data_t {
33  uint8_t *data;
34  uint16_t cnt;
36 
38 typedef struct usbd_data_t {
39  uint16_t device_status;
40  uint8_t device_address;
41  uint8_t configuration;
42  uint8_t interface;
43  uint32_t endpoint_mask;
44  uint32_t endpoint_halt;
45  uint32_t endpoint_stall;
46  uint8_t num_interfaces;
47  uint8_t high_speed;
48  uint8_t zlp;
50  USB_SETUP_PACKET setup_packet;
51 } usbd_data_t;
52 
54 typedef struct usbd_dev_t {
55  ARM_DRIVER_USBD *driver;
56  uint8_t *alt_setting;
57  uint8_t *ep0_buf;
59  uint8_t bmattributes;
60  uint8_t hs;
61  uint16_t if_num;
62  uint8_t ep_num;
63  uint8_t max_packet0;
64 } const usbd_dev_t;
65 
67 typedef struct usbd_hid_data_t {
68  uint8_t protocol;
71  uint8_t *ptr_data_out;
72  volatile uint16_t data_out_to_send_len;
73  uint16_t data_out_sent_len;
75  uint8_t *ptr_data_in;
76  uint16_t data_in_rece_len;
77  uint8_t *ptr_data_feat;
78  uint16_t data_feat_rece_len;
79  uint16_t polling_count;
81 
83 typedef struct usbd_hid_t {
84  uint16_t *idle_count;
85  uint16_t *idle_reload;
86  uint8_t *idle_set;
87  uint8_t *in_report;
88  uint8_t *out_report;
89  uint8_t *feat_report;
91  uint8_t dev_num;
92  uint8_t if_num;
93  uint8_t ep_int_in;
94  uint8_t ep_int_out;
95  uint16_t interval [2];
96  uint16_t max_packet_size[2];
97  uint8_t in_report_num;
98  uint8_t out_report_num;
99  uint16_t in_report_max_sz;
100  uint16_t out_report_max_sz;
102 } const usbd_hid_t;
103 
105 typedef struct usbd_msc_data_t {
106  MSC_CBW cbw;
107  MSC_CSW csw;
108  uint32_t block;
109  uint32_t offset;
110  uint32_t length;
111  bool mem_ok;
112  uint8_t bulk_stage;
113  uint32_t bulk_len;
114  bool media_ready;
115  bool read_only;
116  uint32_t memory_size;
117  uint32_t block_size;
118  uint32_t block_group;
119  uint32_t block_count;
120  uint8_t *block_buf;
123 
125 typedef struct usbd_msc_t {
126  uint8_t *bulk_buf;
128  uint8_t dev_num;
129  uint8_t if_num;
130  uint8_t ep_bulk_in;
131  uint8_t ep_bulk_out;
132  uint16_t max_packet_size[2];
133  uint8_t *inquiry_data;
134 } const usbd_msc_t;
135 
137 typedef struct usbd_adc_data_t {
138  uint16_t vol_cur;
139  uint16_t vol_min;
140  uint16_t vol_max;
141  uint16_t vol_res;
142  uint8_t mute;
143  uint32_t volume;
144  uint16_t data_out;
145  uint16_t data_in;
146  uint8_t data_run;
148 
150 typedef struct usbd_adc_t {
151  int16_t *data_buf;
153  uint8_t dev_num;
154  uint8_t cif_num;
155  uint8_t sif_num;
156  uint8_t ep_iso_out;
157  uint32_t cfg_data_freq;
158  uint32_t cfg_p_s;
159  uint32_t cfg_p_c;
160  uint32_t cfg_b_s;
161 } const usbd_adc_t;
162 
164 typedef struct usbd_cdc_data_t {
167  int32_t data_send_zlp;
168  int32_t data_to_send_wr;
169  int32_t data_to_send_rd;
170  uint8_t *ptr_data_to_send;
171  uint8_t *ptr_data_sent;
177  uint8_t *ptr_data_received;
178  uint8_t *ptr_data_read;
179  int32_t notify_active;
181  CDC_LINE_CODING line_coding;
183 
185 typedef struct usbd_cdc_t {
186  uint8_t *send_buf;
187  uint8_t *receive_buf;
188  uint8_t *notify_buf;
190  uint8_t dev_num;
191  uint8_t cif_num;
192  uint8_t dif_num;
193  uint8_t ep_int_in;
194  uint8_t ep_bulk_in;
195  uint8_t ep_bulk_out;
196  uint16_t send_buf_sz;
197  uint16_t receive_buf_sz;
198  uint16_t max_packet_size [2];
199  uint16_t max_packet_size1[2];
200 } const usbd_cdc_t;
201 
203 typedef struct usbd_hid_desc_t {
204  uint8_t *report_descriptor;
208 
210 typedef struct usbd_desc_t {
211  uint8_t *ep0_descriptor;
212  uint8_t *device_descriptor;
219  uint8_t *string_descriptor;
220 } usbd_desc_t;
221 
222 #endif