18#ifndef __VSF_TEMPLATE_USB_H__
19#define __VSF_TEMPLATE_USB_H__
33#define USB_DC_SPEED_UNKNOWN 0
34#define USB_DC_SPEED_LOW 1
35#define USB_DC_SPEED_FULL 2
36#define USB_DC_SPEED_HIGH 3
37#define USB_DC_SPEED_SUPER 4
39#define __USB_HC_IP_FUNC_DEF(__N, __VALUE) \
40static vsf_err_t usb_hc##__N##_init(usb_hc_ip_cfg_t *cfg); \
41static void usb_hc##__N##_get_info(usb_hc_ip_info_t *info); \
42static void usb_hc##__N##_irq_enable(void); \
43static void usb_hc##__N##_irq_disable(void); \
44static void usb_hc##__N##_irq(void);
46#define __USB_HC_IP_INTERFACE_FUNC_DEF(__N, __VALUE) \
48 .Init = &usb_hc##__N##_init, \
49 .GetInfo = &usb_hc##__N##_get_info, \
50 .IrqEnable = &usb_hc##__N##_irq_enable, \
51 .IrqDisable = &usb_hc##__N##_irq_disable, \
52 .Irq = &usb_hc##__N##_irq, \
55#define __USB_HC_IP_BODY_EX(__N, __OBJ, __HEADER) \
56static vsf_err_t usb_hc##__N##_init(usb_hc_ip_cfg_t *cfg) \
57{ return __HEADER##_init(&(__OBJ), cfg); } \
58static void usb_hc##__N##_get_info(usb_hc_ip_info_t *info) \
59{ __HEADER##_get_info(&(__OBJ), info); } \
60static void usb_hc##__N##_irq_enable(void) \
61{ __HEADER##_irq_enable(&(__OBJ)); } \
62static void usb_hc##__N##_irq_disable(void) \
63{ __HEADER##_irq_disable(&(__OBJ)); } \
64static void usb_hc##__N##_irq(void) \
65{ __HEADER##_irq(&(__OBJ)); }
67#define __USB_HC_IP_BODY(__N, __HEADER) \
68 __USB_HC_IP_BODY_EX(__N, USB_HC##__N##_IP, __HEADER)
69#define __USB_OTG_HC_IP_BODY(__N, __HEADER) \
70 __USB_HC_IP_BODY_EX(__N, USB_OTG##__N##_IP, __HEADER)
74#define __USB_DC_IP_FUNC_DEF(__N, __VALUE) \
75static vsf_err_t usb_dc##__N##_init(usb_dc_ip_cfg_t *cfg); \
76static void usb_dc##__N##_fini(void); \
77static void usb_dc##__N##_get_info(usb_dc_ip_info_t *info); \
78static void usb_dc##__N##_connect(void); \
79static void usb_dc##__N##_disconnect(void); \
80static void usb_dc##__N##_irq_enable(void); \
81static void usb_dc##__N##_irq_disable(void); \
82static void usb_dc##__N##_irq(void);
84#define __USB_DC_IP_INTERFACE_FUNC_DEF(__N, __VALUE) \
86 .Init = &usb_dc##__N##_init, \
87 .Fini = &usb_dc##__N##_fini, \
88 .GetInfo = &usb_dc##__N##_get_info, \
89 .Connect = &usb_dc##__N##_connect, \
90 .Disconnect = &usb_dc##__N##_disconnect, \
91 .IrqEnable = &usb_dc##__N##_irq_enable, \
92 .IrqDisable = &usb_dc##__N##_irq_disable, \
93 .Irq = &usb_dc##__N##_irq, \
96#define __USB_DC_IP_BODY_EX(__N, __OBJ, __HEADER) \
97static vsf_err_t usb_dc##__N##_init(usb_dc_ip_cfg_t *cfg) \
98{ return __HEADER##_init(&(__OBJ), cfg); } \
99static void usb_dc##__N##_fini(void) \
100{ __HEADER##_fini(&(__OBJ)); } \
101static void usb_dc##__N##_get_info(usb_dc_ip_info_t *info) \
102{ __HEADER##_get_info(&(__OBJ), info); } \
103static void usb_dc##__N##_connect(void) \
104{ __HEADER##_connect(&(__OBJ)); } \
105static void usb_dc##__N##_disconnect(void) \
106{ __HEADER##_disconnect(&(__OBJ)); } \
107static void usb_dc##__N##_irq_enable(void) \
108{ __HEADER##_irq_enable(&(__OBJ)); } \
109static void usb_dc##__N##_irq_disable(void) \
110{ __HEADER##_irq_disable(&(__OBJ)); } \
111static void usb_dc##__N##_irq(void) \
112{ __HEADER##_irq(&(__OBJ)); }
114#define __USB_DC_IP_BODY(__N, __HEADER) \
115 __USB_DC_IP_BODY_EX(__N, USB_DC##__N##_IP, __HEADER)
116#define __USB_OTG_DC_IP_BODY(__N, __HEADER) \
117 __USB_DC_IP_BODY_EX(__N, USB_OTG##__N##_IP, __HEADER)
119#define __USB_DC_FROM_IP(__N, __OBJ, __DRV_NAME, __HEADER) \
120__USB_DC_FUNC_DEF(__N, NULL) \
121const i_usb_dc_t __DRV_NAME = __USB_DC_INTERFACE_FUNC_DEF(__N, NULL); \
122__USB_DC_BODY_EX(__N, __HEADER, __OBJ)
125#define __USB_DC_FUNC_DEF(__N, __VALUE) \
126static vsf_err_t usb_dc##__N##_init(usb_dc_cfg_t *cfg); \
127static void usb_dc##__N##_fini(void); \
128static void usb_dc##__N##_reset(usb_dc_cfg_t *cfg); \
130static void usb_dc##__N##_connect(void); \
131static void usb_dc##__N##_disconnect(void); \
132static void usb_dc##__N##_wakeup(void); \
134static void usb_dc##__N##_set_address(uint_fast8_t addr); \
135static uint_fast8_t usb_dc##__N##_get_address(void); \
137static uint_fast16_t usb_dc##__N##_get_frame_number(void); \
138static uint_fast8_t usb_dc##__N##_get_mframe_number(void); \
140static void usb_dc##__N##_get_setup(uint8_t *buffer); \
141static void usb_dc##__N##_status_stage(bool is_in); \
143static uint_fast8_t usb_dc##__N##_ep_get_feature( uint_fast8_t ep, \
144 uint_fast8_t feature); \
145static vsf_err_t usb_dc##__N##_ep_add( uint_fast8_t ep, \
146 usb_ep_type_t type, \
147 uint_fast16_t size); \
148static uint_fast16_t usb_dc##__N##_ep_get_size(uint_fast8_t ep); \
150static vsf_err_t usb_dc##__N##_ep_set_stall(uint_fast8_t ep); \
151static bool usb_dc##__N##_ep_is_stalled(uint_fast8_t ep); \
152static vsf_err_t usb_dc##__N##_ep_clear_stall(uint_fast8_t ep); \
154static uint_fast32_t usb_dc##__N##_ep_get_data_size(uint_fast8_t ep); \
155static vsf_err_t usb_dc##__N##_ep_transaction_read_buffer(uint_fast8_t ep, \
157 uint_fast16_t size);\
158static vsf_err_t usb_dc##__N##_ep_transaction_enable_out(uint_fast8_t ep); \
160static vsf_err_t usb_dc##__N##_ep_transaction_set_data_size( \
162 uint_fast16_t size);\
163static vsf_err_t usb_dc##__N##_ep_transaction_write_buffer( \
166 uint_fast16_t size);\
168static vsf_err_t usb_dc##__N##_ep_transfer_recv( uint_fast8_t ep, \
170 uint_fast32_t size); \
171static vsf_err_t usb_dc##__N##_ep_transfer_send( uint_fast8_t ep, \
173 uint_fast32_t size, \
176static void usb_dc##__N##_irq(void);
178#define __USB_DC_INTERFACE_FUNC_DEF(__N, __VALUE) \
180 .Init = &usb_dc##__N##_init, \
181 .Fini = &usb_dc##__N##_fini, \
182 .Reset = &usb_dc##__N##_reset, \
183 .Connect = &usb_dc##__N##_connect, \
184 .Disconnect = &usb_dc##__N##_disconnect, \
185 .Wakeup = &usb_dc##__N##_wakeup, \
186 .SetAddress = &usb_dc##__N##_set_address, \
187 .GetAddress = &usb_dc##__N##_get_address, \
188 .GetFrameNo = &usb_dc##__N##_get_frame_number, \
189 .GetMicroFrameNo= &usb_dc##__N##_get_mframe_number, \
190 .GetSetup = &usb_dc##__N##_get_setup, \
191 .StatusStage = &usb_dc##__N##_status_stage, \
193 .Ep.GetFeature = &usb_dc##__N##_ep_get_feature, \
194 .Ep.Add = &usb_dc##__N##_ep_add, \
195 .Ep.GetSize = &usb_dc##__N##_ep_get_size, \
196 .Ep.SetStall = &usb_dc##__N##_ep_set_stall, \
197 .Ep.IsStalled = &usb_dc##__N##_ep_is_stalled, \
198 .Ep.ClearStall = &usb_dc##__N##_ep_clear_stall, \
199 .Ep.GetDataSize = &usb_dc##__N##_ep_get_data_size, \
200 .Ep.Transaction.ReadBuffer = \
201 &usb_dc##__N##_ep_transaction_read_buffer, \
202 .Ep.Transaction.EnableOut = \
203 &usb_dc##__N##_ep_transaction_enable_out, \
204 .Ep.Transaction.SetDataSize = \
205 &usb_dc##__N##_ep_transaction_set_data_size, \
206 .Ep.Transaction.WriteBuffer = \
207 &usb_dc##__N##_ep_transaction_write_buffer, \
208 .Ep.Transfer.Recv = \
209 &usb_dc##__N##_ep_transfer_recv, \
210 .Ep.Transfer.Send = \
211 &usb_dc##__N##_ep_transfer_send, \
213 .Irq = &usb_dc##__N##_irq, \
216#define __USB_DC_BODY_EX(__N, __HEADER, __OBJ) \
217static vsf_err_t usb_dc##__N##_init(usb_dc_cfg_t *cfg) \
218{ return __HEADER##_init(&(__OBJ), cfg); } \
219static void usb_dc##__N##_fini(void) \
220{ __HEADER##_fini(&(__OBJ)); } \
221static void usb_dc##__N##_reset(usb_dc_cfg_t *cfg) \
222{ __HEADER##_reset(&(__OBJ), cfg); } \
223static void usb_dc##__N##_connect(void) \
224{ __HEADER##_connect(&(__OBJ)); } \
225static void usb_dc##__N##_disconnect(void) \
226{ __HEADER##_disconnect(&(__OBJ)); } \
227static void usb_dc##__N##_wakeup(void) \
228{ __HEADER##_wakeup(&(__OBJ)); } \
229static void usb_dc##__N##_set_address(uint_fast8_t addr) \
230{ __HEADER##_set_address(&(__OBJ), addr); } \
231static uint_fast8_t usb_dc##__N##_get_address(void) \
232{ return __HEADER##_get_address(&(__OBJ)); } \
233static uint_fast16_t usb_dc##__N##_get_frame_number(void) \
234{ return __HEADER##_get_frame_number(&(__OBJ)); } \
235static uint_fast8_t usb_dc##__N##_get_mframe_number(void) \
236{ return __HEADER##_get_mframe_number(&(__OBJ)); } \
237static void usb_dc##__N##_get_setup(uint8_t *buffer) \
238{ __HEADER##_get_setup(&(__OBJ), buffer); } \
239static void usb_dc##__N##_status_stage(bool is_in) \
240{ __HEADER##_status_stage(&(__OBJ), is_in); } \
241static uint_fast8_t usb_dc##__N##_ep_get_feature( uint_fast8_t ep, \
242 uint_fast8_t feature) \
243{ return __HEADER##_ep_get_feature(&(__OBJ), ep, feature); } \
244static vsf_err_t usb_dc##__N##_ep_add( uint_fast8_t ep, \
245 usb_ep_type_t type, \
246 uint_fast16_t size) \
247{ return __HEADER##_ep_add(&(__OBJ), ep, type, size); } \
248static uint_fast16_t usb_dc##__N##_ep_get_size(uint_fast8_t ep) \
249{ return __HEADER##_ep_get_size(&(__OBJ), ep); } \
250static vsf_err_t usb_dc##__N##_ep_set_stall(uint_fast8_t ep) \
251{ return __HEADER##_ep_set_stall(&(__OBJ), ep); } \
252static bool usb_dc##__N##_ep_is_stalled(uint_fast8_t ep) \
253{ return __HEADER##_ep_is_stalled(&(__OBJ), ep); } \
254static vsf_err_t usb_dc##__N##_ep_clear_stall(uint_fast8_t ep) \
255{ return __HEADER##_ep_clear_stall(&(__OBJ), ep); } \
256static uint_fast32_t usb_dc##__N##_ep_get_data_size(uint_fast8_t ep) \
257{ return __HEADER##_ep_get_data_size(&(__OBJ), ep); } \
258static vsf_err_t usb_dc##__N##_ep_transaction_read_buffer( \
261 uint_fast16_t size) \
262{ return __HEADER##_ep_transaction_read_buffer(&(__OBJ), ep, buffer, size); } \
263static vsf_err_t usb_dc##__N##_ep_transaction_enable_out(uint_fast8_t ep) \
264{ return __HEADER##_ep_transaction_enable_out(&(__OBJ), ep); } \
265static vsf_err_t usb_dc##__N##_ep_transaction_set_data_size(uint_fast8_t ep, \
266 uint_fast16_t size) \
267{ return __HEADER##_ep_transaction_set_data_size(&(__OBJ), ep, size); } \
268static vsf_err_t usb_dc##__N##_ep_transaction_write_buffer( uint_fast8_t ep, \
270 uint_fast16_t size) \
271{ return __HEADER##_ep_transaction_write_buffer(&(__OBJ), ep, buffer, size); } \
272static vsf_err_t usb_dc##__N##_ep_transfer_recv(uint_fast8_t ep, \
274 uint_fast32_t size) \
275{ return __HEADER##_ep_transfer_recv(&(__OBJ), ep, buffer, size); } \
276static vsf_err_t usb_dc##__N##_ep_transfer_send(uint_fast8_t ep, \
278 uint_fast32_t size, \
280{ return __HEADER##_ep_transfer_send(&(__OBJ), ep, buffer, size, zlp); } \
281static void usb_dc##__N##_irq(void) \
282{ __HEADER##_irq(&(__OBJ)); }
284#define __USB_DC_BODY(__N, __HEADER) \
285 __USB_DC_BODY_EX(__N, __HEADER, USB_DC##__N)
vsf_err_t
Definition __type.h:42
vsf_err_t(* Init)(vsf_adc_cfg_t *pCfg)
Definition adc_interface.h:38
vsf_arch_prio_t
Definition cortex_a_generic.h:88
end_def_interface(i_pm_wakeup_t) struct vsf_pm_pclk_cfg_t
Definition device.h:249
unsigned char uint8_t
Definition lvgl.h:40
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned int uint_fast32_t
Definition stdint.h:27
unsigned short uint_fast16_t
Definition stdint.h:25
Definition vsf_template_usb.h:332
vsf_arch_prio_t priority
interrupt priority
Definition vsf_template_usb.h:333
usb_dc_evthandler_t evthandler
evthandler function
Definition vsf_template_usb.h:334
void * param
dcd related parameters
Definition vsf_template_usb.h:335
usb_dc_speed_t speed
speed
Definition vsf_template_usb.h:337
Definition vsf_template_usb.h:424
void * regbase
Definition vsf_template_usb.h:425
bool is_dma
Definition vsf_template_usb.h:427
uint8_t ep_num
Definition vsf_template_usb.h:426
Definition vsf_template_usb.h:464
uint8_t ep_num
Definition vsf_template_usb.h:466
void * regbase
Definition vsf_template_usb.h:465
bool is_dma
Definition vsf_template_usb.h:467
vk_av_control_value_t value
Definition vsf_audio.h:171
vk_av_control_type_t type
Definition vsf_audio.h:170
uint32_t size
Definition vsf_memfs.h:50
void(* Fini)(void)
Definition vsf_template_usb.h:347
void(* Connect)(void)
Definition vsf_template_usb.h:350
void(* Irq)(void)
irq handler
Definition vsf_template_usb.h:404
vsf_err_t(* SetDataSize)(uint_fast8_t ep, uint_fast16_t size)
Definition vsf_template_usb.h:385
struct @571::@577 Transfer
uint_fast8_t(* GetFeature)(uint_fast8_t ep, uint_fast8_t feature)
Definition vsf_template_usb.h:364
usb_ep_type_t
Definition vsf_template_usb.h:293
@ USB_EP_TYPE_CONTROL
Definition vsf_template_usb.h:294
@ USB_EP_TYPE_BULK
Definition vsf_template_usb.h:296
@ USB_EP_TYPE_INTERRUPT
Definition vsf_template_usb.h:295
@ USB_EP_TYPE_ISO
Definition vsf_template_usb.h:297
usb_dc_err_t
Definition vsf_template_usb.h:318
@ USB_DC_ERR_ERROR
Definition vsf_template_usb.h:319
@ USB_DC_ERR_SOF_TO
Definition vsf_template_usb.h:321
@ USB_DC_ERR_INVALID_CRC
Definition vsf_template_usb.h:320
void(* IrqEnable)(void)
irq handler
Definition vsf_template_usb.h:445
vsf_err_t(* SetStall)(uint_fast8_t ep)
Definition vsf_template_usb.h:372
usb_evt_t
Definition vsf_template_usb.h:300
@ USB_ON_SOF
Definition vsf_template_usb.h:308
@ USB_ON_ERROR
Definition vsf_template_usb.h:305
@ USB_ON_SETUP
Definition vsf_template_usb.h:304
@ USB_ON_SUSPEND
Definition vsf_template_usb.h:306
@ USB_ON_ATTACH
Definition vsf_template_usb.h:301
@ USB_ON_RESUME
Definition vsf_template_usb.h:307
@ USB_ON_STATUS
Definition vsf_template_usb.h:312
@ USB_ON_RESET
Definition vsf_template_usb.h:303
@ USB_ON_NAK
Definition vsf_template_usb.h:310
@ USB_ON_IN
Definition vsf_template_usb.h:309
@ USB_ON_OVERFLOW
Definition vsf_template_usb.h:314
@ USB_ON_OUT
Definition vsf_template_usb.h:311
@ USB_USR_EVT
Definition vsf_template_usb.h:315
@ USB_ON_UNDERFLOW
Definition vsf_template_usb.h:313
@ USB_ON_DETACH
Definition vsf_template_usb.h:302
void(* Reset)(usb_dc_cfg_t *cfg)
Definition vsf_template_usb.h:348
uint8_t usb_dc_speed_t
Definition vsf_template_usb.h:329
void(* Wakeup)(void)
Definition vsf_template_usb.h:352
uint_fast16_t(* GetFrameNo)(void)
Definition vsf_template_usb.h:357
void(* usb_ip_irqhandler_t)(void *param)
Definition vsf_template_usb.h:324
usb_hc_ip_cfg_t
Definition vsf_template_usb.h:459
void(* IrqDisable)(void)
Definition vsf_template_usb.h:446
vsf_err_t(* ReadBuffer)(uint_fast8_t ep, uint8_t *buffer, uint_fast16_t size)
Definition vsf_template_usb.h:381
usb_dc_ip_cfg_t
Definition vsf_template_usb.h:419
uint_fast32_t(* GetDataSize)(uint_fast8_t ep)
Definition vsf_template_usb.h:378
void(* StatusStage)(bool is_in)
Definition vsf_template_usb.h:361
uint_fast8_t(* GetAddress)(void)
Definition vsf_template_usb.h:355
vsf_err_t(* Recv)(uint_fast8_t ep, uint8_t *buffer, uint_fast32_t size)
Definition vsf_template_usb.h:393
vsf_err_t(* ClearStall)(uint_fast8_t ep)
Definition vsf_template_usb.h:374
void(* GetSetup)(uint8_t *buffer)
Definition vsf_template_usb.h:360
void(* SetAddress)(uint_fast8_t addr)
Definition vsf_template_usb.h:354
bool(* IsStalled)(uint_fast8_t ep)
Definition vsf_template_usb.h:373
struct @571::@576 Transaction
usb_dc_feature_t
Definition vsf_template_usb.h:289
@ USB_DC_FEATURE_TRANSFER
Definition vsf_template_usb.h:290
uint_fast8_t(* GetMicroFrameNo)(void)
Definition vsf_template_usb.h:358
void(* GetInfo)(usb_dc_ip_info_t *info)
get register base
Definition vsf_template_usb.h:439
vsf_err_t(* EnableOut)(uint_fast8_t ep)
Definition vsf_template_usb.h:384
vsf_err_t(* Add)(uint_fast8_t ep, usb_ep_type_t type, uint_fast16_t size)
Definition vsf_template_usb.h:367
void(* usb_dc_evthandler_t)(void *param, usb_evt_t evt, uint_fast8_t value)
Definition vsf_template_usb.h:325
vsf_err_t(* Send)(uint_fast8_t ep, uint8_t *buffer, uint_fast32_t size, bool zlp)
Definition vsf_template_usb.h:396
void(* Disconnect)(void)
Definition vsf_template_usb.h:351
uint_fast16_t(* GetSize)(uint_fast8_t ep)
Definition vsf_template_usb.h:370
vsf_err_t(* WriteBuffer)(uint_fast8_t ep, uint8_t *buffer, uint_fast16_t size)
Definition vsf_template_usb.h:387
def_interface(i_usb_dc_t) vsf_err_t(*Init)(usb_dc_cfg_t *cfg)