|
@@ -12,7 +12,11 @@
|
|
|
|
|
|
#include "uart/UartContext.h"
|
|
#include "uart/UartContext.h"
|
|
#include "utils/Log.h"
|
|
#include "utils/Log.h"
|
|
|
|
+#include "utils/ByteUtil.h"
|
|
#include "base/strings.hpp"
|
|
#include "base/strings.hpp"
|
|
|
|
+#include "storage/StoragePreferences.h"
|
|
|
|
+#include "service/BusinessConfig.h"
|
|
|
|
+#include "net/tcp_client5084.h"
|
|
|
|
|
|
#define UART_DATA_BUF_LEN 16384 // 16KB
|
|
#define UART_DATA_BUF_LEN 16384 // 16KB
|
|
|
|
|
|
@@ -62,6 +66,7 @@ UartContext::~UartContext() {
|
|
}
|
|
}
|
|
|
|
|
|
static bool mUart1IsOpen = false;
|
|
static bool mUart1IsOpen = false;
|
|
|
|
+static bool mUart2IsOpen = false;
|
|
static bool mUart3IsOpen = false;
|
|
static bool mUart3IsOpen = false;
|
|
|
|
|
|
// 打开串口,pFileName为串口号,baudRate为波特率
|
|
// 打开串口,pFileName为串口号,baudRate为波特率
|
|
@@ -71,10 +76,13 @@ bool UartContext::openUart(const char *pFileName, UINT baudRate) {
|
|
|
|
|
|
if (mUartID <= 0) {
|
|
if (mUartID <= 0) {
|
|
mIsOpen = false;
|
|
mIsOpen = false;
|
|
- if(mUartNumber == 1) {
|
|
|
|
|
|
+ if (mUartNumber == 1) {
|
|
mUart1IsOpen = false;
|
|
mUart1IsOpen = false;
|
|
}
|
|
}
|
|
- if(mUartNumber == 2) {
|
|
|
|
|
|
+ if (mUartNumber == 2) {
|
|
|
|
+ mUart2IsOpen = false;
|
|
|
|
+ }
|
|
|
|
+ if (mUartNumber == 3) {
|
|
mUart3IsOpen = false;
|
|
mUart3IsOpen = false;
|
|
}
|
|
}
|
|
LOGD("uart%d open error", mUartNumber);
|
|
LOGD("uart%d open error", mUartNumber);
|
|
@@ -101,10 +109,13 @@ bool UartContext::openUart(const char *pFileName, UINT baudRate) {
|
|
mUartID = 0;
|
|
mUartID = 0;
|
|
}
|
|
}
|
|
|
|
|
|
- if(mUartNumber == 1) {
|
|
|
|
|
|
+ if (mUartNumber == 1) {
|
|
mUart1IsOpen = true;
|
|
mUart1IsOpen = true;
|
|
}
|
|
}
|
|
- if(mUartNumber == 3) {
|
|
|
|
|
|
+ if (mUartNumber == 2) {
|
|
|
|
+ mUart2IsOpen = true;
|
|
|
|
+ }
|
|
|
|
+ if (mUartNumber == 3) {
|
|
mUart3IsOpen = true;
|
|
mUart3IsOpen = true;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -169,6 +180,123 @@ bool UartContext::readyToRun() {
|
|
return (mDataBufPtr != NULL);
|
|
return (mDataBufPtr != NULL);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+static std::string sleepRevStr = "";
|
|
|
|
+static int sleepRevStrSize = 0;
|
|
|
|
+static unsigned char s433Buffer[5] = {0};
|
|
|
|
+static int s433BufferSize = 0;
|
|
|
|
+void dataProcessing(int ret, unsigned char* buffer, std::string serialType) {
|
|
|
|
+
|
|
|
|
+ if (serialType == SerialType::ENABLE) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ else if (serialType == SerialType::PANEL_BUTTON) {
|
|
|
|
+ if (buffer[0]==CMD_HEAD && buffer[ret-2] == CMD_END1 && buffer[ret-1] == CMD_END2){
|
|
|
|
+ std::string revStr = "";
|
|
|
|
+ //std::string logInfo = " <<< ";
|
|
|
|
+ //依次将读取到的数据输出到日志
|
|
|
|
+ for (int i = 0; i < ret; ++i) {
|
|
|
|
+ if (i==0 || i==ret-1 || i==ret-2){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ revStr += buffer[i];
|
|
|
|
+ }
|
|
|
|
+ buildProtocolData(revStr);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if (serialType == SerialType::S433_BUTTON) {
|
|
|
|
+ std::string revStr = "";
|
|
|
|
+ if (ret < 5) {
|
|
|
|
+ for (int i = 0; i < ret; ++i) {
|
|
|
|
+ s433Buffer[s433BufferSize + i] = buffer[i];
|
|
|
|
+ }
|
|
|
|
+ s433BufferSize += ret;
|
|
|
|
+
|
|
|
|
+ if (s433BufferSize < 5) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ s433BufferSize = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ ByteUtil::copyUnsignedCharArray(buffer, s433Buffer, ret);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (int i = 0; i < 5; ++i) {
|
|
|
|
+ if (i == 0 || i == 4){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ char buf[1024];
|
|
|
|
+ sprintf(buf, "%02x", s433Buffer[i]);
|
|
|
|
+ revStr += buf;
|
|
|
|
+ }
|
|
|
|
+// LOGD("revStr == %s", revStr.c_str());
|
|
|
|
+ TcpClient::instance()->dataParse(revStr);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ else if (serialType == SerialType::MULTIFUNCTIONAL_BUTTON) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ else if (serialType == SerialType::SLEEP_MATTRESS) {
|
|
|
|
+ // cd0f0076000004643320504168100064e401a601e301a501df01a501e601a601e101a501e101a401e401a601e301a401e401a301e401a401e101a601e201a501e301a301e401a401e101a401df01a401e301a501e301a501e201a401e401a401e101a401e101a501e201a301e201a501e201a3015631303032dc
|
|
|
|
+ char buf[1024] = {0};
|
|
|
|
+ // 根据进入的数据来判断,如果进入的数据是cd开头
|
|
|
|
+ if (buffer[0] == 0xcd && sleepRevStr == "") {
|
|
|
|
+ // 循环拼接解析
|
|
|
|
+ sleepRevStr = ByteUtil::convertToString(buffer, ret);
|
|
|
|
+// LOGD("sleepRevStr1 =======================> %s", sleepRevStr.c_str());
|
|
|
|
+
|
|
|
|
+ // 如果进入的数据字节数大于4,就可以判断完整数据长度
|
|
|
|
+ if (ret >= 4) {
|
|
|
|
+ sprintf(buf, "%02x", buffer[3]);
|
|
|
|
+ char *stop;
|
|
|
|
+ sleepRevStrSize = strtol(buf, &stop, 16);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ if (sleepRevStr.substr(0, 2) == "cd") {
|
|
|
|
+ for (int i = 0; i < ret; ++i) {
|
|
|
|
+ sprintf(buf, "%02x", buffer[i]);
|
|
|
|
+ sleepRevStr += buf;
|
|
|
|
+
|
|
|
|
+ if (sleepRevStr.size() == 8) {
|
|
|
|
+ char *stop;
|
|
|
|
+ sleepRevStrSize = strtol(buf, &stop, 16);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+// LOGD("sleepRevStr2 =======================> %s", sleepRevStr.c_str());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (sleepRevStr.size() >= (sleepRevStrSize + 4) * 2) {
|
|
|
|
+ TcpClient5084::instance()->dataParse(sleepRevStr);
|
|
|
|
+
|
|
|
|
+ // 然后对数据进行处理
|
|
|
|
+ sleepRevStr = "";
|
|
|
|
+ sleepRevStrSize = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if (serialType == SerialType::NFC) {
|
|
|
|
+ if (buffer[0] == 0xfe && buffer[2] == 0x03) {
|
|
|
|
+ if (buffer[1] == 0x08) {
|
|
|
|
+ std::string revStr = "";
|
|
|
|
+ for (int i = 0; i < ret; ++i) {
|
|
|
|
+ if (i==0 || i==1 || i==2 || i==3 || i==4 || i==ret-1){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ char buf[1024];
|
|
|
|
+ sprintf(buf, "%02x", buffer[i]);
|
|
|
|
+ revStr += buf;
|
|
|
|
+ }
|
|
|
|
+ LOGD("revStr == %s", revStr.c_str());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
bool UartContext::threadLoop() {
|
|
bool UartContext::threadLoop() {
|
|
if (mIsOpen) {
|
|
if (mIsOpen) {
|
|
#if 0
|
|
#if 0
|
|
@@ -193,20 +321,14 @@ bool UartContext::threadLoop() {
|
|
unsigned char buffer[1024] = {0};
|
|
unsigned char buffer[1024] = {0};
|
|
int ret = read(mUartID, buffer, sizeof(buffer));
|
|
int ret = read(mUartID, buffer, sizeof(buffer));
|
|
if (ret > 0) {
|
|
if (ret > 0) {
|
|
- if (buffer[0]==CMD_HEAD && buffer[ret-2] == CMD_END1 && buffer[ret-1] == CMD_END2){
|
|
|
|
- std::string revStr = "";
|
|
|
|
- //std::string logInfo = " <<< ";
|
|
|
|
- //依次将读取到的数据输出到日志
|
|
|
|
- for (int i = 0; i < ret; ++i) {
|
|
|
|
- if (i==0 || i==ret-1 || i==ret-2){
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- //LOGD(" <<< %02x", buffer[i]);
|
|
|
|
- revStr += buffer[i];
|
|
|
|
- //logInfo += base::format("%02x",buffer[i]);
|
|
|
|
- }
|
|
|
|
- //LOGD(" %s",logInfo.c_str());
|
|
|
|
- buildProtocolData(revStr);
|
|
|
|
|
|
+ if (mUartNumber == 2) {
|
|
|
|
+ dataProcessing(ret, buffer, StoragePreferences::getString(STORE_LINUX_SERIAL2, "PANEL_BUTTON"));
|
|
|
|
+ }
|
|
|
|
+ else if (mUartNumber == 3) {
|
|
|
|
+ dataProcessing(ret, buffer, StoragePreferences::getString(STORE_LINUX_SERIAL3, "ENABLE"));
|
|
|
|
+ }
|
|
|
|
+ else if (mUartNumber == 1) {
|
|
|
|
+ dataProcessing(ret, buffer, StoragePreferences::getString(STORE_LINUX_SERIAL1, "ENABLE"));
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
//没收到数据时,休眠50ms,防止过度消耗cpu
|
|
//没收到数据时,休眠50ms,防止过度消耗cpu
|
|
@@ -229,16 +351,17 @@ void UartContext::init() {
|
|
// uart0 = new UartContext(UART_TTYS0);
|
|
// uart0 = new UartContext(UART_TTYS0);
|
|
// uart0->openUart("/dev/ttyS0", B115200);
|
|
// uart0->openUart("/dev/ttyS0", B115200);
|
|
|
|
|
|
-// uart1 = new UartContext(UART_TTYS1);
|
|
|
|
-// uart1->openUart("/dev/ttyS1", B115200);
|
|
|
|
|
|
+ uart1 = new UartContext(UART_TTYS1);
|
|
|
|
+ uart1->openUart("/dev/ttyS1", B115200);
|
|
|
|
+ LOGD("打开串口1");
|
|
|
|
|
|
- // 20221108的板子打开了串口2
|
|
|
|
- uart2 = new UartContext(UART_TTYS2);
|
|
|
|
- uart2->openUart("/dev/ttyS2", B115200);
|
|
|
|
|
|
+ uart2 = new UartContext(UART_TTYS2);
|
|
|
|
+ uart2->openUart("/dev/ttyS2", B115200);
|
|
|
|
+ LOGD("打开串口2");
|
|
|
|
|
|
- uart3 = new UartContext(UART_TTYS3);
|
|
|
|
- uart3->openUart("/dev/ttyS3", B115200);
|
|
|
|
- LOGD("打开串口");
|
|
|
|
|
|
+ uart3 = new UartContext(UART_TTYS3);
|
|
|
|
+ uart3->openUart("/dev/ttyS3", B115200);
|
|
|
|
+ LOGD("打开串口3");
|
|
}
|
|
}
|
|
|
|
|
|
void UartContext::destroy() {
|
|
void UartContext::destroy() {
|
|
@@ -276,4 +399,5 @@ bool UartContext::sendTo(int uart, const BYTE* pData, UINT len) {
|
|
}
|
|
}
|
|
|
|
|
|
bool UartContext::Uart1IsOpen() {return mUart1IsOpen;}
|
|
bool UartContext::Uart1IsOpen() {return mUart1IsOpen;}
|
|
|
|
+bool UartContext::Uart2IsOpen() {return mUart2IsOpen;}
|
|
bool UartContext::Uart3IsOpen() {return mUart3IsOpen;}
|
|
bool UartContext::Uart3IsOpen() {return mUart3IsOpen;}
|