usb_dc.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "usbd_core.h"
  2. /* Endpoint state */
  3. struct usb_dc_ep_state {
  4. uint16_t ep_mps; /* Endpoint max packet size */
  5. uint8_t ep_type; /* Endpoint type */
  6. uint8_t ep_stalled; /* Endpoint stall flag */
  7. uint8_t *xfer_buf;
  8. uint32_t xfer_len;
  9. uint32_t actual_xfer_len;
  10. };
  11. /* Driver state */
  12. struct xxx_udc {
  13. volatile uint8_t dev_addr;
  14. struct usb_dc_ep_state in_ep[CONFIG_USBDEV_EP_NUM]; /*!< IN endpoint parameters*/
  15. struct usb_dc_ep_state out_ep[CONFIG_USBDEV_EP_NUM]; /*!< OUT endpoint parameters */
  16. } g_xxx_udc;
  17. __WEAK void usb_dc_low_level_init(void)
  18. {
  19. }
  20. __WEAK void usb_dc_low_level_deinit(void)
  21. {
  22. }
  23. int usb_dc_init(uint8_t busid)
  24. {
  25. memset(&g_xxx_udc, 0, sizeof(struct xxx_udc));
  26. usb_dc_low_level_init();
  27. return 0;
  28. }
  29. int usb_dc_deinit(uint8_t busid)
  30. {
  31. return 0;
  32. }
  33. int usbd_set_address(uint8_t busid, const uint8_t addr)
  34. {
  35. return 0;
  36. }
  37. int usbd_set_remote_wakeup(uint8_t busid)
  38. {
  39. return -1;
  40. }
  41. uint8_t usbd_get_port_speed(uint8_t busid)
  42. {
  43. return USB_SPEED_FULL;
  44. }
  45. int usbd_ep_open(uint8_t busid, const struct usb_endpoint_descriptor *ep)
  46. {
  47. uint8_t ep_idx = USB_EP_GET_IDX(ep->bEndpointAddress);
  48. if (USB_EP_DIR_IS_OUT(ep->bEndpointAddress)) {
  49. g_xxx_udc.out_ep[ep_idx].ep_mps = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize);
  50. g_xxx_udc.out_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes);
  51. g_xxx_udc.out_ep[ep_idx].ep_enable = true;
  52. } else {
  53. g_xxx_udc.in_ep[ep_idx].ep_mps = USB_GET_MAXPACKETSIZE(ep->wMaxPacketSize);
  54. g_xxx_udc.in_ep[ep_idx].ep_type = USB_GET_ENDPOINT_TYPE(ep->bmAttributes);
  55. g_xxx_udc.in_ep[ep_idx].ep_enable = true;
  56. }
  57. return 0;
  58. }
  59. int usbd_ep_close(uint8_t busid, const uint8_t ep)
  60. {
  61. return 0;
  62. }
  63. int usbd_ep_set_stall(uint8_t busid, const uint8_t ep)
  64. {
  65. return 0;
  66. }
  67. int usbd_ep_clear_stall(uint8_t busid, const uint8_t ep)
  68. {
  69. return 0;
  70. }
  71. int usbd_ep_is_stalled(uint8_t busid, const uint8_t ep, uint8_t *stalled)
  72. {
  73. return 0;
  74. }
  75. int usbd_ep_start_write(uint8_t busid, const uint8_t ep, const uint8_t *data, uint32_t data_len)
  76. {
  77. uint8_t ep_idx = USB_EP_GET_IDX(ep);
  78. uint32_t tmp;
  79. if (!data && data_len) {
  80. return -1;
  81. }
  82. g_xxx_udc.in_ep[ep_idx].xfer_buf = (uint8_t *)data;
  83. g_xxx_udc.in_ep[ep_idx].xfer_len = data_len;
  84. g_xxx_udc.in_ep[ep_idx].actual_xfer_len = 0;
  85. return 0;
  86. }
  87. int usbd_ep_start_read(uint8_t busid, const uint8_t ep, uint8_t *data, uint32_t data_len)
  88. {
  89. uint8_t ep_idx = USB_EP_GET_IDX(ep);
  90. if (!data && data_len) {
  91. return -1;
  92. }
  93. g_xxx_udc.out_ep[ep_idx].xfer_buf = (uint8_t *)data;
  94. g_xxx_udc.out_ep[ep_idx].xfer_len = data_len;
  95. g_xxx_udc.out_ep[ep_idx].actual_xfer_len = 0;
  96. return 0;
  97. }
  98. void USBD_IRQHandler(uint8_t busid)
  99. {
  100. }