diff --git a/CI/build/conf/cores_config.json b/CI/build/conf/cores_config.json index c211c47453..0ffa88f468 100644 --- a/CI/build/conf/cores_config.json +++ b/CI/build/conf/cores_config.json @@ -97,7 +97,7 @@ "DISCO_L072CZ_LRWAN1", "DISCO_L475VG_IOT" ], - "options": "usb=HIDFS" + "options": "usb=HID" }, { "pattern": "X_NUCLEO_IDB05A1_HelloWorld.ino", diff --git a/boards.txt b/boards.txt index 7062f7397a..8758114cbd 100644 --- a/boards.txt +++ b/boards.txt @@ -2,8 +2,9 @@ menu.pnum=Board part number -menu.xserial=Serial interface -menu.usb=USB interface (if available) +menu.xserial=U(S)ART support +menu.usb=USB support (if available) +menu.xusb=USB speed (if available) menu.opt=Optimize menu.rtlib=C Runtime Library @@ -578,7 +579,7 @@ GenF1.menu.pnum.MAPLEMINI_F103CB.build.product_line=STM32F103xB GenF1.menu.pnum.MAPLEMINI_F103CB.build.variant=MAPLEMINI_F103CB # HY-TinySTM103TB board -# Support: +# Support: GenF1.menu.pnum.HY_TinySTM103TB=HY-TinySTM103TB GenF1.menu.pnum.HY_TinySTM103TB.upload.maximum_size=131072 GenF1.menu.pnum.HY_TinySTM103TB.upload.maximum_data_size=20480 @@ -841,128 +842,149 @@ RAK.menu.upload_method.STLink.upload.tool=stlink_upload ################################################################################ # Serialx activation -Nucleo_144.menu.xserial.generic=Enabled with generic Serial -Nucleo_144.menu.xserial.none=Enabled without generic Serial +Nucleo_144.menu.xserial.generic=Enabled (generic 'Serial') +Nucleo_144.menu.xserial.none=Enabled (no generic 'Serial') Nucleo_144.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -Nucleo_144.menu.xserial.disabled=Disabled (No Serial) +Nucleo_144.menu.xserial.disabled=Disabled (No Serial support) Nucleo_144.menu.xserial.disabled.build.xSerial= -Nucleo_64.menu.xserial.generic=Enabled with generic Serial -Nucleo_64.menu.xserial.none=Enabled without generic Serial +Nucleo_64.menu.xserial.generic=Enabled (generic 'Serial') +Nucleo_64.menu.xserial.none=Enabled (no generic 'Serial') Nucleo_64.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -Nucleo_64.menu.xserial.disabled=Disabled (No Serial) +Nucleo_64.menu.xserial.disabled=Disabled (No Serial support) Nucleo_64.menu.xserial.disabled.build.xSerial= -Nucleo_32.menu.xserial.generic=Enabled with generic Serial -Nucleo_32.menu.xserial.none=Enabled without generic Serial +Nucleo_32.menu.xserial.generic=Enabled (generic 'Serial') +Nucleo_32.menu.xserial.none=Enabled (no generic 'Serial') Nucleo_32.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -Nucleo_32.menu.xserial.disabled=Disabled (No Serial) +Nucleo_32.menu.xserial.disabled=Disabled (No Serial support) Nucleo_32.menu.xserial.disabled.build.xSerial= -Disco.menu.xserial.generic=Enabled with generic Serial -Disco.menu.xserial.none=Enabled without generic Serial +Disco.menu.xserial.generic=Enabled (generic 'Serial') +Disco.menu.xserial.none=Enabled (no generic 'Serial') Disco.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -Disco.menu.xserial.disabled=Disabled (No Serial) +Disco.menu.xserial.disabled=Disabled (no Serial support) Disco.menu.xserial.disabled.build.xSerial= -GenF0.menu.xserial.generic=Enabled with generic Serial -GenF0.menu.xserial.none=Enabled without generic Serial +GenF0.menu.xserial.generic=Enabled (generic 'Serial') +GenF0.menu.xserial.none=Enabled (no generic 'Serial') GenF0.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -GenF0.menu.xserial.disabled=Disabled (No Serial) +GenF0.menu.xserial.disabled=Disabled (no Serial support) GenF0.menu.xserial.disabled.build.xSerial= -GenF1.menu.xserial.generic=Enabled with generic Serial -GenF1.menu.xserial.none=Enabled without generic Serial +GenF1.menu.xserial.generic=Enabled (generic 'Serial') +GenF1.menu.xserial.none=Enabled (no generic 'Serial') GenF1.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -GenF1.menu.xserial.disabled=Disabled (No Serial) +GenF1.menu.xserial.disabled=Disabled (no Serial support) GenF1.menu.xserial.disabled.build.xSerial= -GenF4.menu.xserial.generic=Enabled with generic Serial -GenF4.menu.xserial.none=Enabled without generic Serial +GenF4.menu.xserial.generic=Enabled (generic 'Serial') +GenF4.menu.xserial.none=Enabled (no generic 'Serial') GenF4.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -GenF4.menu.xserial.disabled=Disabled (No Serial) +GenF4.menu.xserial.disabled=Disabled (no Serial support) GenF4.menu.xserial.disabled.build.xSerial= -RAK.menu.xserial.generic=Enabled with generic Serial -RAK.menu.xserial.none=Enabled without generic Serial +RAK.menu.xserial.generic=Enabled (generic 'Serial') +RAK.menu.xserial.none=Enabled (no generic 'Serial') RAK.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -RAK.menu.xserial.disabled=Disabled (No Serial) +RAK.menu.xserial.disabled=Disabled (no Serial support) RAK.menu.xserial.disabled.build.xSerial= -3dprinter.menu.xserial.generic=Enabled with generic Serial -3dprinter.menu.xserial.none=Enabled without generic Serial +3dprinter.menu.xserial.generic=Enabled (generic 'Serial') +3dprinter.menu.xserial.none=Enabled (no generic 'Serial') 3dprinter.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE -3dprinter.menu.xserial.disabled=Disabled (No Serial) +3dprinter.menu.xserial.disabled=Disabled (no Serial support) 3dprinter.menu.xserial.disabled.build.xSerial= # USB connectivity Nucleo_144.menu.usb.none=None -Nucleo_144.menu.usb.none=None -Nucleo_144.menu.usb.HIDFS=HID keyboard and mouse support Full Speed -Nucleo_144.menu.usb.HIDFS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -Nucleo_144.menu.usb.HIDHS=HID keyboard and mouse support High Speed -Nucleo_144.menu.usb.HIDHS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -DUSE_USB_HS -Nucleo_144.menu.usb.CDCFS=CDC Full Speed -Nucleo_144.menu.usb.CDCFS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -Nucleo_144.menu.usb.CDCHS=CDC High Speed -Nucleo_144.menu.usb.CDCHS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_HS +Nucleo_144.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART) +Nucleo_144.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC +Nucleo_144.menu.usb.CDC=CDC (no generic 'Serial') +Nucleo_144.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB +Nucleo_144.menu.usb.HID=HID (keyboard and mouse) +Nucleo_144.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE +Nucleo_144.menu.xusb.FS=Low/Full Speed +Nucleo_144.menu.xusb.HS=High Speed +Nucleo_144.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS +Nucleo_144.menu.xusb.HSFS=High Speed in Full Speed mode +Nucleo_144.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS Nucleo_64.menu.usb.none=None -Nucleo_64.menu.usb.none=None -Nucleo_64.menu.usb.HIDFS=HID keyboard and mouse support Full Speed -Nucleo_64.menu.usb.HIDFS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -Nucleo_64.menu.usb.HIDHS=HID keyboard and mouse support High Speed -Nucleo_64.menu.usb.HIDHS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -DUSE_USB_HS -Nucleo_64.menu.usb.CDCFS=CDC Full Speed -Nucleo_64.menu.usb.CDCFS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -Nucleo_64.menu.usb.CDCHS=CDC High Speed -Nucleo_64.menu.usb.CDCHS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_HS +Nucleo_64.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART) +Nucleo_64.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC +Nucleo_64.menu.usb.CDC=CDC (no generic 'Serial') +Nucleo_64.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB +Nucleo_64.menu.usb.HID=HID (keyboard and mouse) +Nucleo_64.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE +Nucleo_64.menu.xusb.FS=Low/Full Speed +Nucleo_64.menu.xusb.HS=High Speed +Nucleo_64.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS +Nucleo_64.menu.xusb.HSFS=High Speed in Full Speed mode +Nucleo_64.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS Nucleo_32.menu.usb.none=None -Nucleo_32.menu.usb.HIDFS=HID keyboard and mouse support Full Speed -Nucleo_32.menu.usb.HIDFS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -Nucleo_32.menu.usb.HIDHS=HID keyboard and mouse support High Speed -Nucleo_32.menu.usb.HIDHS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -DUSE_USB_HS -Nucleo_32.menu.usb.CDCFS=CDC Full Speed -Nucleo_32.menu.usb.CDCFS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -Nucleo_32.menu.usb.CDCHS=CDC High Speed -Nucleo_32.menu.usb.CDCHS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_HS +Nucleo_32.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART) +Nucleo_32.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC +Nucleo_32.menu.usb.CDC=CDC (no generic 'Serial') +Nucleo_32.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB +Nucleo_32.menu.usb.HID=HID (keyboard and mouse) +Nucleo_32.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE +Nucleo_32.menu.xusb.FS=Low/Full Speed +Nucleo_32.menu.xusb.HS=High Speed +Nucleo_32.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS +Nucleo_32.menu.xusb.HSFS=High Speed in Full Speed mode +Nucleo_32.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS Disco.menu.usb.none=None -Disco.menu.usb.HIDFS=HID keyboard and mouse support Full Speed -Disco.menu.usb.HIDFS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -Disco.menu.usb.HIDHS=HID keyboard and mouse support High Speed -Disco.menu.usb.HIDHS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -DUSE_USB_HS -Disco.menu.usb.CDCFS=CDC Full Speed -Disco.menu.usb.CDCFS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -Disco.menu.usb.CDCHS=CDC High Speed -Disco.menu.usb.CDCHS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_HS +Disco.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART) +Disco.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC +Disco.menu.usb.CDC=CDC (no generic 'Serial') +Disco.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB +Disco.menu.usb.HID=HID (keyboard and mouse) +Disco.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE +Disco.menu.xusb.FS=Low/Full Speed +Disco.menu.xusb.HS=High Speed +Disco.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS +Disco.menu.xusb.HSFS=High Speed in Full Speed mode +Disco.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS GenF1.menu.usb.none=None -GenF1.menu.usb.HIDFS=HID keyboard and mouse support Full Speed -GenF1.menu.usb.HIDFS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -GenF1.menu.usb.HIDHS=HID keyboard and mouse support High Speed -GenF1.menu.usb.HIDHS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -DUSE_USB_HS -GenF1.menu.usb.CDCFS=CDC Full Speed -GenF1.menu.usb.CDCFS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -GenF1.menu.usb.CDCHS=CDC High Speed -GenF1.menu.usb.CDCHS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_HS +GenF1.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART) +GenF1.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC +GenF1.menu.usb.CDC=CDC (no generic 'Serial') +GenF1.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB +GenF1.menu.usb.HID=HID (keyboard and mouse) +GenF1.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE +GenF1.menu.xusb.FS=Low/Full Speed +GenF1.menu.xusb.HS=High Speed +GenF1.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS +GenF1.menu.xusb.HSFS=High Speed in Full Speed mode +GenF1.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS GenF4.menu.usb.none=None -GenF4.menu.usb.HIDFS=HID keyboard and mouse support Full Speed -GenF4.menu.usb.HIDFS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -GenF4.menu.usb.HIDHS=HID keyboard and mouse support High Speed -GenF4.menu.usb.HIDHS.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE -DUSE_USB_HS -GenF4.menu.usb.CDCFS=CDC Full Speed -GenF4.menu.usb.CDCFS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -GenF4.menu.usb.CDCHS=CDC High Speed -GenF4.menu.usb.CDCHS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_HS +GenF4.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART) +GenF4.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC +GenF4.menu.usb.CDC=CDC (no generic 'Serial') +GenF4.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB +GenF4.menu.usb.HID=HID (keyboard and mouse) +GenF4.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE +GenF4.menu.xusb.FS=Low/Full Speed +GenF4.menu.xusb.HS=High Speed +GenF4.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS +GenF4.menu.xusb.HSFS=High Speed in Full Speed mode +GenF4.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS 3dprinter.menu.usb.none=None -3dprinter.menu.usb.CDCFS=CDC Full Speed -3dprinter.menu.usb.CDCFS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -3dprinter.menu.usb.CDCHS=CDC High Speed -3dprinter.menu.usb.CDCHS.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_HS +3dprinter.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART) +3dprinter.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC +3dprinter.menu.usb.CDC=CDC (no generic 'Serial') +3dprinter.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB +3dprinter.menu.xusb.FS=Low/Full Speed +3dprinter.menu.xusb.HS=High Speed +3dprinter.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS +3dprinter.menu.xusb.HSFS=High Speed in Full Speed mode +3dprinter.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS # Optimizations Nucleo_144.menu.opt.osstd=Smallest (-Os default) diff --git a/cores/arduino/HardwareSerial.cpp b/cores/arduino/HardwareSerial.cpp index b606e41fd6..1471f935b9 100644 --- a/cores/arduino/HardwareSerial.cpp +++ b/cores/arduino/HardwareSerial.cpp @@ -105,43 +105,6 @@ #endif #endif // HAVE_HWSERIALx -void serialEventRun(void) -{ -#if defined(HAVE_HWSERIAL1) - if (serialEvent1 && Serial1.available()) serialEvent1(); -#endif -#if defined(HAVE_HWSERIAL2) - if (serialEvent2 && Serial2.available()) serialEvent2(); -#endif -#if defined(HAVE_HWSERIAL3) - if (serialEvent3 && Serial3.available()) serialEvent3(); -#endif -#if defined(HAVE_HWSERIAL4) - if (serialEvent4 && Serial4.available()) serialEvent4(); -#endif -#if defined(HAVE_HWSERIAL5) - if (serialEvent5 && Serial5.available()) serialEvent5(); -#endif -#if defined(HAVE_HWSERIAL6) - if (serialEvent6 && Serial6.available()) serialEvent6(); -#endif -#if defined(HAVE_HWSERIAL7) - if (serialEvent7 && Serial7.available()) serialEvent7(); -#endif -#if defined(HAVE_HWSERIAL8) - if (serialEvent8 && Serial8.available()) serialEvent8(); -#endif -#if defined(HAVE_HWSERIAL9) - if (serialEvent9 && Serial9.available()) serialEvent9(); -#endif -#if defined(HAVE_HWSERIAL10) - if (serialEventl10 && Serial10.available()) serialEvent10(); -#endif -#if defined(HAVE_HWSERIALLP1) - if (serialEventLP1 && SerialLP1.available()) serialEventLP1(); -#endif -} - // Constructors //////////////////////////////////////////////////////////////// HardwareSerial::HardwareSerial(uint32_t _rx, uint32_t _tx) { diff --git a/cores/arduino/HardwareSerial.h b/cores/arduino/HardwareSerial.h index 1484d67401..9740a2f291 100644 --- a/cores/arduino/HardwareSerial.h +++ b/cores/arduino/HardwareSerial.h @@ -27,6 +27,7 @@ #include #include "Stream.h" +#include "uart.h" // Define constants and variables for buffering incoming serial data. We're // using a ring buffer (I think), in which head is the index of the location @@ -148,6 +149,4 @@ extern HardwareSerial Serial9; extern HardwareSerial Serial10; extern HardwareSerial SerialLP1; -extern void serialEventRun(void) __attribute__((weak)); - #endif diff --git a/cores/arduino/USBSerial.cpp b/cores/arduino/USBSerial.cpp index b11d4f5c8d..7df1d48e42 100644 --- a/cores/arduino/USBSerial.cpp +++ b/cores/arduino/USBSerial.cpp @@ -37,6 +37,7 @@ extern __IO uint32_t UserRxBufPtrIn; extern __IO uint32_t UserRxBufPtrOut; USBSerial SerialUSB; +void serialEventUSB() __attribute__((weak)); void USBSerial::begin(uint32_t /* baud_count */) { // uart config is ignored in USB-CDC diff --git a/cores/arduino/WSerial.cpp b/cores/arduino/WSerial.cpp new file mode 100644 index 0000000000..0620924df0 --- /dev/null +++ b/cores/arduino/WSerial.cpp @@ -0,0 +1,42 @@ +#include "WSerial.h" + +void serialEventRun(void) +{ +#if defined(HAVE_HWSERIAL1) + if (serialEvent1 && Serial1.available()) serialEvent1(); +#endif +#if defined(HAVE_HWSERIAL2) + if (serialEvent2 && Serial2.available()) serialEvent2(); +#endif +#if defined(HAVE_HWSERIAL3) + if (serialEvent3 && Serial3.available()) serialEvent3(); +#endif +#if defined(HAVE_HWSERIAL4) + if (serialEvent4 && Serial4.available()) serialEvent4(); +#endif +#if defined(HAVE_HWSERIAL5) + if (serialEvent5 && Serial5.available()) serialEvent5(); +#endif +#if defined(HAVE_HWSERIAL6) + if (serialEvent6 && Serial6.available()) serialEvent6(); +#endif +#if defined(HAVE_HWSERIAL7) + if (serialEvent7 && Serial7.available()) serialEvent7(); +#endif +#if defined(HAVE_HWSERIAL8) + if (serialEvent8 && Serial8.available()) serialEvent8(); +#endif +#if defined(HAVE_HWSERIAL9) + if (serialEvent9 && Serial9.available()) serialEvent9(); +#endif +#if defined(HAVE_HWSERIAL10) + if (serialEventl10 && Serial10.available()) serialEvent10(); +#endif +#if defined(HAVE_HWSERIALLP1) + if (serialEventLP1 && SerialLP1.available()) serialEventLP1(); +#endif +#if defined(HAVE_SERIALUSB) + if (serialEventUSB && SerialUSB.available()) serialEventUSB(); +#endif +} + diff --git a/cores/arduino/WSerial.h b/cores/arduino/WSerial.h new file mode 100644 index 0000000000..a55697b455 --- /dev/null +++ b/cores/arduino/WSerial.h @@ -0,0 +1,170 @@ +#ifndef WIRING_SERIAL_H +#define WIRING_SERIAL_H + +#include "variant.h" +#include "HardwareSerial.h" +#include "USBSerial.h" + +#if defined (USBCON) && defined(USBD_USE_CDC) +#ifndef DISABLE_GENERIC_SERIALUSB +#define ENABLE_SERIALUSB +#if !defined(Serial) +#define Serial SerialUSB +#define serialEvent serialEventUSB +#endif +#endif + +#if defined(ENABLE_SERIALUSB) +#define HAVE_SERIALUSB +#endif + +extern void serialEventUSB(void) __attribute__((weak)); +#endif /* USBCON && USBD_USE_CDC */ + +#if defined(HAL_UART_MODULE_ENABLED) +#if !defined(HWSERIAL_NONE) && defined(SERIAL_UART_INSTANCE) +#if SERIAL_UART_INSTANCE == 0 +#define ENABLE_HWSERIALLP1 +#if !defined(Serial) +#define Serial SerialLP1 +#define serialEvent serialEventLP1 +#endif +#elif SERIAL_UART_INSTANCE == 1 +#define ENABLE_HWSERIAL1 +#if !defined(Serial) +#define Serial Serial1 +#define serialEvent serialEvent1 +#endif +#elif SERIAL_UART_INSTANCE == 2 +#define ENABLE_HWSERIAL2 +#if !defined(Serial) +#define Serial Serial2 +#define serialEvent serialEvent2 +#endif +#elif SERIAL_UART_INSTANCE == 3 +#define ENABLE_HWSERIAL3 +#if !defined(Serial) +#define Serial Serial3 +#define serialEvent serialEvent3 +#endif +#elif SERIAL_UART_INSTANCE == 4 +#define ENABLE_HWSERIAL4 +#if !defined(Serial) +#define Serial Serial4 +#define serialEvent serialEvent4 +#endif +#elif SERIAL_UART_INSTANCE == 5 +#define ENABLE_HWSERIAL5 +#if !defined(Serial) +#define Serial Serial5 +#define serialEvent serialEvent5 +#endif +#elif SERIAL_UART_INSTANCE == 6 +#define ENABLE_HWSERIAL6 +#if !defined(Serial) +#define Serial Serial6 +#define serialEvent serialEvent6 +#endif +#elif SERIAL_UART_INSTANCE == 7 +#define ENABLE_HWSERIAL7 +#if !defined(Serial) +#define Serial Serial7 +#define serialEvent serialEvent7 +#endif +#elif SERIAL_UART_INSTANCE == 8 +#define ENABLE_HWSERIAL8 +#if !defined(Serial) +#define Serial Serial8 +#define serialEvent serialEvent8 +#endif +#elif SERIAL_UART_INSTANCE == 9 +#define ENABLE_HWSERIAL9 +#if !defined(Serial) +#define Serial Serial9 +#define serialEvent serialEvent9 +#endif +#elif SERIAL_UART_INSTANCE == 10 +#define ENABLE_HWSERIAL10 +#if !defined(Serial) +#define Serial Serial10 +#define serialEvent serialEvent10 +#endif +#else +#if !defined(Serial) +#warning "No generic 'Serial' defined!" +#endif +#endif /* SERIAL_UART_INSTANCE == x */ +#endif /* !HWSERIAL_NONE && SERIAL_UART_INSTANCE */ + +#if defined(ENABLE_HWSERIALLP1) +#if defined(LPUART1_BASE) +#define HAVE_HWSERIALLP1 +#endif +#endif +#if defined(ENABLE_HWSERIAL1) +#if defined(USART1_BASE) +#define HAVE_HWSERIAL1 +#endif +#endif +#if defined(ENABLE_HWSERIAL2) +#if defined(USART2_BASE) +#define HAVE_HWSERIAL2 +#endif +#endif +#if defined(ENABLE_HWSERIAL3) +#if defined(USART3_BASE) +#define HAVE_HWSERIAL3 +#endif +#endif +#if defined(ENABLE_HWSERIAL4) +#if defined(USART4_BASE) || defined(UART4_BASE) +#define HAVE_HWSERIAL4 +#endif +#endif +#if defined(ENABLE_HWSERIAL5) +#if defined(USART5_BASE) || defined(UART5_BASE) +#define HAVE_HWSERIAL5 +#endif +#endif +#if defined(ENABLE_HWSERIAL6) +#if defined(USART6_BASE) +#define HAVE_HWSERIAL6 +#endif +#endif +#if defined(ENABLE_HWSERIAL7) +#if defined(USART7_BASE) || defined(UART7_BASE) +#define HAVE_HWSERIAL7 +#endif +#endif +#if defined(ENABLE_HWSERIAL8) +#if defined(USART8_BASE) || defined(UART8_BASE) +#define HAVE_HWSERIAL8 +#endif +#endif +#if defined(ENABLE_HWSERIAL9) +#if defined(UART9_BASE) +#define HAVE_HWSERIAL9 +#endif +#endif +#if defined(ENABLE_HWSERIAL10) +#if defined(UART10_BASE) +#define HAVE_HWSERIAL10 +#endif +#endif + +extern void serialEvent1(void) __attribute__((weak)); +extern void serialEvent2(void) __attribute__((weak)); +extern void serialEvent3(void) __attribute__((weak)); +extern void serialEvent4(void) __attribute__((weak)); +extern void serialEvent5(void) __attribute__((weak)); +extern void serialEvent6(void) __attribute__((weak)); +extern void serialEvent7(void) __attribute__((weak)); +extern void serialEvent8(void) __attribute__((weak)); +extern void serialEvent9(void) __attribute__((weak)); +extern void serialEvent10(void) __attribute__((weak)); +extern void serialEventLP1(void) __attribute__((weak)); +#endif /* HAL_UART_MODULE_ENABLED */ + +extern void serialEventRun(void) __attribute__((weak)); + +#endif /* WIRING_SERIAL_H */ diff --git a/cores/arduino/stm32/uart.h b/cores/arduino/stm32/uart.h index 4f315eaf6a..02d1a9b3f2 100644 --- a/cores/arduino/stm32/uart.h +++ b/cores/arduino/stm32/uart.h @@ -48,136 +48,6 @@ #if !defined(HAL_UART_MODULE_ENABLED) #define serial_t void* #else -#if !defined(HWSERIAL_NONE) && defined(SERIAL_UART_INSTANCE) - -#if SERIAL_UART_INSTANCE == 0 -#define ENABLE_HWSERIALLP1 -#if !defined(Serial) -#define Serial SerialLP1 -#define serialEvent serialEventLP1 -#endif -#elif SERIAL_UART_INSTANCE == 1 -#define ENABLE_HWSERIAL1 -#if !defined(Serial) -#define Serial Serial1 -#define serialEvent serialEvent1 -#endif -#elif SERIAL_UART_INSTANCE == 2 -#define ENABLE_HWSERIAL2 -#if !defined(Serial) -#define Serial Serial2 -#define serialEvent serialEvent2 -#endif -#elif SERIAL_UART_INSTANCE == 3 -#define ENABLE_HWSERIAL3 -#if !defined(Serial) -#define Serial Serial3 -#define serialEvent serialEvent3 -#endif -#elif SERIAL_UART_INSTANCE == 4 -#define ENABLE_HWSERIAL4 -#if !defined(Serial) -#define Serial Serial4 -#define serialEvent serialEvent4 -#endif -#elif SERIAL_UART_INSTANCE == 5 -#define ENABLE_HWSERIAL5 -#if !defined(Serial) -#define Serial Serial5 -#define serialEvent serialEvent5 -#endif -#elif SERIAL_UART_INSTANCE == 6 -#define ENABLE_HWSERIAL6 -#if !defined(Serial) -#define Serial Serial6 -#define serialEvent serialEvent6 -#endif -#elif SERIAL_UART_INSTANCE == 7 -#define ENABLE_HWSERIAL7 -#if !defined(Serial) -#define Serial Serial7 -#define serialEvent serialEvent7 -#endif -#elif SERIAL_UART_INSTANCE == 8 -#define ENABLE_HWSERIAL8 -#if !defined(Serial) -#define Serial Serial8 -#define serialEvent serialEvent8 -#endif -#elif SERIAL_UART_INSTANCE == 9 -#define ENABLE_HWSERIAL9 -#if !defined(Serial) -#define Serial Serial9 -#define serialEvent serialEvent9 -#endif -#elif SERIAL_UART_INSTANCE == 10 -#define ENABLE_HWSERIAL10 -#if !defined(Serial) -#define Serial Serial10 -#define serialEvent serialEvent10 -#endif -#else -#if !defined(Serial) -#warning "No generic 'Serial' defined!" -#endif -#endif /* SERIAL_UART_INSTANCE == x */ -#endif /* !HWSERIAL_NONE && SERIAL_UART_INSTANCE */ - -#if defined(ENABLE_HWSERIALLP1) -#if defined(LPUART1_BASE) -#define HAVE_HWSERIALLP1 -#endif -#endif -#if defined(ENABLE_HWSERIAL1) -#if defined(USART1_BASE) -#define HAVE_HWSERIAL1 -#endif -#endif -#if defined(ENABLE_HWSERIAL2) -#if defined(USART2_BASE) -#define HAVE_HWSERIAL2 -#endif -#endif -#if defined(ENABLE_HWSERIAL3) -#if defined(USART3_BASE) -#define HAVE_HWSERIAL3 -#endif -#endif -#if defined(ENABLE_HWSERIAL4) -#if defined(USART4_BASE) || defined(UART4_BASE) -#define HAVE_HWSERIAL4 -#endif -#endif -#if defined(ENABLE_HWSERIAL5) -#if defined(USART5_BASE) || defined(UART5_BASE) -#define HAVE_HWSERIAL5 -#endif -#endif -#if defined(ENABLE_HWSERIAL6) -#if defined(USART6_BASE) -#define HAVE_HWSERIAL6 -#endif -#endif -#if defined(ENABLE_HWSERIAL7) -#if defined(USART7_BASE) || defined(UART7_BASE) -#define HAVE_HWSERIAL7 -#endif -#endif -#if defined(ENABLE_HWSERIAL8) -#if defined(USART8_BASE) || defined(UART8_BASE) -#define HAVE_HWSERIAL8 -#endif -#endif -#if defined(ENABLE_HWSERIAL9) -#if defined(UART9_BASE) -#define HAVE_HWSERIAL9 -#endif -#endif -#if defined(ENABLE_HWSERIAL10) -#if defined(UART10_BASE) -#define HAVE_HWSERIAL10 -#endif -#endif /* Exported types ------------------------------------------------------------*/ typedef struct serial_s serial_t; diff --git a/cores/arduino/wiring.h b/cores/arduino/wiring.h index b2d0efc741..081a82c7bf 100644 --- a/cores/arduino/wiring.h +++ b/cores/arduino/wiring.h @@ -41,14 +41,14 @@ #include #ifdef __cplusplus -#include "HardwareSerial.h" #include "Tone.h" -#include "USBSerial.h" #include "WCharacter.h" +#include "WSerial.h" #include "WMath.h" #include "WString.h" #endif // __cplusplus + #define clockCyclesPerMicrosecond() ( SystemCoreClock / 1000000L ) #define clockCyclesToMicroseconds(a) ( ((a) * 1000L) / (SystemCoreClock / 1000L) ) #define microsecondsToClockCycles(a) ( (a) * (SystemCoreClock / 1000000L) ) diff --git a/platform.txt b/platform.txt index 0c859f36c7..fb9d25b560 100644 --- a/platform.txt +++ b/platform.txt @@ -67,7 +67,7 @@ compiler.arm.cmsis.ldflags="-L{runtime.tools.CMSIS-5.3.0.path}/CMSIS/Lib/GCC/" - # USB Flags # --------- -build.usb_flags=-DUSBCON -DUSBD_VID={build.vid} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT="{build.board}"' -DHAL_PCD_MODULE_ENABLED +build.usb_flags=-DUSBCON {build.usb_speed} -DUSBD_VID={build.vid} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT="{build.board}"' -DHAL_PCD_MODULE_ENABLED # Default usb manufacturer will be replaced at compile time using # numeric vendor ID if available or by board's specific value. @@ -79,6 +79,7 @@ build.info.flags=-D{build.series} -DARDUINO={runtime.ide.version} -DARDUINO_{bui # Defaults config build.xSerial=-DHAL_UART_MODULE_ENABLED build.enable_usb= +build.usb_speed= build.startup_file= build.flags.optimize=-Os build.flags.ldspecs=--specs=nano.specs