diff options
author | Angus Gratton <angus@redyak.com.au> | 2023-11-08 10:34:57 +1100 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2023-11-16 14:59:48 +1100 |
commit | f567a9255a2f801c8e47d8a1468f1c0415971fe4 (patch) | |
tree | 5193b8c8781f8237d80fbc1c70ec14ce3c13c9c7 /shared | |
parent | 5e3f0e7f8580d854eb451adbf164a9ab97386d4c (diff) | |
download | micropython-f567a9255a2f801c8e47d8a1468f1c0415971fe4.tar.gz micropython-f567a9255a2f801c8e47d8a1468f1c0415971fe4.zip |
shared/tinyusb: Add a helper for hex string conversion.
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>
Diffstat (limited to 'shared')
-rw-r--r-- | shared/tinyusb/mp_usbd.c | 10 | ||||
-rw-r--r-- | shared/tinyusb/mp_usbd.h | 5 |
2 files changed, 15 insertions, 0 deletions
diff --git a/shared/tinyusb/mp_usbd.c b/shared/tinyusb/mp_usbd.c index 55af3d4fb4..74b3f07492 100644 --- a/shared/tinyusb/mp_usbd.c +++ b/shared/tinyusb/mp_usbd.c @@ -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 diff --git a/shared/tinyusb/mp_usbd.h b/shared/tinyusb/mp_usbd.h index 340637c95f..83a8f8617c 100644 --- a/shared/tinyusb/mp_usbd.h +++ b/shared/tinyusb/mp_usbd.h @@ -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 |