Refactor Serial Bridge commands

Refactor Serial Bridge commands
This commit is contained in:
Theo Arends 2019-08-01 17:33:44 +02:00
parent 2d90955026
commit 49f8b4922f
1 changed files with 14 additions and 21 deletions

View File

@ -28,9 +28,10 @@ const uint8_t SERIAL_BRIDGE_BUFFER_SIZE = 130;
#include <TasmotaSerial.h>
enum SerialBridgeCommands { CMND_SSERIALSEND, CMND_SBAUDRATE };
const char kSerialBridgeCommands[] PROGMEM = D_CMND_SSERIALSEND "|" D_CMND_SBAUDRATE;
void (* const SerialBridgeCommand[])(void) PROGMEM = { &CmndSSerialSend, &CmndSBaudrate };
TasmotaSerial *SerialBridgeSerial = nullptr;
unsigned long serial_bridge_polling_window = 0;
@ -106,16 +107,9 @@ void SerialBridgeInit(void)
* Commands
\*********************************************************************************************/
bool SerialBridgeCommand(void)
void CmndSSerialSend(void)
{
char command [CMDSZ];
bool serviced = true;
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kSerialBridgeCommands);
if (-1 == command_code) {
serviced = false; // Unknown command
}
else if ((CMND_SSERIALSEND == command_code) && (XdrvMailbox.index > 0) && (XdrvMailbox.index <= 5)) {
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= 5)) {
serial_bridge_raw = (XdrvMailbox.index > 3);
if (XdrvMailbox.data_len > 0) {
if (1 == XdrvMailbox.index) {
@ -144,19 +138,18 @@ bool SerialBridgeCommand(void)
codes += 2;
}
}
Response_P(S_JSON_COMMAND_SVALUE, command, D_JSON_DONE);
Response_P(S_JSON_COMMAND_SVALUE, XdrvMailbox.command, D_JSON_DONE);
}
}
else if (CMND_SBAUDRATE == command_code) {
if (XdrvMailbox.payload > 1200) {
Settings.sbaudrate /= 1200; // Make it a valid baudrate
SerialBridgeSerial->begin(Settings.sbaudrate * 1200); // Reinitialize serial port with new baud rate
}
Response_P(S_JSON_COMMAND_NVALUE, command, Settings.sbaudrate * 1200);
}
else serviced = false; // Unknown command
}
return serviced;
void CmndSBaudrate(void)
{
if (XdrvMailbox.payload > 1200) {
Settings.sbaudrate /= 1200; // Make it a valid baudrate
SerialBridgeSerial->begin(Settings.sbaudrate * 1200); // Reinitialize serial port with new baud rate
}
Response_P(S_JSON_COMMAND_NVALUE, XdrvMailbox.command, Settings.sbaudrate * 1200);
}
/*********************************************************************************************\
@ -176,7 +169,7 @@ bool Xdrv08(uint8_t function)
SerialBridgeInit();
break;
case FUNC_COMMAND:
result = SerialBridgeCommand();
result = DecodeCommand(kSerialBridgeCommands, SerialBridgeCommand);
break;
}
}