Skip to content

Commit df7e48b

Browse files
committed
USB: fix corner case when cdc_acm is in dt and CONFIG_CDC is disabled
1 parent bef2696 commit df7e48b

File tree

5 files changed

+13
-16
lines changed

5 files changed

+13
-16
lines changed

Diff for: cores/arduino/SerialUSB.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ class SerialUSB_ : public ZephyrSerial {
3131
};
3232
} // namespace arduino
3333

34-
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm)
34+
#if (DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm) && CONFIG_USB_CDC_ACM)
3535
extern arduino::SerialUSB_ Serial;
3636
#endif

Diff for: cores/arduino/USB.cpp

+1-11
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,13 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
// Make PluggableUSB link happy
8-
#include "api/PluggableUSB.h"
9-
10-
static uint8_t _epBuffer[1];
11-
void* epBuffer(unsigned int n) {
12-
return &_epBuffer[n];
13-
};
14-
15-
arduino::PluggableUSB_::PluggableUSB_() {}
16-
177
#include <zephyr/devicetree.h>
188
#include <zephyr/drivers/uart.h>
199
#include <zephyr/drivers/uart/cdc_acm.h>
2010
#include <zephyr/usb/usb_device.h>
2111
#include <SerialUSB.h>
2212

23-
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm)
13+
#if (DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm) && CONFIG_USB_CDC_ACM)
2414
const struct device *const usb_dev = DEVICE_DT_GET(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), cdc_acm, 0));
2515

2616
void usb_status_cb(enum usb_dc_status_code cb_status, const uint8_t *param) {

Diff for: cores/arduino/main.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@
1010
#endif
1111

1212
int main(void) {
13-
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm) || DT_NODE_HAS_PROP(DT_PATH(zephyr_user), serials)
13+
#if (DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm) && CONFIG_USB_CDC_ACM)
1414
Serial.begin(115200);
1515
#endif
1616
setup();
1717

1818
for (;;) {
1919
loop();
20+
#if (DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm) && CONFIG_USB_CDC_ACM) || DT_NODE_HAS_PROP(DT_PATH(zephyr_user), serials)
2021
if (arduino::serialEventRun) arduino::serialEventRun();
22+
#endif
2123
}
2224

2325
return 0;

Diff for: cores/arduino/zephyrSerial.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,16 @@ void arduino::ZephyrSerial::flush() {
198198
}
199199
}
200200

201+
#if (DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm))
202+
#define FIRST_UART_INDEX 1
203+
#else
204+
#define FIRST_UART_INDEX 0
205+
#endif
201206

202207
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), serials)
203-
#if !DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm)
208+
#if !(DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm) && CONFIG_USB_CDC_ACM)
204209
// If CDC USB, use that object as Serial (and SerialUSB)
205-
arduino::ZephyrSerial Serial(DEVICE_DT_GET(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), serials, 0)));
210+
arduino::ZephyrSerial Serial(DEVICE_DT_GET(DT_PHANDLE_BY_IDX(DT_PATH(zephyr_user), serials, FIRST_UART_INDEX)));
206211
#endif
207212
#if (DT_PROP_LEN(DT_PATH(zephyr_user), serials) > 1)
208213
#define ARDUINO_SERIAL_DEFINED_0 1

Diff for: cores/arduino/zephyrSerial.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class ZephyrSerial : public HardwareSerial
8181
} // namespace arduino
8282

8383
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), serials)
84-
#if !DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm)
84+
#if !(DT_NODE_HAS_PROP(DT_PATH(zephyr_user), cdc_acm) && CONFIG_USB_CDC_ACM)
8585
// If CDC USB, use that object as Serial (and SerialUSB)
8686
extern arduino::ZephyrSerial Serial;
8787
#endif

0 commit comments

Comments
 (0)