summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------lib/Pico-PIO-USB0
-rw-r--r--src/device/dcd.h32
-rw-r--r--src/device/usbd.c36
-rw-r--r--src/device/usbd.h2
-rw-r--r--src/portable/raspberrypi/pio_usb/dcd_pio_usb.c7
-rw-r--r--src/portable/raspberrypi/pio_usb/hcd_pio_usb.c6
6 files changed, 38 insertions, 45 deletions
diff --git a/lib/Pico-PIO-USB b/lib/Pico-PIO-USB
-Subproject d6712cad5bfbddb25647974f0d583596e703c06
+Subproject 98e3feefcd1c7218bced0ea2ea35530fd1b550e
diff --git a/src/device/dcd.h b/src/device/dcd.h
index 8efbc90ef..bc68c9be6 100644
--- a/src/device/dcd.h
+++ b/src/device/dcd.h
@@ -174,16 +174,40 @@ void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr);
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);
+TU_ATTR_ALWAYS_INLINE static inline 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_handler(&event, in_isr);
+}
// helper to send bus reset event
-extern void dcd_event_bus_reset (uint8_t rhport, tusb_speed_t speed, bool in_isr);
+TU_ATTR_ALWAYS_INLINE static inline 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);
+}
// helper to send setup received
-extern void dcd_event_setup_received(uint8_t rhport, uint8_t const * setup, bool in_isr);
+TU_ATTR_ALWAYS_INLINE static inline void dcd_event_setup_received(uint8_t rhport, uint8_t const * setup, bool in_isr)
+{
+ dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SETUP_RECEIVED };
+ memcpy(&event.setup_received, setup, 8);
+
+ dcd_event_handler(&event, in_isr);
+}
// helper to send transfer complete event
-extern void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr);
+TU_ATTR_ALWAYS_INLINE static inline void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr)
+{
+ dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_XFER_COMPLETE };
+
+ event.xfer_complete.ep_addr = ep_addr;
+ event.xfer_complete.len = xferred_bytes;
+ event.xfer_complete.result = result;
+
+ dcd_event_handler(&event, in_isr);
+}
#ifdef __cplusplus
}
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 7ab2660f4..8d5d54b86 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -265,7 +265,7 @@ static inline usbd_class_driver_t const * get_driver(uint8_t drvid)
//--------------------------------------------------------------------+
enum { RHPORT_INVALID = 0xFFu };
-static uint8_t _usbd_rhport = RHPORT_INVALID;
+static volatile uint8_t _usbd_rhport = RHPORT_INVALID;
// Event queue
// usbd_int_set() is used as mutex in OS NONE config
@@ -1065,7 +1065,7 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
//--------------------------------------------------------------------+
// DCD Event Handler
//--------------------------------------------------------------------+
-void dcd_event_handler(dcd_event_t const * event, bool in_isr)
+void __no_inline_not_in_flash_func(dcd_event_handler)(dcd_event_t const * event, bool in_isr)
{
switch (event->event_id)
{
@@ -1115,38 +1115,6 @@ 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_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);
-}
-
-void dcd_event_setup_received(uint8_t rhport, uint8_t const * setup, bool in_isr)
-{
- dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_SETUP_RECEIVED };
- memcpy(&event.setup_received, setup, 8);
-
- dcd_event_handler(&event, in_isr);
-}
-
-void dcd_event_xfer_complete (uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr)
-{
- dcd_event_t event = { .rhport = rhport, .event_id = DCD_EVENT_XFER_COMPLETE };
-
- event.xfer_complete.ep_addr = ep_addr;
- event.xfer_complete.len = xferred_bytes;
- event.xfer_complete.result = result;
-
- dcd_event_handler(&event, in_isr);
-}
-
//--------------------------------------------------------------------+
// USBD API For Class Driver
//--------------------------------------------------------------------+
diff --git a/src/device/usbd.h b/src/device/usbd.h
index b2bf8ba9d..32c82e75a 100644
--- a/src/device/usbd.h
+++ b/src/device/usbd.h
@@ -46,7 +46,7 @@ bool tud_inited(void);
// Task function should be called in main/rtos loop
void tud_task (void);
-// Check if there is pending events need proccessing by tud_task()
+// Check if there is pending events need processing by tud_task()
bool tud_task_event_ready(void);
// Interrupt handler, name alias to DCD
diff --git a/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c b/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c
index 7744a11cd..38867ea1c 100644
--- a/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c
+++ b/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c
@@ -78,7 +78,7 @@ void dcd_set_address (uint8_t rhport, uint8_t dev_addr)
// must be called before queuing status
pio_usb_device_set_address(pio_rhport, dev_addr);
- pio_usb_device_endpoint_transfer(pio_rhport, 0x80, NULL, 0);
+ dcd_edpt_xfer(rhport, 0x80, NULL, 0);
}
// Wake up host
@@ -118,8 +118,9 @@ void dcd_edpt_close_all (uint8_t rhport)
// Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack
bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes)
{
- uint8_t const pio_rhport = RHPORT_PIO(rhport);
- return pio_usb_device_endpoint_transfer(pio_rhport, ep_addr, buffer, total_bytes);
+ (void) rhport;
+ pio_hw_endpoint_t *ep = pio_usb_device_get_ep(ep_addr);
+ return pio_usb_endpoint_transfer(ep, buffer, total_bytes);
}
// Submit a transfer where is managed by FIFO, When complete dcd_event_xfer_complete() is invoked to notify the stack - optional, however, must be listed in usbd.c
diff --git a/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c b/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
index 4bd318448..e311f16d0 100644
--- a/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
+++ b/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
@@ -51,7 +51,7 @@ static pio_usb_configuration_t pio_host_config = PIO_USB_DEFAULT_CONFIG;
bool hcd_init(uint8_t rhport)
{
// To run USB SOF interrupt in core1, call this init in core1
- pio_usb_host_controller_init(&pio_host_config);
+ pio_usb_host_init(&pio_host_config);
return true;
}
@@ -59,13 +59,13 @@ bool hcd_init(uint8_t rhport)
void hcd_port_reset(uint8_t rhport)
{
rhport = RHPORT_PIO(rhport);
- pio_usb_hw_port_reset_start(rhport);
+ pio_usb_host_port_reset_start(rhport);
}
void hcd_port_reset_end(uint8_t rhport)
{
rhport = RHPORT_PIO(rhport);
- pio_usb_hw_port_reset_end(rhport);
+ pio_usb_host_port_reset_end(rhport);
}
bool hcd_port_connect_status(uint8_t rhport)