yy1717
2022-12-08 f7a18ec4494b9c5c9ef3fd440bbf68ffc6425e18
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;
}