mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 03:49:13 +03:00
Добавляем прием событий с экранов dwin в третий режим UART
только прием данный целых чисел int16
This commit is contained in:
@@ -14,6 +14,10 @@
|
|||||||
class UART : public IoTItem {
|
class UART : public IoTItem {
|
||||||
private:
|
private:
|
||||||
int _eventFormat = 0; // 0 - нет приема, 1 - json IoTM, 2 - Nextion
|
int _eventFormat = 0; // 0 - нет приема, 1 - json IoTM, 2 - Nextion
|
||||||
|
char _inc;
|
||||||
|
String _inStr = ""; // буфер приема строк в режимах 0, 1, 2
|
||||||
|
uint8_t _headerBuf[260]; // буфер для приема пакета dwin
|
||||||
|
int _headerIndex = 0; // счетчик принятых байт пакета
|
||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
SoftwareSerial* _myUART = nullptr;
|
SoftwareSerial* _myUART = nullptr;
|
||||||
@@ -70,23 +74,61 @@ class UART : public IoTItem {
|
|||||||
if (!_myUART) return;
|
if (!_myUART) return;
|
||||||
|
|
||||||
if (_myUART->available()) {
|
if (_myUART->available()) {
|
||||||
static String inStr = "";
|
if (_eventFormat == 3) { // третий режим, значит ожидаем бинарный пакет данных от dwin
|
||||||
char inc;
|
_headerBuf[_headerIndex] = _myUART->read();
|
||||||
|
|
||||||
inc = _myUART->read();
|
|
||||||
if (inc == 0xFF) {
|
|
||||||
inc = _myUART->read();
|
|
||||||
inc = _myUART->read();
|
|
||||||
inStr = "";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inc == '\r') return;
|
// ищем валидный заголовок пакета dwin, проверяя каждый следующий байт
|
||||||
|
if (_headerIndex == 0 && _headerBuf[_headerIndex] != 0x5A ||
|
||||||
if (inc == '\n') {
|
_headerIndex == 1 && _headerBuf[_headerIndex] != 0xA5 ||
|
||||||
analyzeString(inStr);
|
_headerIndex == 2 && _headerBuf[_headerIndex] == 0 ||
|
||||||
inStr = "";
|
_headerIndex == 3 && _headerBuf[_headerIndex] == 0x82 ) {
|
||||||
} else inStr += inc;
|
_headerIndex = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_headerIndex == _headerBuf[2] + 2) { // получили все данные из пакета
|
||||||
|
// Serial.print("ffffffff");
|
||||||
|
// for (int i=0; i<=_headerIndex; i++)
|
||||||
|
// Serial.printf("%#x ", _headerBuf[i]);
|
||||||
|
// Serial.println("!!!");
|
||||||
|
|
||||||
|
String valStr, id = "_";
|
||||||
|
if (_headerIndex == 8) { // предполагаем, что получили int16
|
||||||
|
valStr = (String)((_headerBuf[7] << 8) | _headerBuf[8]);
|
||||||
|
}
|
||||||
|
|
||||||
|
char buf[5];
|
||||||
|
hex2string(_headerBuf + 4, 2, buf);
|
||||||
|
id += (String)buf;
|
||||||
|
|
||||||
|
IoTItem* item = findIoTItemByPartOfName(id);
|
||||||
|
if (item) {
|
||||||
|
//Serial.printf("received data: %s for VP: %s for ID: %s\n", valStr, buf, item->getID());
|
||||||
|
generateOrder(item->getID(), valStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
_headerIndex = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_headerIndex++;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
_inc = _myUART->read();
|
||||||
|
if (_inc == 0xFF) {
|
||||||
|
_inc = _myUART->read();
|
||||||
|
_inc = _myUART->read();
|
||||||
|
_inStr = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_inc == '\r') return;
|
||||||
|
|
||||||
|
if (_inc == '\n') {
|
||||||
|
analyzeString(_inStr);
|
||||||
|
_inStr = "";
|
||||||
|
} else _inStr += _inc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,7 +203,7 @@ class UART : public IoTItem {
|
|||||||
_myUART->write((eventItem->value.valS.length() - u16counter) * 2 + 5); // подсчитываем и отправляем размер итоговой строки + служебные байты
|
_myUART->write((eventItem->value.valS.length() - u16counter) * 2 + 5); // подсчитываем и отправляем размер итоговой строки + служебные байты
|
||||||
_myUART->write(0x82); // требуем запись в память
|
_myUART->write(0x82); // требуем запись в память
|
||||||
uartPrintHex(VP); // отправляем адрес в памяти VP
|
uartPrintHex(VP); // отправляем адрес в памяти VP
|
||||||
Serial.println("ffffff " + VP);
|
//Serial.println("ffffff " + VP);
|
||||||
//_myUART->write(0x53);
|
//_myUART->write(0x53);
|
||||||
//_myUART->write(0x00);
|
//_myUART->write(0x00);
|
||||||
uartPrintStrInUTF16(eventItem->value.valS.c_str(), eventItem->value.valS.length()); // отправляем строку для записи
|
uartPrintStrInUTF16(eventItem->value.valS.c_str(), eventItem->value.valS.length()); // отправляем строку для записи
|
||||||
|
|||||||
Reference in New Issue
Block a user