From 0c8084311532550262a6af39fd7ecbaeec5d71a9 Mon Sep 17 00:00:00 2001 From: Eugene Date: Fri, 17 Feb 2023 15:07:32 +0800 Subject: [PATCH 1/2] rtl872x: apply new usb stack and patch to fix the USB issue on Windows --- hal/src/rtl872x/usbd_driver.cpp | 10 +++++----- hal/src/rtl872x/usbd_driver.h | 7 ++++--- third_party/ambd_sdk/ambd_sdk | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/hal/src/rtl872x/usbd_driver.cpp b/hal/src/rtl872x/usbd_driver.cpp index 5e5eba4b5e..f8690b53ad 100644 --- a/hal/src/rtl872x/usbd_driver.cpp +++ b/hal/src/rtl872x/usbd_driver.cpp @@ -45,15 +45,15 @@ namespace { SetupRequest sLastUsbSetupRequest = {}; -Speed rtlSpeedToDriver(usbd_speed_type_t speed) { +Speed rtlSpeedToDriver(usb_speed_type_t speed) { switch (speed) { - case USBD_SPEED_HIGH: { + case USB_SPEED_HIGH: { return Speed::HIGH; } - case USBD_SPEED_LOW: { + case USB_SPEED_LOW: { return Speed::LOW; } - case USBD_SPEED_FULL: + case USB_SPEED_FULL: default: { return Speed::FULL; } @@ -310,7 +310,7 @@ unsigned RtlUsbDriver::updateEndpointMask(unsigned mask) const { return mask; } -uint8_t* RtlUsbDriver::getDescriptorCb(usb_setup_req_t *req, usbd_speed_type_t speed, uint16_t* len) { +uint8_t* RtlUsbDriver::getDescriptorCb(usb_setup_req_t *req, usb_speed_type_t speed, uint16_t* len) { auto self = instance(); std::lock_guard lk(*self); diff --git a/hal/src/rtl872x/usbd_driver.h b/hal/src/rtl872x/usbd_driver.h index 511d7dd4bf..795854f5d1 100644 --- a/hal/src/rtl872x/usbd_driver.h +++ b/hal/src/rtl872x/usbd_driver.h @@ -75,7 +75,7 @@ class RtlUsbDriver : public DeviceDriver { RtlUsbDriver(); virtual ~RtlUsbDriver(); - static uint8_t* getDescriptorCb(usb_setup_req_t *req, usbd_speed_type_t speed, uint16_t* len); + static uint8_t* getDescriptorCb(usb_setup_req_t *req, usb_speed_type_t speed, uint16_t* len); static uint8_t setConfigCb(usb_dev_t* dev, uint8_t config); static uint8_t clearConfigCb(usb_dev_t* dev, uint8_t config); static uint8_t setupCb(usb_dev_t* dev, usb_setup_req_t* req); @@ -104,8 +104,7 @@ class RtlUsbDriver : public DeviceDriver { .rx_fifo_size = USBD_MAX_RX_FIFO_SIZE, .nptx_fifo_size = USBD_MAX_NPTX_FIFO_SIZE, .ptx_fifo_size = USBD_MAX_PTX_FIFO_SIZE, - .intr_use_ptx_fifo = 1, // ? - .speed = USBD_SPEED_FULL, + .speed = USB_SPEED_FULL, .dma_enable = 0, // ? .self_powered = 1, .isr_priority = RTL_USBD_ISR_PRIORITY, @@ -116,6 +115,8 @@ class RtlUsbDriver : public DeviceDriver { .set_config = &setConfigCb, .clear_config = &clearConfigCb, .setup = &setupCb, + .get_class_descriptor = nullptr, + .clear_feature = nullptr, .sof = nullptr, // This is not delivered .suspend = &suspendCb, .resume = &resumeCb, diff --git a/third_party/ambd_sdk/ambd_sdk b/third_party/ambd_sdk/ambd_sdk index 5661747263..3663b72aaa 160000 --- a/third_party/ambd_sdk/ambd_sdk +++ b/third_party/ambd_sdk/ambd_sdk @@ -1 +1 @@ -Subproject commit 5661747263b9dc6652299ec2b38a86623ea83272 +Subproject commit 3663b72aaa1d4f9115a390c6b0d0cb101ec11474 From 23e8fa21efac53b7ece0c6e488e48a769886855b Mon Sep 17 00:00:00 2001 From: Andrey Tolstoy Date: Wed, 1 Mar 2023 17:47:42 +0700 Subject: [PATCH 2/2] [rtl872x] usb: update offsets to internals of usbd_dev and usbd_pcd --- bootloader/src/rtl872x/osdep_service.cpp | 2 +- hal/src/rtl872x/usbd_driver.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bootloader/src/rtl872x/osdep_service.cpp b/bootloader/src/rtl872x/osdep_service.cpp index 886ea5b606..8f5c3b29fa 100644 --- a/bootloader/src/rtl872x/osdep_service.cpp +++ b/bootloader/src/rtl872x/osdep_service.cpp @@ -30,7 +30,7 @@ particle::StaticRecursiveCriticalSectionLock sCsLock; thread_func_t sFunc = nullptr; void *sCtx = nullptr; -const size_t RTW_USBD_TASK_MAIN_LOOP_SEMAPHORE_OFFSET = 364; +const size_t RTW_USBD_TASK_MAIN_LOOP_SEMAPHORE_OFFSET = 400; const uint32_t RTW_USBD_TASK_MAIN_LOOP_PERIOD_MS = 1; class AtomicCountingSemaphore { diff --git a/hal/src/rtl872x/usbd_driver.cpp b/hal/src/rtl872x/usbd_driver.cpp index f8690b53ad..08e999b177 100644 --- a/hal/src/rtl872x/usbd_driver.cpp +++ b/hal/src/rtl872x/usbd_driver.cpp @@ -78,8 +78,10 @@ uint8_t endpointTypeToRtl(EndpointType type) { return 0; } -const size_t RTL_USB_DEV_PCD_OFFSET = 0xd8; -const size_t RTL_USB_PCD_SPINLOCK_OFFSET = 0x15c; +// FIXME: it should be fine to directly use rtlDev_->pcd or &usbd_pcd, but for now keeping things as-is to keep +// changes to a minimum +const size_t RTL_USB_DEV_PCD_OFFSET = offsetof(usb_dev_t, pcd); +const size_t RTL_USB_PCD_SPINLOCK_OFFSET = 0x180; } // anonymous