From 87819f653e4269ebb863da5b184cabcac8de107a Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Tue, 12 Aug 2025 11:21:01 -0300 Subject: [PATCH 1/7] feat(usb): allow the MIDI constructor to define a device name This PR will allow the user to modify the MIDI USB Device Name (device descriptor). Fomer API continues to be valid and the default device name is "TinyUSB MIDI". The user can change the device name by passing a string to the constructor, declaring it like this `USBMIDI myMIDI("MyDeviceName"); --- libraries/USB/src/USBMIDI.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/USB/src/USBMIDI.cpp b/libraries/USB/src/USBMIDI.cpp index 8a9571855e1..12b8489e3f8 100644 --- a/libraries/USB/src/USBMIDI.cpp +++ b/libraries/USB/src/USBMIDI.cpp @@ -11,14 +11,14 @@ static bool tinyusb_midi_descriptor_loaded = false; static bool tinyusb_midi_interface_enabled = false; +static String deviceDescriptor(""); extern "C" uint16_t tusb_midi_load_descriptor(uint8_t *dst, uint8_t *itf) { if (tinyusb_midi_descriptor_loaded) { return 0; } tinyusb_midi_descriptor_loaded = true; - - uint8_t str_index = tinyusb_add_string_descriptor("TinyUSB MIDI"); + uint8_t str_index = tinyusb_add_string_descriptor(deviceDescriptor.c_str()); uint8_t ep_in = tinyusb_get_free_in_endpoint(); TU_VERIFY(ep_in != 0); uint8_t ep_out = tinyusb_get_free_out_endpoint(); @@ -32,9 +32,10 @@ extern "C" uint16_t tusb_midi_load_descriptor(uint8_t *dst, uint8_t *itf) { return TUD_MIDI_DESC_LEN; } -USBMIDI::USBMIDI() { +USBMIDI::USBMIDI(String devDescName = "TinyUSB MIDI") { if (!tinyusb_midi_interface_enabled) { tinyusb_midi_interface_enabled = true; + deviceDescriptor = devDescName; tinyusb_enable_interface(USB_INTERFACE_MIDI, TUD_MIDI_DESC_LEN, tusb_midi_load_descriptor); } else { log_e("USBMIDI: Multiple instances of USBMIDI not supported!"); From e8d506cd257aab51e9290bec4154a6cc5e3b7738 Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Tue, 12 Aug 2025 11:28:01 -0300 Subject: [PATCH 2/7] feat(usb): changes the MIDI device descriptor in the example --- libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino b/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino index e3ad1c4e028..a6d0d256abb 100644 --- a/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino +++ b/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino @@ -26,7 +26,9 @@ void loop() {} #include "USB.h" #include "USBMIDI.h" -USBMIDI MIDI; +// Create the MIDI device with specific descriptor +USBMIDI MIDI("ESP MIDI Device"); + #define MIDI_RX 39 #define MIDI_TX 40 From 36ac341273f65d2a9a0d4d6c3d83867dea75e84b Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Tue, 12 Aug 2025 11:29:17 -0300 Subject: [PATCH 3/7] feat(usb): changes the MIDI device descriptor in the example --- libraries/USB/examples/MIDI/MidiController/MidiController.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/USB/examples/MIDI/MidiController/MidiController.ino b/libraries/USB/examples/MIDI/MidiController/MidiController.ino index 2871d3b1a52..1628af840c3 100644 --- a/libraries/USB/examples/MIDI/MidiController/MidiController.ino +++ b/libraries/USB/examples/MIDI/MidiController/MidiController.ino @@ -20,7 +20,8 @@ void loop() {} #include "USB.h" #include "USBMIDI.h" -USBMIDI MIDI; +// Create the MIDI device with specific descriptor +USBMIDI MIDI("ESP MIDI Device"); #define MIDI_NOTE_C4 60 From 74fa5308e0295485dd71c87881c211829caa4c62 Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Tue, 12 Aug 2025 13:10:08 -0300 Subject: [PATCH 4/7] fix(usb): typo in commentary - start CI again --- libraries/USB/examples/MIDI/MidiController/MidiController.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/USB/examples/MIDI/MidiController/MidiController.ino b/libraries/USB/examples/MIDI/MidiController/MidiController.ino index 1628af840c3..9cdd8a805de 100644 --- a/libraries/USB/examples/MIDI/MidiController/MidiController.ino +++ b/libraries/USB/examples/MIDI/MidiController/MidiController.ino @@ -20,7 +20,7 @@ void loop() {} #include "USB.h" #include "USBMIDI.h" -// Create the MIDI device with specific descriptor +// Creates the MIDI device with specific descriptor USBMIDI MIDI("ESP MIDI Device"); #define MIDI_NOTE_C4 60 From 5af16d1496cc0739560333272b3bacd50df1025e Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Tue, 12 Aug 2025 13:18:17 -0300 Subject: [PATCH 5/7] feat(usb): allow the MIDI constructor to define a device name --- libraries/USB/src/USBMIDI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/USB/src/USBMIDI.h b/libraries/USB/src/USBMIDI.h index 91a1bfa4be1..a1071ce5188 100644 --- a/libraries/USB/src/USBMIDI.h +++ b/libraries/USB/src/USBMIDI.h @@ -19,7 +19,7 @@ typedef struct { class USBMIDI { public: - USBMIDI(void); + USBMIDI(String devDescName = "TinyUSB MIDI"); void begin(void); void end(void); From 8bb446bc662852f9b5140f7d0a130570b29fc3b9 Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Tue, 12 Aug 2025 13:19:09 -0300 Subject: [PATCH 6/7] fix(usb): correct constructor declaration --- libraries/USB/src/USBMIDI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/USB/src/USBMIDI.cpp b/libraries/USB/src/USBMIDI.cpp index 12b8489e3f8..407638f2d7d 100644 --- a/libraries/USB/src/USBMIDI.cpp +++ b/libraries/USB/src/USBMIDI.cpp @@ -32,7 +32,7 @@ extern "C" uint16_t tusb_midi_load_descriptor(uint8_t *dst, uint8_t *itf) { return TUD_MIDI_DESC_LEN; } -USBMIDI::USBMIDI(String devDescName = "TinyUSB MIDI") { +USBMIDI::USBMIDI(String devDescName) { if (!tinyusb_midi_interface_enabled) { tinyusb_midi_interface_enabled = true; deviceDescriptor = devDescName; From fdd6ccd46eae4d644b778f532435339e48a10a24 Mon Sep 17 00:00:00 2001 From: Sugar Glider Date: Tue, 12 Aug 2025 13:20:45 -0300 Subject: [PATCH 7/7] fix(usb): typo in commentary - start CI again --- libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino b/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino index a6d0d256abb..0abc2aad2d1 100644 --- a/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino +++ b/libraries/USB/examples/MIDI/MidiInterface/MidiInterface.ino @@ -26,7 +26,7 @@ void loop() {} #include "USB.h" #include "USBMIDI.h" -// Create the MIDI device with specific descriptor +// Creates the MIDI device with specific descriptor USBMIDI MIDI("ESP MIDI Device");