From f7a18ec4494b9c5c9ef3fd440bbf68ffc6425e18 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期四, 08 十二月 2022 15:40:56 +0800 Subject: [PATCH] 智慧驾培首次提交 --- lib/src/main/cpp/rtk_platform/platform.cpp | 73 +++++++++++++++--------------------- 1 files changed, 31 insertions(+), 42 deletions(-) diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp index 11139bc..6f49707 100644 --- a/lib/src/main/cpp/rtk_platform/platform.cpp +++ b/lib/src/main/cpp/rtk_platform/platform.cpp @@ -5,7 +5,8 @@ #include <cstdint> #include <cstdlib> #include <cstring> -#include <pthread.h> +#include <thread> +#include <mutex> #include <semaphore.h> #include <cmath> #include "platform.h" @@ -88,7 +89,7 @@ static CTcpPort *ctp = NULL; -static pthread_mutex_t events_mutex = PTHREAD_MUTEX_INITIALIZER; +static std::mutex events_mutex; static struct gpsBrief gbf; static struct rtkBrief rbf; @@ -101,24 +102,24 @@ static struct event_t * FetchEvent(void); static void RemoveEvent(void); -static void ReqRtkPlatformConfigTimeout(union sigval sig); +static void ReqRtkPlatformConfigTimeout(apptimer_var_t val); 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 ConnectPlatformLater(apptimer_var_t val); -static void *StatusListenThread(void *p); +static void StatusListenThread(void); static void PlatformChangeEntry(uint32_t events, const uint8_t *data, int length); static void RegisterPlatform(void); -static void RegisterPlatformTimeout(union sigval sig); +static void RegisterPlatformTimeout(apptimer_var_t val); static void LoginPlatform(void); -static void LoginPlatformTimeout(union sigval sig); -static void TriggerHeartbeat(union sigval sig); -static void RequestRtkNoResp(union sigval sig); +static void LoginPlatformTimeout(apptimer_var_t val); +static void TriggerHeartbeat(apptimer_var_t val); +static void RequestRtkNoResp(apptimer_var_t val); static void AddEvnet(uint32_t event, const uint8_t *data, int length) @@ -138,7 +139,7 @@ memcpy(nw->event.data, data, length); } - pthread_mutex_lock(&events_mutex); + lock_guard<std::mutex> lock(events_mutex); struct event_queue_t *p = eventQueue; @@ -148,22 +149,18 @@ eventQueue = nw; else p->next = nw; - - pthread_mutex_unlock(&events_mutex); } static struct event_t * FetchEvent(void) { struct event_t *evp = NULL; - pthread_mutex_lock(&events_mutex); + lock_guard<std::mutex> lock(events_mutex); struct event_queue_t *p = eventQueue; if (p != NULL) { evp = &p->event; } - - pthread_mutex_unlock(&events_mutex); return evp; } @@ -172,7 +169,7 @@ { void *p1 = NULL, *p2 = NULL; - pthread_mutex_lock(&events_mutex); + lock_guard<std::mutex> lock(events_mutex); struct event_queue_t *p = eventQueue; if (p != NULL) { @@ -180,7 +177,6 @@ p1 = p; p2 = p->event.data; } - pthread_mutex_unlock(&events_mutex); if (p2 != NULL) free(p2); @@ -198,8 +194,6 @@ memset(&rbf, 0, sizeof(rbf)); memset(&defaultMcuRom, 0, sizeof(defaultMcuRom)); - pthread_mutex_init(&events_mutex, NULL); - eventQueue = NULL; memset(&platformStatus, 0, sizeof(platformStatus)); @@ -209,17 +203,11 @@ PlatformTxInit(); - pthread_t pid; - pthread_attr_t attr; - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached - pthread_create(&pid, &attr, StatusListenThread, NULL); + std::thread(StatusListenThread).detach(); } -static void ReqRtkPlatformConfigTimeout(union sigval sig) +static void ReqRtkPlatformConfigTimeout(apptimer_var_t val) { - AppTimer_delete(ReqRtkPlatformConfigTimeout); - AppTimer_add(ReqRtkPlatformConfigTimeout, D_SEC(2)); MA_ReqRtkPlatformConfig(); } @@ -327,12 +315,11 @@ } } -static void ConnectPlatformLater(union sigval sig) { - AppTimer_delete(ConnectPlatformLater); +static void ConnectPlatformLater(apptimer_var_t val) { ConnectPlatform(exceptSocket.domain_name, exceptSocket.port); } -static void *StatusListenThread(void *p) { +static void StatusListenThread(void) { while (true) { sem_wait(&sem_status_changed); @@ -415,6 +402,8 @@ case GPS_UPDATE_EVT: { const gpsStatus_t *gps = (gpsStatus_t *) data; + DEBUG("GPS: %s", const_cast<gpsStatus_t *>(gps)->toString().c_str()); + gbf.qf = gps->gps_status; gbf.latitude = gps->latitude; gbf.longitude = gps->longitude; @@ -434,6 +423,7 @@ MA_SendRtkBrief(&rbf); } + // MA_SendGpsBrief(&brief); RequestRtkDownload(gps, 1); break; @@ -443,6 +433,8 @@ uint32_t ost1 = ost; const rtk_info *rtk = (rtk_info *) data; + + DEBUG("RTK: %s", const_cast<rtk_info *>(rtk)->toString().c_str()); rbf.qf = rtk->qf; rbf.coord_x = rtk->y; @@ -517,7 +509,7 @@ if (strlen(defaultMcuRom.verCode) > 0 && ver.size() >= 4 && strcmp(defaultMcuRom.verCode, ver[3].c_str()) != 0 && defaultMcuRom.rom != NULL) { - UploadDfuFile(defaultMcuRom.rom, defaultMcuRom.length); + /////////////////UploadDfuFile(defaultMcuRom.rom, defaultMcuRom.length); delete[]defaultMcuRom.rom; defaultMcuRom.rom = NULL; } @@ -678,7 +670,7 @@ if (sta == 3) { // Connected btConnected = true; - ParseMcuInit(); + ////////////////////ParseMcuInit(); ConfigRTKModuleLater(); PlayTTS("钃濈墮杩炴帴", NULL); @@ -713,7 +705,7 @@ if (Virtual2IsConnected()) { } else { - ParseMcu(data, length); + ///////////ParseMcu(data, length); } break; } @@ -737,10 +729,10 @@ return ret; } -static void RegisterPlatformTimeout(union sigval sig) +static void RegisterPlatformTimeout(apptimer_var_t val) { DEBUG("RTK骞冲彴娉ㄥ唽瓒呮椂"); - AppTimer_delete(RegisterPlatformTimeout); + RegisterPlatform(); } @@ -753,19 +745,17 @@ strlen((char *)deviceInfo.device_model), deviceInfo.device_sn, deviceInfo.imei); } -static void TriggerHeartbeat(union sigval sig) { - AppTimer_delete(TriggerHeartbeat); - +static void TriggerHeartbeat(apptimer_var_t val) { if (platformStatus.login && platformStatus.connected) { SendHeartBeat(DATA_ACCESS_PLATFORM); AppTimer_add(TriggerHeartbeat, D_SEC(30)); } } -static void LoginPlatformTimeout(union sigval sig) +static void LoginPlatformTimeout(apptimer_var_t val) { DEBUG("RTK骞冲彴鐧诲綍瓒呮椂"); - AppTimer_delete(LoginPlatformTimeout); + LoginPlatform(); } @@ -829,9 +819,8 @@ AppTimer_add(RequestRtkNoResp, D_SEC(7)); // 搴旇姣忕鏀跺埌涓�娆� } -static void RequestRtkNoResp(union sigval sig) +static void RequestRtkNoResp(apptimer_var_t val) { - AppTimer_delete(RequestRtkNoResp); requestPlatformSendRtk = true; rtcmLength = 0; } -- Gitblit v1.8.0