summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/sbc_harness/config/config.h7
-rw-r--r--cmd/sbc_harness/config/tusb_config.h14
-rw-r--r--cmd/sbc_harness/main.c10
-rw-r--r--cmd/sbc_harness/usb_keyboard.c1
-rw-r--r--libusb/CMakeLists.txt2
-rw-r--r--libusb/include/libusb/usb_common.h2
-rw-r--r--libusb/usb_common.c16
-rw-r--r--notes.md4
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) {
diff --git a/notes.md b/notes.md
index 5ecb152..362445f 100644
--- a/notes.md
+++ b/notes.md
@@ -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