From 2fc5340e97a1b0c15999c5a948e44bd34ac48293 Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 7 Nov 2022 17:29:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B2=20UART=20=D0=B2=20=D1=80=D0=B5=D0=B6?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=20=D0=BE=D0=B1=D0=BC=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=D0=B0=D0=BC=D0=B8=20Nex?= =?UTF-8?q?tion=20=D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BF=D0=BE=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=B7=D0=BD=D0=B0=D0=BA=D0=B0=D0=BC=20=5Fval=20?= =?UTF-8?q?=D0=B8=20=5Ftxt=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B2=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D1=80=D1=83=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/UART/Uart.cpp | 67 ++++++++++++++++++++------- src/modules/sensors/UART/modinfo.json | 27 ++++++++++- 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/src/modules/sensors/UART/Uart.cpp b/src/modules/sensors/UART/Uart.cpp index e0a1ea31..3aaa31e0 100644 --- a/src/modules/sensors/UART/Uart.cpp +++ b/src/modules/sensors/UART/Uart.cpp @@ -90,30 +90,31 @@ class UART : public IoTItem { } void onRegEvent(IoTItem* eventItem) { - if (!_myUART) return; + if (!_myUART || !eventItem) return; String printStr = ""; switch (_eventFormat) { case 0: return; // не указан формат, значит не следим за событиями case 1: // формат событий IoTM с использованием json - eventItem->getNetEvent(printStr); - _myUART->println(printStr); + if (eventItem->isGlobal()) { + eventItem->getNetEvent(printStr); + _myUART->println(printStr); + } break; case 2: // формат событий для Nextion ID=Value0xFF0xFF0xFF printStr += eventItem->getID(); - printStr += "="; - if (eventItem->value.isDecimal) - printStr += eventItem->getRoundValue(); - else { + if (printStr.indexOf("_") == -1) return; // пропускаем событие, если нет используемого признака типа данных - _txt или _vol + if (printStr.indexOf("_val") > 0) { + printStr.replace("_val", ".val="); + printStr += eventItem->getValue(); + } else if (printStr.indexOf("_txt") > 0) { + printStr.replace("_txt", ".txt="); printStr += "\""; - printStr += eventItem->value.valS; + printStr += eventItem->getValue(); printStr += "\""; - } - _myUART->print(printStr); - _myUART->write(0xff); - _myUART->write(0xff); - _myUART->write(0xff); + } else return; + uartPrintFFF(printStr); break; } } @@ -122,12 +123,27 @@ class UART : public IoTItem { uartHandle(); } - void uartPrint(const String& msg) { + void uartPrintFFF(const String& msg) { + if (_myUART) { + _myUART->print(msg); + _myUART->write(0xff); + _myUART->write(0xff); + _myUART->write(0xff); + } + } + + void uartPrintln(const String& msg) { if (_myUART) { _myUART->println(msg); } } + void uartPrint(const String& msg) { + if (_myUART) { + _myUART->print(msg); + } + } + void uartPrintHex(const String& msg) { if (!_myUART) return; @@ -141,14 +157,33 @@ class UART : public IoTItem { } IoTValue execute(String command, std::vector ¶m) { - if (command == "print") { + if (command == "println") { if (param.size() == 1) { - uartPrint(param[0].valS); + if (param[0].isDecimal) uartPrintln((String)param[0].valD); + else uartPrintln(param[0].valS); + } + } else if (command == "print") { + if (param.size() == 1) { + if (param[0].isDecimal) uartPrint((String)param[0].valD); + else uartPrint(param[0].valS); } } else if (command == "printHex") { if (param.size() == 1) { uartPrintHex(param[0].valS); } + } else if (command == "printFFF") { + if (param.size() == 2) { + String strToUart = ""; + if (param[0].isDecimal) + strToUart = param[0].valD; + else + strToUart = param[0].valS; + + if (param[1].valD) + uartPrintFFF("\"" + strToUart + "\""); + else + uartPrintFFF(strToUart); + } } return {}; diff --git a/src/modules/sensors/UART/modinfo.json b/src/modules/sensors/UART/modinfo.json index 02a35f33..f9e68cda 100644 --- a/src/modules/sensors/UART/modinfo.json +++ b/src/modules/sensors/UART/modinfo.json @@ -35,8 +35,31 @@ "tx": "TX пин", "rx": "RX пин", "speed": "Скорость UART", - "eventFormat": "Выбор формата обмена сообщениями с другими контроллерами. =0 - не указан формат, значит не следим за событиями, =1 - формат событий IoTM с использованием json, =2 - формат событий для Nextion отправка событий: ID=Value0xFF0xFF0xFF прием ордеров: ID=Value" - } + "eventFormat": "Выбор формата обмена сообщениями с другими контроллерами. =0 - не указан формат, значит не следим за событиями, =1 - формат событий IoTM с использованием json, =2 - формат событий для Nextion отправка событий: ID.val=Value0xFF0xFF0xFF прием ордеров: ID=Value. Отправляться будут события тех элементов, которые имеют суффикс в ИД _val или _txt, которые влияют на передаваемый формат." + }, + "retInfo": "Содержит полученное последнее по UART сообщение.", + "funcInfo": [ + { + "name": "println", + "descr": "Отправить в UART строку текста и признак завершения строки (перевод строки).", + "params": ["Строка текста"] + }, + { + "name": "print", + "descr": "Отправить в UART строку текста.", + "params": ["Строка текста"] + }, + { + "name": "printHex", + "descr": "Отправить в UART HEX-строку.", + "params": ["HEX-строка."] + }, + { + "name": "printFFF", + "descr": "Отправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF.", + "params": ["Строка текста", "1 - обернуть строку в кавычки, 0 - отправить без кавычек"] + } + ] }, "defActive": true, "usedLibs": {