Skip to content

Commit

Permalink
shared/tinyusb: Add a helper for hex string conversion.
Browse files Browse the repository at this point in the history
Change the rp2 and renesas-ra ports to use the helper function.

Saves copy-pasta, at the small cost of one more function call in the
firmware (if not using LTO).

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
  • Loading branch information
projectgus authored and dpgeorge committed Nov 16, 2023
1 parent 5e3f0e7 commit f567a92
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 18 deletions.
11 changes: 2 additions & 9 deletions ports/renesas-ra/usbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,8 @@

void mp_usbd_port_get_serial_number(char *serial_buf) {
const bsp_unique_id_t *id = R_BSP_UniqueIdGet();
// convert to hex
int hexlen = sizeof(id->unique_id_bytes) * 2;
MP_STATIC_ASSERT(hexlen <= MICROPY_HW_USB_DESC_STR_MAX);
for (int i = 0; i < hexlen; i += 2) {
static const char *hexdig = "0123456789abcdef";
serial_buf[i] = hexdig[id->unique_id_bytes[i / 2] >> 4];
serial_buf[i + 1] = hexdig[id->unique_id_bytes[i / 2] & 0x0f];
}
serial_buf[hexlen] = 0;
MP_STATIC_ASSERT(sizeof(id->unique_id_bytes) * 2 <= MICROPY_HW_USB_DESC_STR_MAX);
mp_usbd_hex_str(serial_buf, id->unique_id_bytes, sizeof(id->unique_id_bytes));
}

#endif
11 changes: 2 additions & 9 deletions ports/rp2/usbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,8 @@
void mp_usbd_port_get_serial_number(char *serial_buf) {
pico_unique_board_id_t id;
pico_get_unique_board_id(&id);
// convert to hex
int hexlen = sizeof(id.id) * 2;
MP_STATIC_ASSERT(hexlen <= MICROPY_HW_USB_DESC_STR_MAX);
for (int i = 0; i < hexlen; i += 2) {
static const char *hexdig = "0123456789abcdef";
serial_buf[i] = hexdig[id.id[i / 2] >> 4];
serial_buf[i + 1] = hexdig[id.id[i / 2] & 0x0f];
}
serial_buf[hexlen] = 0;
MP_STATIC_ASSERT(sizeof(id.id) * 2 <= MICROPY_HW_USB_DESC_STR_MAX);
mp_usbd_hex_str(serial_buf, id.id, sizeof(id.id));
}

#endif
10 changes: 10 additions & 0 deletions shared/tinyusb/mp_usbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,14 @@ static void mp_usbd_task_callback(mp_sched_node_t *node) {
mp_usbd_task();
}

void mp_usbd_hex_str(char *out_str, const uint8_t *bytes, size_t bytes_len) {
size_t hex_len = bytes_len * 2;
for (int i = 0; i < hex_len; i += 2) {
static const char *hexdig = "0123456789abcdef";
out_str[i] = hexdig[bytes[i / 2] >> 4];
out_str[i + 1] = hexdig[bytes[i / 2] & 0x0f];
}
out_str[hex_len] = 0;
}

#endif
5 changes: 5 additions & 0 deletions shared/tinyusb/mp_usbd.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,9 @@ void mp_usbd_task(void);
// Can write a string up to MICROPY_HW_USB_DESC_STR_MAX characters long, plus terminating byte.
extern void mp_usbd_port_get_serial_number(char *buf);

// Most ports need to write a hexadecimal serial number from a byte array, this
// is a helper function for this. out_str must be long enough to hold a string of total
// length (2 * bytes_len + 1) (including NUL terminator).
void mp_usbd_hex_str(char *out_str, const uint8_t *bytes, size_t bytes_len);

#endif // MICROPY_INCLUDED_SHARED_TINYUSB_USBD_H

0 comments on commit f567a92

Please sign in to comment.