s
yy1717
2020-01-13 edc694498e7ca9a0475bbf5576729aedfc88d3f0
s
5个文件已修改
157 ■■■■ 已修改文件
Documents/模拟驾考APP内部通讯.docx 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/master/comm_if.cpp 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/master/comm_if.h 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/rtk_module/rtk.cpp 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/rtk_platform/platform.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Documents/模拟驾考APP内部通讯.docx
Binary files differ
lib/src/main/cpp/master/comm_if.cpp
@@ -11,6 +11,7 @@
#include "../rtk_platform/platform.h"
#include "../utils/xconvert.h"
#include "../driver_test.h"
#include "../defs.h"
#include <string>
#include <iostream>
@@ -33,9 +34,14 @@
#define ID_MS_SENSOR_CFG        0x8008
#define ID_MS_START_EXAM        0x8009
#define ID_SM_EXAM_STATUS       0x0009
#define ID_MS_IND_ONOFF         0x800A
#define ID_SM_GPS_BRIEF         0x000A
#define ID_SM_RTK_BRIEF         0x000B
#define ID_SM_EXAM_BRIEF         0x000C
#define ID_SM_ENTER_MAP         0x000D
#define ID_SM_CAR               0x000E
static int OnOff = 0;
void MA_NdkStart(void)
{
@@ -136,6 +142,9 @@
void MA_SendGpsBrief(const struct gpsBrief *brief)
{
    if (!(OnOff & BV(0)))
        return;
    StringBuffer sb;
    Writer<StringBuffer> writer(sb);
@@ -163,6 +172,9 @@
void MA_SendRtkBrief(const struct rtkBrief *brief)
{
    if (!(OnOff & BV(1)))
        return;
    char a[2] = {brief->coord_x_dir, 0};
    char b[2] = {brief->coord_y_dir, 0};
@@ -197,6 +209,76 @@
void MA_SendExamWrong(vector<int>&err)
{
}
void MA_SendCarPosition(const struct carBrief *brief)
{
    if (!(OnOff & BV(2))) return;
    StringBuffer sb;
    Writer<StringBuffer> writer(sb);
    writer.StartObject();
    writer.Key("utc");
    writer.String(brief->utc);
    writer.Key("qf");
    writer.Int(brief->qf);
    writer.Key("map_id");
    writer.Int(brief->map_id);
    writer.Key("move");
    writer.Int(brief->move);
    writer.Key("speed");
    writer.Double(brief->speed);
    writer.Key("heading");
    writer.Double(brief->heading);
    writer.Key("main_ant");
    writer.StartArray();
    writer.Double(brief->main_ant[0]);
    writer.Double(brief->main_ant[1]);
    writer.EndArray();
    writer.Key("axial");
    writer.StartArray();
    writer.Int(brief->axial[0]);
    writer.Int(brief->axial[1]);
    writer.EndArray();
    writer.Key("left_front_tire");
    writer.StartArray();
    writer.Int(brief->left_front_tire[0]);
    writer.Int(brief->left_front_tire[1]);
    writer.EndArray();
    writer.Key("right_front_tire");
    writer.StartArray();
    writer.Int(brief->right_front_tire[0]);
    writer.Int(brief->right_front_tire[1]);
    writer.EndArray();
    writer.Key("left_rear_tire");
    writer.StartArray();
    writer.Int(brief->left_rear_tire[0]);
    writer.Int(brief->left_rear_tire[1]);
    writer.EndArray();
    writer.Key("right_rear_tire");
    writer.StartArray();
    writer.Int(brief->right_rear_tire[0]);
    writer.Int(brief->right_rear_tire[1]);
    writer.EndArray();
    writer.Key("point");
    writer.StartArray();
    for (int i = 0; i < brief->pointNum; ++i) {
        writer.Double(brief->point[i*2]);
        writer.Double(brief->point[i*2+1]);
    }
    writer.EndArray();
    writer.EndObject();
    SendMsgToMainProc(ID_SM_CAR, sb.GetString());
}
void MA_MainProcMsgEntry(int cmd, const char *value)
@@ -461,6 +543,19 @@
            }
            break;
        }
        case ID_MS_IND_ONOFF: {
            Document doc;
            doc.Parse(value);
            if (!doc.HasParseError()) {
                if (doc.HasMember("on_off")) {
                    Value& s = doc["on_off"];
                    do {
                        OnOff = s.GetInt();
                    } while (OnOff != s.GetInt());
                }
            }
            break;
        }
        default:break;
    }
}
lib/src/main/cpp/master/comm_if.h
@@ -29,6 +29,23 @@
    double roll;
};
struct carBrief {
    char utc[32];
    int qf;
    int map_id;
    int move;
    double speed;
    double heading;
    double main_ant[2];
    int axial[2];
    int left_front_tire[2];
    int right_front_tire[2];
    int left_rear_tire[2];
    int right_rear_tire[2];
    double *point;
    int pointNum;
};
void MA_MainProcMsgEntry(int cmd, const char *value);
void MA_NdkStart(void);
@@ -42,5 +59,7 @@
void MA_SendExamStatus(int start, int errorCode);
void MA_SendGpsBrief(const struct gpsBrief *brief);
void MA_SendRtkBrief(const struct rtkBrief *brief);
void MA_SendCarPosition(const struct carBrief *brief);
#endif //MYAPPLICATION2_COMM_IF_H
lib/src/main/cpp/rtk_module/rtk.cpp
@@ -37,8 +37,6 @@
static gpsStatus_t gpsStatus;
static int tra_hh, tra_mm, tra_ss, tra_dss;
static rtk_info CurrRTKInfo;
static void CheckPjkParam(void);
@@ -52,7 +50,8 @@
    DEBUG("ConfigRTKModule");
    memset(&CurrRTKInfo, 0, sizeof(CurrRTKInfo));
    tra_hh = tra_mm = tra_ss = tra_dss = 0;
    CurrRTKInfo.hh = -1;
    memset(&gpsStatus, 0, sizeof(gpsStatus));
    gpsStatus.hh = -1;
@@ -338,10 +337,10 @@
void handlePJK(const struct nmea *s) {
    DEBUG("handlePJK num = %d", s->nmea_num);
    CurrRTKInfo.hh = str2int(s->nmea_value[0].data, 2);
    CurrRTKInfo.mm = str2int(s->nmea_value[0].data + 2, 2);
    CurrRTKInfo.ss = str2int(s->nmea_value[0].data + 4, 2);
    CurrRTKInfo.dss = str2int(s->nmea_value[0].data + 7, 2);
    int hh = str2int(s->nmea_value[0].data, 2);
    int mm = str2int(s->nmea_value[0].data + 2, 2);
    int ss = str2int(s->nmea_value[0].data + 4, 2);
    int dss = str2int(s->nmea_value[0].data + 7, 2);
    CurrRTKInfo.MM = str2int(s->nmea_value[1].data, 2);
    CurrRTKInfo.DD = str2int(s->nmea_value[1].data + 2, 2);
@@ -373,36 +372,46 @@
//        yy -= 0.02 * (by2 - by1) / (bx2 - bx1);
//    }
    if (CurrRTKInfo.hh == tra_hh && CurrRTKInfo.mm == tra_mm && CurrRTKInfo.ss == tra_ss && CurrRTKInfo.dss == tra_dss) {
    if (CurrRTKInfo.hh == hh && CurrRTKInfo.mm == mm && CurrRTKInfo.ss == ss && CurrRTKInfo.dss == dss) {
        PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
        UpdateRTKInfo(&CurrRTKInfo);
//        UpdateRTKInfo(&CurrRTKInfo);
//        up_num++;
        /*if ((up_num % 5) == 0)*/ {
//            NewMgrEvent(DRIVER_UPDATE_EVT);
        }
    }
    CurrRTKInfo.hh = hh;
    CurrRTKInfo.mm = mm;
    CurrRTKInfo.ss = ss;
    CurrRTKInfo.dss = dss;
}
void handleGPTRA(const struct nmea *s) {
    DEBUG("handleGPTRA num = %d", s->nmea_num);
    tra_hh = str2int(s->nmea_value[0].data, 2);
    tra_mm = str2int(s->nmea_value[0].data + 2, 2);
    tra_ss = str2int(s->nmea_value[0].data + 4, 2);
    tra_dss = str2int(s->nmea_value[0].data + 7, 2);
    int hh = str2int(s->nmea_value[0].data, 2);
    int mm = str2int(s->nmea_value[0].data + 2, 2);
    int ss = str2int(s->nmea_value[0].data + 4, 2);
    int dss = str2int(s->nmea_value[0].data + 7, 2);
    str2float(&CurrRTKInfo.heading, s->nmea_value[1].data, s->nmea_value[1].length);
    str2float(&CurrRTKInfo.pitch, s->nmea_value[2].data, s->nmea_value[2].length);
    str2float(&CurrRTKInfo.roll, s->nmea_value[3].data, s->nmea_value[3].length);
//    CurrRTKInfo.heading = 60;
    if (CurrRTKInfo.hh == tra_hh && CurrRTKInfo.mm == tra_mm && CurrRTKInfo.ss == tra_ss && CurrRTKInfo.dss == tra_dss) {
    if (CurrRTKInfo.hh == hh && CurrRTKInfo.mm == mm && CurrRTKInfo.ss == ss && CurrRTKInfo.dss == dss) {
        PlatformStatusChanged(RTK_UPDATE_EVT, (uint8_t *)&CurrRTKInfo, sizeof(CurrRTKInfo));
        UpdateRTKInfo(&CurrRTKInfo);
//        UpdateRTKInfo(&CurrRTKInfo);
//        up_num++;
        /*if ((up_num % 5) == 0)*/ {
//            NewMgrEvent(DRIVER_UPDATE_EVT);
        }
    }
    CurrRTKInfo.hh = hh;
    CurrRTKInfo.mm = mm;
    CurrRTKInfo.ss = ss;
    CurrRTKInfo.dss = dss;
}
static void CheckPjkParam(void)
lib/src/main/cpp/rtk_platform/platform.cpp
@@ -279,7 +279,6 @@
        MA_RtkPlatformLogin(data[0]);
    }
    if (events & GPS_UPDATE_EVT) {
        DEBUG("GPS_UPDATE_EVT");
        const gpsStatus_t *gps = (gpsStatus_t *)data;
        struct gpsBrief brief;
@@ -295,7 +294,6 @@
        RequestRtkDownload(gps, 1);
    }
    if (events & RTK_UPDATE_EVT) {
        DEBUG("RTK_UPDATE_EVT");
        const rtk_info *rtk = (rtk_info *)data;
        struct rtkBrief brief;
@@ -465,6 +463,8 @@
void ReceivedRtk(const uint8_t *data, int length)
{
    DEBUG("ReceivedRtk length %d", length);
    AppTimer_delete(RequestRtkNoResp);
    // 姹囨姤缁欏崟鐗囨満
    if (length > 0) {