summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorHiFiPhile <[email protected]>2025-11-21 15:43:37 +0100
committerHiFiPhile <[email protected]>2025-11-21 15:43:37 +0100
commit3842980adfceb0ee83c0d587a708236fb9d70561 (patch)
tree4206775c929e9f792cfaa4767054fa6d7ec91344 /src/device
parentc785469881199b92b5ee8739d56ffe5aebcb6804 (diff)
dcd: add tud_configure()
Signed-off-by: HiFiPhile <[email protected]>
Diffstat (limited to 'src/device')
-rw-r--r--src/device/dcd.h3
-rw-r--r--src/device/usbd.c15
-rw-r--r--src/device/usbd.h6
3 files changed, 21 insertions, 3 deletions
diff --git a/src/device/dcd.h b/src/device/dcd.h
index 8a074ab47..850c37bc2 100644
--- a/src/device/dcd.h
+++ b/src/device/dcd.h
@@ -107,6 +107,9 @@ bool dcd_dcache_clean_invalidate(const void* addr, uint32_t data_size);
// Controller API
//--------------------------------------------------------------------+
+// optional dcd configuration, called by tud_configure()
+bool dcd_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param);
+
// Initialize controller to device mode
bool dcd_init(uint8_t rhport, const tusb_rhport_init_t* rh_init);
diff --git a/src/device/usbd.c b/src/device/usbd.c
index d4dfae4b4..044fd7072 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -424,6 +424,11 @@ TU_ATTR_WEAK bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t
return false;
}
+TU_ATTR_WEAK bool dcd_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param) {
+ (void) rhport; (void) cfg_id; (void) cfg_param;
+ return false;
+}
+
//--------------------------------------------------------------------+
// Debug
//--------------------------------------------------------------------+
@@ -493,13 +498,14 @@ void tud_sof_cb_enable(bool en) {
usbd_sof_enable(_usbd_rhport, SOF_CONSUMER_USER, en);
}
-//--------------------------------------------------------------------+
-// USBD Task
-//--------------------------------------------------------------------+
bool tud_inited(void) {
return _usbd_rhport != RHPORT_INVALID;
}
+bool tud_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param) {
+ return dcd_configure(rhport, cfg_id, cfg_param);
+}
+
bool tud_rhport_init(uint8_t rhport, const tusb_rhport_init_t* rh_init) {
if (tud_inited()) {
return true; // skip if already initialized
@@ -623,6 +629,9 @@ bool tud_task_event_ready(void) {
return !osal_queue_empty(_usbd_q);
}
+//--------------------------------------------------------------------+
+// USBD Task
+//--------------------------------------------------------------------+
/* USB Device Driver task
* This top level thread manages all device controller event and delegates events to class-specific drivers.
* This should be called periodically within the mainloop or rtos thread.
diff --git a/src/device/usbd.h b/src/device/usbd.h
index c446638c3..b40ef6277 100644
--- a/src/device/usbd.h
+++ b/src/device/usbd.h
@@ -37,6 +37,12 @@ extern "C" {
// Application API
//--------------------------------------------------------------------+
+// Configure device stack behavior with dynamic or port-specific parameters.
+// Should be called before tud_init()
+// - cfg_id : configure ID (TBD)
+// - cfg_param: configure data, structure depends on the ID
+bool tud_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param);
+
// New API to replace tud_init() to init device stack on specific roothub port
bool tud_rhport_init(uint8_t rhport, const tusb_rhport_init_t* rh_init);