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