summaryrefslogtreecommitdiffstatshomepage
path: root/shared
diff options
context:
space:
mode:
authorAngus Gratton <angus@redyak.com.au>2023-11-08 10:34:57 +1100
committerDamien George <damien@micropython.org>2023-11-16 14:59:48 +1100
commitf567a9255a2f801c8e47d8a1468f1c0415971fe4 (patch)
tree5193b8c8781f8237d80fbc1c70ec14ce3c13c9c7 /shared
parent5e3f0e7f8580d854eb451adbf164a9ab97386d4c (diff)
downloadmicropython-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.c10
-rw-r--r--shared/tinyusb/mp_usbd.h5
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