summaryrefslogtreecommitdiff
path: root/port/fsdev/usb_dc_fsdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'port/fsdev/usb_dc_fsdev.c')
-rw-r--r--port/fsdev/usb_dc_fsdev.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/port/fsdev/usb_dc_fsdev.c b/port/fsdev/usb_dc_fsdev.c
index c74a5137..5c64ac6e 100644
--- a/port/fsdev/usb_dc_fsdev.c
+++ b/port/fsdev/usb_dc_fsdev.c
@@ -29,8 +29,9 @@ struct fsdev_ep_state {
uint16_t ep_mps; /* Endpoint max packet size */
uint8_t ep_type; /* Endpoint type */
uint8_t ep_stalled; /* Endpoint stall flag */
- uint16_t ep_pma_buf_len; /** Previously allocated buffer size */
- uint16_t ep_pma_addr; /** ep pmd allocated addr */
+ uint8_t ep_enable; /* Endpoint enable */
+ uint16_t ep_pma_buf_len; /* Previously allocated buffer size */
+ uint16_t ep_pma_addr; /* ep pmd allocated addr */
uint8_t *xfer_buf;
uint32_t xfer_len;
uint32_t actual_xfer_len;
@@ -55,10 +56,6 @@ __WEAK void usb_dc_low_level_deinit(void)
int usb_dc_init(void)
{
- memset(&g_fsdev_udc, 0, sizeof(struct fsdev_udc));
-
- g_fsdev_udc.pma_offset = USB_BTABLE_SIZE;
-
usb_dc_low_level_init();
/* Init Device */
@@ -153,6 +150,7 @@ int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg)
if (USB_EP_DIR_IS_OUT(ep_cfg->ep_addr)) {
g_fsdev_udc.out_ep[ep_idx].ep_mps = ep_cfg->ep_mps;
g_fsdev_udc.out_ep[ep_idx].ep_type = ep_cfg->ep_type;
+ g_fsdev_udc.out_ep[ep_idx].ep_enable = true;
if (g_fsdev_udc.out_ep[ep_idx].ep_mps > g_fsdev_udc.out_ep[ep_idx].ep_pma_buf_len) {
if (g_fsdev_udc.pma_offset + g_fsdev_udc.out_ep[ep_idx].ep_mps > USB_RAM_SIZE) {
USB_LOG_ERR("Ep pma %d overflow\r\n", ep_cfg->ep_addr);
@@ -170,6 +168,7 @@ int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg)
} else {
g_fsdev_udc.in_ep[ep_idx].ep_mps = ep_cfg->ep_mps;
g_fsdev_udc.in_ep[ep_idx].ep_type = ep_cfg->ep_type;
+ g_fsdev_udc.in_ep[ep_idx].ep_enable = true;
if (g_fsdev_udc.in_ep[ep_idx].ep_mps > g_fsdev_udc.in_ep[ep_idx].ep_pma_buf_len) {
if (g_fsdev_udc.pma_offset + g_fsdev_udc.in_ep[ep_idx].ep_mps > USB_RAM_SIZE) {
USB_LOG_ERR("Ep pma %d overflow\r\n", ep_cfg->ep_addr);
@@ -259,6 +258,10 @@ int usbd_ep_start_write(const uint8_t ep, const uint8_t *data, uint32_t data_len
return -1;
}
+ if (!g_fsdev_udc.in_ep[ep_idx].ep_enable) {
+ return -2;
+ }
+
g_fsdev_udc.in_ep[ep_idx].xfer_buf = (uint8_t *)data;
g_fsdev_udc.in_ep[ep_idx].xfer_len = data_len;
g_fsdev_udc.in_ep[ep_idx].actual_xfer_len = 0;
@@ -279,6 +282,9 @@ int usbd_ep_start_read(const uint8_t ep, uint8_t *data, uint32_t data_len)
if (!data && data_len) {
return -1;
}
+ if (!g_fsdev_udc.out_ep[ep_idx].ep_enable) {
+ return -2;
+ }
g_fsdev_udc.out_ep[ep_idx].xfer_buf = data;
g_fsdev_udc.out_ep[ep_idx].xfer_len = data_len;