diff --git a/Arduino_package/hardware/cores/ambd/HardwareSerial.h b/Arduino_package/hardware/cores/ambd/HardwareSerial.h index 0edef153..b14ada7b 100644 --- a/Arduino_package/hardware/cores/ambd/HardwareSerial.h +++ b/Arduino_package/hardware/cores/ambd/HardwareSerial.h @@ -23,10 +23,54 @@ #include "Stream.h" +// Define config for Serial.begin(baud, config); +//#define SERIAL_5N1 0x00 +//#define SERIAL_6N1 0x02 +#define SERIAL_7N1 0x04 +#define SERIAL_8N1 0x06 +//#define SERIAL_5N2 0x08 +//#define SERIAL_6N2 0x0A +#define SERIAL_7N2 0x0C +#define SERIAL_8N2 0x0E +//#define SERIAL_5E1 0x20 +//#define SERIAL_6E1 0x22 +#define SERIAL_7E1 0x24 +#define SERIAL_8E1 0x26 +//#define SERIAL_5E2 0x28 +//#define SERIAL_6E2 0x2A +#define SERIAL_7E2 0x2C +#define SERIAL_8E2 0x2E +//#define SERIAL_5O1 0x30 +//#define SERIAL_6O1 0x32 +#define SERIAL_7O1 0x34 +#define SERIAL_8O1 0x36 +//#define SERIAL_5O2 0x38 +//#define SERIAL_6O2 0x3A +#define SERIAL_7O2 0x3C +#define SERIAL_8O2 0x3E + +//#define SERIAL_511 0x40 +//#define SERIAL_611 0x42 +#define SERIAL_711 0x44 +#define SERIAL_811 0x46 +//#define SERIAL_512 0x48 +//#define SERIAL_612 0x4A +#define SERIAL_712 0x4C +#define SERIAL_812 0x4E +//#define SERIAL_501 0x50 +//#define SERIAL_601 0x52 +#define SERIAL_701 0x54 +#define SERIAL_801 0x56 +//#define SERIAL_502 0x58 +//#define SERIAL_602 0x5A +#define SERIAL_702 0x5C +#define SERIAL_802 0x5E + class HardwareSerial : public Stream { public: - virtual void begin(unsigned long) = 0; + virtual void begin(unsigned long baud) { begin(baud, SERIAL_8N1); } + virtual void begin(unsigned long, uint8_t) = 0; virtual void end() = 0; virtual int available(void) = 0; virtual int peek(void) = 0; diff --git a/Arduino_package/hardware/cores/ambd/LOGUARTClass.cpp b/Arduino_package/hardware/cores/ambd/LOGUARTClass.cpp index b073b6fe..a357becb 100644 --- a/Arduino_package/hardware/cores/ambd/LOGUARTClass.cpp +++ b/Arduino_package/hardware/cores/ambd/LOGUARTClass.cpp @@ -88,8 +88,7 @@ void LOGUARTClass::IrqHandler(void) serial_irq_set(&log_uart_obj, RxIrq, IrqEn); } - -void LOGUARTClass::begin(const uint32_t dwBaudRate) +void LOGUARTClass::begin(const uint32_t dwBaudRate, uint8_t serial_config_value) { // Log, UART_LOG //serial_init(&log_uart_obj, PA_7, PA_8); @@ -107,7 +106,110 @@ void LOGUARTClass::begin(const uint32_t dwBaudRate) //serial_init(&uart_obj, PA_12, PA_13); //serial_init(&uart_obj, PinName(g_APinDescription[SERIAL2_TX].pinname), PinName(g_APinDescription[SERIAL2_RX].pinname)); - serial_format(&log_uart_obj, 8, ParityNone, 1); + switch(serial_config_value) { +// case SERIAL_5N1: +// break; +// case SERIAL_6N1: +// break; + case SERIAL_7N1: + serial_format(&log_uart_obj, 7, ParityNone, 1); + break; + case SERIAL_8N1: + serial_format(&log_uart_obj, 8, ParityNone, 1); + break; +// case SERIAL_5N2: +// break; +// case SERIAL_6N2: +// break; + case SERIAL_7N2: + serial_format(&log_uart_obj, 7, ParityNone, 2); + break; + case SERIAL_8N2: + serial_format(&log_uart_obj, 8, ParityNone, 2); + break; +// case SERIAL_5E1: +// break; +// case SERIAL_6E1: +// break; + case SERIAL_7E1: + serial_format(&log_uart_obj, 7, ParityEven, 1); + break; + case SERIAL_8E1: + serial_format(&log_uart_obj, 8, ParityEven, 1); + break; +// case SERIAL_5E2: +// break; +// case SERIAL_6E2: +// break; + case SERIAL_7E2: + serial_format(&log_uart_obj, 7, ParityEven, 2); + break; + case SERIAL_8E2: + serial_format(&log_uart_obj, 8, ParityEven, 2); + break; +// case SERIAL_5O1: +// break; +// case SERIAL_6O1: +// break; + case SERIAL_7O1: + serial_format(&log_uart_obj, 7, ParityOdd, 1); + break; + case SERIAL_8O1: + serial_format(&log_uart_obj, 8, ParityOdd, 1); + break; +// case SERIAL_5O2: +// break; +// case SERIAL_6O2: +// break; + case SERIAL_7O2: + serial_format(&log_uart_obj, 7, ParityOdd, 2); + break; + case SERIAL_8O2: + serial_format(&log_uart_obj, 8, ParityOdd, 2); + break; +// case SERIAL_511: +// break; +// case SERIAL_611: +// break; + case SERIAL_711: + serial_format(&log_uart_obj, 7, ParityForced1, 1); + break; + case SERIAL_811: + serial_format(&log_uart_obj, 8, ParityForced1, 1); + break; +// case SERIAL_512: +// break; +// case SERIAL_612: +// break; + case SERIAL_712: + serial_format(&log_uart_obj, 7, ParityForced1, 2); + break; + case SERIAL_812: + serial_format(&log_uart_obj, 8, ParityForced1, 2); + break; +// case SERIAL_501: +// break; +// case SERIAL_601: +// break; + case SERIAL_701: + serial_format(&log_uart_obj, 7, ParityForced0, 1); + break; + case SERIAL_801: + serial_format(&log_uart_obj, 8, ParityForced0, 1); + break; +// case SERIAL_502: +// break; +// case SERIAL_602: +// break; + case SERIAL_702: + serial_format(&log_uart_obj, 7, ParityForced0, 2); + break; + case SERIAL_802: + serial_format(&log_uart_obj, 8, ParityForced0, 2); + break; + default: + serial_format(&log_uart_obj, 8, ParityNone, 1); + } uint32_t LOGUART_BaudRate = dwBaudRate; diff --git a/Arduino_package/hardware/cores/ambd/LOGUARTClass.h b/Arduino_package/hardware/cores/ambd/LOGUARTClass.h index fc791976..4912a692 100644 --- a/Arduino_package/hardware/cores/ambd/LOGUARTClass.h +++ b/Arduino_package/hardware/cores/ambd/LOGUARTClass.h @@ -26,7 +26,8 @@ class LOGUARTClass : public HardwareSerial { public: LOGUARTClass(int dwIrq, RingBuffer* pRx_buffer); - void begin(const uint32_t dwBaudRate); + void begin(const uint32_t dwBaudRate) { begin(dwBaudRate, SERIAL_8N1); } + void begin(const uint32_t dwBaudRate, uint8_t serial_config_value); void end(void); int available(void); int peek(void); diff --git a/Arduino_package/hardware/cores/ambd/UARTClassOne.cpp b/Arduino_package/hardware/cores/ambd/UARTClassOne.cpp index 27ecf771..703a9f43 100644 --- a/Arduino_package/hardware/cores/ambd/UARTClassOne.cpp +++ b/Arduino_package/hardware/cores/ambd/UARTClassOne.cpp @@ -92,8 +92,7 @@ void UARTClassOne::IrqHandler(void) serial_irq_set(&uart_obj, RxIrq, IrqEn); } - -void UARTClassOne::begin(const uint32_t dwBaudRate) +void UARTClassOne::begin(const uint32_t dwBaudRate, uint8_t serial_config_value) { // Log, UART_LOG //serial_init(&log_uart_obj, PA_7, PA_8); @@ -111,7 +110,70 @@ void UARTClassOne::begin(const uint32_t dwBaudRate) //serial_init(&uart_obj, PA_12, PA_13); //serial_init(&uart_obj, PinName(g_APinDescription[SERIAL2_TX].pinname), PinName(g_APinDescription[SERIAL2_RX].pinname)); - serial_format(&uart_obj, 8, ParityNone, 1); + switch(serial_config_value) { + case SERIAL_7N1: + serial_format(&uart_obj, 7, ParityNone, 1); + break; + case SERIAL_8N1: + serial_format(&uart_obj, 8, ParityNone, 1); + break; + case SERIAL_7N2: + serial_format(&uart_obj, 7, ParityNone, 2); + break; + case SERIAL_8N2: + serial_format(&uart_obj, 8, ParityNone, 2); + break; + case SERIAL_7E1: + serial_format(&uart_obj, 7, ParityEven, 1); + break; + case SERIAL_8E1: + serial_format(&uart_obj, 8, ParityEven, 1); + break; + case SERIAL_7E2: + serial_format(&uart_obj, 7, ParityEven, 2); + break; + case SERIAL_8E2: + serial_format(&uart_obj, 8, ParityEven, 2); + break; + case SERIAL_7O1: + serial_format(&uart_obj, 7, ParityOdd, 1); + break; + case SERIAL_8O1: + serial_format(&uart_obj, 8, ParityOdd, 1); + break; + case SERIAL_7O2: + serial_format(&uart_obj, 7, ParityOdd, 2); + break; + case SERIAL_8O2: + serial_format(&uart_obj, 8, ParityOdd, 2); + break; + case SERIAL_711: + serial_format(&uart_obj, 7, ParityForced1, 1); + break; + case SERIAL_811: + serial_format(&uart_obj, 8, ParityForced1, 1); + break; + case SERIAL_712: + serial_format(&uart_obj, 7, ParityForced1, 2); + break; + case SERIAL_812: + serial_format(&uart_obj, 8, ParityForced1, 2); + break; + case SERIAL_701: + serial_format(&uart_obj, 7, ParityForced0, 1); + break; + case SERIAL_801: + serial_format(&uart_obj, 8, ParityForced0, 1); + break; + case SERIAL_702: + serial_format(&uart_obj, 7, ParityForced0, 2); + break; + case SERIAL_802: + serial_format(&uart_obj, 8, ParityForced0, 2); + break; + default: + serial_format(&uart_obj, 8, ParityNone, 1); + } uint32_t UART_BaudRate = dwBaudRate; diff --git a/Arduino_package/hardware/cores/ambd/UARTClassOne.h b/Arduino_package/hardware/cores/ambd/UARTClassOne.h index f7a667c0..2c7d0761 100644 --- a/Arduino_package/hardware/cores/ambd/UARTClassOne.h +++ b/Arduino_package/hardware/cores/ambd/UARTClassOne.h @@ -29,7 +29,8 @@ class UARTClassOne : public HardwareSerial { public: UARTClassOne(int dwIrq, RingBuffer* pRx_buffer); - void begin(const uint32_t dwBaudRate); + void begin(const uint32_t dwBaudRate) { begin(dwBaudRate, SERIAL_8N1); } + void begin(const uint32_t dwBaudRate, uint8_t serial_config_value); void end(void); int available(void); int peek(void); diff --git a/Arduino_package/hardware/cores/ambd/UARTClassTwo.cpp b/Arduino_package/hardware/cores/ambd/UARTClassTwo.cpp index 5ea17e99..73ca7a80 100644 --- a/Arduino_package/hardware/cores/ambd/UARTClassTwo.cpp +++ b/Arduino_package/hardware/cores/ambd/UARTClassTwo.cpp @@ -90,7 +90,7 @@ void UARTClassTwo::IrqHandler(void) } -void UARTClassTwo::begin(const uint32_t dwBaudRate) +void UARTClassTwo::begin(const uint32_t dwBaudRate, uint8_t serial_config_value) { #if defined(BOARD_RTL8720DN_BW16) // Log, UART_LOG @@ -121,7 +121,70 @@ void UARTClassTwo::begin(const uint32_t dwBaudRate) serial_init(&uart_obj, PinName(g_APinDescription[SERIAL2_TX].pinname), PinName(g_APinDescription[SERIAL2_RX].pinname)); #endif - serial_format(&uart_obj, 8, ParityNone, 1); + switch(serial_config_value) { + case SERIAL_7N1: + serial_format(&uart_obj, 7, ParityNone, 1); + break; + case SERIAL_8N1: + serial_format(&uart_obj, 8, ParityNone, 1); + break; + case SERIAL_7N2: + serial_format(&uart_obj, 7, ParityNone, 2); + break; + case SERIAL_8N2: + serial_format(&uart_obj, 8, ParityNone, 2); + break; + case SERIAL_7E1: + serial_format(&uart_obj, 7, ParityEven, 1); + break; + case SERIAL_8E1: + serial_format(&uart_obj, 8, ParityEven, 1); + break; + case SERIAL_7E2: + serial_format(&uart_obj, 7, ParityEven, 2); + break; + case SERIAL_8E2: + serial_format(&uart_obj, 8, ParityEven, 2); + break; + case SERIAL_7O1: + serial_format(&uart_obj, 7, ParityOdd, 1); + break; + case SERIAL_8O1: + serial_format(&uart_obj, 8, ParityOdd, 1); + break; + case SERIAL_7O2: + serial_format(&uart_obj, 7, ParityOdd, 2); + break; + case SERIAL_8O2: + serial_format(&uart_obj, 8, ParityOdd, 2); + break; + case SERIAL_711: + serial_format(&uart_obj, 7, ParityForced1, 1); + break; + case SERIAL_811: + serial_format(&uart_obj, 8, ParityForced1, 1); + break; + case SERIAL_712: + serial_format(&uart_obj, 7, ParityForced1, 2); + break; + case SERIAL_812: + serial_format(&uart_obj, 8, ParityForced1, 2); + break; + case SERIAL_701: + serial_format(&uart_obj, 7, ParityForced0, 1); + break; + case SERIAL_801: + serial_format(&uart_obj, 8, ParityForced0, 1); + break; + case SERIAL_702: + serial_format(&uart_obj, 7, ParityForced0, 2); + break; + case SERIAL_802: + serial_format(&uart_obj, 8, ParityForced0, 2); + break; + default: + serial_format(&uart_obj, 8, ParityNone, 1); + } uint32_t UART_BaudRate = dwBaudRate; diff --git a/Arduino_package/hardware/cores/ambd/UARTClassTwo.h b/Arduino_package/hardware/cores/ambd/UARTClassTwo.h index 6081de93..6a46a397 100644 --- a/Arduino_package/hardware/cores/ambd/UARTClassTwo.h +++ b/Arduino_package/hardware/cores/ambd/UARTClassTwo.h @@ -27,7 +27,8 @@ class UARTClassTwo : public HardwareSerial public: //UARTClassTwo(int dwIrq, RingBuffer* pRx_buffer); UARTClassTwo(RingBuffer* pRx_buffer); - void begin(const uint32_t dwBaudRate); + void begin(const uint32_t dwBaudRate) { begin(dwBaudRate, SERIAL_8N1); } + void begin(const uint32_t dwBaudRate, uint8_t serial_config_value); void end(void); int available(void); int peek(void);