Skip to content

Commit 50d68f0

Browse files
Update SN in USBN device using the device ID
1 parent df20f11 commit 50d68f0

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

cores/rp2040/SerialUSB.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ extern "C" {
3232
#include "hardware/irq.h"
3333
#include "pico/mutex.h"
3434
#include "hardware/watchdog.h"
35+
#include "pico/unique_id.h"
3536

3637
#define PICO_STDIO_USB_TASK_INTERVAL_US 1000
3738
#define PICO_STDIO_USB_LOW_PRIORITY_IRQ 31
@@ -84,11 +85,13 @@ static const uint8_t usbd_desc_cfg[USBD_DESC_LEN] = {
8485
USBD_CDC_CMD_MAX_SIZE, USBD_CDC_EP_OUT, USBD_CDC_EP_IN, USBD_CDC_IN_OUT_MAX_SIZE),
8586
};
8687

88+
static char _idString[PICO_UNIQUE_BOARD_ID_SIZE_BYTES * 2 + 1];
89+
8790
static const char *const usbd_desc_str[] = {
8891
[USBD_STR_0] = "",
8992
[USBD_STR_MANUF] = "Raspberry Pi",
9093
[USBD_STR_PRODUCT] = "PicoArduino",
91-
[USBD_STR_SERIAL] = "000000000000", // TODO
94+
[USBD_STR_SERIAL] = _idString,
9295
[USBD_STR_CDC] = "Board CDC",
9396
};
9497

@@ -149,6 +152,16 @@ void SerialUSB::begin(unsigned long baud) {
149152
return;
150153
}
151154

155+
// Get ID string into human readable serial number
156+
pico_unique_board_id_t id;
157+
pico_get_unique_board_id(&id);
158+
_idString[0] = 0;
159+
for (auto i = 0; i < PICO_UNIQUE_BOARD_ID_SIZE_BYTES; i++) {
160+
char hx[3];
161+
sprintf(hx, "%02X", id.id[i]);
162+
strcat(_idString, hx);
163+
}
164+
152165
tusb_init();
153166

154167
irq_set_exclusive_handler(PICO_STDIO_USB_LOW_PRIORITY_IRQ, low_priority_worker_irq);

platform.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ compiler.warning_flags.more=-Wall
4040
compiler.warning_flags.all=-Wall -Wextra
4141

4242
compiler.defines={build.led}
43-
compiler.includes=-I{runtime.platform.path}/pico_base/ -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_platform/include/ -I{runtime.platform.path}/pico-sdk/src/common/pico_base/include/ -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include/ -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_timer/include/ -I{runtime.platform.path}/pico-sdk/src/common/pico_stdlib/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_gpio/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_i2c/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_flash/include -I{runtime.platform.path}/pico-sdk/src/common/pico_base/include -I{runtime.platform.path}/pico-examples/build/generated/pico_base -I{runtime.platform.path}/pico-sdk/src/boards/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_platform/include -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_base/include -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_structs/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_claim/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_sync/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_uart/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_divider/include -I{runtime.platform.path}/pico-sdk/src/common/pico_time/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_timer/include -I{runtime.platform.path}/pico-sdk/src/common/pico_sync/include -I{runtime.platform.path}/pico-sdk/src/common/pico_util/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_runtime/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_clocks/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_resets/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_watchdog/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_xosc/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_pll/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_vreg/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_irq/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_printf/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_bootrom/include -I{runtime.platform.path}/pico-sdk/src/common/pico_bit_ops/include -I{runtime.platform.path}/pico-sdk/src/common/pico_divider/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_double/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_int64_ops/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_float/include -I{runtime.platform.path}/pico-sdk/src/common/pico_binary_info/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_pio/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_stdio/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_stdio_uart/include -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include/ -I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/ -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_stdio_usb/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_spi/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_pwm/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_adc/include
43+
compiler.includes=-I{runtime.platform.path}/pico_base/ -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_unique_id/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_platform/include/ -I{runtime.platform.path}/pico-sdk/src/common/pico_base/include/ -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include/ -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_timer/include/ -I{runtime.platform.path}/pico-sdk/src/common/pico_stdlib/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_gpio/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_i2c/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_flash/include -I{runtime.platform.path}/pico-sdk/src/common/pico_base/include -I{runtime.platform.path}/pico-examples/build/generated/pico_base -I{runtime.platform.path}/pico-sdk/src/boards/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_platform/include -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_base/include -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_structs/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_claim/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_sync/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_uart/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_divider/include -I{runtime.platform.path}/pico-sdk/src/common/pico_time/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_timer/include -I{runtime.platform.path}/pico-sdk/src/common/pico_sync/include -I{runtime.platform.path}/pico-sdk/src/common/pico_util/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_runtime/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_clocks/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_resets/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_watchdog/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_xosc/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_pll/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_vreg/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_irq/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_printf/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_bootrom/include -I{runtime.platform.path}/pico-sdk/src/common/pico_bit_ops/include -I{runtime.platform.path}/pico-sdk/src/common/pico_divider/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_double/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_int64_ops/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_float/include -I{runtime.platform.path}/pico-sdk/src/common/pico_binary_info/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_pio/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_stdio/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_stdio_uart/include -I{runtime.platform.path}/pico-sdk/src/rp2040/hardware_regs/include/ -I{runtime.platform.path}/pico-sdk/lib/tinyusb/src/ -I{runtime.platform.path}/pico-sdk/src/rp2_common/pico_stdio_usb/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_spi/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_pwm/include -I{runtime.platform.path}/pico-sdk/src/rp2_common/hardware_adc/include
4444
compiler.flags=-Os -march=armv6-m -mcpu=cortex-m0plus -mthumb -ffunction-sections -fdata-sections
4545
compiler.wrap=-Wl,--wrap=acos -Wl,--wrap=acosf -Wl,--wrap=acosh -Wl,--wrap=acoshf -Wl,--wrap=__aeabi_cdcmpeq -Wl,--wrap=__aeabi_cdcmple -Wl,--wrap=__aeabi_cdrcmple -Wl,--wrap=__aeabi_cfcmpeq -Wl,--wrap=__aeabi_cfcmple -Wl,--wrap=__aeabi_cfrcmple -Wl,--wrap=__aeabi_d2f -Wl,--wrap=__aeabi_d2iz -Wl,--wrap=__aeabi_d2lz -Wl,--wrap=__aeabi_d2uiz -Wl,--wrap=__aeabi_d2ulz -Wl,--wrap=__aeabi_dadd -Wl,--wrap=__aeabi_dcmpeq -Wl,--wrap=__aeabi_dcmpge -Wl,--wrap=__aeabi_dcmpgt -Wl,--wrap=__aeabi_dcmple -Wl,--wrap=__aeabi_dcmplt -Wl,--wrap=__aeabi_dcmpun -Wl,--wrap=__aeabi_ddiv -Wl,--wrap=__aeabi_dmul -Wl,--wrap=__aeabi_drsub -Wl,--wrap=__aeabi_dsub -Wl,--wrap=__aeabi_f2d -Wl,--wrap=__aeabi_f2iz -Wl,--wrap=__aeabi_f2lz -Wl,--wrap=__aeabi_f2uiz -Wl,--wrap=__aeabi_f2ulz -Wl,--wrap=__aeabi_fadd -Wl,--wrap=__aeabi_fcmpeq -Wl,--wrap=__aeabi_fcmpge -Wl,--wrap=__aeabi_fcmpgt -Wl,--wrap=__aeabi_fcmple -Wl,--wrap=__aeabi_fcmplt -Wl,--wrap=__aeabi_fcmpun -Wl,--wrap=__aeabi_fdiv -Wl,--wrap=__aeabi_fmul -Wl,--wrap=__aeabi_frsub -Wl,--wrap=__aeabi_fsub -Wl,--wrap=__aeabi_i2d -Wl,--wrap=__aeabi_i2f -Wl,--wrap=__aeabi_idiv -Wl,--wrap=__aeabi_idivmod -Wl,--wrap=__aeabi_l2d -Wl,--wrap=__aeabi_l2f -Wl,--wrap=__aeabi_ldivmod -Wl,--wrap=__aeabi_lmul -Wl,--wrap=__aeabi_memcpy -Wl,--wrap=__aeabi_memcpy4 -Wl,--wrap=__aeabi_memcpy8 -Wl,--wrap=__aeabi_memset -Wl,--wrap=__aeabi_memset4 -Wl,--wrap=__aeabi_memset8 -Wl,--wrap=__aeabi_ui2d -Wl,--wrap=__aeabi_ui2f -Wl,--wrap=__aeabi_uidiv -Wl,--wrap=__aeabi_uidivmod -Wl,--wrap=__aeabi_ul2d -Wl,--wrap=__aeabi_ul2f -Wl,--wrap=__aeabi_uldivmod -Wl,--wrap=asin -Wl,--wrap=asinf -Wl,--wrap=asinh -Wl,--wrap=asinhf -Wl,--wrap=atan -Wl,--wrap=atan2 -Wl,--wrap=atan2f -Wl,--wrap=atanf -Wl,--wrap=atanh -Wl,--wrap=atanhf -Wl,--wrap=calloc -Wl,--wrap=cbrt -Wl,--wrap=cbrtf -Wl,--wrap=ceil -Wl,--wrap=ceilf -Wl,--wrap=__clz -Wl,--wrap=__clzdi2 -Wl,--wrap=__clzl -Wl,--wrap=__clzll -Wl,--wrap=__clzsi2 -Wl,--wrap=copysign -Wl,--wrap=copysignf -Wl,--wrap=cos -Wl,--wrap=cosf -Wl,--wrap=cosh -Wl,--wrap=coshf -Wl,--wrap=__ctzdi2 -Wl,--wrap=__ctzsi2 -Wl,--wrap=drem -Wl,--wrap=dremf -Wl,--wrap=exp -Wl,--wrap=exp10 -Wl,--wrap=exp10f -Wl,--wrap=exp2 -Wl,--wrap=exp2f -Wl,--wrap=expf -Wl,--wrap=expm1 -Wl,--wrap=expm1f -Wl,--wrap=floor -Wl,--wrap=floorf -Wl,--wrap=fma -Wl,--wrap=fmaf -Wl,--wrap=fmod -Wl,--wrap=fmodf -Wl,--wrap=free -Wl,--wrap=hypot -Wl,--wrap=hypotf -Wl,--wrap=ldexp -Wl,--wrap=ldexpf -Wl,--wrap=log -Wl,--wrap=log10 -Wl,--wrap=log10f -Wl,--wrap=log1p -Wl,--wrap=log1pf -Wl,--wrap=log2 -Wl,--wrap=log2f -Wl,--wrap=logf -Wl,--wrap=malloc -Wl,--wrap=memcpy -Wl,--wrap=memset -Wl,--wrap=__popcountdi2 -Wl,--wrap=__popcountsi2 -Wl,--wrap=pow -Wl,--wrap=powf -Wl,--wrap=powint -Wl,--wrap=powintf -Wl,--wrap=remainder -Wl,--wrap=remainderf -Wl,--wrap=remquo -Wl,--wrap=remquof -Wl,--wrap=round -Wl,--wrap=roundf -Wl,--wrap=sin -Wl,--wrap=sincos -Wl,--wrap=sincosf -Wl,--wrap=sinf -Wl,--wrap=sinh -Wl,--wrap=sinhf -Wl,--wrap=sqrt -Wl,--wrap=sqrtf -Wl,--wrap=tan -Wl,--wrap=tanf -Wl,--wrap=tanh -Wl,--wrap=tanhf -Wl,--wrap=trunc -Wl,--wrap=truncf
4646

0 commit comments

Comments
 (0)