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 }