summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorhathach <[email protected]>2020-05-31 23:43:29 +0700
committerhathach <[email protected]>2020-05-31 23:43:29 +0700
commitf771afe6af894a5f3ee029756d4521b56d74c1c0 (patch)
tree845cac87fb55bf21b4c74d335c485845ff019e7a /src/device
parent5ffba8536dfaa4602e3e7f1c94be124bfeb3a5ae (diff)
fixed EP0 size to 64 since LS is not supported in device mode
- set turn-around and report actual speed in Enum Done - add dcd_event_bus_reset() helper to report speed
Diffstat (limited to 'src/device')
-rw-r--r--src/device/dcd.h15
-rw-r--r--src/device/usbd.c9
2 files changed, 20 insertions, 4 deletions
diff --git a/src/device/dcd.h b/src/device/dcd.h
index 68798c259..a4635346b 100644
--- a/src/device/dcd.h
+++ b/src/device/dcd.h
@@ -60,11 +60,17 @@ typedef struct TU_ATTR_ALIGNED(4)
uint8_t rhport;
uint8_t event_id;
- union {
- // USBD_EVT_SETUP_RECEIVED
+ union
+ {
+ // BUS RESET
+ struct {
+ tusb_speed_t speed;
+ } bus_reset;
+
+ // SETUP_RECEIVED
tusb_control_request_t setup_received;
- // USBD_EVT_XFER_COMPLETE
+ // XFER_COMPLETE
struct {
uint8_t ep_addr;
uint8_t result;
@@ -143,6 +149,9 @@ extern void dcd_event_handler(dcd_event_t const * event, bool in_isr);
// helper to send bus signal event
extern void dcd_event_bus_signal (uint8_t rhport, dcd_eventid_t eid, bool in_isr);
+// helper to send bus reset event
+extern void dcd_event_bus_reset (uint8_t rhport, tusb_speed_t speed, bool in_isr);
+
// helper to send setup received
extern void dcd_event_setup_received(uint8_t rhport, uint8_t const * setup, bool in_isr);
diff --git a/src/device/usbd.c b/src/device/usbd.c
index bd892e389..275792ab9 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -920,7 +920,14 @@ void dcd_event_handler(dcd_event_t const * event, bool in_isr)
void dcd_event_bus_signal (uint8_t rhport, dcd_eventid_t eid, bool in_isr)
{
- dcd_event_t event = { .rhport = rhport, .event_id = eid, };
+ dcd_event_t event = { .rhport = rhport, .event_id = eid };
+ dcd_event_handler(&event, in_isr);
+}
+
+void dcd_event_bus_reset (uint8_t rhport, tusb_speed_t speed, bool in_isr)
+{
+ dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_BUS_RESET };
+ event.bus_reset.speed = speed;
dcd_event_handler(&event, in_isr);
}