mirror of https://github.com/arendst/Tasmota.git
Merge pull request #14153 from wir3z/development
Fixed non-8N1 serial issues.
This commit is contained in:
commit
d9ab90a2f9
|
@ -28,7 +28,6 @@ extern "C" {
|
|||
#include <TasmotaSerial.h>
|
||||
|
||||
#ifdef ESP8266
|
||||
|
||||
void IRAM_ATTR callRxRead(void *self) { ((TasmotaSerial*)self)->rxRead(); };
|
||||
|
||||
// As the Arduino attachInterrupt has no parameter, lists of objects
|
||||
|
@ -140,7 +139,7 @@ bool TasmotaSerial::begin(uint32_t speed, uint32_t config) {
|
|||
if (m_hardserial) {
|
||||
#ifdef ESP8266
|
||||
Serial.flush();
|
||||
Serial.begin(speed, (SerialConfig)config);
|
||||
Serial.begin(speed, (SerialConfig)pgm_read_byte(kTasmotaSerialConfig + config));
|
||||
if (m_hardswap) {
|
||||
Serial.swap();
|
||||
}
|
||||
|
|
|
@ -35,6 +35,27 @@
|
|||
#include <HardwareSerial.h>
|
||||
#endif
|
||||
|
||||
#ifdef ESP8266
|
||||
const uint8_t kTasmotaSerialConfig[] PROGMEM = {
|
||||
SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1,
|
||||
SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2,
|
||||
SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1,
|
||||
SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2,
|
||||
SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1,
|
||||
SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
|
||||
};
|
||||
#endif // ESP8266
|
||||
#ifdef ESP32
|
||||
const uint32_t kTasmotaSerialConfig[] PROGMEM = {
|
||||
SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1,
|
||||
SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2,
|
||||
SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1,
|
||||
SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2,
|
||||
SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1,
|
||||
SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
|
||||
};
|
||||
#endif // ESP32
|
||||
|
||||
class TasmotaSerial : public Stream {
|
||||
public:
|
||||
TasmotaSerial(int receive_pin, int transmit_pin, int hardware_fallback = 0, int nwmode = 0, int buffer_size = TM_SERIAL_BUFFER_SIZE);
|
||||
|
|
|
@ -28,6 +28,7 @@ bool knx_started = false;
|
|||
/*********************************************************************************************\
|
||||
* Watchdog extension (https://github.com/esp8266/Arduino/issues/1532)
|
||||
\*********************************************************************************************/
|
||||
#include <TasmotaSerial.h>
|
||||
|
||||
#ifdef ESP8266
|
||||
#include <Ticker.h>
|
||||
|
@ -1885,15 +1886,14 @@ void SetSerialBegin(void) {
|
|||
AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_SERIAL "Set to %s %d bit/s"), GetSerialConfig().c_str(), TasmotaGlobal.baudrate);
|
||||
Serial.flush();
|
||||
#ifdef ESP8266
|
||||
Serial.begin(TasmotaGlobal.baudrate, (SerialConfig)pgm_read_byte(kTasmotaSerialConfig + Settings->serial_config));
|
||||
Serial.begin(TasmotaGlobal.baudrate, (SerialConfig)ConvertSerialConfig(Settings->serial_config));
|
||||
SetSerialSwap();
|
||||
#endif // ESP8266
|
||||
#ifdef ESP32
|
||||
delay(10); // Allow time to cleanup queues - if not used hangs ESP32
|
||||
Serial.end();
|
||||
delay(10); // Allow time to cleanup queues - if not used hangs ESP32
|
||||
uint32_t config = pgm_read_dword(kTasmotaSerialConfig + Settings->serial_config);
|
||||
Serial.begin(TasmotaGlobal.baudrate, config);
|
||||
Serial.begin(TasmotaGlobal.baudrate, ConvertSerialConfig(Settings->serial_config));
|
||||
#endif // ESP32
|
||||
}
|
||||
|
||||
|
|
|
@ -431,27 +431,6 @@ enum TasmotaSerialConfig {
|
|||
TS_SERIAL_5O1, TS_SERIAL_6O1, TS_SERIAL_7O1, TS_SERIAL_8O1,
|
||||
TS_SERIAL_5O2, TS_SERIAL_6O2, TS_SERIAL_7O2, TS_SERIAL_8O2 };
|
||||
|
||||
#ifdef ESP8266
|
||||
const SerConfu8 kTasmotaSerialConfig[] PROGMEM = {
|
||||
SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1,
|
||||
SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2,
|
||||
SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1,
|
||||
SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2,
|
||||
SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1,
|
||||
SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
|
||||
};
|
||||
#endif // ESP8266
|
||||
#ifdef ESP32
|
||||
const uint32_t kTasmotaSerialConfig[] PROGMEM = {
|
||||
SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1,
|
||||
SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2,
|
||||
SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1,
|
||||
SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2,
|
||||
SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1,
|
||||
SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
|
||||
};
|
||||
#endif // ESP32
|
||||
|
||||
enum TuyaSupportedFunctions { TUYA_MCU_FUNC_NONE,
|
||||
TUYA_MCU_FUNC_SWT1 = 1, TUYA_MCU_FUNC_SWT2, TUYA_MCU_FUNC_SWT3, TUYA_MCU_FUNC_SWT4,
|
||||
TUYA_MCU_FUNC_REL1 = 11, TUYA_MCU_FUNC_REL2, TUYA_MCU_FUNC_REL3, TUYA_MCU_FUNC_REL4, TUYA_MCU_FUNC_REL5,
|
||||
|
|
|
@ -337,7 +337,7 @@ void setup(void) {
|
|||
Settings->baudrate = APP_BAUDRATE / 300;
|
||||
Settings->serial_config = TS_SERIAL_8N1;
|
||||
}
|
||||
SetSerialBaudrate(Settings->baudrate * 300); // Reset serial interface if current baudrate is different from requested baudrate
|
||||
SetSerialBegin(); // Reset serial interface if current serial settings are different from requested serial settings
|
||||
|
||||
if (1 == RtcReboot.fast_reboot_count) { // Allow setting override only when all is well
|
||||
UpdateQuickPowerCycle(true);
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#define XDRV_08 8
|
||||
#define HARDWARE_FALLBACK 2
|
||||
|
||||
const uint8_t SERIAL_BRIDGE_BUFFER_SIZE = 130;
|
||||
const uint16_t SERIAL_BRIDGE_BUFFER_SIZE = 256;
|
||||
|
||||
const char kSerialBridgeCommands[] PROGMEM = "|" // No prefix
|
||||
D_CMND_SSERIALSEND "|" D_CMND_SBAUDRATE;
|
||||
|
@ -106,7 +106,13 @@ void SerialBridgeInit(void)
|
|||
serial_bridge_active = false;
|
||||
if (PinUsed(GPIO_SBR_RX) && PinUsed(GPIO_SBR_TX)) {
|
||||
SerialBridgeSerial = new TasmotaSerial(Pin(GPIO_SBR_RX), Pin(GPIO_SBR_TX), HARDWARE_FALLBACK);
|
||||
if (SerialBridgeSerial->begin(Settings->sbaudrate * 300)) { // Baud rate is stored div 300 so it fits into 16 bits
|
||||
#ifdef ESP8266
|
||||
if (SerialBridgeSerial->begin(Settings->sbaudrate * 300, (SerialConfig)ConvertSerialConfig(Settings->serial_config))) // Baud rate is stored div 300 so it fits into 16 bits
|
||||
#endif // ESP8266
|
||||
#ifdef ESP32
|
||||
if (SerialBridgeSerial->begin(Settings->sbaudrate * 300, ConvertSerialConfig(Settings->serial_config))) // Baud rate is stored div 300 so it fits into 16 bits
|
||||
#endif // ESP32
|
||||
{
|
||||
if (SerialBridgeSerial->hardwareSerial()) {
|
||||
ClaimSerial();
|
||||
serial_bridge_buffer = TasmotaGlobal.serial_in_buffer; // Use idle serial buffer to save RAM
|
||||
|
|
|
@ -3620,15 +3620,7 @@ chknext:
|
|||
glob_script_mem.sp = new TasmotaSerial(rxpin, txpin, 1, 0, rxbsiz);
|
||||
|
||||
if (glob_script_mem.sp) {
|
||||
uint32_t config;
|
||||
#ifdef ESP8266
|
||||
config = pgm_read_byte(kTasmotaSerialConfig + sconfig);
|
||||
#endif // ESP8266
|
||||
|
||||
#ifdef ESP32
|
||||
config = pgm_read_dword(kTasmotaSerialConfig + sconfig);
|
||||
#endif // ESP32
|
||||
fvar = glob_script_mem.sp->begin(br, config);
|
||||
fvar = glob_script_mem.sp->begin(br, ConvertSerialConfig(sconfig));
|
||||
uint32_t savc = Settings->serial_config;
|
||||
//setRxBufferSize(TMSBSIZ);
|
||||
|
||||
|
|
Loading…
Reference in New Issue