Skip to content

Commit 9dd9bde

Browse files
authored
Serial as a #define (#8798)
* Serial as a #define * Typo * fixes USBCDC declaration * Fixes Examples * simplifies examples * Adds USB Serial Events * adds error msg when ESP32 is used with USB
1 parent e8f8228 commit 9dd9bde

File tree

23 files changed

+194
-189
lines changed

23 files changed

+194
-189
lines changed

Diff for: cores/esp32/HWCDC.cpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -436,12 +436,9 @@ void HWCDC::setDebugOutput(bool en)
436436
}
437437
}
438438

439-
#if ARDUINO_USB_MODE
440-
#if ARDUINO_USB_CDC_ON_BOOT//Serial used for USB CDC
441-
HWCDC Serial;
442-
#else
443-
HWCDC USBSerial;
444-
#endif
439+
#if ARDUINO_USB_MODE // Hardware JTAG CDC selected
440+
// USBSerial is always available to be used
441+
HWCDC HWCDCSerial;
445442
#endif
446443

447444
#endif /* SOC_USB_SERIAL_JTAG_SUPPORTED */

Diff for: cores/esp32/HWCDC.h

+6-7
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,12 @@ class HWCDC: public Stream
102102
uint32_t baudRate(){return 115200;}
103103

104104
};
105-
106-
#if ARDUINO_USB_MODE
107-
#if ARDUINO_USB_CDC_ON_BOOT//Serial used for USB CDC
108-
extern HWCDC Serial;
109-
#else
110-
extern HWCDC USBSerial;
105+
#if ARDUINO_USB_MODE // Hardware JTAG CDC selected
106+
#ifndef HWCDC_SERIAL_IS_DEFINED
107+
#define HWCDC_SERIAL_IS_DEFINED 1
111108
#endif
109+
// HWCDCSerial is always available to be used
110+
extern HWCDC HWCDCSerial;
112111
#endif
113112

114-
#endif /* CONFIG_IDF_TARGET_ESP32C3 */
113+
#endif /* SOC_USB_SERIAL_JTAG_SUPPORTED */

Diff for: cores/esp32/HardwareSerial.cpp

+19-8
Original file line numberDiff line numberDiff line change
@@ -113,25 +113,36 @@ void serialEvent2(void) {}
113113
#endif /* SOC_UART_NUM > 2 */
114114

115115
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)
116-
#if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC
116+
// There is always Seria0 for UART0
117117
HardwareSerial Serial0(0);
118-
#else
119-
HardwareSerial Serial(0);
120-
#endif
121118
#if SOC_UART_NUM > 1
122119
HardwareSerial Serial1(1);
123120
#endif
124121
#if SOC_UART_NUM > 2
125122
HardwareSerial Serial2(2);
126123
#endif
127124

125+
#if HWCDC_SERIAL_IS_DEFINED == 1 // Hardware JTAG CDC Event
126+
extern void HWCDCSerialEvent (void)__attribute__((weak));
127+
void HWCDCSerialEvent(void) {}
128+
#endif
129+
130+
#if USB_SERIAL_IS_DEFINED == 1 // Native USB CDC Event
131+
// Used by Hardware Serial for USB CDC events
132+
extern void USBSerialEvent (void)__attribute__((weak));
133+
void USBSerialEvent(void) {}
134+
#endif
135+
128136
void serialEventRun(void)
129137
{
130-
#if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC
138+
#if HWCDC_SERIAL_IS_DEFINED == 1 // Hardware JTAG CDC Event
139+
if(HWCDCSerial.available()) HWCDCSerialEvent();
140+
#endif
141+
#if USB_SERIAL_IS_DEFINED == 1 // Native USB CDC Event
142+
if(USBSerial.available()) USBSerialEvent();
143+
#endif
144+
// UART0 is default serialEvent()
131145
if(Serial0.available()) serialEvent();
132-
#else
133-
if(Serial.available()) serialEvent();
134-
#endif
135146
#if SOC_UART_NUM > 1
136147
if(Serial1.available()) serialEvent1();
137148
#endif

Diff for: cores/esp32/HardwareSerial.h

+15-9
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#include "esp32-hal.h"
5252
#include "soc/soc_caps.h"
5353
#include "HWCDC.h"
54+
#include "USBCDC.h"
5455

5556
#include "freertos/FreeRTOS.h"
5657
#include "freertos/task.h"
@@ -240,21 +241,26 @@ extern void serialEventRun(void) __attribute__((weak));
240241
#ifndef ARDUINO_USB_CDC_ON_BOOT
241242
#define ARDUINO_USB_CDC_ON_BOOT 0
242243
#endif
243-
#if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC
244-
#if !ARDUINO_USB_MODE
245-
#include "USB.h"
246-
#include "USBCDC.h"
247-
#endif
244+
#if ARDUINO_USB_CDC_ON_BOOT //Serial used from Native_USB_CDC | HW_CDC_JTAG
245+
#if ARDUINO_USB_MODE // Hardware CDC mode
246+
// Arduino Serial is the HW JTAG CDC device
247+
#define Serial HWCDCSerial
248+
#else // !ARDUINO_USB_MODE -- Native USB Mode
249+
// Arduino Serial is the Native USB CDC device
250+
#define Serial USBSerial
251+
#endif // ARDUINO_USB_MODE
252+
#else // !ARDUINO_USB_CDC_ON_BOOT -- Serial is used from UART0
253+
// if not using CDC on Boot, Arduino Serial is the UART0 device
254+
#define Serial Serial0
255+
#endif // ARDUINO_USB_CDC_ON_BOOT
256+
// There is always Seria0 for UART0
248257
extern HardwareSerial Serial0;
249-
#else
250-
extern HardwareSerial Serial;
251-
#endif
252258
#if SOC_UART_NUM > 1
253259
extern HardwareSerial Serial1;
254260
#endif
255261
#if SOC_UART_NUM > 2
256262
extern HardwareSerial Serial2;
257263
#endif
258-
#endif
264+
#endif //!defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)
259265

260266
#endif // HardwareSerial_h

Diff for: cores/esp32/USBCDC.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -455,8 +455,9 @@ USBCDC::operator bool() const
455455
return connected;
456456
}
457457

458-
#if ARDUINO_USB_CDC_ON_BOOT && !ARDUINO_USB_MODE //Serial used for USB CDC
459-
USBCDC Serial(0);
458+
#if !ARDUINO_USB_MODE // Native USB CDC selected
459+
// USBSerial is always available to be used
460+
USBCDC USBSerial(0);
460461
#endif
461462

462463
#endif /* CONFIG_TINYUSB_CDC_ENABLED */

Diff for: cores/esp32/USBCDC.h

+7-2
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,14 @@ class USBCDC: public Stream
141141

142142
};
143143

144-
#if ARDUINO_USB_CDC_ON_BOOT && !ARDUINO_USB_MODE //Serial used for USB CDC
145-
extern USBCDC Serial;
144+
#if !ARDUINO_USB_MODE // Native USB CDC selected
145+
#ifndef USB_SERIAL_IS_DEFINED
146+
#define USB_SERIAL_IS_DEFINED 1
147+
#endif
148+
// USBSerial is always available to be used
149+
extern USBCDC USBSerial;
146150
#endif
147151

152+
148153
#endif /* CONFIG_TINYUSB_CDC_ENABLED */
149154
#endif /* SOC_USB_OTG_SUPPORTED */

Diff for: libraries/ESP32/examples/Serial/Serial_STD_Func_OnReceive/Serial_STD_Func_OnReceive.ino

-10
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,6 @@
1616
// This makes the code transparent to what SoC is used.
1717
#include "soc/soc_caps.h"
1818

19-
// In case that the target has USB CDC and it has being selected to be enable on boot,
20-
// the console output will into USB (Serial).
21-
// Otherwise the output will be sent to UART0 (Serial) and we have to redefine Serial0
22-
#ifndef ARDUINO_USB_CDC_ON_BOOT
23-
#define ARDUINO_USB_CDC_ON_BOOT 0
24-
#endif
25-
#if ARDUINO_USB_CDC_ON_BOOT == 0 // No USB CDC
26-
#define Serial0 Serial // redefine the symbol Serial0 to the default Arduino
27-
#endif
28-
2919
// This example shall use UART1 or UART2 for testing and UART0 for console messages
3020
// If UART0 is used for testing, it is necessary to manually send data to it, using the Serial Monitor/Terminal
3121
// In case that USB CDC is available, it may be used as console for messages.

Diff for: libraries/USB/examples/CompositeDevice/CompositeDevice.ino

+40-45
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
#if ARDUINO_USB_MODE
1+
#ifndef ARDUINO_USB_MODE
2+
#error This ESP32 SoC has no Native USB interface
3+
#elif ARDUINO_USB_MODE == 1
24
#warning This sketch should be used when USB is in OTG mode
35
void setup(){}
46
void loop(){}
@@ -15,13 +17,6 @@ void loop(){}
1517
#if !ARDUINO_USB_MSC_ON_BOOT
1618
FirmwareMSC MSC_Update;
1719
#endif
18-
#if ARDUINO_USB_CDC_ON_BOOT
19-
#define HWSerial Serial0
20-
#define USBSerial Serial
21-
#else
22-
#define HWSerial Serial
23-
USBCDC USBSerial;
24-
#endif
2520

2621
USBHID HID;
2722
USBHIDKeyboard Keyboard;
@@ -39,16 +34,16 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
3934
arduino_usb_event_data_t * data = (arduino_usb_event_data_t*)event_data;
4035
switch (event_id){
4136
case ARDUINO_USB_STARTED_EVENT:
42-
HWSerial.println("USB PLUGGED");
37+
Serial.println("USB PLUGGED");
4338
break;
4439
case ARDUINO_USB_STOPPED_EVENT:
45-
HWSerial.println("USB UNPLUGGED");
40+
Serial.println("USB UNPLUGGED");
4641
break;
4742
case ARDUINO_USB_SUSPEND_EVENT:
48-
HWSerial.printf("USB SUSPENDED: remote_wakeup_en: %u\n", data->suspend.remote_wakeup_en);
43+
Serial.printf("USB SUSPENDED: remote_wakeup_en: %u\n", data->suspend.remote_wakeup_en);
4944
break;
5045
case ARDUINO_USB_RESUME_EVENT:
51-
HWSerial.println("USB RESUMED");
46+
Serial.println("USB RESUMED");
5247
break;
5348

5449
default:
@@ -58,28 +53,28 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
5853
arduino_usb_cdc_event_data_t * data = (arduino_usb_cdc_event_data_t*)event_data;
5954
switch (event_id){
6055
case ARDUINO_USB_CDC_CONNECTED_EVENT:
61-
HWSerial.println("CDC CONNECTED");
56+
Serial.println("CDC CONNECTED");
6257
break;
6358
case ARDUINO_USB_CDC_DISCONNECTED_EVENT:
64-
HWSerial.println("CDC DISCONNECTED");
59+
Serial.println("CDC DISCONNECTED");
6560
break;
6661
case ARDUINO_USB_CDC_LINE_STATE_EVENT:
67-
HWSerial.printf("CDC LINE STATE: dtr: %u, rts: %u\n", data->line_state.dtr, data->line_state.rts);
62+
Serial.printf("CDC LINE STATE: dtr: %u, rts: %u\n", data->line_state.dtr, data->line_state.rts);
6863
break;
6964
case ARDUINO_USB_CDC_LINE_CODING_EVENT:
70-
HWSerial.printf("CDC LINE CODING: bit_rate: %lu, data_bits: %u, stop_bits: %u, parity: %u\n", data->line_coding.bit_rate, data->line_coding.data_bits, data->line_coding.stop_bits, data->line_coding.parity);
65+
Serial.printf("CDC LINE CODING: bit_rate: %lu, data_bits: %u, stop_bits: %u, parity: %u\n", data->line_coding.bit_rate, data->line_coding.data_bits, data->line_coding.stop_bits, data->line_coding.parity);
7166
break;
7267
case ARDUINO_USB_CDC_RX_EVENT:
73-
HWSerial.printf("CDC RX [%u]:", data->rx.len);
68+
Serial.printf("CDC RX [%u]:", data->rx.len);
7469
{
7570
uint8_t buf[data->rx.len];
7671
size_t len = USBSerial.read(buf, data->rx.len);
77-
HWSerial.write(buf, len);
72+
Serial.write(buf, len);
7873
}
79-
HWSerial.println();
74+
Serial.println();
8075
break;
8176
case ARDUINO_USB_CDC_RX_OVERFLOW_EVENT:
82-
HWSerial.printf("CDC RX Overflow of %d bytes", data->rx_overflow.dropped_bytes);
77+
Serial.printf("CDC RX Overflow of %d bytes", data->rx_overflow.dropped_bytes);
8378
break;
8479

8580
default:
@@ -89,20 +84,20 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
8984
arduino_firmware_msc_event_data_t * data = (arduino_firmware_msc_event_data_t*)event_data;
9085
switch (event_id){
9186
case ARDUINO_FIRMWARE_MSC_START_EVENT:
92-
HWSerial.println("MSC Update Start");
87+
Serial.println("MSC Update Start");
9388
break;
9489
case ARDUINO_FIRMWARE_MSC_WRITE_EVENT:
95-
//HWSerial.printf("MSC Update Write %u bytes at offset %u\n", data->write.size, data->write.offset);
96-
HWSerial.print(".");
90+
//Serial.printf("MSC Update Write %u bytes at offset %u\n", data->write.size, data->write.offset);
91+
Serial.print(".");
9792
break;
9893
case ARDUINO_FIRMWARE_MSC_END_EVENT:
99-
HWSerial.printf("\nMSC Update End: %u bytes\n", data->end.size);
94+
Serial.printf("\nMSC Update End: %u bytes\n", data->end.size);
10095
break;
10196
case ARDUINO_FIRMWARE_MSC_ERROR_EVENT:
102-
HWSerial.printf("MSC Update ERROR! Progress: %u bytes\n", data->error.size);
97+
Serial.printf("MSC Update ERROR! Progress: %u bytes\n", data->error.size);
10398
break;
10499
case ARDUINO_FIRMWARE_MSC_POWER_EVENT:
105-
HWSerial.printf("MSC Update Power: power: %u, start: %u, eject: %u\n", data->power.power_condition, data->power.start, data->power.load_eject);
100+
Serial.printf("MSC Update Power: power: %u, start: %u, eject: %u\n", data->power.power_condition, data->power.start, data->power.load_eject);
106101
break;
107102

108103
default:
@@ -112,10 +107,10 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
112107
arduino_usb_hid_event_data_t * data = (arduino_usb_hid_event_data_t*)event_data;
113108
switch (event_id){
114109
case ARDUINO_USB_HID_SET_PROTOCOL_EVENT:
115-
HWSerial.printf("HID SET PROTOCOL: %s\n", data->set_protocol.protocol?"REPORT":"BOOT");
110+
Serial.printf("HID SET PROTOCOL: %s\n", data->set_protocol.protocol?"REPORT":"BOOT");
116111
break;
117112
case ARDUINO_USB_HID_SET_IDLE_EVENT:
118-
HWSerial.printf("HID SET IDLE: %u\n", data->set_idle.idle_rate);
113+
Serial.printf("HID SET IDLE: %u\n", data->set_idle.idle_rate);
119114
break;
120115

121116
default:
@@ -125,7 +120,7 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
125120
arduino_usb_hid_keyboard_event_data_t * data = (arduino_usb_hid_keyboard_event_data_t*)event_data;
126121
switch (event_id){
127122
case ARDUINO_USB_HID_KEYBOARD_LED_EVENT:
128-
HWSerial.printf("HID KEYBOARD LED: NumLock:%u, CapsLock:%u, ScrollLock:%u\n", data->numlock, data->capslock, data->scrolllock);
123+
Serial.printf("HID KEYBOARD LED: NumLock:%u, CapsLock:%u, ScrollLock:%u\n", data->numlock, data->capslock, data->scrolllock);
129124
break;
130125

131126
default:
@@ -135,25 +130,25 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
135130
arduino_usb_hid_vendor_event_data_t * data = (arduino_usb_hid_vendor_event_data_t*)event_data;
136131
switch (event_id){
137132
case ARDUINO_USB_HID_VENDOR_GET_FEATURE_EVENT:
138-
HWSerial.printf("HID VENDOR GET FEATURE: len:%u\n", data->len);
133+
Serial.printf("HID VENDOR GET FEATURE: len:%u\n", data->len);
139134
for(uint16_t i=0; i<data->len; i++){
140-
HWSerial.write(data->buffer[i]?data->buffer[i]:'.');
135+
Serial.write(data->buffer[i]?data->buffer[i]:'.');
141136
}
142-
HWSerial.println();
137+
Serial.println();
143138
break;
144139
case ARDUINO_USB_HID_VENDOR_SET_FEATURE_EVENT:
145-
HWSerial.printf("HID VENDOR SET FEATURE: len:%u\n", data->len);
140+
Serial.printf("HID VENDOR SET FEATURE: len:%u\n", data->len);
146141
for(uint16_t i=0; i<data->len; i++){
147-
HWSerial.write(data->buffer[i]?data->buffer[i]:'.');
142+
Serial.write(data->buffer[i]?data->buffer[i]:'.');
148143
}
149-
HWSerial.println();
144+
Serial.println();
150145
break;
151146
case ARDUINO_USB_HID_VENDOR_OUTPUT_EVENT:
152-
HWSerial.printf("HID VENDOR OUTPUT: len:%u\n", data->len);
147+
Serial.printf("HID VENDOR OUTPUT: len:%u\n", data->len);
153148
for(uint16_t i=0; i<data->len; i++){
154-
HWSerial.write(Vendor.read());
149+
Serial.write(Vendor.read());
155150
}
156-
HWSerial.println();
151+
Serial.println();
157152
break;
158153

159154
default:
@@ -163,8 +158,8 @@ static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t eve
163158
}
164159

165160
void setup() {
166-
HWSerial.begin(115200);
167-
HWSerial.setDebugOutput(true);
161+
Serial.begin(115200);
162+
Serial.setDebugOutput(true);
168163

169164
pinMode(buttonPin, INPUT_PULLUP);
170165

@@ -191,7 +186,7 @@ void loop() {
191186
if (HID.ready() && buttonState != previousButtonState) {
192187
previousButtonState = buttonState;
193188
if (buttonState == LOW) {
194-
HWSerial.println("Button Pressed");
189+
if (Serial != USBSerial) Serial.println("Button Pressed");
195190
USBSerial.println("Button Pressed");
196191
Vendor.println("Button Pressed");
197192
Mouse.move(10,10);
@@ -206,15 +201,15 @@ void loop() {
206201
//SystemControl.release();
207202
Vendor.println("Button Released");
208203
USBSerial.println("Button Released");
209-
HWSerial.println("Button Released");
204+
if (Serial != USBSerial) Serial.println("Button Released");
210205
}
211206
delay(100);
212207
}
213208

214-
while(HWSerial.available()){
215-
size_t l = HWSerial.available();
209+
while(Serial.available()){
210+
size_t l = Serial.available();
216211
uint8_t b[l];
217-
l = HWSerial.read(b, l);
212+
l = Serial.read(b, l);
218213
USBSerial.write(b, l);
219214
if(HID.ready()){
220215
Vendor.write(b,l);

Diff for: libraries/USB/examples/ConsumerControl/ConsumerControl.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
#if ARDUINO_USB_MODE
1+
#ifndef ARDUINO_USB_MODE
2+
#error This ESP32 SoC has no Native USB interface
3+
#elif ARDUINO_USB_MODE == 1
24
#warning This sketch should be used when USB is in OTG mode
35
void setup(){}
46
void loop(){}

Diff for: libraries/USB/examples/CustomHIDDevice/CustomHIDDevice.ino

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
#if ARDUINO_USB_MODE
2-
#warning This sketch should be used when USB is in OTG mode
1+
#ifndef ARDUINO_USB_MODE
2+
#error This ESP32 SoC has no Native USB interface
3+
#elif ARDUINO_USB_MODE == 1
4+
#warning This sketch should be used when USB is in OTG mode
35
void setup(){}
46
void loop(){}
57
#else

0 commit comments

Comments
 (0)