summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/class/cdc/cdc_device.c2
-rw-r--r--src/class/cdc/cdc_device.h2
-rw-r--r--src/class/custom/custom_device.c2
-rw-r--r--src/class/custom/custom_device.h2
-rw-r--r--src/class/hid/hid_device.c2
-rw-r--r--src/class/hid/hid_device.h2
-rw-r--r--src/class/msc/msc_device.c2
-rw-r--r--src/class/msc/msc_device.h2
-rw-r--r--src/device/usbd.c18
9 files changed, 20 insertions, 14 deletions
diff --git a/src/class/cdc/cdc_device.c b/src/class/cdc/cdc_device.c
index 9c991b5ab..643706269 100644
--- a/src/class/cdc/cdc_device.c
+++ b/src/class/cdc/cdc_device.c
@@ -232,7 +232,7 @@ tusb_error_t cdcd_open(uint8_t rhport, tusb_desc_interface_t const * p_interface
return TUSB_ERROR_NONE;
}
-void cdcd_close(uint8_t rhport)
+void cdcd_reset(uint8_t rhport)
{
// no need to close opened pipe, dcd bus reset will put controller's endpoints to default state
(void) rhport;
diff --git a/src/class/cdc/cdc_device.h b/src/class/cdc/cdc_device.h
index a754669df..bdce0f86e 100644
--- a/src/class/cdc/cdc_device.h
+++ b/src/class/cdc/cdc_device.h
@@ -99,7 +99,7 @@ void cdcd_init (void);
tusb_error_t cdcd_open (uint8_t rhport, tusb_desc_interface_t const * p_interface_desc, uint16_t *p_length);
tusb_error_t cdcd_control_request_st (uint8_t rhport, tusb_control_request_t const * p_request);
tusb_error_t cdcd_xfer_cb (uint8_t rhport, uint8_t edpt_addr, tusb_event_t event, uint32_t xferred_bytes);
-void cdcd_close (uint8_t rhport);
+void cdcd_reset (uint8_t rhport);
#if CFG_TUD_CDC_FLUSH_ON_SOF
void cdcd_sof(uint8_t rhport);
diff --git a/src/class/custom/custom_device.c b/src/class/custom/custom_device.c
index 3d0453001..e4dc1a839 100644
--- a/src/class/custom/custom_device.c
+++ b/src/class/custom/custom_device.c
@@ -97,7 +97,7 @@ tusb_error_t cusd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, tusb_event_t event,
return TUSB_ERROR_NONE;
}
-void cusd_close(uint8_t rhport)
+void cusd_reset(uint8_t rhport)
{
}
diff --git a/src/class/custom/custom_device.h b/src/class/custom/custom_device.h
index 08f4f7f4a..3e46c06a7 100644
--- a/src/class/custom/custom_device.h
+++ b/src/class/custom/custom_device.h
@@ -64,7 +64,7 @@ void cusd_init(void);
tusb_error_t cusd_open(uint8_t rhport, tusb_desc_interface_t const * p_interface_desc, uint16_t *p_length);
tusb_error_t cusd_control_request_st(uint8_t rhport, tusb_control_request_t const * p_request);
tusb_error_t cusd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, tusb_event_t event, uint32_t xferred_bytes);
-void cusd_close(uint8_t rhport);
+void cusd_reset(uint8_t rhport);
#endif
diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c
index a6080e69d..bc2ee8c64 100644
--- a/src/class/hid/hid_device.c
+++ b/src/class/hid/hid_device.c
@@ -168,7 +168,7 @@ void hidd_init(void)
}
}
-void hidd_close(uint8_t rhport)
+void hidd_reset(uint8_t rhport)
{
for(uint8_t i=0; i<HIDD_NUMBER_OF_SUBCLASS; i++)
{
diff --git a/src/class/hid/hid_device.h b/src/class/hid/hid_device.h
index b211731e0..855421eca 100644
--- a/src/class/hid/hid_device.h
+++ b/src/class/hid/hid_device.h
@@ -204,7 +204,7 @@ void hidd_init(void);
tusb_error_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * p_interface_desc, uint16_t *p_length);
tusb_error_t hidd_control_request_st(uint8_t rhport, tusb_control_request_t const * p_request);
tusb_error_t hidd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, tusb_event_t event, uint32_t xferred_bytes);
-void hidd_close(uint8_t rhport);
+void hidd_reset(uint8_t rhport);
#endif
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c
index 5a92d2470..71987addf 100644
--- a/src/class/msc/msc_device.c
+++ b/src/class/msc/msc_device.c
@@ -153,7 +153,7 @@ void mscd_init(void)
memclr_(&_mscd_itf, sizeof(mscd_interface_t));
}
-void mscd_close(uint8_t rhport)
+void mscd_reset(uint8_t rhport)
{
memclr_(&_mscd_itf, sizeof(mscd_interface_t));
}
diff --git a/src/class/msc/msc_device.h b/src/class/msc/msc_device.h
index 104e46414..994e71c36 100644
--- a/src/class/msc/msc_device.h
+++ b/src/class/msc/msc_device.h
@@ -146,7 +146,7 @@ void mscd_init(void);
tusb_error_t mscd_open(uint8_t rhport, tusb_desc_interface_t const * p_interface_desc, uint16_t *p_length);
tusb_error_t mscd_control_request_st(uint8_t rhport, tusb_control_request_t const * p_request);
tusb_error_t mscd_xfer_cb(uint8_t rhport, uint8_t edpt_addr, tusb_event_t event, uint32_t xferred_bytes);
-void mscd_close(uint8_t rhport);
+void mscd_reset(uint8_t rhport);
#endif
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 018b94150..450f8b485 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -81,7 +81,7 @@ typedef struct {
tusb_error_t (* control_req_st ) (uint8_t rhport, tusb_control_request_t const *);
tusb_error_t (* xfer_cb ) (uint8_t rhport, uint8_t ep_addr, tusb_event_t, uint32_t);
void (* sof ) (uint8_t rhport);
- void (* close ) (uint8_t);
+ void (* reset ) (uint8_t);
} usbd_class_driver_t;
static usbd_class_driver_t const usbd_class_drivers[] =
@@ -94,7 +94,7 @@ static usbd_class_driver_t const usbd_class_drivers[] =
.control_req_st = cdcd_control_request_st,
.xfer_cb = cdcd_xfer_cb,
.sof = cdcd_sof,
- .close = cdcd_close
+ .reset = cdcd_reset
},
#endif
@@ -106,7 +106,7 @@ static usbd_class_driver_t const usbd_class_drivers[] =
.control_req_st = hidd_control_request_st,
.xfer_cb = hidd_xfer_cb,
.sof = NULL,
- .close = hidd_close
+ .reset = hidd_reset
},
#endif
@@ -118,7 +118,7 @@ static usbd_class_driver_t const usbd_class_drivers[] =
.control_req_st = mscd_control_request_st,
.xfer_cb = mscd_xfer_cb,
.sof = NULL,
- .close = mscd_close
+ .reset = mscd_reset
},
#endif
@@ -130,7 +130,7 @@ static usbd_class_driver_t const usbd_class_drivers[] =
.control_req_st = cusd_control_request_st,
.xfer_cb = cusd_xfer_cb,
.sof = NULL,
- .close = cusd_close
+ .reset = cusd_reset
},
#endif
};
@@ -525,6 +525,12 @@ void dcd_bus_event(uint8_t rhport, usbd_bus_event_type_t bus_event)
switch(bus_event)
{
case USBD_BUS_EVENT_RESET:
+ varclr_(&_usbd_dev);
+ for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++)
+ {
+ if ( usbd_class_drivers[i].reset ) usbd_class_drivers[i].reset( rhport );
+ }
+
osal_queue_flush(_usbd_q);
osal_semaphore_reset_isr(_usbd_ctrl_sem);
break;
@@ -546,7 +552,7 @@ void dcd_bus_event(uint8_t rhport, usbd_bus_event_type_t bus_event)
varclr_(&_usbd_dev);
for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++)
{
- if ( usbd_class_drivers[i].close ) usbd_class_drivers[i].close( rhport );
+ if ( usbd_class_drivers[i].reset ) usbd_class_drivers[i].reset( rhport );
}
tud_umount_cb(); // invoke callback