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 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
 
unsigned char uint8_t
Definition stdint.h:5
 
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
 
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
 
struct @619::@624 Transfer
 
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
 
struct @619::@623 Transaction
 
void(* SetAddress)(uint_fast8_t addr)
Definition vsf_template_usb.h:354
 
bool(* IsStalled)(uint_fast8_t ep)
Definition vsf_template_usb.h:373
 
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)