|
@@ -384,6 +384,53 @@ void s433Data(int ret, unsigned char* buffer) {
|
|
s433DataInit();
|
|
s433DataInit();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+static unsigned char rdlWatchBuffer[1024] = {0};
|
|
|
|
+static int rdlWatchBufferSize = 0;
|
|
|
|
+static constexpr char FRAME_END[2] = {0x0D, 0x0A}; // 帧结束标记
|
|
|
|
+static std::string rdlWatchDataStr = "";
|
|
|
|
+void rdlWatch(int ret, const unsigned char* buffer) {
|
|
|
|
+ if (ret <= 0 || buffer == nullptr) return;
|
|
|
|
+
|
|
|
|
+ // 追加数据(自动防溢出)
|
|
|
|
+ const int copySize = std::min(ret, static_cast<int>(sizeof(rdlWatchBuffer) - rdlWatchBufferSize));
|
|
|
|
+ memcpy(rdlWatchBuffer + rdlWatchBufferSize, buffer, copySize);
|
|
|
|
+ rdlWatchBufferSize += copySize;
|
|
|
|
+
|
|
|
|
+ // 查找完整帧
|
|
|
|
+ while (rdlWatchBufferSize >= 2) { // 至少需要2字节才能判断帧尾
|
|
|
|
+ // 查找帧结束标记(从后往前找更高效)
|
|
|
|
+ bool found = false;
|
|
|
|
+ int frameEndPos = -1;
|
|
|
|
+
|
|
|
|
+ for (int i = rdlWatchBufferSize - 2; i >= 0; --i) {
|
|
|
|
+ if (rdlWatchBuffer[i] == FRAME_END[0] &&
|
|
|
|
+ rdlWatchBuffer[i+1] == FRAME_END[1]) {
|
|
|
|
+ frameEndPos = i;
|
|
|
|
+ found = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (found) {
|
|
|
|
+ const int frameSize = frameEndPos + 2; // 包含结束符的完整帧长度
|
|
|
|
+ rdlWatchDataStr.assign(rdlWatchBuffer, rdlWatchBuffer + frameEndPos); // 不包含结束符
|
|
|
|
+
|
|
|
|
+ std::string msg = "t10" + rdlWatchDataStr;
|
|
|
|
+ TcpClient::instance()->sendMsg(msg.c_str());
|
|
|
|
+
|
|
|
|
+ // 移除已处理数据(包括结束符)
|
|
|
|
+ const int remaining = rdlWatchBufferSize - frameSize;
|
|
|
|
+ if (remaining > 0) {
|
|
|
|
+ memmove(rdlWatchBuffer, rdlWatchBuffer + frameSize, remaining);
|
|
|
|
+ }
|
|
|
|
+ rdlWatchBufferSize = remaining;
|
|
|
|
+ } else {
|
|
|
|
+ break; // 没有完整帧,等待更多数据
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
bool UartContext::threadLoop() {
|
|
bool UartContext::threadLoop() {
|
|
if (mIsOpen) {
|
|
if (mIsOpen) {
|
|
unsigned char buffer[1024] = {0};
|
|
unsigned char buffer[1024] = {0};
|
|
@@ -396,8 +443,8 @@ bool UartContext::threadLoop() {
|
|
revStr += base::format("%02x",buffer[i]);
|
|
revStr += base::format("%02x",buffer[i]);
|
|
revStr2 += buffer[i];
|
|
revStr2 += buffer[i];
|
|
}
|
|
}
|
|
- LOGD("串口 %d 收到消息: %s", mUartNumber, revStr.c_str());
|
|
|
|
- LOGD("串口 %d 收到消息: %s", mUartNumber, revStr2.c_str());
|
|
|
|
|
|
+ LOGD("串口 %d 收到源码消息: %s", mUartNumber, revStr.c_str());
|
|
|
|
+ LOGD("串口 %d 收到转换消息: %s", mUartNumber, revStr2.c_str());
|
|
|
|
|
|
std::string msgText = "串口" + std::to_string(mUartNumber) + ":" + revStr2;
|
|
std::string msgText = "串口" + std::to_string(mUartNumber) + ":" + revStr2;
|
|
setUartList(msgText);
|
|
setUartList(msgText);
|
|
@@ -414,6 +461,9 @@ bool UartContext::threadLoop() {
|
|
if (uartBaudRate3 == B9600) {
|
|
if (uartBaudRate3 == B9600) {
|
|
particleData(ret, buffer);
|
|
particleData(ret, buffer);
|
|
}
|
|
}
|
|
|
|
+ else {
|
|
|
|
+ rdlWatch(ret, buffer);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else if (mUartNumber == 1) {
|
|
else if (mUartNumber == 1) {
|
|
if (uartBaudRate1 == B9600) {
|
|
if (uartBaudRate1 == B9600) {
|