Documents/模拟驾考APP内部通讯.docx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/master/comm_if.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/master/comm_if.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/rtk_module/rtk.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/rtk_platform/platform.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Documents/模拟驾考APP内部通讯.docxBinary 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) {