mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-19 12:27:16 +00:00
Prep XYZModem support on Serial/USB and telnet
This commit is contained in:
parent
0cb6a8ba24
commit
2bf67b96a6
@ -20,6 +20,9 @@ class TASCONSOLE {
|
||||
virtual size_t printf(const char*, char *, const char*&, const char*&, const char*&) = 0;
|
||||
virtual size_t printf(char *) = 0;
|
||||
virtual size_t read() = 0;
|
||||
virtual size_t write(uint8_t) = 0;
|
||||
virtual size_t write(const uint8_t *buf, size_t size) = 0;
|
||||
|
||||
virtual size_t setRxBufferSize(size_t) = 0;
|
||||
// virtual size_t setTxBufferSize(size_t) = 0;
|
||||
};
|
||||
@ -62,6 +65,14 @@ public:
|
||||
return object->read();
|
||||
}
|
||||
|
||||
size_t write(uint8_t data) {
|
||||
return object->write(data);
|
||||
}
|
||||
|
||||
size_t write(const uint8_t *buf, size_t size) {
|
||||
return object->write(buf, size);
|
||||
}
|
||||
|
||||
size_t setRxBufferSize(size_t rx_queue_len) {
|
||||
return object->setRxBufferSize(rx_queue_len);
|
||||
}
|
||||
@ -104,6 +115,14 @@ public:
|
||||
return object.read();
|
||||
}
|
||||
|
||||
size_t write(uint8_t data) override {
|
||||
return object.write(data);
|
||||
}
|
||||
|
||||
size_t write(const uint8_t *buf, size_t size) override {
|
||||
return object.write(buf, size);
|
||||
}
|
||||
|
||||
size_t setRxBufferSize(size_t size) override {
|
||||
return object.setRxBufferSize(size);
|
||||
}
|
||||
|
@ -502,6 +502,8 @@ enum SettingsTextIndex { SET_OTAURL,
|
||||
|
||||
enum SpiInterfaces { SPI_NONE, SPI_MOSI, SPI_MISO, SPI_MOSI_MISO };
|
||||
|
||||
enum XYZModemProtocols { TXMP_NONE, TXMP_SERIAL, TXMP_TASCONSOLE, TXMP_TELNET };
|
||||
|
||||
enum DevGroupMessageType { DGR_MSGTYP_FULL_STATUS, DGR_MSGTYP_PARTIAL_UPDATE, DGR_MSGTYP_UPDATE, DGR_MSGTYP_UPDATE_MORE_TO_COME, DGR_MSGTYP_UPDATE_DIRECT, DGR_MSGTYPE_UPDATE_COMMAND, DGR_MSGTYPFLAG_WITH_LOCAL = 128 };
|
||||
|
||||
enum DevGroupMessageFlag { DGR_FLAG_RESET = 1, DGR_FLAG_STATUS_REQUEST = 2, DGR_FLAG_FULL_STATUS = 4, DGR_FLAG_ACK = 8, DGR_FLAG_MORE_TO_COME = 16, DGR_FLAG_DIRECT = 32, DGR_FLAG_ANNOUNCEMENT = 64, DGR_FLAG_LOCAL = 128 };
|
||||
|
@ -1774,8 +1774,11 @@ void ArduinoOtaLoop(void)
|
||||
|
||||
/********************************************************************************************/
|
||||
|
||||
void SerialInput(void)
|
||||
{
|
||||
void SerialInput(void) {
|
||||
#ifdef USE_XYZMODEM
|
||||
if (XYZModemActive(TXMP_TASCONSOLE)) { return; }
|
||||
#endif // USE_XYZMODEM
|
||||
|
||||
static uint32_t serial_polling_window = 0;
|
||||
static bool serial_buffer_overrun = false;
|
||||
|
||||
@ -1811,6 +1814,12 @@ void SerialInput(void)
|
||||
return;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef USE_XYZMODEM
|
||||
if (XYZModemStart(TXMP_TASCONSOLE, TasmotaGlobal.serial_in_byte)) { return; }
|
||||
#endif // USE_XYZMODEM
|
||||
|
||||
/*-------------------------------------------------------------------------------------------*/
|
||||
|
||||
if (TasmotaGlobal.serial_in_byte > 127 && !Settings->flag.mqtt_serial_raw) { // Discard binary data above 127 if no raw reception allowed - CMND_SERIALSEND3
|
||||
@ -1923,12 +1932,20 @@ void SerialInput(void)
|
||||
String console_buffer = "";
|
||||
|
||||
void TasConsoleInput(void) {
|
||||
#ifdef USE_XYZMODEM
|
||||
if (XYZModemActive(TXMP_TASCONSOLE)) { return; }
|
||||
#endif // USE_XYZMODEM
|
||||
|
||||
static bool console_buffer_overrun = false;
|
||||
|
||||
while (TasConsole.available()) {
|
||||
delay(0);
|
||||
char console_in_byte = TasConsole.read();
|
||||
|
||||
#ifdef USE_XYZMODEM
|
||||
if (XYZModemStart(TXMP_TASCONSOLE, console_in_byte)) { return; }
|
||||
#endif // USE_XYZMODEM
|
||||
|
||||
if (isprint(console_in_byte)) { // Any char between 32 and 127
|
||||
if (console_buffer.length() < INPUT_BUFFER_SIZE) { // Add char to string if it still fits
|
||||
console_buffer += console_in_byte;
|
||||
|
@ -136,6 +136,10 @@ void TelnetGetLog(void) {
|
||||
/********************************************************************************************/
|
||||
|
||||
void TelnetLoop(void) {
|
||||
#ifdef USE_XYZMODEM
|
||||
if (XYZModemActive(TXMP_TELNET)) { return; }
|
||||
#endif // USE_XYZMODEM
|
||||
|
||||
// check for a new client connection
|
||||
if ((Telnet.server) && (Telnet.server->hasClient())) {
|
||||
WiFiClient new_client = Telnet.server->available();
|
||||
@ -181,6 +185,11 @@ void TelnetLoop(void) {
|
||||
while (Telnet.client.available()) {
|
||||
yield();
|
||||
uint8_t in_byte = Telnet.client.read();
|
||||
|
||||
#ifdef USE_XYZMODEM
|
||||
if (XYZModemWifiClientStart(&Telnet.client, in_byte)) { return; }
|
||||
#endif // USE_XYZMODEM
|
||||
|
||||
if (isprint(in_byte)) { // Any char between 32 and 127
|
||||
if (Telnet.in_byte_counter < Telnet.buffer_size -1) { // Add char to string if it still fits
|
||||
Telnet.buffer[Telnet.in_byte_counter++] = in_byte;
|
||||
|
Loading…
x
Reference in New Issue
Block a user