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