diff options
-rw-r--r-- | cmd/sbc_harness/config/config.h | 7 | ||||
-rw-r--r-- | cmd/sbc_harness/config/tusb_config.h | 14 | ||||
-rw-r--r-- | cmd/sbc_harness/main.c | 10 | ||||
-rw-r--r-- | cmd/sbc_harness/usb_keyboard.c | 1 | ||||
-rw-r--r-- | libusb/CMakeLists.txt | 2 | ||||
-rw-r--r-- | libusb/include/libusb/usb_common.h | 2 | ||||
-rw-r--r-- | libusb/usb_common.c | 16 | ||||
-rw-r--r-- | notes.md | 4 |
8 files changed, 28 insertions, 28 deletions
diff --git a/cmd/sbc_harness/config/config.h b/cmd/sbc_harness/config/config.h index 3a75c14..6d2ea89 100644 --- a/cmd/sbc_harness/config/config.h +++ b/cmd/sbc_harness/config/config.h @@ -68,6 +68,13 @@ /* USB KEYBOARD ***************************************************************/ +/** + * Which USB port to use for the Root Hub. + * + * The RP2040 only has 1 port, so it's gotta be port #0. + */ +#define CONFIG_USB_COMMON_RHPORT 0 + #define CONFIG_USB_COMMON_DEBUG 1 /* bool */ /* COROUTINE ******************************************************************/ diff --git a/cmd/sbc_harness/config/tusb_config.h b/cmd/sbc_harness/config/tusb_config.h index fc963ac..a27c841 100644 --- a/cmd/sbc_harness/config/tusb_config.h +++ b/cmd/sbc_harness/config/tusb_config.h @@ -36,18 +36,6 @@ extern "C" { #endif //-------------------------------------------------------------------- -// TinyUSB Device (TUD) initialization for rp2040-based boards -//-------------------------------------------------------------------- - -// Which USB port to use for the RootHub. -// The rp2040 only has 1 port, so it's gotta be port #0. -#define BOARD_TUD_RHPORT 0 - -// RHPort max operational speed. -// Use OPT_MODE_DEFAULT_SPEED for max speed supported by MCU. -#define BOARD_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED - -//-------------------------------------------------------------------- // Configuration: common //-------------------------------------------------------------------- @@ -72,7 +60,7 @@ extern "C" { #define CFG_TUSB_MEM_ALIGN [[gnu::aligned(4)]] #define CFG_TUD_ENABLED 1 -#define CFG_TUD_MAX_SPEED BOARD_TUD_MAX_SPEED +#define CFG_TUD_MAX_SPEED OPT_MODE_DEFAULT_SPEED //-------------------------------------------------------------------- // Configuration: TinyUSB Device (TUD) diff --git a/cmd/sbc_harness/main.c b/cmd/sbc_harness/main.c index 4683c72..9eacc81 100644 --- a/cmd/sbc_harness/main.c +++ b/cmd/sbc_harness/main.c @@ -21,6 +21,8 @@ #include "usb_keyboard.h" +#define ARRAY_LEN(arr) (sizeof(arr)/sizeof((arr)[0])) + COROUTINE hello_world_cr(void *_chan) { const char *msg = "Hello world!\n"; usb_keyboard_rpc_t *chan = _chan; @@ -50,8 +52,11 @@ struct { struct rp2040_hwspi dev_spi; struct w5500 dev_w5500; usb_keyboard_rpc_t keyboard_chan; + uint16_t usb_serial[sizeof(uint64_t)*2]; /* UTF-16 */ } globals; +const char *hexdig = "0123456789ABCDEF"; + COROUTINE init_cr(void *) { cr_begin(); @@ -86,7 +91,10 @@ COROUTINE init_cr(void *) { flash_id24[0], flash_id24[1], flash_id24[2], }})); - usb_common_earlyinit(); + static_assert(sizeof(flash_id64)*2 == ARRAY_LEN(globals.usb_serial)); + for (size_t i = 0; i < ARRAY_LEN(globals.usb_serial); i++) + globals.usb_serial[i] = hexdig[(flash_id64 >> ((sizeof(flash_id64)*8)-((i+1)*4))) & 0xF]; + usb_common_earlyinit(globals.usb_serial, sizeof(globals.usb_serial)); usb_keyboard_init(); usb_common_lateinit(); diff --git a/cmd/sbc_harness/usb_keyboard.c b/cmd/sbc_harness/usb_keyboard.c index 637921e..f4816c1 100644 --- a/cmd/sbc_harness/usb_keyboard.c +++ b/cmd/sbc_harness/usb_keyboard.c @@ -24,7 +24,6 @@ static uint8_t kbd_ifc = 0; void usb_keyboard_init() { if (kbd_ifc) return; - usb_common_earlyinit(); kbd_ifc = usb_add_interface(cfgnum_std, TUD_HID_DESC_LEN, (uint8_t[]){ /* USB-HID input-only descriptor for inclusion in the config descriptor; consisting of 3 parts: diff --git a/libusb/CMakeLists.txt b/libusb/CMakeLists.txt index c23f30e..012ab71 100644 --- a/libusb/CMakeLists.txt +++ b/libusb/CMakeLists.txt @@ -9,9 +9,7 @@ target_sources(libusb INTERFACE usb_common.c ) target_link_libraries(libusb INTERFACE - pico_unique_id tinyusb_device - tinyusb_board libcr_ipc libmisc diff --git a/libusb/include/libusb/usb_common.h b/libusb/include/libusb/usb_common.h index e31b3ab..9fe0794 100644 --- a/libusb/include/libusb/usb_common.h +++ b/libusb/include/libusb/usb_common.h @@ -27,7 +27,7 @@ enum { /* Globals ********************************************************************/ extern uint8_t cfgnum_std; -void usb_common_earlyinit(void); +void usb_common_earlyinit(uint16_t *serial, uint8_t serial_bytelen); void usb_common_lateinit(void); COROUTINE usb_common_cr(void *arg); diff --git a/libusb/usb_common.c b/libusb/usb_common.c index ccddceb..9a23998 100644 --- a/libusb/usb_common.c +++ b/libusb/usb_common.c @@ -8,7 +8,6 @@ #include <stddef.h> /* for size_t */ #include <string.h> /* memcpy(newlib) */ #include <stdlib.h> /* for malloc(pico_malloc), realloc(pico_malloc), reallocarray(pico_malloc) */ -#include "bsp/board_api.h" /* for board_init(), board_init_after_usb(), board_usb_get_serial(TinyUSB) */ #include "tusb.h" /* for various tusb_*_t types */ #include <libmisc/assert.h> @@ -64,10 +63,8 @@ uint16_t const *tud_descriptor_string_cb(uint8_t strid, uint16_t langid) { case STRID_CFG: CONST_STR(TU_UTF16("Standard Configuration")); break; case STRID_KBD_IFC: CONST_STR(TU_UTF16("Keyboard Interface")); break; case STRID_SERIAL: -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Waddress-of-packed-member" - bytelen = 2 * board_usb_get_serial(desc.bString, TU_ARRAY_SIZE(desc.bString)); -#pragma GCC diagnostic pop + bytelen = globals.serial_bytelen; + memcpy(desc.bString, globals.serial, bytelen); break; default: debugf("GET STRING: unknown string id=%"PRIu8, strid); @@ -87,7 +84,9 @@ uint16_t const *tud_descriptor_string_cb(uint8_t strid, uint16_t langid) { /* Main entrypoints ***********************************************************/ -void usb_common_earlyinit(void) { +void usb_common_earlyinit(uint16_t *serial, uint8_t serial_bytelen) { + globals.serial = serial; + globals.serial_bytelen = serial_bytelen; if (cfgnum_std) return; cfgnum_std = usb_add_config( @@ -97,10 +96,7 @@ void usb_common_earlyinit(void) { } void usb_common_lateinit(void) { - board_init(); - tud_init(BOARD_TUD_RHPORT); - if (board_init_after_tusb) - board_init_after_tusb(); + tud_init(CONFIG_USB_COMMON_RHPORT); } COROUTINE usb_common_cr(void *_arg) { @@ -149,3 +149,7 @@ IDK about HDMI compression yet, but naively uncompressed we're looking at wanting to shove ~60 MB/s (480 Mb/s). Compression is an optional feature introduced in HDMI 2.1 :( + +---- + +PIO-based USB needs the system clock to be a multiple of 120mhz |