From 87156fa3adfa2e3232a6f6e612584aa8a4ebaea1 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 19 一月 2021 18:40:25 +0800
Subject: [PATCH] 添加模拟灯光
---
lib/src/main/cpp/rtk_platform/platform.cpp | 157 ++++++++++++++++++++-------------------------------
1 files changed, 62 insertions(+), 95 deletions(-)
diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp
index 1f28070..33efdc8 100644
--- a/lib/src/main/cpp/rtk_platform/platform.cpp
+++ b/lib/src/main/cpp/rtk_platform/platform.cpp
@@ -25,6 +25,7 @@
#include "../test_items2/stop_car.h"
#include "../test_items2/operate_gear.h"
#include "../test_items2/drive_straight.h"
+#include "../rtk_module/virtual_rtk.h"
#define PARSE_BUFF_SIZE 4096
@@ -79,13 +80,12 @@
static bool mAyDevice = false;
-struct platformSocket exceptSocket, currSocket;
+struct platformSocket exceptSocket;
static sem_t sem_status_changed;
static bool requestPlatformSendRtk = false;
-static int platform_tcp_fd = 0;
+static CTcpPort *ctp = NULL;
-static pthread_mutex_t platform_tx_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t events_mutex = PTHREAD_MUTEX_INITIALIZER;
static struct gpsBrief gbf;
@@ -101,10 +101,12 @@
static void ReqRtkPlatformConfigTimeout(union sigval sig);
+static void TcpEventCallback(int stat, void *p, void *context);
+static void TcpDataCallback(void *buffer, int length, void *p, void *context);
+
static void ConnectPlatform(const char *domain_name, int port);
static void ConnectPlatformLater(union sigval sig);
-static void *PlatformDataListenThread(void *p);
static void *StatusListenThread(void *p);
static void PlatformChangeEntry(uint32_t events, const uint8_t *data, int length);
@@ -194,14 +196,10 @@
memset(&rbf, 0, sizeof(rbf));
memset(&defaultMcuRom, 0, sizeof(defaultMcuRom));
- pthread_mutex_init(&platform_tx_mutex, NULL);
pthread_mutex_init(&events_mutex, NULL);
eventQueue = NULL;
- platform_tcp_fd = -1;
-
- memset(&currSocket, 0, sizeof(currSocket));
memset(&platformStatus, 0, sizeof(platformStatus));
sem_init(&sem_status_changed, 0, 0);
@@ -247,14 +245,16 @@
platformStatus.registed = 0;
}
- pthread_mutex_lock(&platform_tx_mutex);
- if (platform_tcp_fd > 0 && (exceptSocket.port != currSocket.port || strcmp(currSocket.domain_name, exceptSocket.domain_name))) {
- DisconnectTCP(platform_tcp_fd);
- platform_tcp_fd = -1;
- } else if (platform_tcp_fd <= 0) {
- ConnectPlatform(exceptSocket.domain_name, exceptSocket.port);
- }
- pthread_mutex_unlock(&platform_tx_mutex);
+ ConnectPlatform(exceptSocket.domain_name, exceptSocket.port);
+
+// pthread_mutex_lock(&platform_tx_mutex);
+// if (platform_tcp_fd > 0 && (exceptSocket.port != currSocket.port || strcmp(currSocket.domain_name, exceptSocket.domain_name))) {
+// DisconnectTCP(platform_tcp_fd);
+// platform_tcp_fd = -1;
+// } else if (platform_tcp_fd <= 0) {
+// ConnectPlatform(exceptSocket.domain_name, exceptSocket.port);
+// }
+// pthread_mutex_unlock(&platform_tx_mutex);
}
void PlatformStatusChanged(uint32_t event, const uint8_t *data, int length)
@@ -270,17 +270,43 @@
return;
DEBUG("杩炴帴RTK骞冲彴 %s: %d", domain_name, port);
- // TODO
- struct platformSocketInfo *ptr = (struct platformSocketInfo *)malloc(sizeof(struct platformSocketInfo));
- strcpy(ptr->domain_name, domain_name);
- ptr->port = port;
+ if (ctp == NULL) {
+ ctp = new CTcpPort();
- pthread_t platform_pid;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
- pthread_create(&platform_pid, &attr, PlatformDataListenThread, ptr);
+ ctp->set_event_callback(TcpEventCallback, NULL);
+ ctp->set_data_callback(TcpDataCallback, NULL);
+ }
+
+ if (!ctp->IsOpen()) {
+ ctp->OpenTcpPort(domain_name, port);
+ } else if ((ctp->m_nPort != port || strcmp(ctp->m_sIp.c_str(), domain_name))) {
+ ctp->CloseTcpPort();
+ }
+}
+
+static void TcpEventCallback(int stat, void *p, void *context)
+{
+ CTcpPort *pTcpPort = (CTcpPort *)p;
+ uint8_t buffer[256];
+
+ strcpy((char *)buffer, pTcpPort->m_sIp.c_str());
+
+ buffer[pTcpPort->m_sIp.length() + 1] = HI_UINT16(pTcpPort->m_nPort);
+ buffer[pTcpPort->m_sIp.length() + 2] = LO_UINT16(pTcpPort->m_nPort);
+
+ if (stat == 0) {
+ PlatformStatusChanged(PLATFORM_CONNECT_EVT, buffer, pTcpPort->m_sIp.length() + 3);
+ } else {
+ PlatformStatusChanged(PLATFORM_DISCONNECT_EVT, buffer, pTcpPort->m_sIp.length() + 3);
+ }
+}
+
+static void TcpDataCallback(void *buffer, int length, void *p, void *context)
+{
+ if (length > 0) {
+ Parse(DATA_ACCESS_PLATFORM, (uint8_t *)buffer, length);
+ }
}
static void ConnectPlatformLater(union sigval sig) {
@@ -306,8 +332,8 @@
{
switch (events) {
case PLATFORM_CONNECT_EVT: {
- DEBUG("骞冲彴杩炴帴鎴愬姛 %s:%d", currSocket.domain_name, currSocket.port);
- MA_RtkPlatformConnect(1, currSocket.domain_name, currSocket.port);
+ DEBUG("骞冲彴杩炴帴鎴愬姛 %s:%d", data, BUILD_UINT16(data[strlen((char *)data) + 2], data[strlen((char *)data) + 1]));
+ MA_RtkPlatformConnect(1, (char *)data, BUILD_UINT16(data[strlen((char *)data) + 2], data[strlen((char *)data) + 1]));
platformStatus.connected = 1;
if (!platformStatus.registed || platformStatus.platformKeyLength == 0) {
@@ -321,8 +347,8 @@
}
case PLATFORM_DISCONNECT_EVT: {
- DEBUG("骞冲彴鏂紑 %s:%d", currSocket.domain_name, currSocket.port);
- MA_RtkPlatformConnect(0, currSocket.domain_name, currSocket.port);
+ DEBUG("骞冲彴鏂紑 %s:%d", data, BUILD_UINT16(data[strlen((char *)data) + 2], data[strlen((char *)data) + 1]));
+ MA_RtkPlatformConnect(0, (char *)data, BUILD_UINT16(data[strlen((char *)data) + 2], data[strlen((char *)data) + 1]));
AppTimer_delete(ConnectPlatformLater);
AppTimer_add(ConnectPlatformLater, D_SEC(2));
@@ -660,7 +686,11 @@
break;
}
case BLUETOOTH_DATA_EVT: {
- ParseMcu(data, length);
+ if (Virtual2IsConnected()) {
+
+ } else {
+ ParseMcu(data, length);
+ }
break;
}
case SENSOR_CHANGE_EVT: {
@@ -672,76 +702,13 @@
}
}
-static void *PlatformDataListenThread(void *p) {
- struct platformSocket *ptr = (struct platformSocket *)p;
-
- uint8_t RxBuf[PARSE_BUFF_SIZE];
-
- int fds_ret;
- struct timeval tv;
- fd_set rdfds;
- fd_set exfds;
-
- int fd = -1;
- int RxBufLen = 0;
-
- fd = ConnectTCP(ptr->domain_name, ptr->port);
-
- pthread_mutex_lock(&platform_tx_mutex);
- platform_tcp_fd = fd;
-
- currSocket = *ptr;
-
- pthread_mutex_unlock(&platform_tx_mutex);
-
- if (fd > 0) {
- PlatformStatusChanged(PLATFORM_CONNECT_EVT, NULL, 0);
- }
-
- while (fd > 0) {
- tv.tv_sec = 5;
- tv.tv_usec = 0;
- FD_ZERO(&rdfds); //clean
- FD_SET(fd, &rdfds); //set
-
- fds_ret = select(fd + 1, &rdfds, NULL, NULL, &tv);
-
- if (fds_ret < 0) {
- break;
- } else if(fds_ret == 0) {
- //Occur failure(such as line disconnect)
- } else if(FD_ISSET(fd, &rdfds)) {
- RxBufLen = ReadTCP(fd, RxBuf, sizeof(RxBuf));
-
- if (RxBufLen < 0) {
- break;
- } else if (RxBufLen > 0) {
- Parse(DATA_ACCESS_PLATFORM, RxBuf, RxBufLen);
- }
- }
- }
-
- pthread_mutex_lock(&platform_tx_mutex);
- if (platform_tcp_fd > 0) {
- DisconnectTCP(platform_tcp_fd);
- platform_tcp_fd = -1;
- }
- pthread_mutex_unlock(&platform_tx_mutex);
- free(ptr);
-
- PlatformStatusChanged(PLATFORM_DISCONNECT_EVT, NULL, 0);
- pthread_exit(NULL);
-}
-
int WritePlatform(const uint8_t * buf, uint32_t len)
{
int ret = -1;
- pthread_mutex_lock(&platform_tx_mutex);
- if (platform_tcp_fd > 0) {
- ret = WriteTCP(platform_tcp_fd, buf, len);
+ if (ctp != NULL && ctp->IsOpen()) {
+ ret = ctp->WriteTCP(buf, len);
}
- pthread_mutex_unlock(&platform_tx_mutex);
return ret;
}
--
Gitblit v1.8.0