usb_dc.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include "usbd_core.h"
  2. #ifndef USBD_IRQHandler
  3. #define USBD_IRQHandler USB_FS_Handler //use actual usb irq name instead
  4. #endif
  5. #ifndef USB_NUM_BIDIR_ENDPOINTS
  6. #define USB_NUM_BIDIR_ENDPOINTS 5
  7. #endif
  8. /* Endpoint state */
  9. struct usb_dc_ep_state {
  10. /** Endpoint max packet size */
  11. uint16_t ep_mps;
  12. /** Endpoint Transfer Type.
  13. * May be Bulk, Interrupt, Control or Isochronous
  14. */
  15. uint8_t ep_type;
  16. uint8_t ep_stalled; /** Endpoint stall flag */
  17. };
  18. /* Driver state */
  19. struct xxx_udc {
  20. volatile uint8_t dev_addr;
  21. struct usb_dc_ep_state in_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< IN endpoint parameters*/
  22. struct usb_dc_ep_state out_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< OUT endpoint parameters */
  23. } g_xxx_udc;
  24. __WEAK void usb_dc_low_level_init(void)
  25. {
  26. }
  27. __WEAK void usb_dc_low_level_deinit(void)
  28. {
  29. }
  30. int usb_dc_init(void)
  31. {
  32. memset(&g_xxx_udc, 0, sizeof(struct xxx_udc));
  33. usb_dc_low_level_init();
  34. return 0;
  35. }
  36. int usb_dc_deinit(void)
  37. {
  38. return 0;
  39. }
  40. int usbd_set_address(const uint8_t addr)
  41. {
  42. return 0;
  43. }
  44. int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg)
  45. {
  46. uint8_t ep_idx = USB_EP_GET_IDX(ep_cfg->ep_addr);
  47. if (USB_EP_DIR_IS_OUT(ep_cfg->ep_addr)) {
  48. g_xxx_udc.out_ep[ep_idx].ep_mps = ep_cfg->ep_mps;
  49. g_xxx_udc.out_ep[ep_idx].ep_type = ep_cfg->ep_type;
  50. } else {
  51. g_xxx_udc.in_ep[ep_idx].ep_mps = ep_cfg->ep_mps;
  52. g_xxx_udc.in_ep[ep_idx].ep_type = ep_cfg->ep_type;
  53. }
  54. return 0;
  55. }
  56. int usbd_ep_close(const uint8_t ep)
  57. {
  58. return 0;
  59. }
  60. int usbd_ep_set_stall(const uint8_t ep)
  61. {
  62. return 0;
  63. }
  64. int usbd_ep_clear_stall(const uint8_t ep)
  65. {
  66. return 0;
  67. }
  68. int usbd_ep_is_stalled(const uint8_t ep, uint8_t *stalled)
  69. {
  70. return 0;
  71. }
  72. int usbd_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes)
  73. {
  74. uint8_t ep_idx = USB_EP_GET_IDX(ep);
  75. if (!data && data_len) {
  76. return -1;
  77. }
  78. if (!data_len) {
  79. return 0;
  80. }
  81. if (data_len > g_xxx_udc.in_ep[ep_idx].ep_mps) {
  82. data_len = g_xxx_udc.in_ep[ep_idx].ep_mps;
  83. }
  84. if (ret_bytes) {
  85. *ret_bytes = data_len;
  86. }
  87. return 0;
  88. }
  89. int usbd_ep_read(const uint8_t ep, uint8_t *data, uint32_t max_data_len, uint32_t *read_bytes)
  90. {
  91. uint8_t ep_idx = USB_EP_GET_IDX(ep);
  92. uint32_t read_count;
  93. if (!data && max_data_len) {
  94. return -1;
  95. }
  96. if (!max_data_len) {
  97. return 0;
  98. }
  99. if (read_bytes) {
  100. *read_bytes = read_count;
  101. }
  102. return 0;
  103. }
  104. void USBD_IRQHandler(void)
  105. {
  106. }