From 683b1595260e638d1d3c6cc0d6543a72f6d6f925 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 12 一月 2021 14:36:42 +0800
Subject: [PATCH] 扣分码标准化
---
lib/src/main/java/com/anyun/exam/lib/InstallUtil.java | 90 ++
lib/src/main/cpp/driver_test.cpp | 96 ++
lib/src/main/cpp/native-lib.h | 2
lib/src/main/cpp/test_items/stop_and_start.cpp | 18
lib/src/main/cpp/test_items2/car_start.cpp | 12
lib/src/main/cpp/test_items2/prepare.cpp | 100 +++
lib/src/main/cpp/CMakeLists.txt | 1
lib/src/main/cpp/rtk_module/rtk.cpp | 193 ++++--
lib/src/main/cpp/test_items2/change_lane.cpp | 2
lib/src/main/cpp/test_items2/operate_gear.cpp | 6
lib/src/main/cpp/test_items/park_bottom.cpp | 18
lib/src/main/cpp/test_items2/prepare.h | 14
lib/src/main/cpp/test_items/park_edge.cpp | 16
lib/src/main/cpp/mcu/mcu_if.h | 2
lib/src/main/cpp/test_items2/overtake.cpp | 6
lib/src/main/cpp/master/comm_if.cpp | 65 ++
lib/src/main/cpp/native-lib.cpp | 32
lib/src/main/cpp/test_items2/through_something.cpp | 18
lib/src/main/cpp/defs.h | 4
lib/src/main/cpp/test_items2/road_exam.cpp | 56 +
lib/src/main/cpp/test_items2/dummy_light.h | 11
lib/src/main/cpp/rtk_platform/platform.cpp | 606 ++++++++++---------
lib/src/main/cpp/test_items/driving_curve.cpp | 4
lib/src/main/cpp/rtk_module/rtk.h | 2
lib/src/main/cpp/rtk_platform/parse_net.cpp | 2
lib/src/main/java/com/anyun/exam/lib/Upgrade.java | 11
lib/src/main/cpp/test_items2/dummy_light.cpp | 199 +----
lib/src/main/cpp/test_items2/stop_car.cpp | 23
lib/src/main/cpp/driver_test.h | 10
lib/src/main/cpp/master/comm_if.h | 1
lib/src/main/cpp/test_items/turn_a90.cpp | 6
lib/src/main/cpp/test_items2/drive_straight.cpp | 2
lib/src/main/cpp/rtk_platform/platform.h | 34
lib/src/main/cpp/test_common/car_sensor.cpp | 17
lib/src/main/cpp/mcu/mcu_if.cpp | 62 +
lib/src/main/cpp/rtk_module/virtual_rtk.cpp | 8
lib/src/main/java/com/anyun/exam/lib/RemoteService.java | 47 +
37 files changed, 1,102 insertions(+), 694 deletions(-)
diff --git a/lib/src/main/cpp/CMakeLists.txt b/lib/src/main/cpp/CMakeLists.txt
index ccc572d..125e4eb 100644
--- a/lib/src/main/cpp/CMakeLists.txt
+++ b/lib/src/main/cpp/CMakeLists.txt
@@ -38,6 +38,7 @@
test_items/turn_a90.cpp
test_items/area_exam.cpp
+ test_items2/prepare.cpp
test_items2/common_check.cpp
test_items2/dummy_light.cpp
test_items2/road_exam.cpp
diff --git a/lib/src/main/cpp/defs.h b/lib/src/main/cpp/defs.h
index fba169e..017fa15 100644
--- a/lib/src/main/cpp/defs.h
+++ b/lib/src/main/cpp/defs.h
@@ -1,8 +1,8 @@
#ifndef _DEFS_H_
#define _DEFS_H_
-#include <stdint.h>
-#include <stdbool.h>
+#include <cstdint>
+#include <cstdbool>
#define ENABLE_DEBUG
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index b90ea78..e1df9bb 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -37,6 +37,7 @@
#include "test_common/car_sensor.h"
#include "test_items2/road_exam.h"
#include "test_items/area_exam.h"
+#include "test_items2/prepare.h"
#define DEBUG(fmt, args...) LOGD("<driver_test> <%s>: " fmt, __func__, ##args)
@@ -86,6 +87,12 @@
static const int DEFAULT_START_CAR_MAX_RMP = 2500;
static const int DEFAULT_START_CAR_DISTANCE = 10;
static const double DEFAULT_START_CAR_OPEN_DOOR_DISTANCE = 1.0;
+static const char DEFAULT_PREPARE_TTS[] = "璇峰紑濮嬩笂杞﹀噯澶�";
+static const char DEFAULT_TOUCH_LEFT_FRONT[] = "瀛﹀憳閫氳繃宸﹀墠鏂�";
+static const char DEFAULT_TOUCH_LEFT_REAR[] = "瀛﹀憳閫氳繃宸﹀悗鏂�";
+static const char DEFAULT_TOUCH_RIGHT_FRONT[] = "瀛﹀憳閫氳繃鍙冲墠鏂�";
+static const char DEFAULT_TOUCH_RIGHT_REAR[] = "瀛﹀憳閫氳繃鍙冲悗鏂�";
+static const char DEFAULT_START_ENGINE[] = "璇峰惎鍔ㄥ彂鍔ㄦ満";
static const char DEFAULT_START_CAR_BEGIN_TTS[] = "璇疯捣姝ワ紝缁х画瀹屾垚鑰冭瘯";
static const char DEFAULT_START_CAR_END_TTS[] = "璧锋瀹屾垚";
static const int CHANGE_LANE_MAX_DISTANCE = 100;
@@ -235,6 +242,14 @@
examParam.start_car_max_rpm = DEFAULT_START_CAR_MAX_RMP;
examParam.start_car_limit_distance = DEFAULT_START_CAR_DISTANCE;
examParam.open_door_drive_allow_distance = DEFAULT_START_CAR_OPEN_DOOR_DISTANCE;
+
+ examParam.prepare_tts = DEFAULT_PREPARE_TTS;
+ examParam.touch_leftfront_tts = DEFAULT_TOUCH_LEFT_FRONT;
+ examParam.touch_leftrear_tts = DEFAULT_TOUCH_LEFT_REAR;
+ examParam.touch_rightfront_tts = DEFAULT_TOUCH_RIGHT_FRONT;
+ examParam.touch_rightrear_tts = DEFAULT_TOUCH_RIGHT_REAR;
+ examParam.start_engine_tts = DEFAULT_START_ENGINE;
+
examParam.start_car_begin_tts = DEFAULT_START_CAR_BEGIN_TTS;
examParam.start_car_end_tts = DEFAULT_START_CAR_END_TTS;
examParam.change_lane_limit_distance = CHANGE_LANE_MAX_DISTANCE;
@@ -371,7 +386,7 @@
RoadMap.examScheme.assign(scheme.begin(), scheme.end());
- DEBUG("寰楀埌鏂扮殑璺�冨湴鍥� 椤圭洰鏁伴噺 %d", RoadMap.examScheme.size());
+ DEBUG("寰楀埌璺�冮」鐩柟妗� 椤圭洰鏁伴噺 %d", RoadMap.examScheme.size());
}
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
@@ -505,18 +520,38 @@
{
DEBUG("鑾峰彇妯℃嫙璺�冪伅鍏夋祴璇曢」鐩� N = %d %d", n, ExamStart);
+ static const int cov[] = {0,
+ (DIPPED_BEAM_LAMP<<8)+DIPPED_BEAM_LIGHT,
+ (MAIN_BEAM_LAMP<<8)+MAIN_BEAM_LIGHT,
+ (CLEARANCE_LAMP<<8)+CLEARANCE_LIGHT,
+ (FOG_LAMP<<8)+FOG_LIGHT,
+ (TURN_SIGNAL_LAMP<<8)+LEFT_TURN_LIGHT,
+ (TURN_SIGNAL_LAMP<<8)+RIGHT_TURN_LIGHT,
+ (TURN_SIGNAL_LAMP<<8)+HAZARD_LIGHTS,
+ (FLASH_BEAM_LAMP<<8)+FLASH_BEAM_LIGHT};
+
if (ExamStart) return;
if (DummyLightContent != NULL) {
- free(DummyLightContent);
+ delete []DummyLightContent;
DummyLightContent = NULL;
+ DummyLightContentSize = 0;
}
- DummyLightContent = (struct dummy_light_exam *)malloc(n * sizeof(struct dummy_light_exam));
+ DummyLightContent = new struct dummy_light_exam[n];
DummyLightContentSize = n;
for (int i = 0; i < n; i++) {
- DummyLightContent[i] = cfg[i];
+ DummyLightContent[i].item = cfg[i].item;
+ DummyLightContent[i].tts = cfg[i].tts;
+ DummyLightContent[i].wrongCode = cfg[i].wrongCode;
+ // Sensor Name<<8 + Sensor Status
+ for (int j = 0; j < cfg[i].process.size(); ++j) {
+ DummyLightContent[i].process[j] = cov[cfg[i].process[j]];
+ }
+ for (int j = 0; j < cfg[i].solution.size(); ++j) {
+ DummyLightContent[i].solution[j] = cov[cfg[i].solution[j]];
+ }
}
}
@@ -688,8 +723,6 @@
}
}
-
-
static void PrintObdInfo(struct RtkTime *rtkTime, double speed) {
static struct RtkTime cTime = *rtkTime;
@@ -791,9 +824,9 @@
engineRuning = false;
if (ExamType == TEST_TYPE_AREA) {
// 鐔勭伀1娆★紝鎵�10鍒�
- AddExamFault(5, rtkTime);
+ AddExamFault(10210, rtkTime);
} else {
- AddExamFault(20, rtkTime);
+ AddExamFault(30208, rtkTime);
}
}
} else {
@@ -806,9 +839,9 @@
if (ReadCarStatus(GEAR) != GEAR_N) {
// 涓嶆槸绌烘尅鐐圭伀锛屼笉鍚堟牸
if (ExamType == TEST_TYPE_AREA)
- AddExamFault(3, rtkTime);
+ AddExamFault(10105, rtkTime);
else
- AddExamFault(4, rtkTime);
+ AddExamFault(30105, rtkTime);
}
AppTimer_delete(EngineStartHold);
AppTimer_add(EngineStartHold, examParam.hold_start_key_limit_time);
@@ -823,19 +856,23 @@
// 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒�
if (ExamType == TEST_TYPE_AREA)
- AddExamFault(4, rtkTime);
+ AddExamFault(10201, rtkTime);
}
if (ExamType == TEST_TYPE_ROAD_DUMMY_LIGHT) {
if (exam_dummy_light == 0) {
- StartDummyLightExam(DummyLightContent, DummyLightContentSize, rtkTime);
+ StartPrepare();
+// StartDummyLightExam(DummyLightContent, DummyLightContentSize, rtkTime);
exam_dummy_light = 1;
- // 姹囨姤鐏厜鑰冭瘯寮�濮�
- DEBUG("鐏厜鑰冭瘯寮�濮�");
- } else if (exam_dummy_light == 1) {
- exam_dummy_light = ExecuteDummyLightExam(rtkTime);
- // 姹囨姤鐏厜鑰冭瘯缁撴潫
- if (exam_dummy_light == 2) {
+ DEBUG("寮�濮嬩笂杞﹀噯澶�");
+ } else if (exam_dummy_light == 2) {
+ DEBUG("寮�濮嬬伅鍏夎�冭瘯");
+ StartDummyLightExam(DummyLightContent, DummyLightContentSize, rtkTime);
+ exam_dummy_light = 3;
+ } else if (exam_dummy_light == 3) {
+ if (!ExecuteDummyLightExam(rtkTime)) {
+ exam_dummy_light = 4;
+ // 姹囨姤鐏厜鑰冭瘯缁撴潫
DEBUG("鐏厜鑰冭瘯缁撴潫");
InitRoadExam(RoadMap);
}
@@ -849,12 +886,12 @@
if (ReadCarStatus(SEATBELT) == EJECT_SEATBELT && !reportSeatbeltEject) {
DEBUG("涓嶇郴瀹夊叏甯�");
reportSeatbeltEject = true;
- AddExamFault(1, rtkTime);
+ AddExamFault(ExamType == TEST_TYPE_AREA? 10101: 30101, rtkTime);
}
}
if (ExamType != TEST_TYPE_AREA) {
- if (exam_dummy_light == 2 || ExamType == TEST_TYPE_ROAD_TRUE_LIGHT || ExamType == TEST_TYPE_ROAD_CALIBRATE) {
+ if (exam_dummy_light == 4 || ExamType == TEST_TYPE_ROAD_TRUE_LIGHT || ExamType == TEST_TYPE_ROAD_CALIBRATE) {
TestRoadGeneral(RoadMap, CarModel, CarModelList, speed, move, rtkTime);
}
} else {
@@ -1089,13 +1126,13 @@
sprintf(fault.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + rtkTime->YY,
rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
- if (ExamType != TEST_TYPE_AREA) {
- wrong += 1000;
- }
+// if (ExamType != TEST_TYPE_AREA) {
+// wrong += 1000;
+// }
fault.wrong_id = wrong;
- DEBUG("鑰冭瘯鍙戠敓閿欒 %d %s", wrong, fault.utc);
+ DEBUG("鑰冭瘯鍙戠敓閿欒 code = %d %s", wrong, fault.utc);
ExamFaultList.push_back(fault);
@@ -1204,3 +1241,14 @@
}
}
+
+void SensorXChanged(uint16_t id, int value)
+{
+ handlePrepare(id, value);
+ handleLigthExam(id, value);
+}
+
+void PrepareOver(int res)
+{
+ exam_dummy_light = 2;
+}
diff --git a/lib/src/main/cpp/driver_test.h b/lib/src/main/cpp/driver_test.h
index a4e609e..878dafd 100644
--- a/lib/src/main/cpp/driver_test.h
+++ b/lib/src/main/cpp/driver_test.h
@@ -247,6 +247,14 @@
int start_car_max_rpm;
int start_car_limit_distance;
double open_door_drive_allow_distance;
+
+ string prepare_tts;
+ string touch_leftfront_tts;
+ string touch_leftrear_tts;
+ string touch_rightfront_tts;
+ string touch_rightrear_tts;
+ string start_engine_tts;
+
string start_car_begin_tts;
string start_car_end_tts;
@@ -325,4 +333,6 @@
int CorrectPauseCriteria(int src);
+void SensorXChanged(uint16_t id, int value);
+
#endif //RTKDRIVERTEST_DRIVER_TEST_H
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index 1af9356..b1898f6 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -22,6 +22,7 @@
#include <vector>
#include <list>
#include <semaphore.h>
+#include <unistd.h>
#define DEBUG(fmt, args...) LOGD("<comm_if> <%s>: " fmt, __func__, ##args)
@@ -74,6 +75,8 @@
#define ID_SM_CAN_BRIEF 0x0021
#define ID_SM_BLUETOOTH_BRIEF 0x0022
+#define ID_SM_RTK_STATUS_BRIEF 0x0023
+
#define MA_OUT_GPS_BRIEF 0x0001
#define MA_OUT_RTK_BRIEF 0x0002
#define MA_OUT_CAR_BRIEF 0x0004
@@ -121,16 +124,26 @@
if (MessageBuffer.size() > 0) {
struct msg_2_main_t msg;
+ int success;
pthread_mutex_lock(&msg_mutex);
msg = MessageBuffer.back();
- MessageBuffer.pop_back();
pthread_mutex_unlock(&msg_mutex);
if (msg.value.length() > 0)
- SendMsgToMainProc(msg.cmd, msg.value.c_str());
+ success = SendMsgToMainProc(msg.cmd, msg.value.c_str());
else
- SendMsgToMainProc(msg.cmd, NULL);
+ success = SendMsgToMainProc(msg.cmd, NULL);
+
+ if (success == 0) {
+ pthread_mutex_lock(&msg_mutex);
+ MessageBuffer.pop_back();
+ pthread_mutex_unlock(&msg_mutex);
+ } else {
+ // 寤惰繜閲嶅彂
+ usleep(500000);
+ sem_post(&sem_msg_income);
+ }
}
}
}
@@ -646,6 +659,7 @@
{
switch (cmd) {
case ID_MS_RTK_PLAT_CFG: {
+ DEBUG("骞冲彴淇℃伅 %s", value);
if (OnOff == 0) OnOff = MA_OUT_GPS_BRIEF + MA_OUT_RTK_BRIEF + MA_OUT_CAR_BRIEF;
rtk_platform_cfg_t cfg;
@@ -1971,9 +1985,28 @@
const Value &s2 = (*itr)["tts"];
content[n].item = s1.GetInt();
- strcpy(content[n].tts, s2.GetString());
- n++;
+ content[n].tts = s2.GetString();
}
+
+ if (itr->HasMember("wrong_code")) {
+ const Value &s = (*itr)["wrong_code"];
+
+ content[n].wrongCode = s.GetInt();
+ }
+
+ if (itr->HasMember("process")) {
+ const Value& s = doc["process"];
+ for(Value::ConstValueIterator itr2 = s.Begin(); itr2 != s.End(); ++itr2) {
+ content[n].process.push_back(itr2->GetInt());
+ }
+ }
+ if (itr->HasMember("solution")) {
+ const Value& s = doc["solution"];
+ for(Value::ConstValueIterator itr2 = s.Begin(); itr2 != s.End(); ++itr2) {
+ content[n].solution.push_back(itr2->GetInt());
+ }
+ }
+ n++;
}
SetDummyLightExam(n, content);
@@ -2063,3 +2096,25 @@
SendMsgToMainProcIndep(ID_SM_BLUETOOTH_BRIEF, sb.GetString());
}
+
+void MA_SendRtkStatus(const char *model, int status)
+{
+ StringBuffer sb;
+ Writer<StringBuffer> writer(sb);
+
+ writer.StartObject();
+
+ writer.Key("model");
+ if (model == NULL || model[0] == 0) {
+ writer.String("Unknown");
+ } else {
+ writer.String(model);
+ }
+
+ writer.Key("status");
+ writer.Int(status);
+
+ writer.EndObject();
+
+ SendMsgToMainProcIndep(ID_SM_RTK_STATUS_BRIEF, sb.GetString());
+}
diff --git a/lib/src/main/cpp/master/comm_if.h b/lib/src/main/cpp/master/comm_if.h
index 4989c21..fd378ae 100644
--- a/lib/src/main/cpp/master/comm_if.h
+++ b/lib/src/main/cpp/master/comm_if.h
@@ -154,5 +154,6 @@
void MA_SendCanStatus(const struct canBrief *brief);
void MA_SendBlueStatus(const char *name, const char *addr, int status);
+void MA_SendRtkStatus(const char *type, int status);
#endif //MYAPPLICATION2_COMM_IF_H
diff --git a/lib/src/main/cpp/mcu/mcu_if.cpp b/lib/src/main/cpp/mcu/mcu_if.cpp
index 080f233..b5924d6 100644
--- a/lib/src/main/cpp/mcu/mcu_if.cpp
+++ b/lib/src/main/cpp/mcu/mcu_if.cpp
@@ -14,6 +14,7 @@
#include "../rtk_platform/platform.h"
#include "../rtk_module/parse_gps.h"
#include "../native-lib.h"
+#include "../rtk_module/virtual_rtk.h"
#define DEBUG(fmt, args...) LOGD("<mcu_if> <%s>: " fmt, __func__, ##args)
@@ -277,25 +278,29 @@
WriteMcu(MCU_UART, buffer, x);
}
-void ConfigMCU(void)
+void ConfigMCU(bool ayDevice)
{
- McuCommModeSel(1);
+ if (ayDevice) {
+ McuCommModeSel(0);
- // TODO
- /* static struct serial_config serialConfig;
+ // TODO
+ static struct serial_config serialConfig;
- strcpy(serialConfig.name, "/dev/ttyHSL1");
- serialConfig.baud = 115200;
- serialConfig.data_bit = 8;
- serialConfig.verify_bit = 'N';
- serialConfig.stop_bit = 1;
- serialConfig.flow_ctrl = 0;
+ strcpy(serialConfig.name, "/dev/ttyHSL1");
+ serialConfig.baud = 115200;
+ serialConfig.data_bit = 8;
+ serialConfig.verify_bit = 'N';
+ serialConfig.stop_bit = 1;
+ serialConfig.flow_ctrl = 0;
- pthread_t pid;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
- pthread_create(&pid, &attr, UartThread1, &serialConfig);*/
+ pthread_t pid;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
+ pthread_create(&pid, &attr, UartThread1, &serialConfig);
+ } else {
+ McuCommModeSel(1);
+ }
}
void SendRtkToMcu(const uint8_t *data, int length)
@@ -417,14 +422,29 @@
memcpy(GnssBuf + GnssBufLen, data, length);
GnssBufLen += length;
+
if (GnssBufLen > 0) {
- const uint8_t *ptr = parseGPS(GnssBuf, GnssBuf + GnssBufLen);
- if (ptr != GnssBuf) {
- memcpy(GnssBuf, ptr, GnssBufLen - (ptr - GnssBuf));
- GnssBufLen -= ptr - GnssBuf;
- } else if (GnssBufLen == PARSE_BUFF_SIZE) { //濉弧浜嗭紝涓旀病鏈変竴涓猏r锛岄兘鎶涘純
- DEBUG("Parse GPS error");
+ if (VirtualIsConnected()) { //PC妯℃嫙鐢ㄦ椂
+ static bool first = false;
+
+ if (!first) {
+ first = true;
+
+ uint8_t buff[33] = "emulator";
+ buff[32] = 1;
+ PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
+ }
+
GnssBufLen = 0;
+ } else {
+ const uint8_t *ptr = parseGPS(GnssBuf, GnssBuf + GnssBufLen);
+ if (ptr != GnssBuf) {
+ memcpy(GnssBuf, ptr, GnssBufLen - (ptr - GnssBuf));
+ GnssBufLen -= ptr - GnssBuf;
+ } else if (GnssBufLen == PARSE_BUFF_SIZE) { //濉弧浜嗭紝涓旀病鏈変竴涓猏r锛岄兘鎶涘純
+ DEBUG("Parse GPS error");
+ GnssBufLen = 0;
+ }
}
}
break;
diff --git a/lib/src/main/cpp/mcu/mcu_if.h b/lib/src/main/cpp/mcu/mcu_if.h
index 7f451b1..0ab43ab 100644
--- a/lib/src/main/cpp/mcu/mcu_if.h
+++ b/lib/src/main/cpp/mcu/mcu_if.h
@@ -8,7 +8,7 @@
#include <cstdint>
void McuCommModeSel(int mode);
-void ConfigMCU(void);
+void ConfigMCU(bool ayDevice);
void SendRtkToMcu(const uint8_t *data, int length);
void ParseMcuInit(void);
void ParseMcu(const uint8_t *data, int length);
diff --git a/lib/src/main/cpp/native-lib.cpp b/lib/src/main/cpp/native-lib.cpp
index f0d0390..49d9e4e 100644
--- a/lib/src/main/cpp/native-lib.cpp
+++ b/lib/src/main/cpp/native-lib.cpp
@@ -35,8 +35,6 @@
static int ttsSeq = 1;
-static void SendBootIndicate(union sigval sig);
-
static std::map<int, void (*)(int)> TTSCallBack;
int DESEncrypt(const uint8_t *key, int key_length,
@@ -173,25 +171,26 @@
}
}
-void SendMsgToMainProc(int cmd, const char *value)
+int SendMsgToMainProc(int cmd, const char *value)
{
JNIEnv *env;
bool ready_in_java_env = false;
+ int ret;
if (sg_jvm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) {
// Attach涓荤嚎绋�
if (sg_jvm->AttachCurrentThread(&env, NULL) != JNI_OK) {
LOGE("%s: AttachCurrentThread() failed", __FUNCTION__);
- return;
+ return -3;
}
} else {
ready_in_java_env = true;
}
jclass cls = env->GetObjectClass(sg_obj);
- jmethodID fun = env->GetMethodID(cls, "SendMsgToMainProc", "(ILjava/lang/String;)V");
+ jmethodID fun = env->GetMethodID(cls, "SendMsgToMainProc", "(ILjava/lang/String;)I");
- env->CallVoidMethod(sg_obj, fun, cmd, value != NULL ? env->NewStringUTF(value) : NULL);
+ ret = env->CallIntMethod(sg_obj, fun, cmd, value != NULL ? env->NewStringUTF(value) : NULL);
env->DeleteLocalRef(cls);
@@ -201,6 +200,8 @@
LOGE("%s: DetachCurrentThread() failed", __FUNCTION__);
}
}
+
+ return ret;
}
static int GetTtsSeq(void)
@@ -384,7 +385,7 @@
extern "C"
JNIEXPORT void JNICALL
-Java_com_anyun_exam_lib_RemoteService_startNative(JNIEnv *env, jobject thiz) {
+Java_com_anyun_exam_lib_RemoteService_startNative(JNIEnv *env, jobject thiz, jboolean ayDevice) {
// TODO: implement startNative()
// 淇濆瓨鍏ㄥ眬JVM浠ヤ究鍦ㄥ瓙绾跨▼涓娇鐢�
DEBUG("鍚姩Native");
@@ -395,28 +396,17 @@
srand(time(NULL));
AppTimer_Init();
- ConfigMCU();
+ ConfigMCU(ayDevice);
DriverTestInit();
- ConfigRTKModule();
+ ConfigRTKModule(ayDevice);
MA_Init();
- InitPlatform(phone, RTK_PLATFORM_IP, RTK_PLATFORM_PORT);
- AppTimer_add(SendBootIndicate, D_SEC(1));
+ InitPlatform(ayDevice, phone, RTK_PLATFORM_IP, RTK_PLATFORM_PORT);
InitVirtualDevice(VIRTUAL_RTK_IP, VIRTUAL_RTK_PORT);
pthread_mutex_init(&tts_mutex, NULL);
-}
-static void SendBootIndicate(union sigval sig) {
- static int n = 0;
- AppTimer_delete(SendBootIndicate);
MA_NdkStart();
-
- n++;
-
- if (n < 3) {
- AppTimer_add(SendBootIndicate, D_SEC(1));
- }
}
extern "C"
diff --git a/lib/src/main/cpp/native-lib.h b/lib/src/main/cpp/native-lib.h
index 1ff9046..456f068 100644
--- a/lib/src/main/cpp/native-lib.h
+++ b/lib/src/main/cpp/native-lib.h
@@ -24,7 +24,7 @@
void TextOsd(int type, const char *text);
void DrawScreen(const Polygon *map, const Polygon *car);
-void SendMsgToMainProc(int cmd, const char *value);
+int SendMsgToMainProc(int cmd, const char *value);
int PlayTTS(const char *string, void (*callback)(int));
int PlayTTS(std::string &tts, void (*callback)(int));
void PlayRing(void);
diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp
index 244c0b3..82eab51 100644
--- a/lib/src/main/cpp/rtk_module/rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/rtk.cpp
@@ -36,17 +36,24 @@
const static char SAVECONFIG[] = "saveconfig\r\n";
const static char *PJKITEMS[] = {"gptra", "ptnlpjk"};
const static char *GPSITEMS[] = {"gpgga", "gprmc", "gpvtg"};
+const char CMD_VERSION[] = "log version\r\n";
static gpsStatus_t gpsStatus;
+static char rtkModel[32] = {0};
static int (*WriteRtk)(int id, const void *buf, int len);
static rtk_info CurrRTKInfo;
static bool needSetPjk = false;
+static int lostCnt;
static void CheckPjkParam(void);
static void CheckPjkParamTimeout(union sigval sig);
static int WriteBluetooth(int id, const void *buf, int len);
+static void GetModuleVersion(void);
+
+static void VersionTimeout(union sigval sig);
+static void GpsDataTimeout(union sigval sig);
static void *UartThread(void *p);
@@ -59,7 +66,7 @@
}
}
-void ConfigRTKModule(void)
+void ConfigRTKModule(bool ayDevice)
{
// TODO
DEBUG("ConfigRTKModule");
@@ -70,26 +77,34 @@
memset(&gpsStatus, 0, sizeof(gpsStatus));
gpsStatus.hh = -1;
- RtkCommModeSel(1);
+ if (ayDevice) {
+ RtkCommModeSel(0);
- /*static struct serial_config serialConfig;
+ static struct serial_config serialConfig;
- strcpy(serialConfig.name, "/dev/ttyHSL0");
- serialConfig.baud = 115200;
- serialConfig.data_bit = 8;
- serialConfig.verify_bit = 'N';
- serialConfig.stop_bit = 1;
- serialConfig.flow_ctrl = 0;
+ strcpy(serialConfig.name, "/dev/ttyHSL0");
+ serialConfig.baud = 115200;
+ serialConfig.data_bit = 8;
+ serialConfig.verify_bit = 'N';
+ serialConfig.stop_bit = 1;
+ serialConfig.flow_ctrl = 0;
- pthread_t pid;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
- pthread_create(&pid, &attr, UartThread, &serialConfig);*/
+ pthread_t pid;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
+ pthread_create(&pid, &attr, UartThread, &serialConfig);
+ } else {
+ RtkCommModeSel(1);
+ // 绛夊緟钃濈墮杩炴帴
+ }
}
+// 钃濈墮杩炴帴鍚�
void ConfigRTKModuleLater(void)
{
+ AppTimer_delete(GpsDataTimeout);
+ AppTimer_delete(VersionTimeout);
AppTimer_delete(CheckPjkParamTimeout);
AppTimer_add(CheckPjkParamTimeout, D_SEC(1));
}
@@ -107,59 +122,27 @@
void handleRTKRebootComp(const struct nmea *s)
{
DEBUG("RTK Reboot complete!!");
- CheckPjkParam();
+// CheckPjkParam();
+ GetModuleVersion();
}
void handlePJKParam(const struct nmea *s) {
DEBUG("handlePJKParam");
-//PJK Parameter: A:6378137.000, 1/F:298.257223563, B0:0.000000deg, L0:120.000000, N0:0.000, E0:500000.000.
-//PJK Parameter: A:6378137.000, 1/F:298.257223563, B0:29.512453deg, L0:106.455336, N0:0.000, E0:0.000.
-// bool setparam = true;
-//
-// const char DP1[] = "A:6378137.000";
-// const char DP2[] = "1/F:298.257223563";
-// const char DP3[] = "B0:29.512453deg";
-// const char DP4[] = "L0:106.455336";
-// const char DP5[] = "N0:0.000";
-// const char DP6[] = "E0:0.000";
AppTimer_delete(CheckPjkParamTimeout);
-// for (int i = 0; i < s->nmea_num; ++i) {
-// char out[64] = {0};
-//
-// memcpy(out, s->nmea_value[i].data, s->nmea_value[i].length);
-//
-// DEBUG("handlePJKParam = %s", out);
-// }
-//
-// if (s->nmea_num != 6) return;
-//
-// if (memcmp(s->nmea_value[0].data, DP1, strlen(DP1))) {
-// setparam = true;
-// }
-// if (memcmp(s->nmea_value[1].data, DP2, strlen(DP2))) {
-// setparam = true;
-// }
-// if (memcmp(s->nmea_value[2].data, DP3, strlen(DP3))) {
-// setparam = true;
-// }
-// if (memcmp(s->nmea_value[3].data, DP4, strlen(DP4))) {
-// setparam = true;
-// }
-// if (memcmp(s->nmea_value[4].data, DP5, strlen(DP5))) {
-// setparam = true;
-// }
-// if (memcmp(s->nmea_value[5].data, DP6, strlen(DP6))) {
-// setparam = true;
-// }
-//
-// if (setparam) {
-// SetAYFactoryParam(5);
-// }
-
SetAYFactoryParam(5);
needSetPjk = true;
+
+ lostCnt = 0;
+ AppTimer_delete(GpsDataTimeout);
+ AppTimer_add(GpsDataTimeout, D_SEC(5));
+
+ uint8_t buff[33];
+
+ memcpy(buff, rtkModel, 32);
+ buff[32] = 1;
+ PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
}
void SetAYFactoryParam(int freq)
@@ -211,7 +194,8 @@
int RxBufLen = 0;
if (res == 0) {
- CheckPjkParam();
+// CheckPjkParam();
+ GetModuleVersion();
}
while (res == 0) {
@@ -240,6 +224,15 @@
if (RxBufLen > 0) {
#if 1
if (VirtualIsConnected()) { //PC妯℃嫙鐢ㄦ椂
+ static bool first = false;
+
+ if (!first) {
+ first = true;
+
+ uint8_t buff[33] = "emulator";
+ buff[32] = 1;
+ PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
+ }
RxBufLen = 0;
} else {
const uint8_t *ptr = parseGPS(RxBuf, RxBuf + RxBufLen);
@@ -263,17 +256,41 @@
}
void handleUnrecognisedNMEA(const uint8_t *data, uint16_t length) {
-// char buff[4096] = {0};
-// memcpy(buff, data, MIN(length, 3000));
+ char buff[4096] = {0};
+ memcpy(buff, data, MIN(length, 4000));
// DEBUG("handleUnrecognisedNMEA: %s", buff);
+
+ if (length >= 100) {
+ string cs(buff);
+
+ if (cs.find("K708") != string::npos) {
+ // 鏈�鍒濈殑鏍囧噯鍩虹珯妯″潡
+ DEBUG("K708 妯″潡");
+ strcpy(rtkModel, "K708");
+
+ AppTimer_delete(VersionTimeout);
+ CheckPjkParam();
+ } else if (cs.find("K726") != string::npos) {
+ // 绉诲姩绔欐ā鍧楋紝涔熷彲浠ョ敤鍋氬熀绔欏姛鑳�
+ DEBUG("K726 妯″潡");
+ strcpy(rtkModel, "K726");
+
+ AppTimer_delete(VersionTimeout);
+ CheckPjkParam();
+ }
+ }
}
void handleGPGGA(const struct nmea *s)
{
static uint32_t qfCnt = 0;
- DEBUG("handleGPGGA num = %d", s->nmea_num);
+// DEBUG("handleGPGGA num = %d", s->nmea_num);
if (s->nmea_num >= 10) {
+ lostCnt = 0;
+ AppTimer_delete(GpsDataTimeout);
+ AppTimer_add(GpsDataTimeout, D_SEC(5));
+
gpsStatus.gps_status = str2int(s->nmea_value[5].data, s->nmea_value[5].length);
int hh = str2int(s->nmea_value[0].data, 2);
@@ -331,7 +348,7 @@
void handleGPRMC(const struct nmea *s)
{
- DEBUG("handleGPRMC num = %d", s->nmea_num);
+// DEBUG("handleGPRMC num = %d", s->nmea_num);
if (s->nmea_num >= 9) {
int hh = str2int(s->nmea_value[0].data, 2);
@@ -397,7 +414,7 @@
}
void handlePJK(const struct nmea *s) {
- DEBUG("handlePJK num = %d", s->nmea_num);
+// DEBUG("handlePJK num = %d", s->nmea_num);
int hh = str2int(s->nmea_value[0].data, 2);
int mm = str2int(s->nmea_value[0].data + 2, 2);
@@ -457,7 +474,7 @@
}
void handleGPTRA(const struct nmea *s) {
- DEBUG("handleGPTRA num = %d", s->nmea_num);
+// DEBUG("handleGPTRA num = %d", s->nmea_num);
int hh = str2int(s->nmea_value[0].data, 2);
int mm = str2int(s->nmea_value[0].data + 2, 2);
@@ -491,8 +508,8 @@
static void CheckPjkParam(void)
{
- int n = WriteRtk(RTK_MODULE_UART, INQ_PJK_PARAM, strlen(INQ_PJK_PARAM));
- DEBUG("CN = %d", n);
+ WriteRtk(RTK_MODULE_UART, INQ_PJK_PARAM, strlen(INQ_PJK_PARAM));
+ DEBUG("鑾峰彇PJK鍙傛暟...");
AppTimer_delete(CheckPjkParamTimeout);
AppTimer_add(CheckPjkParamTimeout, D_SEC(3));
}
@@ -500,11 +517,14 @@
static void CheckPjkParamTimeout(union sigval sig) {
AppTimer_delete(CheckPjkParamTimeout);
- DEBUG("RTK Module failure!!");
+ DEBUG("鑾峰彇PJK鍙傛暟瓒呮椂");
-// PlayTTS("RTK妯″潡鏃犳硶閫氳", NULL);
+ uint8_t buff[33];
+ memcpy(buff, rtkModel, 32);
+ buff[32] = 0;
+ PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
- CheckPjkParam();
+ GetModuleVersion();
}
static int WriteBluetooth(int id, const void *buf, int len)
@@ -513,3 +533,36 @@
SendMcuCommand(0x000B, (uint8_t *)buf, len);
return len;
}
+
+static void GetModuleVersion(void)
+{
+ AppTimer_delete(VersionTimeout);
+ AppTimer_add(VersionTimeout, D_SEC(3));
+ WriteRtk(RTK_MODULE_UART, CMD_VERSION, strlen(CMD_VERSION));
+
+ DEBUG("鑾峰彇鐗堟湰...");
+}
+
+static void VersionTimeout(union sigval sig)
+{
+ AppTimer_delete(VersionTimeout);
+ DEBUG("鐗堟湰鑾峰彇瓒呮椂");
+ GetModuleVersion();
+
+ uint8_t buff[33];
+ memcpy(buff, rtkModel, 32);
+ buff[32] = 0;
+ PlatformStatusChanged(RTK_STATUS_EVT, buff, 33);
+}
+
+static void GpsDataTimeout(union sigval sig)
+{
+ AppTimer_delete(GpsDataTimeout);
+
+ if (++lostCnt >= 3) {
+ DEBUG("RTK妯″潡鏀朵笉鍒癎PS鏁版嵁");
+ GetModuleVersion();
+ } else {
+ AppTimer_add(GpsDataTimeout, D_SEC(5));
+ }
+}
diff --git a/lib/src/main/cpp/rtk_module/rtk.h b/lib/src/main/cpp/rtk_module/rtk.h
index 3b81937..ae52e8d 100644
--- a/lib/src/main/cpp/rtk_module/rtk.h
+++ b/lib/src/main/cpp/rtk_module/rtk.h
@@ -40,7 +40,7 @@
}rtk_info;
void RtkCommModeSel(int mode);
-void ConfigRTKModule(void);
+void ConfigRTKModule(bool ayDevice);
void ConfigRTKModuleLater(void);
void FactorySettings(void);
void RebootModule(void);
diff --git a/lib/src/main/cpp/rtk_module/virtual_rtk.cpp b/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
index 83dee44..b0e62e5 100644
--- a/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/virtual_rtk.cpp
@@ -86,7 +86,7 @@
DEBUG("铏氭嫙骞冲彴杩炴帴鎴愬姛");
virtRtkIsValid = true;
connectCnt = 0;
-// PlayTTS("妯℃嫙鍣ㄨ繛鎺�", NULL);
+ PlayTTS("妯℃嫙鍣ㄨ繛鎺�", NULL);
} else {
DEBUG("铏氭嫙骞冲彴杩炴帴澶辫触");
}
@@ -110,7 +110,9 @@
break;
} else if (lx > 0) {
RxBufLen += lx;
+
const uint8_t *ptr = parseGPS(RxBuf, RxBuf + RxBufLen);
+
if(ptr != RxBuf) {
memcpy(RxBuf, ptr, RxBufLen - (ptr - RxBuf));
RxBufLen -= ptr - RxBuf;
@@ -123,7 +125,9 @@
}
if (fd > 0) {
+ DEBUG("铏氭嫙骞冲彴鏂紑");
DisconnectTCP(fd);
+ PlayTTS("妯℃嫙鍣ㄦ柇寮�", NULL);
}
virtRtkIsValid = false;
@@ -131,7 +135,7 @@
AppTimer_add(ConnectLater, D_SEC(3));
}
-// PlayTTS("妯℃嫙鍣ㄦ柇寮�", NULL);
+ DEBUG("铏氭嫙骞冲彴绾跨▼閫�鍑�");
pthread_exit(NULL);
}
diff --git a/lib/src/main/cpp/rtk_platform/parse_net.cpp b/lib/src/main/cpp/rtk_platform/parse_net.cpp
index 09e2e1a..a82a7db 100644
--- a/lib/src/main/cpp/rtk_platform/parse_net.cpp
+++ b/lib/src/main/cpp/rtk_platform/parse_net.cpp
@@ -21,7 +21,7 @@
#define DEBUG(fmt, args...) LOGD("<parse_net> <%s>: " fmt, __func__, ##args)
-//#define ENABLE_DEBUG_PROTOCOL
+#define ENABLE_DEBUG_PROTOCOL
using namespace std;
diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp
index c42bdf7..1f28070 100644
--- a/lib/src/main/cpp/rtk_platform/platform.cpp
+++ b/lib/src/main/cpp/rtk_platform/platform.cpp
@@ -77,6 +77,8 @@
struct event_queue_t *next;
} *eventQueue;
+static bool mAyDevice = false;
+
struct platformSocket exceptSocket, currSocket;
static sem_t sem_status_changed;
@@ -113,6 +115,7 @@
static void LoginPlatformTimeout(union sigval sig);
static void TriggerHeartbeat(union sigval sig);
static void RequestRtkNoResp(union sigval sig);
+
static void AddEvnet(uint32_t event, const uint8_t *data, int length)
{
@@ -181,9 +184,11 @@
free(p1);
}
-void InitPlatform(const uint8_t *phone, const char *domain_name, int port)
+void InitPlatform(bool ayDevice, const uint8_t *phone, const char *domain_name, int port)
{
DEBUG("InitPlatform");
+
+ mAyDevice = ayDevice;
memset(&gbf, 0, sizeof(gbf));
memset(&rbf, 0, sizeof(rbf));
@@ -264,7 +269,7 @@
if (domain_name == NULL || strlen(domain_name) == 0 || port == 0)
return;
- DEBUG("ConnectPlatform %s: %d", domain_name, port);
+ DEBUG("杩炴帴RTK骞冲彴 %s: %d", domain_name, port);
// TODO
struct platformSocketInfo *ptr = (struct platformSocketInfo *)malloc(sizeof(struct platformSocketInfo));
@@ -299,334 +304,371 @@
static void PlatformChangeEntry(uint32_t events, const uint8_t *data, int length)
{
- if (events & PLATFORM_CONNECT_EVT) {
- DEBUG("骞冲彴杩炴帴鎴愬姛 %s:%d", currSocket.domain_name, currSocket.port);
- MA_RtkPlatformConnect(1, currSocket.domain_name, currSocket.port);
+ switch (events) {
+ case PLATFORM_CONNECT_EVT: {
+ DEBUG("骞冲彴杩炴帴鎴愬姛 %s:%d", currSocket.domain_name, currSocket.port);
+ MA_RtkPlatformConnect(1, currSocket.domain_name, currSocket.port);
- platformStatus.connected = 1;
- if (!platformStatus.registed || platformStatus.platformKeyLength == 0) {
- RegisterPlatform();
- } else if (!platformStatus.login) {
- LoginPlatform();
+ platformStatus.connected = 1;
+ if (!platformStatus.registed || platformStatus.platformKeyLength == 0) {
+ RegisterPlatform();
+ } else if (!platformStatus.login) {
+ LoginPlatform();
+ }
+
+ MA_SendBlueStatus("name", "00:1B:35:16:20:4A", 3);
+ break;
}
- }
- if (events & PLATFORM_DISCONNECT_EVT) {
- DEBUG("骞冲彴鏂紑 %s:%d", currSocket.domain_name, currSocket.port);
- MA_RtkPlatformConnect(0, currSocket.domain_name, currSocket.port);
+ case PLATFORM_DISCONNECT_EVT: {
+ DEBUG("骞冲彴鏂紑 %s:%d", currSocket.domain_name, currSocket.port);
+ MA_RtkPlatformConnect(0, currSocket.domain_name, currSocket.port);
- AppTimer_delete(ConnectPlatformLater);
- AppTimer_add(ConnectPlatformLater, D_SEC(2));
+ AppTimer_delete(ConnectPlatformLater);
+ AppTimer_add(ConnectPlatformLater, D_SEC(2));
- platformStatus.login = 0;
- platformStatus.connected = 0;
+ platformStatus.login = 0;
+ platformStatus.connected = 0;
- AppTimer_delete(TriggerHeartbeat);
- AppTimer_delete(RegisterPlatformTimeout);
- AppTimer_delete(LoginPlatformTimeout);
+ AppTimer_delete(TriggerHeartbeat);
+ AppTimer_delete(RegisterPlatformTimeout);
+ AppTimer_delete(LoginPlatformTimeout);
// PlayTTS("鍩哄噯婧愭柇寮�", NULL);
- }
- if (events & PLATFORM_REGISTER_EVT) {
- DEBUG("PLATFORM_REGISTER_EVT");
-
- platformStatus.login = 0;
- if (data[0] == 0) {
- platformStatus.registed = 1;
- platformStatus.platformKeyLength = length - 1;
- memcpy(platformStatus.platformKey, data+1, length-1);
- LoginPlatform();
- } else {
- platformStatus.registed = 0;
+ break;
}
- MA_RtkPlatformRegister(data[0], data + 1, length - 1);
- }
- if (events & PLATFORM_LOGIN_EVT) {
- DEBUG("PLATFORM_LOGIN_EVT");
+ case PLATFORM_REGISTER_EVT: {
+ DEBUG("骞冲彴娉ㄥ唽缁撴灉锛�%d", data[0]);
- if (data[0] == 0) {
- platformStatus.login = 1;
- requestPlatformSendRtk = true;
- AppTimer_delete(TriggerHeartbeat);
- AppTimer_add(TriggerHeartbeat, D_SEC(30));
+ platformStatus.login = 0;
+ if (data[0] == 0) {
+ platformStatus.registed = 1;
+ platformStatus.platformKeyLength = length - 1;
+ memcpy(platformStatus.platformKey, data + 1, length - 1);
+ LoginPlatform();
+ } else {
+ platformStatus.registed = 0;
+ }
+ MA_RtkPlatformRegister(data[0], data + 1, length - 1);
+ break;
+ }
+ case PLATFORM_LOGIN_EVT: {
+ DEBUG("骞冲彴鐧诲綍缁撴灉锛�%d", data[0]);
+
+ if (data[0] == 0) {
+ platformStatus.login = 1;
+ requestPlatformSendRtk = true;
+ AppTimer_delete(TriggerHeartbeat);
+ AppTimer_add(TriggerHeartbeat, D_SEC(30));
// PlayTTS("鍩哄噯婧愬缓绔�", NULL);
- } else {
- platformStatus.login = 0;
+ } else {
+ platformStatus.login = 0;
+ }
+ MA_RtkPlatformLogin(data[0]);
+ break;
}
- MA_RtkPlatformLogin(data[0]);
- }
- if (events & GPS_UPDATE_EVT) {
- DEBUG("GPS_UPDATE_EVT length %d", length);
- const gpsStatus_t *gps = (gpsStatus_t *)data;
+ case GPS_UPDATE_EVT: {
+ const gpsStatus_t *gps = (gpsStatus_t *) data;
- gbf.qf = gps->gps_status;
- gbf.latitude = gps->latitude;
- gbf.longitude = gps->longitude;
- gbf.altitude = gps->altitude;
- gbf.speed = gps->speed;
- gbf.sat_num = gps->satNum;
- gbf.trackTure = gps->trackTure;
- sprintf(gbf.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + gps->YY, gps->MM, gps->DD, gps->hh, gps->mm, gps->ss, gps->mss);
- if (!strcmp(rbf.utc, gbf.utc)) {
- rbf.sat_num = gbf.sat_num;
- rbf.latitude = gbf.latitude;
- rbf.longitude = gbf.longitude;
- rbf.altitude = gbf.altitude;
- rbf.speed = gbf.speed;
- rbf.trackTure = gbf.trackTure;
- MA_SendRtkBrief(&rbf);
- }
+ gbf.qf = gps->gps_status;
+ gbf.latitude = gps->latitude;
+ gbf.longitude = gps->longitude;
+ gbf.altitude = gps->altitude;
+ gbf.speed = gps->speed;
+ gbf.sat_num = gps->satNum;
+ gbf.trackTure = gps->trackTure;
+ sprintf(gbf.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + gps->YY, gps->MM, gps->DD,
+ gps->hh, gps->mm, gps->ss, gps->mss);
+ if (!strcmp(rbf.utc, gbf.utc)) {
+ rbf.sat_num = gbf.sat_num;
+ rbf.latitude = gbf.latitude;
+ rbf.longitude = gbf.longitude;
+ rbf.altitude = gbf.altitude;
+ rbf.speed = gbf.speed;
+ rbf.trackTure = gbf.trackTure;
+ MA_SendRtkBrief(&rbf);
+ }
// MA_SendGpsBrief(&brief);
- RequestRtkDownload(gps, 1);
-
- DEBUG("GPS_UPDATE_EVT ================");
- }
- if (events & RTK_UPDATE_EVT) {
- DEBUG("RTK_UPDATE_EVT length %d", length);
-
-// uint32_t ost = AppTimer_GetTickCount();
-
- const rtk_info *rtk = (rtk_info *)data;
-
- rbf.qf = rtk->qf;
- rbf.coord_x = rtk->y;
- rbf.coord_y = rtk->x;
- rbf.heading = rtk->heading;
- rbf.pitch = rtk->pitch;
- rbf.roll = rtk->roll;
- rbf.coord_x_dir = 'N';
- rbf.coord_y_dir = 'E';
- sprintf(rbf.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + rtk->YY, rtk->MM, rtk->DD, rtk->hh, rtk->mm, rtk->ss, rtk->dss);
- if (!strcmp(rbf.utc, gbf.utc)) {
- rbf.sat_num = gbf.sat_num;
- rbf.latitude = gbf.latitude;
- rbf.longitude = gbf.longitude;
- rbf.altitude = gbf.altitude;
- rbf.speed = gbf.speed;
- rbf.trackTure = gbf.trackTure;
- MA_SendRtkBrief(&rbf);
+ RequestRtkDownload(gps, 1);
+ break;
}
+ case RTK_UPDATE_EVT: {
+ uint32_t ost = AppTimer_GetTickCount();
+ uint32_t ost1 = ost;
- UpdateRTKInfo(rtk);
+ const rtk_info *rtk = (rtk_info *) data;
-// DEBUG("driver_test 璇勫垽鑰楁椂 %ld", AppTimer_GetTickCount() - ost);
+ rbf.qf = rtk->qf;
+ rbf.coord_x = rtk->y;
+ rbf.coord_y = rtk->x;
+ rbf.heading = rtk->heading;
+ rbf.pitch = rtk->pitch;
+ rbf.roll = rtk->roll;
+ rbf.coord_x_dir = 'N';
+ rbf.coord_y_dir = 'E';
+ sprintf(rbf.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + rtk->YY, rtk->MM, rtk->DD,
+ rtk->hh, rtk->mm, rtk->ss, rtk->dss);
+ if (!strcmp(rbf.utc, gbf.utc)) {
+ rbf.sat_num = gbf.sat_num;
+ rbf.latitude = gbf.latitude;
+ rbf.longitude = gbf.longitude;
+ rbf.altitude = gbf.altitude;
+ rbf.speed = gbf.speed;
+ rbf.trackTure = gbf.trackTure;
+ MA_SendRtkBrief(&rbf);
+ }
- DEBUG("RTK_UPDATE_EVT =================");
- }
- if (events & MCU_UPDATE_EVT) {
- DEBUG("MCU_UPDATE_EVT length %d", length);
- // 0-31 version
- // 32-33 selftest
- // 34-35 gpio
- // 36-37 speed
- // 38-39 engine
- // 40-55 sn
- struct mcuBrief brief;
+ ost1 = AppTimer_GetTickCount() - ost1;
- memset(&brief, 0, sizeof(brief));
+ UpdateRTKInfo(rtk);
- int x = 0;
- while(data[x] != 0 && x < 32) x++;
+ ost = AppTimer_GetTickCount() - ost;
- ConvertHex2String(brief.version, data, x);
- brief.selftest = BUILD_UINT16(data[33], data[32]);
+ if (ost > 100)
+ DEBUG("driver_test 璇勫垽鑰楁椂 %ld %ld", ost1, ost);
+ break;
+ }
+ case RTK_STATUS_EVT: {
+ DEBUG("妯″潡淇℃伅 %02X %02X %02X %02X %02X %02X", data[0], data[1], data[2], data[3], data[4], data[5]);
+ if (length == 33)
+ MA_SendRtkStatus((char *)data, data[32]);
+ break;
+ }
+ case MCU_UPDATE_EVT: {
+ // 0-31 version
+ // 32-33 selftest
+ // 34-35 gpio
+ // 36-37 speed
+ // 38-39 engine
+ // 40-55 sn
+ struct mcuBrief brief;
+
+ memset(&brief, 0, sizeof(brief));
+
+ int x = 0;
+ while (data[x] != 0 && x < 32) x++;
+
+ ConvertHex2String(brief.version, data, x);
+ brief.selftest = BUILD_UINT16(data[33], data[32]);
// brief.gpio = BUILD_UINT16(data[35], data[34]);
// brief.speed = BUILD_UINT16(data[37], data[36]);
// brief.engine = BUILD_UINT16(data[39], data[38]);
// memcpy(brief.sn, data+40, 16);
- memcpy(brief.sn, data+34, 16);
+ memcpy(brief.sn, data + 34, 16);
- MA_SendMcuBrief(&brief);
+ MA_SendMcuBrief(&brief);
- if (defaultMcuRom.more > 0) {
- char str[64] = {0};
+ if (defaultMcuRom.more > 0) {
+ char str[64] = {0};
- memcpy(str, data, 32);
+ memcpy(str, data, 32);
- vector<string> ver = split(str, "_");
+ vector<string> ver = split(str, "_");
- if (strlen(defaultMcuRom.verCode) > 0 && ver.size() >= 4 && strcmp(defaultMcuRom.verCode, ver[3].c_str()) != 0 && defaultMcuRom.rom != NULL) {
- UploadDfuFile(defaultMcuRom.rom, defaultMcuRom.length);
- delete []defaultMcuRom.rom;
- defaultMcuRom.rom = NULL;
+ if (strlen(defaultMcuRom.verCode) > 0 && ver.size() >= 4 &&
+ strcmp(defaultMcuRom.verCode, ver[3].c_str()) != 0 &&
+ defaultMcuRom.rom != NULL) {
+ UploadDfuFile(defaultMcuRom.rom, defaultMcuRom.length);
+ delete[]defaultMcuRom.rom;
+ defaultMcuRom.rom = NULL;
+ }
+ defaultMcuRom.more = 0;
}
- defaultMcuRom.more = 0;
- }
// UpdateSensor(brief.gpio, brief.speed, brief.engine);
- }
- if (events & CAN_UPDATE_EVT) {
- struct canBrief brief;
+ break;
+ }
+ case CAN_UPDATE_EVT: {
+ struct canBrief brief;
- brief.gpio = BUILD_UINT16(data[1], data[0]);
- brief.rpm = BUILD_UINT16(data[3], data[2]);
- brief.speed = (double) BUILD_UINT16(data[5], data[4]) / 10.0;
- brief.voltage = (double) BUILD_UINT16(data[7], data[6]) / 10.0;
+ brief.gpio = BUILD_UINT16(data[1], data[0]);
+ brief.rpm = BUILD_UINT16(data[3], data[2]);
+ brief.speed = (double) BUILD_UINT16(data[5], data[4]) / 10.0;
+ brief.voltage = (double) BUILD_UINT16(data[7], data[6]) / 10.0;
- MA_SendCanStatus(&brief);
- }
- if (events & CAR_SENSOR_UPDATE_EVT) {
- struct carSensorBrief brief;
- int x = 20;
+ MA_SendCanStatus(&brief);
+ break;
+ }
+ case CAR_SENSOR_UPDATE_EVT: {
+ struct carSensorBrief brief;
+ int x = 20;
- brief.odo = BUILD_UINT32(data[3], data[2], data[1], data[0]);
- brief.trip = BUILD_UINT32(data[7], data[6], data[5], data[4]);
- brief.tripTime = BUILD_UINT32(data[11], data[10], data[9], data[8]);
- brief.cellVolt = ((double) BUILD_UINT16(data[13], data[12])) / 10.0;
- brief.speed = ((double) BUILD_UINT16(data[15], data[14])) / 10.0;
- brief.engine = BUILD_UINT16(data[17], data[16]);
- brief.sas = (short)BUILD_UINT16(data[19], data[18]);
- brief.key = data[x++];
- brief.gear = data[x++];
- brief.aps = data[x++];
- brief.door = data[x++];
- brief.seatBelt = data[x++];
- brief.clutch = data[x++];
- brief.horn = data[x++];
- brief.wiper = data[x++];
- brief.handBreak = data[x++];
- brief.mainBreak = data[x++];
- brief.leftTurnLamp = data[x++];
- brief.rightTurnLamp = data[x++];
- brief.clearanceLamp = data[x++];
- brief.dippedBeamLamp = data[x++];
- brief.mainBeamLamp = data[x++];
- brief.fogLamp = data[x++];
- brief.assBreak = data[x++];
- brief.surround1 = data[x++];
- brief.surround2 = data[x++];
- brief.surround3 = data[x++];
- brief.surround4 = data[x++];
+ brief.odo = BUILD_UINT32(data[3], data[2], data[1], data[0]);
+ brief.trip = BUILD_UINT32(data[7], data[6], data[5], data[4]);
+ brief.tripTime = BUILD_UINT32(data[11], data[10], data[9], data[8]);
+ brief.cellVolt = ((double) BUILD_UINT16(data[13], data[12])) / 10.0;
+ brief.speed = ((double) BUILD_UINT16(data[15], data[14])) / 10.0;
+ brief.engine = BUILD_UINT16(data[17], data[16]);
+ brief.sas = (short) BUILD_UINT16(data[19], data[18]);
+ brief.key = data[x++];
+ brief.gear = data[x++];
+ brief.aps = data[x++];
+ brief.door = data[x++];
+ brief.seatBelt = data[x++];
+ brief.clutch = data[x++];
+ brief.horn = data[x++];
+ brief.wiper = data[x++];
+ brief.handBreak = data[x++];
+ brief.mainBreak = data[x++];
+ brief.leftTurnLamp = data[x++];
+ brief.rightTurnLamp = data[x++];
+ brief.clearanceLamp = data[x++];
+ brief.dippedBeamLamp = data[x++];
+ brief.mainBeamLamp = data[x++];
+ brief.fogLamp = data[x++];
+ brief.assBreak = data[x++];
+ brief.surround1 = data[x++];
+ brief.surround2 = data[x++];
+ brief.surround3 = data[x++];
+ brief.surround4 = data[x++];
- MA_SendCarSensorBrief(&brief);
+ MA_SendCarSensorBrief(&brief);
- car_sensor_t sensor;
- x = 20;
+ car_sensor_t sensor;
+ x = 20;
- sensor.odo = BUILD_UINT32(data[3], data[2], data[1], data[0]);
- sensor.trip = BUILD_UINT32(data[7], data[6], data[5], data[4]);
- sensor.tripTime = BUILD_UINT32(data[11], data[10], data[9], data[8]);
- sensor.cellVolt = (double)(BUILD_UINT16(data[13], data[12])) / 10.0;
- sensor.speed = BUILD_UINT16(data[15], data[14]);
- sensor.engine = BUILD_UINT16(data[17], data[16]);
- sensor.sas = (short)BUILD_UINT16(data[19], data[18]);
- sensor.key = data[x++];
- sensor.gear = data[x++];
- sensor.aps = data[x++];
- sensor.door = data[x++];
- sensor.seatBelt = data[x++];
- sensor.clutch = data[x++];
- sensor.horn = data[x++];
- sensor.wiper = data[x++];
- sensor.handBreak = data[x++];
- sensor.mainBreak = data[x++];
- sensor.leftTurnLamp = data[x++];
- sensor.rightTurnLamp = data[x++];
- sensor.clearanceLamp = data[x++];
- sensor.dippedBeamLamp = data[x++];
- sensor.mainBeamLamp = data[x++];
- sensor.fogLamp = data[x++];
- sensor.assBreak = data[x++];
- sensor.surround1 = data[x++];
- sensor.surround2 = data[x++];
- sensor.surround3 = data[x++];
- sensor.surround4 = data[x++];
+ sensor.odo = BUILD_UINT32(data[3], data[2], data[1], data[0]);
+ sensor.trip = BUILD_UINT32(data[7], data[6], data[5], data[4]);
+ sensor.tripTime = BUILD_UINT32(data[11], data[10], data[9], data[8]);
+ sensor.cellVolt = (double) (BUILD_UINT16(data[13], data[12])) / 10.0;
+ sensor.speed = BUILD_UINT16(data[15], data[14]);
+ sensor.engine = BUILD_UINT16(data[17], data[16]);
+ sensor.sas = (short) BUILD_UINT16(data[19], data[18]);
+ sensor.key = data[x++];
+ sensor.gear = data[x++];
+ sensor.aps = data[x++];
+ sensor.door = data[x++];
+ sensor.seatBelt = data[x++];
+ sensor.clutch = data[x++];
+ sensor.horn = data[x++];
+ sensor.wiper = data[x++];
+ sensor.handBreak = data[x++];
+ sensor.mainBreak = data[x++];
+ sensor.leftTurnLamp = data[x++];
+ sensor.rightTurnLamp = data[x++];
+ sensor.clearanceLamp = data[x++];
+ sensor.dippedBeamLamp = data[x++];
+ sensor.mainBeamLamp = data[x++];
+ sensor.fogLamp = data[x++];
+ sensor.assBreak = data[x++];
+ sensor.surround1 = data[x++];
+ sensor.surround2 = data[x++];
+ sensor.surround3 = data[x++];
+ sensor.surround4 = data[x++];
- if (sensor.clutch == 1)
- sensor.gear = 0;
+ if (sensor.clutch == 1)
+ sensor.gear = 0;
- UpdateSensor(&sensor);
- }
- if (events & CARD_UPDATE_EVT) {
- DEBUG("CARD_UPDATE_EVT length %d", length);
+ UpdateSensor(&sensor);
+ break;
+ }
+ case CARD_UPDATE_EVT: {
+ DEBUG("CARD_UPDATE_EVT length %d", length);
- int ret = -1;
+ int ret = -1;
- for (int i = 0; i < length; ++i) {
- if (data[i] != 0) {
- ret = 0;
- break;
+ for (int i = 0; i < length; ++i) {
+ if (data[i] != 0) {
+ ret = 0;
+ break;
+ }
}
+
+ struct cardBrief brief;
+
+ brief.result = ret;
+
+ ConvertHex2String(brief.card, data, length);
+
+ MA_SendCardBrief(&brief);
+ break;
}
-
- struct cardBrief brief;
-
- brief.result = ret;
-
- ConvertHex2String(brief.card, data, length);
-
- MA_SendCardBrief(&brief);
- }
- if (events & PLAY_TTS_DONE_EVT) {
- tts_back_t *cb = (tts_back_t *) data;
- if (cb->callback != NULL) {
- cb->callback(cb->seq);
- }
- }
- if (events & MASTER_COMM_EVT) {
- union {
- int a;
- uint8_t b[sizeof(int)];
- } c;
-
- c.b[0] = data[0];
- c.b[1] = data[1];
- c.b[2] = data[2];
- c.b[3] = data[3];
-
- if (length == 4)
- MA_MainProcMsgEntry(c.a, NULL);
- else {
- MA_MainProcMsgEntry(c.a, (char *) data + 4);
- }
- }
- if (events & BLUETOOTH_STATUS_EVT) {
- DEBUG("BLUETOOTH_STATUS_EVT");
- uint8_t sta;
-
- if (length == 128) {
- MA_SendBlueStatus((char *)data, (char *)data+64, 3);
- sta = 3;
- } else if (length == 64) {
- MA_SendBlueStatus(NULL, (char *)data, 3);
- sta = 3;
- } else {
- MA_SendBlueStatus(NULL, NULL, data[0]);
- sta = data[0];
- }
-
- if (sta == 3) {
- // Connected
- btConnected = true;
- ParseMcuInit();
- ConfigRTKModuleLater();
-
- PlayTTS("钃濈墮杩炴帴", NULL);
- } else if (sta == 2) {
- // Disconnect
- btConnected = false;
- PlayTTS("钃濈墮鏂紑", NULL);
- } else if (sta == 1) {
- // Open
- btEnable = true;
-
- if (strlen(btAddr) > 0) {
- ConnectToBluetooth(btAddr, NULL);
+ case PLAY_TTS_DONE_EVT: {
+ tts_back_t *cb = (tts_back_t *) data;
+ if (cb->callback != NULL) {
+ cb->callback(cb->seq);
}
+ break;
+ }
+ case MASTER_COMM_EVT: {
+ union {
+ int a;
+ uint8_t b[sizeof(int)];
+ } c;
+
+ c.b[0] = data[0];
+ c.b[1] = data[1];
+ c.b[2] = data[2];
+ c.b[3] = data[3];
+
+ if (length == 4)
+ MA_MainProcMsgEntry(c.a, NULL);
+ else {
+ MA_MainProcMsgEntry(c.a, (char *) data + 4);
+ }
+ break;
+ }
+ case BLUETOOTH_STATUS_EVT: {
+ DEBUG("BLUETOOTH_STATUS_EVT");
+
+ if (!mAyDevice) {
+ uint8_t sta;
+
+ if (length == 128) {
+ MA_SendBlueStatus((char *) data, (char *) data + 64, 3);
+ sta = 3;
+ } else if (length == 64) {
+ MA_SendBlueStatus(NULL, (char *) data, 3);
+ sta = 3;
+ } else {
+ MA_SendBlueStatus(NULL, NULL, data[0]);
+ sta = data[0];
+ }
+
+ if (sta == 3) {
+ // Connected
+ btConnected = true;
+ ParseMcuInit();
+ ConfigRTKModuleLater();
+
+ PlayTTS("钃濈墮杩炴帴", NULL);
+ } else if (sta == 2) {
+ // Disconnect
+ if (btConnected) {
+ btConnected = false;
+ PlayTTS("钃濈墮鏂紑", NULL);
+ }
+ } else if (sta == 1) {
+ // Open
+ btEnable = true;
+
+ if (strlen(btAddr) > 0) {
+ ConnectToBluetooth(btAddr, NULL);
+ }
// ConnectToBluetooth("00:1B:35:16:20:4A", NULL);
// ConnectToBluetooth("00:1B:35:16:20:4A", "3800");``
// ConnectToBluetooth("00:1D:43:9A:E0:79", "1900");
// ConnectToBluetooth("DESKTOP-IE9V7U8", "0000");
- PlayTTS("钃濈墮鍚姩", NULL);
- } else {
- // Close
- btEnable = false;
- btConnected = false;
- PlayTTS("钃濈墮鍏抽棴", NULL);
+ PlayTTS("钃濈墮鍚姩", NULL);
+ } else {
+ // Close
+ btEnable = false;
+ btConnected = false;
+ PlayTTS("钃濈墮鍏抽棴", NULL);
+ }
+ }
+ break;
}
- }
- if (events & BLUETOOTH_DATA_EVT) {
- ParseMcu(data, length);
+ case BLUETOOTH_DATA_EVT: {
+ ParseMcu(data, length);
+ break;
+ }
+ case SENSOR_CHANGE_EVT: {
+ SensorXChanged(BUILD_UINT16(data[1], data[0]), BUILD_UINT32(data[5], data[4], data[3], data[2]));
+ break;
+ }
+ default:
+ break;
}
}
@@ -706,13 +748,14 @@
static void RegisterPlatformTimeout(union sigval sig)
{
- DEBUG("RegisterPlatformTimeout");
+ DEBUG("RTK骞冲彴娉ㄥ唽瓒呮椂");
AppTimer_delete(RegisterPlatformTimeout);
RegisterPlatform();
}
static void RegisterPlatform(void)
{
+ DEBUG("RTK骞冲彴娉ㄥ唽...");
AppTimer_delete(RegisterPlatformTimeout);
AppTimer_add(RegisterPlatformTimeout, D_SEC(15));
SendDeviceRegister(deviceInfo.province, deviceInfo.city, deviceInfo.device_model,
@@ -730,12 +773,14 @@
static void LoginPlatformTimeout(union sigval sig)
{
+ DEBUG("RTK骞冲彴鐧诲綍瓒呮椂");
AppTimer_delete(LoginPlatformTimeout);
LoginPlatform();
}
static void LoginPlatform(void)
{
+ DEBUG("RTK骞冲彴鐧诲綍...");
uint32_t tim = time(NULL);
uint8_t data[12];
uint8_t *ciphertext;
@@ -748,6 +793,7 @@
AppTimer_delete(LoginPlatformTimeout);
AppTimer_add(LoginPlatformTimeout, D_SEC(15));
+
DESEncrypt(platformStatus.platformKey, platformStatus.platformKeyLength, data, 4, &ciphertext);
if (ciphertext != NULL) {
diff --git a/lib/src/main/cpp/rtk_platform/platform.h b/lib/src/main/cpp/rtk_platform/platform.h
index 8e88ffe..5c2136f 100644
--- a/lib/src/main/cpp/rtk_platform/platform.h
+++ b/lib/src/main/cpp/rtk_platform/platform.h
@@ -7,20 +7,24 @@
#include "../rtk_module/rtk.h"
-#define PLATFORM_CONNECT_EVT 0x0001
-#define PLATFORM_DISCONNECT_EVT 0x0002
-#define PLATFORM_REGISTER_EVT 0x0004
-#define PLATFORM_LOGIN_EVT 0x0008
-#define RTK_UPDATE_EVT 0x0010
-#define GPS_UPDATE_EVT 0x0020
-#define MCU_UPDATE_EVT 0x0040
-#define CARD_UPDATE_EVT 0x0080
-#define PLAY_TTS_DONE_EVT 0x0100
-#define CAR_SENSOR_UPDATE_EVT 0x0200
-#define MASTER_COMM_EVT 0x0400
-#define CAN_UPDATE_EVT 0x0800
-#define BLUETOOTH_DATA_EVT 0x1000
-#define BLUETOOTH_STATUS_EVT 0x2000
+enum {
+ PLATFORM_CONNECT_EVT,
+ PLATFORM_DISCONNECT_EVT,
+ PLATFORM_REGISTER_EVT,
+ PLATFORM_LOGIN_EVT,
+ RTK_UPDATE_EVT,
+ RTK_STATUS_EVT,
+ GPS_UPDATE_EVT,
+ MCU_UPDATE_EVT,
+ CARD_UPDATE_EVT,
+ PLAY_TTS_DONE_EVT,
+ CAR_SENSOR_UPDATE_EVT,
+ MASTER_COMM_EVT,
+ CAN_UPDATE_EVT,
+ BLUETOOTH_DATA_EVT,
+ BLUETOOTH_STATUS_EVT,
+ SENSOR_CHANGE_EVT
+};
typedef struct {
char domain_name[32];
@@ -36,7 +40,7 @@
int rtk_interval;
} rtk_platform_cfg_t;
-void InitPlatform(const uint8_t *phone, const char *domain_name, int port);
+void InitPlatform(bool ayDevice, const uint8_t *phone, const char *domain_name, int port);
void ConfigPlatform(const rtk_platform_cfg_t *p);
void PlatformStatusChanged(uint32_t event, const uint8_t *data, int length);
diff --git a/lib/src/main/cpp/test_common/car_sensor.cpp b/lib/src/main/cpp/test_common/car_sensor.cpp
index 5e98de8..8caa027 100644
--- a/lib/src/main/cpp/test_common/car_sensor.cpp
+++ b/lib/src/main/cpp/test_common/car_sensor.cpp
@@ -8,6 +8,7 @@
#include "../defs.h"
#include "../common/apptimer.h"
#include "../jni_log.h"
+#include "../rtk_platform/platform.h"
#define DEBUG(fmt, args...) LOGD("<car_sensor> <%s>: " fmt, __func__, ##args)
@@ -229,6 +230,19 @@
pthread_mutex_lock(&status_rw_mutex);
CarStatus[id] = value;
pthread_mutex_unlock(&status_rw_mutex);
+
+ if (id != OBD_SPEED && id != ENGINE_RPM) {
+ uint8_t buffer[6];
+
+ buffer[0] = HI_UINT16(id);
+ buffer[1] = LO_UINT16(id);
+ buffer[2] = BREAK_UINT32(value, 3);
+ buffer[3] = BREAK_UINT32(value, 2);
+ buffer[4] = BREAK_UINT32(value, 1);
+ buffer[5] = BREAK_UINT32(value, 0);
+
+ PlatformStatusChanged(SENSOR_CHANGE_EVT, buffer, 6);
+ }
}
static void LRLightTimeout(union sigval sig)
@@ -267,7 +281,6 @@
static void SensorChanged(int id, int value)
{
// DEBUG("鐘舵�佹敼鍙� %d = %d", id, value);
-
switch (id) {
case SENSOR_LEFT_TURN_SIGNAL: {
left_turn_signal = value;
@@ -432,7 +445,7 @@
// break;
// }
default:
- break;
+ return;
}
}
diff --git a/lib/src/main/cpp/test_items/driving_curve.cpp b/lib/src/main/cpp/test_items/driving_curve.cpp
index dd3bcc9..447ef11 100644
--- a/lib/src/main/cpp/test_items/driving_curve.cpp
+++ b/lib/src/main/cpp/test_items/driving_curve.cpp
@@ -105,7 +105,7 @@
if (!crashRedLine) {
crashRedLine = true;
// 杞﹁疆鍘嬭竟绾匡紝涓嶅悎鏍�
- AddExamFault(27, rtkTime);
+ AddExamFault(20601, rtkTime);
DEBUG("杞﹁疆鍘嬭竟绾�");
if (who == 1) {
PlayTTS("鍘嬪乏鏇茬嚎", NULL);
@@ -132,7 +132,7 @@
if (tp - stopTimepoint >= CorrectPauseCriteria(examParam.curve_pause_criteria) && !reportStopCarTimeout) {
// 鍋滆溅瓒�2绉掞紝涓嶅悎鏍�
- AddExamFault(28, rtkTime);
+ AddExamFault(20602, rtkTime);
DEBUG("涓�斿仠杞�");
reportStopCarTimeout = true;
}
diff --git a/lib/src/main/cpp/test_items/park_bottom.cpp b/lib/src/main/cpp/test_items/park_bottom.cpp
index 261e425..12e80fc 100644
--- a/lib/src/main/cpp/test_items/park_bottom.cpp
+++ b/lib/src/main/cpp/test_items/park_bottom.cpp
@@ -85,7 +85,7 @@
if ((parkStatus[0] != 1 || parkStatus[1] != 1) && !reportParkFail && reverseCar) {
// 鍊掑簱涓嶅叆锛屼笉鍚堟牸
reportParkFail = true;
- AddExamFault(8, rtkTime);
+ AddExamFault(20103, rtkTime);
DEBUG("鍊掑簱涓嶅叆");
}
goto TEST_END;
@@ -111,7 +111,7 @@
if (!occurCrashRedLine && reverseCar) {
occurCrashRedLine = true;
// 杞﹁韩鍑虹嚎锛屼笉鍚堟牸
- AddExamFault(7, rtkTime);
+ AddExamFault(10116, rtkTime);
DEBUG("杞﹁疆鍘嬬嚎");
if (who == 1) {
PlayTTS("鍘嬪乏搴撲綅绾�", NULL);
@@ -131,14 +131,14 @@
} else if (parkCount == 1) {
if (carray[0] == crossCtrlLine) {
// 涓嶆寜瑙勫畾绾胯矾锛岄『搴忓舰寮忥紝涓嶅悎鏍�
- AddExamFault(6, rtkTime);
+ AddExamFault(20101, rtkTime);
DEBUG("涓嶆寜瑙勫畾绾胯矾锛岄『搴忓舰寮�");
}
carray[1] = crossCtrlLine;
} else if (parkCount == 2) {
if (carray[0] != crossCtrlLine) {
// 涓嶆寜瑙勫畾绾胯矾锛岄『搴忓舰寮忥紝涓嶅悎鏍�
- AddExamFault(6, rtkTime);
+ AddExamFault(20101, rtkTime);
DEBUG("涓嶆寜瑙勫畾绾胯矾锛岄『搴忓舰寮�");
} else {
// 绂诲紑娴嬭瘯鍖猴紝鍋滄璁℃椂
@@ -154,7 +154,7 @@
// 瀹屾垚瓒呮椂锛屼笉鍚堟牸
if (!reportExamTimeout) {
reportExamTimeout = true;
- AddExamFault(10, rtkTime);
+ AddExamFault(20105, rtkTime);
DEBUG("椤圭洰瓒呮椂");
}
}
@@ -177,7 +177,7 @@
// 鍚屾柟鍚戝啀鍚姩锛岀户缁垽鏂槸鍚﹀仠杞﹁秴鏃�
if (tp - stopTimepoint >= CorrectPauseCriteria(examParam.park_bottom_pause_criteria) && reverseCar) {
// 鍋滆溅瓒�2绉掞紝姣忔鎵�5鍒�
- AddExamFault(11, rtkTime);
+ AddExamFault(20106, rtkTime);
DEBUG("涓�斿仠杞�");
}
} else if (moveDirect == -1) {
@@ -189,7 +189,7 @@
if (darray[parkCount] == 0) {
if (!crossCtrlLineSw) {
// 鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎
- AddExamFault(9, rtkTime);
+ AddExamFault(20104, rtkTime);
DEBUG("鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎");
}
darray[parkCount] = 1;
@@ -204,7 +204,7 @@
if (parkStatus[parkCount] != 1) {
// 鍊掑簱涓嶅叆锛屼笉鍚堟牸
reportParkFail = true;
- AddExamFault(8, rtkTime);
+ AddExamFault(20103, rtkTime);
DEBUG("鍊掑簱涓嶅叆");
}
}
@@ -222,7 +222,7 @@
// 鍒囨崲涓哄�掕溅
if (!crossCtrlLineSw) {
// 鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎
- AddExamFault(9, rtkTime);
+ AddExamFault(20104, rtkTime);
DEBUG("鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎");
}
darray[parkCount] = 1;
diff --git a/lib/src/main/cpp/test_items/park_edge.cpp b/lib/src/main/cpp/test_items/park_edge.cpp
index 8b33d8b..e7b9366 100644
--- a/lib/src/main/cpp/test_items/park_edge.cpp
+++ b/lib/src/main/cpp/test_items/park_edge.cpp
@@ -71,7 +71,7 @@
if (CrashRedLine1(map, car)) {
if (!occurCrashRedLine1 && occurMoveBack) {
// 杞﹁疆鍘嬭竟绾匡紝姣忔鎵�10鍒�
- AddExamFault(23, rtkTime);
+ AddExamFault(20403, rtkTime);
DEBUG("杞﹁疆鍘嬭竟绾�");
occurCrashRedLine1 = true;
}
@@ -82,7 +82,7 @@
if (CrashRedLine2(map, car)) {
if (!occurCrashRedLine2 && occurMoveBack) {
// 杞﹁韩鍘嬪簱浣嶇嚎锛屾瘡娆℃墸10鍒�
- AddExamFault(24, rtkTime);
+ AddExamFault(20404, rtkTime);
DEBUG("杞﹁韩鍘嬪簱浣嶇嚎");
occurCrashRedLine2 = true;
}
@@ -93,9 +93,9 @@
if (ExitParkArea(map, car) || ExitParkArea2(map, car)) {
if (!parkSuccess && occurMoveBack && !reportParkFail) {
// 鐩存帴椹剁娴嬭瘯鍖猴紝璁や负绉诲簱涓嶅叆
- AddExamFault(21, rtkTime);
+ AddExamFault(10103, rtkTime);
reportParkFail = true;
- DEBUG("鐩存帴椹剁娴嬭瘯鍖�,绉诲簱涓嶅叆");
+ DEBUG("鐩存帴椹剁娴嬭瘯鍖�,涓嶆寜鑰冭瘯鍛樻寚浠ら┚椹�");
}
testing = false;
goto TEST_END;
@@ -122,7 +122,7 @@
if (!reportExamTimeout && tp - moveBackTimePoint >= examParam.park_edge_limit_time) {
// 瓒呮椂90绉掞紝涓嶅悎鏍�
- AddExamFault(22, rtkTime);
+ AddExamFault(20402, rtkTime);
reportExamTimeout = true;
DEBUG("绉诲簱90绉掕秴鏃�");
}
@@ -145,7 +145,7 @@
// 鍚屾柟鍚戝啀鍚姩锛岀户缁垽鏂槸鍚﹀仠杞﹁秴鏃�
if (tp - stopTimepoint >= CorrectPauseCriteria(examParam.park_edge_pause_criteria) && occurMoveBack) {
// 鍋滆溅瓒�2绉掞紝姣忔鎵�5鍒�
- AddExamFault(26, rtkTime);
+ AddExamFault(20406, rtkTime);
DEBUG("鍋滆溅瓒呮椂");
}
} else {
@@ -160,7 +160,7 @@
if (!parkSuccess && !reportParkFail) {
// 鍋滄鍚庯紝杞﹁韩鍑虹嚎锛屼笉鍚堟牸
- AddExamFault(21, rtkTime);
+ AddExamFault(20401, rtkTime);
reportParkFail = true;
DEBUG("绉诲簱涓嶅叆");
}
@@ -168,7 +168,7 @@
// 鍦ㄨ繖閲屾鏌ヨ浆鍚戠伅鐘舵��
if (ReadCarStatus(TURN_SIGNAL_LAMP) != LEFT_TURN_LIGHT) {
// 涓嶅紑杞悜鐏紝鎵�10鍒�
- AddExamFault(25, rtkTime);
+ AddExamFault(20405, rtkTime);
DEBUG("鏈紑鍚浆鍚戠伅");
}
}
diff --git a/lib/src/main/cpp/test_items/stop_and_start.cpp b/lib/src/main/cpp/test_items/stop_and_start.cpp
index 477884b..47690a2 100644
--- a/lib/src/main/cpp/test_items/stop_and_start.cpp
+++ b/lib/src/main/cpp/test_items/stop_and_start.cpp
@@ -71,7 +71,7 @@
if (CrashRedLine(map, car)) {
// 杞﹁疆鍘嬬嚎锛屼笉鍚堟牸
if (!occurCrashRedLine) {
- AddExamFault(13, rtkTime);
+ AddExamFault(10116, rtkTime);
DEBUG("杞﹁疆鍘嬬嚎");
}
occurCrashRedLine = true;
@@ -102,7 +102,7 @@
} else if (stopCar && !handBreakActive) {
// 妫�鏌ユ槸鍚︽媺浣忔墜鍒�
handBreakActive = true;
- AddExamFault(19, rtkTime);
+ AddExamFault(20306, rtkTime);
DEBUG("娌℃媺鎵嬪埞");
}
prevMoveDirect = moveDirect;
@@ -123,21 +123,21 @@
if (dis1 > examParam.ramp_stoppoint_red_distance) {
// 璺濈鍋滄绾垮墠鍚庤秴鍑�50鍘樼背
- AddExamFault(12, rtkTime);
+ AddExamFault(20301, rtkTime);
DEBUG("璺濈鍋滄绾垮墠鍚庤秴鍑�50鍘樼背锛屼笉鍚堟牸");
} else if (fabs(dis1) > EPSILON) {
// 鍓嶄繚闄╂病鏈変綅浜庡仠姝㈠甫鍐咃紝浣嗘病鏈夎秴鍑�50鍘樼背锛屾墸10鍒�
- AddExamFault(17, rtkTime);
+ AddExamFault(20304, rtkTime);
DEBUG("鍓嶄繚闄╂病鏈変綅浜庡仠姝㈠甫鍐咃紝浣嗘病鏈夎秴鍑�50鍘樼背");
}
if (dis2 > examParam.ramp_edge_red_distance) {
// 璺濈杈圭嚎瓒呭嚭50鍘樼背,涓嶅悎鏍�
- AddExamFault(14, rtkTime);
+ AddExamFault(20302, rtkTime);
DEBUG("璺濈杈圭嚎瓒呭嚭50鍘樼背");
} else if (dis2 > examParam.ramp_edge_yellow_distance) {
// 璺濈杈圭嚎瓒呭嚭30鍘樼背锛屾墸10鍒�
- AddExamFault(18, rtkTime);
+ AddExamFault(20305, rtkTime);
DEBUG("璺濈杈圭嚎瓒呭嚭30鍘樼背");
}
}
@@ -159,7 +159,7 @@
if (slideDistance > examParam.ramp_slide_red_distance && !slideLongDistance && !reportSlideFault) {
// 鍚庢粦瓒呰繃30鍘樼背, 涓嶅悎鏍�
- AddExamFault(16, rtkTime);
+ AddExamFault(10106, rtkTime);
DEBUG("鍚庢粦瓒呰繃30鍘樼背");
slideLongDistance = true;
reportSlideFault = true;
@@ -171,7 +171,7 @@
DistanceOf(stopPoint, car->carXY[car->axial[AXIAL_FRONT]]) < 0.1)) {
if (TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10) - stopCarTime > examParam.ramp_start_car_limit_time) {
// 璧锋鏃堕棿瓒呰繃30绉掞紝涓嶅悎鏍�
- AddExamFault(15, rtkTime);
+ AddExamFault(20303, rtkTime);
DEBUG("璧锋鏃堕棿瓒呰繃30绉�");
reportStartTimeout = true;
}
@@ -182,7 +182,7 @@
if (slideNormalDistance && !slideLongDistance && !reportSlideFault) {
reportSlideFault = true;
// 鍚庢粦瓒呰繃10鍘樼背锛屼絾娌¤秴杩�30鍘樼背
- AddExamFault(20, rtkTime);
+ AddExamFault(10204, rtkTime);
DEBUG("鍚庢粦瓒呰繃10鍘樼背锛屼絾娌¤秴杩�30鍘樼背");
}
}
diff --git a/lib/src/main/cpp/test_items/turn_a90.cpp b/lib/src/main/cpp/test_items/turn_a90.cpp
index a9443d7..e9f97f8 100644
--- a/lib/src/main/cpp/test_items/turn_a90.cpp
+++ b/lib/src/main/cpp/test_items/turn_a90.cpp
@@ -79,7 +79,7 @@
if (!crashRedLine) {
crashRedLine = true;
// 纰惧帇閬撹矾杈圭紭,涓嶅悎鏍�
- AddExamFault(29, rtkTime);
+ AddExamFault(20701, rtkTime);
DEBUG("纰惧帇閬撹矾杈圭紭");
}
} else {
@@ -101,7 +101,7 @@
if (tp - stopTimepoint >= CorrectPauseCriteria(examParam.turn_a90_pause_criteria) && !reportStopCarTimeout) {
// 鍋滆溅瓒�2绉掞紝姣忔鎵�5鍒�
- AddExamFault(31, rtkTime);
+ AddExamFault(20703, rtkTime);
DEBUG("涓�斿仠杞�");
reportStopCarTimeout = true;
}
@@ -128,7 +128,7 @@
if ((turn_direct == 'R' && ReadCarStatus(TURN_SIGNAL_LAMP) != RIGHT_TURN_LIGHT) ||
(turn_direct == 'L' && ReadCarStatus(TURN_SIGNAL_LAMP) != LEFT_TURN_LIGHT)) {
DEBUG("杞悜鐏湭寮�鍚�");
- AddExamFault(30, rtkTime);
+ AddExamFault(20702, rtkTime);
}
}
turnLeftFinished = true;
diff --git a/lib/src/main/cpp/test_items2/car_start.cpp b/lib/src/main/cpp/test_items2/car_start.cpp
index fdc3a59..31410f5 100644
--- a/lib/src/main/cpp/test_items2/car_start.cpp
+++ b/lib/src/main/cpp/test_items2/car_start.cpp
@@ -48,11 +48,11 @@
if (sensor.value != LEFT_TURN_LIGHT) {
DEBUG("鍙樿皟鏈墦鐏�!!");
// 娌℃墦鐏紝涓嶅悎鏍�
- AddExamFault(13, rtkTime);
+ AddExamFault(30121, rtkTime);
} else if (TimeGetDiff(rtkTime, &sensor.time) < D_SEC(3)) {
DEBUG("杞悜鐏椂闂翠笉瓒�");
// 涓嶈冻3绉掞紝涓嶅悎鏍�
- AddExamFault(14, rtkTime);
+ AddExamFault(30122, rtkTime);
}
}
}
@@ -63,11 +63,11 @@
if (sensor.name == HAND_BREAK && sensor.value == BREAK_ACTIVE) {
DEBUG("Handbreak active move over 10m");
// 鎵嬪埞鎷夎捣鐘舵�佷笅锛岃椹朵簡10绫充互涓婏紝涓嶅悎鏍�
- AddExamFault(25, rtkTime);
+ AddExamFault(40205, rtkTime);
} else if (handBreakActive) {
// 鎵嬪埞鎷夎捣鐘舵�佷笅锛岃椹朵簡1绫充互涓婏紝鎵�10鍒�
DEBUG("Handbreak active move over 1M");
- AddExamFault(26, rtkTime);
+ AddExamFault(40206, rtkTime);
}
PlayTTS(examParam.start_car_end_tts, NULL);
@@ -82,7 +82,7 @@
if (sensor.name == DOOR && sensor.value == DOOR_OPEN) {
// 杞﹂棬鏈畬鍏ㄥ叧闂紝涓嶅悎鏍�
DEBUG("杞﹂棬鏈叧闂�");
- AddExamFault(23, rtkTime);
+ AddExamFault(40202, rtkTime);
}
sensor = ReadCarSensorValue(HAND_BREAK);
@@ -95,7 +95,7 @@
if (ReadCarStatus(ENGINE_RPM) > examParam.start_car_max_rpm && !checkEngineRPM) {
// 杞�熻秴鏍囷紝涓嶅悎鏍�
DEBUG("杞�熻秴鏍�");
- AddExamFault(29, rtkTime);
+ AddExamFault(40210, rtkTime);
checkEngineRPM = true;
}
diff --git a/lib/src/main/cpp/test_items2/change_lane.cpp b/lib/src/main/cpp/test_items2/change_lane.cpp
index 80053ac..c9f305c 100644
--- a/lib/src/main/cpp/test_items2/change_lane.cpp
+++ b/lib/src/main/cpp/test_items2/change_lane.cpp
@@ -43,7 +43,7 @@
if (ReadOdo() - maxMoveDistance > examParam.change_lane_limit_distance) {
// 瓒呰溅鏈畬鎴�
DEBUG("鍙橀亾鍥哄畾璺濈鍐呮湭瀹屾垚 褰撳墠閲岀▼ %f", ReadOdo());
- AddExamFault(3, rtkTime);
+ AddExamFault(30103, rtkTime);
return false;
}
diff --git a/lib/src/main/cpp/test_items2/drive_straight.cpp b/lib/src/main/cpp/test_items2/drive_straight.cpp
index 44d120a..21156f2 100644
--- a/lib/src/main/cpp/test_items2/drive_straight.cpp
+++ b/lib/src/main/cpp/test_items2/drive_straight.cpp
@@ -80,7 +80,7 @@
if (fabs(offset2 - offsetBase) > examParam.straight_max_offset) {
DEBUG("鐩寸嚎鍋忕Щ澶т簬30鍘樼背 offset2 = %f", fabs(offset2 - offsetBase));
// 鍋忕Щ澶т簬30鍘樼背锛屼笉鍚堟牸
- AddExamFault(30, rtkTime);
+ AddExamFault(40301, rtkTime);
return false;
}
}
diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp
index dcb3d09..144b545 100644
--- a/lib/src/main/cpp/test_items2/dummy_light.cpp
+++ b/lib/src/main/cpp/test_items2/dummy_light.cpp
@@ -11,206 +11,123 @@
#define DEBUG(fmt, args...) LOGD("<road_exam dummy_light> <%s>: " fmt, __func__, ##args)
-enum {
- TTS_NOT_START,
- TTS_DOING,
- TTS_DONE,
- WAIT_OPERATE,
- CHECK_OPERATE
-};
-
static struct RtkTime currRtkTime;
static struct dummy_light_exam *content;
static int contentNum;
-static int checkCnt;
-static bool turn_left_active, flash_beam_active;
+static int question;
-static int examTtsSeq = 0;
+static vector<int> process;
+
static bool testing;
-static void DummyLightCheckActive(union sigval sig);
-static void ExamDummyLight(union sigval sig);
+static void CheckSolution(union sigval sig);
+static void ExamDummyLight(void);
void StartDummyLightExam(struct dummy_light_exam *ptr, int num, const struct RtkTime* rtkTime)
{
DEBUG("StartDummyLightExam");
content = ptr;
contentNum = num;
+ question = 0;
if (content != NULL && num > 0) {
DEBUG("鍚姩鐏厜");
currRtkTime = *rtkTime;
for (int i = 0; i < contentNum; ++i) {
- content[i].itemStatus = TTS_NOT_START;
-
- DEBUG("鐏厜椤圭洰 <%d> item %d, TTS %s", i, content[i].item, content[i].tts);
+ DEBUG("鐏厜椤圭洰 <%d> item %d, TTS %s", i, content[i].item, content[i].tts.c_str());
}
testing = true;
- AppTimer_delete(DummyLightCheckActive);
- AppTimer_delete(ExamDummyLight);
- AppTimer_add(ExamDummyLight, D_SEC(2));
+ AppTimer_delete(CheckSolution);
+ ExamDummyLight();
} else {
testing = false;
}
}
-int ExecuteDummyLightExam(const struct RtkTime* rtkTime)
+bool ExecuteDummyLightExam(const struct RtkTime* rtkTime)
{
currRtkTime = *rtkTime;
- return (testing)?1:2;
+ return testing;
}
void DummyLightTTSDone(int id)
{
// 绛夎闊虫挱鎶ュ畬姣曞悗璁℃椂
- if (id == examTtsSeq && testing) {
+ if (testing) {
+ vector<int>().swap(process);
- for (int i = 0; i < contentNum; ++i) {
- if (content[i].itemStatus == TTS_DOING) {
- DEBUG("DummyLightTTSDone item %d", content[i].item);
- content[i].itemStatus = TTS_DONE;
- break;
+ // 棰勮鍙栨湁涓棿鎿嶄綔姝ラ鐨勭伅鍏�
+ for (int i = 0; i < content[question].process.size(); ++i) {
+ if (ReadCarStatus((content[question].process[i]>>8) & 0xFF) == content[question].process[i] & 0xFF) {
+ process.push_back(content[question].process[i]);
}
}
- AppTimer_add(ExamDummyLight, 100);
+ AppTimer_delete(CheckSolution);
+ AppTimer_add(CheckSolution, D_SEC(5));
}
}
void TerminateDummyLightExam(void)
{
testing = false;
- AppTimer_delete(DummyLightCheckActive);
- AppTimer_delete(ExamDummyLight);
+ AppTimer_delete(CheckSolution);
}
-static void DummyLightCheckActive(union sigval sig)
+void handleLigthExam(uint16_t id, int value)
{
- int active = sig.sival_int;
- AppTimer_delete(DummyLightCheckActive);
- DEBUG("DummyLightCheckActive item = %d", active);
+ if (testing) {
+ for (int i = 0; i < content[question].process.size(); ++i) {
+ if (id == ((content[question].process[i] >> 8) & 0xFF) && value == (content[question].process[i] & 0xFF)) {
+ if (process.size() == 0 || process.back() != content[question].process[i]) {
+ process.push_back(content[question].process[i]);
+ }
+ }
+ }
+ }
+}
- switch (active) {
- case DRIVE_AT_NIGHT:
- case TURN_ON_MAIN_BEAM_LAMP:
- if (ReadCarStatus(MAIN_BEAM_LAMP) != MAIN_BEAM_LIGHT) {
- AddExamFault(58, &currRtkTime);
- }
- break;
- case TURN_ON_DIPPED_LAMP:
- case BRIDGE_MEET_CAR:
- case FOLLOW_CAR:
- if (ReadCarStatus(DIPPED_BEAM_LAMP) != DIPPED_BEAM_LIGHT) {
- AddExamFault(58, &currRtkTime);
- }
- break;
- case DRIVE_IN_FOG:
- if (ReadCarStatus(FOG_LAMP) != FOG_LIGHT) {
- AddExamFault(58, &currRtkTime);
- }
- break;
- case THROUGE_CROSSWALK:
- case THROUGE_CURVE:
- case THROUGE_CROSSROADS:
- if (++checkCnt < 5) {
- if (ReadCarStatus(FLASH_BEAM_LAMP) == FLASH_BEAM_LIGHT) {
- flash_beam_active = true;
- }
- AppTimer_add(DummyLightCheckActive, D_SEC(1), active);
- return;
- } else {
- if (!flash_beam_active) {
- AddExamFault(58, &currRtkTime);
+static void CheckSolution(union sigval sig)
+{
+ int question = sig.sival_int;
+
+ AppTimer_delete(CheckSolution);
+
+ if (content[question].process.size() > 0) {
+ if (content[question].process.size() != process.size()) {
+ AddExamFault(content[question].wrongCode, &currRtkTime);
+ goto NEXT_LIGHT;
+ } else {
+ // 鎿嶄綔椤哄簭涔熻婊¤冻
+ for (int i = 0; i < content[question].process.size(); ++i) {
+ if (process[i] != content[question].process[i]) {
+ AddExamFault(content[question].wrongCode, &currRtkTime);
+ goto NEXT_LIGHT;
}
}
- break;
- case OVERTAKE:
- if (++checkCnt < 5) {
- if (!flash_beam_active) {
- if (ReadCarStatus(TURN_SIGNAL_LAMP) == LEFT_TURN_LIGHT) {
- turn_left_active = true;
- }
- }
- if (turn_left_active) {
- if (ReadCarStatus(FLASH_BEAM_LAMP) == FLASH_BEAM_LIGHT) {
- flash_beam_active = true;
- }
- }
- AppTimer_add(DummyLightCheckActive, D_SEC(1), OVERTAKE);
- return;
- } else {
- if (!flash_beam_active || !turn_left_active) {
- AddExamFault(58, &currRtkTime);
- }
- }
- break;
- case CAR_FAULT:
- case PARK_CAR_TEMP:
- if (ReadCarStatus(TURN_SIGNAL_LAMP) != HAZARD_LIGHTS) {
- AddExamFault(58, &currRtkTime);
- }
- break;
- default:
- break;
+ }
}
- for (int i = 0; i < contentNum; ++i) {
- if (content[i].item == active) {
- content[i].itemStatus = CHECK_OPERATE;
+ for (int i = 0; i < content[question].solution.size(); ++i) {
+ if (ReadCarStatus((content[question].solution[i]>>8)&0xFF) != content[question].solution[i] & 0xFF) {
+ AddExamFault(content[question].wrongCode, &currRtkTime);
break;
}
}
- AppTimer_add(ExamDummyLight, 500);
+NEXT_LIGHT:
+ question++;
+ ExamDummyLight();
}
-static void ExamDummyLight(union sigval sig)
+static void ExamDummyLight(void)
{
- int i = 0;
- AppTimer_delete(ExamDummyLight);
-
- for (; i < contentNum; ++i) {
- switch (content[i].itemStatus) {
- case TTS_NOT_START:
- DEBUG("鎻愮ず璇█ %d: %s", content[i].item, content[i].tts);
- content[i].itemStatus = TTS_DOING;
- examTtsSeq = PlayTTS(content[i].tts, DummyLightTTSDone);
- // 绛夊緟TTS鎾斁瀹屾瘯
- return;
- case TTS_DOING:
- return;
- case TTS_DONE:
- content[i].itemStatus = WAIT_OPERATE;
-
- AppTimer_delete(DummyLightCheckActive);
-
- DEBUG("鎻愮ず璇█瀹屾瘯 %d", content[i].item);
-
- if (content[i].item == OVERTAKE) {
- checkCnt = 0;
- turn_left_active = flash_beam_active = false;
- AppTimer_add(DummyLightCheckActive, D_SEC(1), content[i].item);
- } else if (content[i].item == THROUGE_CROSSWALK || content[i].item == THROUGE_CURVE || content[i].item == THROUGE_CROSSROADS) {
- checkCnt = 0;
- flash_beam_active = false;
- AppTimer_add(DummyLightCheckActive, D_SEC(1), content[i].item);
- } else if (content[i].item >= 100)
- AppTimer_add(DummyLightCheckActive, D_SEC(3), content[i].item);
- else
- AppTimer_add(DummyLightCheckActive, D_SEC(5), content[i].item);
- return;
- case WAIT_OPERATE:
- return;
- case CHECK_OPERATE:
- default:
- break;
- }
- }
-
- if (i >= contentNum) {
+ if (testing && question < contentNum) {
+ PlayTTS(content[question].tts, DummyLightTTSDone);
+ } else {
testing = false;
}
}
diff --git a/lib/src/main/cpp/test_items2/dummy_light.h b/lib/src/main/cpp/test_items2/dummy_light.h
index 40a5cf8..129a0f1 100644
--- a/lib/src/main/cpp/test_items2/dummy_light.h
+++ b/lib/src/main/cpp/test_items2/dummy_light.h
@@ -6,6 +6,8 @@
#define MYAPPLICATION2_DUMMY_LIGHT_H
#include "../driver_test.h"
+#include <vector>
+#include <string>
enum {
TURN_ON_DIPPED_LAMP = 1,
@@ -24,13 +26,16 @@
struct dummy_light_exam {
int item;
- int itemStatus;
- char tts[512];
+ int wrongCode;
+ std::vector<int> process;
+ std::vector<int> solution;
+ std::string tts;
};
void StartDummyLightExam(struct dummy_light_exam *ptr, int num, const struct RtkTime* rtkTime);
-int ExecuteDummyLightExam(const struct RtkTime* rtkTime);
+bool ExecuteDummyLightExam(const struct RtkTime* rtkTime);
void DummyLightTTSDone(int id);
void TerminateDummyLightExam(void);
+void handleLigthExam(uint16_t id, int value);
#endif //MYAPPLICATION2_DUMMY_LIGHT_H
diff --git a/lib/src/main/cpp/test_items2/operate_gear.cpp b/lib/src/main/cpp/test_items2/operate_gear.cpp
index c403d17..f9e9fba 100644
--- a/lib/src/main/cpp/test_items2/operate_gear.cpp
+++ b/lib/src/main/cpp/test_items2/operate_gear.cpp
@@ -94,7 +94,7 @@
} else if (sensor.value != expectGear) {
// 鏈寜鎸囦护鎿嶄綔鎸′綅锛屼笉鍚堟牸
DEBUG("棣栨鎹㈡尅閿欒 GEAR %d 甯屾湜 %d", sensor.value, expectGear);
- AddExamFault(31, rtkTime);
+ AddExamFault(40401, rtkTime);
return false;
} else {
// 鍦ㄦ鎸′綅琛岄┒涓�瀹氳窛绂伙紝鍐嶆墽琛屼笅涓�涓�
@@ -121,7 +121,7 @@
} else if (sensor.value != expectGear) {
// 鏈寜鎸囦护鎿嶄綔鎸′綅锛屼笉鍚堟牸
DEBUG("浜屾鎹㈡尅閿欒 GEAR %d 甯屾湜 %d", sensor.value, expectGear);
- AddExamFault(31, rtkTime);
+ AddExamFault(40401, rtkTime);
return false;
} else {
// 鍦ㄦ鎸′綅琛岄┒涓�瀹氳窛绂伙紝鍐嶆墽琛屼笅涓�涓�
@@ -140,7 +140,7 @@
if (ReadOdo() - maxMoveDistance > 120) {
// 鏈寜鎸囦护鎿嶄綔鎸′綅锛屼笉鍚堟牸
DEBUG("鏈寜鎸囦护鎿嶄綔鎸′綅锛岃秴鏃�");
- AddExamFault(31, rtkTime);
+ AddExamFault(40401, rtkTime);
return false;
}
diff --git a/lib/src/main/cpp/test_items2/overtake.cpp b/lib/src/main/cpp/test_items2/overtake.cpp
index 7f9d29b..74a7b97 100644
--- a/lib/src/main/cpp/test_items2/overtake.cpp
+++ b/lib/src/main/cpp/test_items2/overtake.cpp
@@ -44,7 +44,7 @@
originalLane = currLane;
} else {
DEBUG("鍙充晶瓒呰溅");
- AddExamFault(3, rtkTime);
+ AddExamFault(30103, rtkTime);
return false;
}
} else if (setup == 2) {
@@ -55,7 +55,7 @@
return false;
} else {
DEBUG("瓒呰溅杩濊鍙橀亾");
- AddExamFault(3, rtkTime);
+ AddExamFault(30103, rtkTime);
return false;
}
}
@@ -63,7 +63,7 @@
if (ReadOdo() - maxMoveDistance > examParam.overtake_limit_distance) {
// 瓒呰溅鏈畬鎴�
DEBUG("瓒呰溅鍥哄畾璺濈鍐呮湭瀹屾垚 褰撳墠閲岀▼ %f", ReadOdo());
- AddExamFault(3, rtkTime);
+ AddExamFault(30103, rtkTime);
return false;
}
diff --git a/lib/src/main/cpp/test_items2/prepare.cpp b/lib/src/main/cpp/test_items2/prepare.cpp
new file mode 100644
index 0000000..79fec6c
--- /dev/null
+++ b/lib/src/main/cpp/test_items2/prepare.cpp
@@ -0,0 +1,100 @@
+//
+// Created by YY on 2020/12/16.
+//
+
+#include "prepare.h"
+#include "../native-lib.h"
+#include "../driver_test.h"
+#include "../test_common/car_sensor.h"
+#include "../common/apptimer.h"
+#include "../jni_log.h"
+
+#define DEBUG(fmt, args...) LOGD("<prepare> <%s>: " fmt, __func__, ##args)
+
+static int touch[4];
+static int hint_cnt;
+static bool exec = false;
+
+static void TtsBack(int seq);
+static void PrepareTimeout(union sigval sig);
+static void PrepareTimeout2(union sigval sig);
+void StartPrepare(void)
+{
+ exec = true;
+ hint_cnt = 0;
+ memset(touch, 0, sizeof(touch));
+ PlayTTS(examParam.prepare_tts, TtsBack);
+ DEBUG("寮�濮嬩笂杞﹀噯澶�");
+}
+
+void handlePrepare(uint16_t sensor_id, int value)
+{
+ if (!exec)
+ return;
+ if (sensor_id == SEATBELT) {
+ if (value == INSERT_SEATBELT) {
+ AppTimer_delete(PrepareTimeout);
+ // 妫�鏌ョ粫杞︿紶鎰熷櫒鎯呭喌
+ if (touch[0] + touch[1] + touch[2] + touch[3] != 4) {
+ exec = false;
+ PrepareOver(-1);
+ } else {
+ exec = false;
+ PrepareOver(0);
+ }
+ } else {
+ // 瀹夊叏甯﹁В寮�
+ AppTimer_delete(PrepareTimeout2);
+ }
+ }
+
+ if (sensor_id == SURROUND_CAR_1 && value == SURROUND_CAR_ACTIVE && touch[0] != 1) {
+ touch[0] = 1;
+ PlayTTS(examParam.touch_leftfront_tts, NULL);
+ DEBUG("瑙︽懜浼犳劅鍣�1");
+ }
+ if (sensor_id == SURROUND_CAR_2 && value == SURROUND_CAR_ACTIVE && touch[1] != 1) {
+ touch[1] = 1;
+ PlayTTS(examParam.touch_leftrear_tts, NULL);
+ DEBUG("瑙︽懜浼犳劅鍣�2");
+ }
+ if (sensor_id == SURROUND_CAR_3 && value == SURROUND_CAR_ACTIVE && touch[2] != 1) {
+ touch[2] = 1;
+ PlayTTS(examParam.touch_rightrear_tts, NULL);
+ DEBUG("瑙︽懜浼犳劅鍣�3");
+ }
+ if (sensor_id == SURROUND_CAR_4 && value == SURROUND_CAR_ACTIVE && touch[3] != 1) {
+ touch[3] = 1;
+ PlayTTS(examParam.touch_rightfront_tts, NULL);
+ DEBUG("瑙︽懜浼犳劅鍣�4");
+ }
+}
+
+static void TtsBack(int seq)
+{
+ if (hint_cnt == 0) {
+ if (ReadCarStatus(SEATBELT) == INSERT_SEATBELT) {
+ // 鍐嶆鎻愮ず
+ AppTimer_add(PrepareTimeout2, D_SEC(10));
+ DEBUG("璁剧疆鍐嶆鎻愰啋");
+ }
+ AppTimer_add(PrepareTimeout, D_MIN(2));
+ DEBUG("璁剧疆2鍒嗛挓瓒呮椂");
+ }
+ hint_cnt++;
+}
+
+static void PrepareTimeout(union sigval sig)
+{
+ DEBUG("涓婅溅鍑嗗瓒呮椂");
+ AppTimer_delete(PrepareTimeout);
+ exec = false;
+ PrepareOver(-2);
+}
+
+static void PrepareTimeout2(union sigval sig)
+{
+ AppTimer_delete(PrepareTimeout2);
+
+ PlayTTS(examParam.prepare_tts, TtsBack);
+}
diff --git a/lib/src/main/cpp/test_items2/prepare.h b/lib/src/main/cpp/test_items2/prepare.h
new file mode 100644
index 0000000..538a015
--- /dev/null
+++ b/lib/src/main/cpp/test_items2/prepare.h
@@ -0,0 +1,14 @@
+//
+// Created by YY on 2020/12/16.
+//
+
+#ifndef MYAPPLICATION2_PREPARE_H
+#define MYAPPLICATION2_PREPARE_H
+
+#include <cstdint>
+
+void StartPrepare(void);
+void handlePrepare(uint16_t sensor_id, int value);
+void PrepareOver(int res);
+
+#endif //MYAPPLICATION2_PREPARE_H
diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp
index 22102d0..166cbc3 100644
--- a/lib/src/main/cpp/test_items2/road_exam.cpp
+++ b/lib/src/main/cpp/test_items2/road_exam.cpp
@@ -859,17 +859,17 @@
if (newLineType >= 100) {
newLineType -= 100;
DEBUG("闈炴硶璺ㄨ秺鍒嗛亾绾�");
- AddExamFault(11, rtkTime);
+ AddExamFault(30119, rtkTime);
}
if (newLineType == LINE_SOLID && CrashLineType != LINE_SOLID) {
// 杞﹁締琛岄┒涓獞杞ц溅閬撲腑蹇冨疄绾挎垨鑰呰溅閬撹竟缂樺疄绾匡紝涓嶅悎鏍�
DEBUG("鎾為亾璺竟缂樼嚎");
- AddExamFault(11, rtkTime);
+ AddExamFault(30119, rtkTime);
}
if (newLineType == LINE_BOUNDARY && CrashLineType != LINE_BOUNDARY) {
// 杞﹁締瓒婄晫锛岄�冭窇浜嗭紝涓嶅悎鏍�
DEBUG("杞﹁締瓒婄晫");
- AddExamFault(3, rtkTime);
+ AddExamFault(30103, rtkTime);
}
if (newLineType == LINE_DOTTED || newLineType == LINE_HALF_SOLID_LEFT || newLineType == LINE_HALF_SOLID_RIGHT) {
@@ -896,7 +896,7 @@
DEBUG("闀挎椂闂村帇铏氱嚎");
checkCrashGreenTimeout = 2;
// 闀挎椂闂撮獞杞ц溅閬撳垎鐣岀嚎琛岄┒锛屼笉鍚堟牸
- AddExamFault(12, rtkTime);
+ AddExamFault(30120, rtkTime);
}
}
} else {
@@ -935,7 +935,7 @@
if (turnSignalStatus.value != LEFT_TURN_LIGHT) {
DEBUG("鍙樿皟鏈墦鐏�!!");
// 娌℃墦鐏紝涓嶅悎鏍�
- AddExamFault(13, rtkTime);
+ AddExamFault(30121, rtkTime);
} else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) <
examParam.turn_signal_min_advance) {
DEBUG("杞悜鐏椂闂翠笉瓒� %02d-%02d-%02d %02d:%02d:%02d.%03d -> %02d-%02d-%02d %02d:%02d:%02d.%03d",
@@ -946,13 +946,13 @@
turnSignalStatus.time.mm, turnSignalStatus.time.ss, turnSignalStatus.time.mss * 10);
// 涓嶈冻3绉掞紝涓嶅悎鏍�
- AddExamFault(14, rtkTime);
+ AddExamFault(30122, rtkTime);
}
} else {
if (turnSignalStatus.value != RIGHT_TURN_LIGHT) {
DEBUG("鍙樿皟鏈墦鐏�!!");
// 娌℃墦鐏紝涓嶅悎鏍�
- AddExamFault(13, rtkTime);
+ AddExamFault(30121, rtkTime);
} else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) <
examParam.turn_signal_min_advance) {
DEBUG("杞悜鐏椂闂翠笉瓒� %02d-%02d-%02d %02d:%02d:%02d.%03d -> %02d-%02d-%02d %02d:%02d:%02d.%03d",
@@ -962,13 +962,13 @@
turnSignalStatus.time.YY, turnSignalStatus.time.MM, turnSignalStatus.time.DD, turnSignalStatus.time.hh,
turnSignalStatus.time.mm, turnSignalStatus.time.ss, turnSignalStatus.time.mss * 10);
// 涓嶈冻3绉掞紝涓嶅悎鏍�
- AddExamFault(14, rtkTime);
+ AddExamFault(30122, rtkTime);
}
}
if (((ChangeLane.gain < 0 && gain < 0) || (ChangeLane.gain > 0 && gain > 0)) && TimeGetDiff(rtkTime, &ChangeLane.time) < examParam.continuous_change_lane_min_time) {
DEBUG("杩炵画鍙橀亾");
- AddExamFault(15, rtkTime);
+ AddExamFault(30125, rtkTime);
}
ChangeLane.gain = gain;
ChangeLane.time = *rtkTime;
@@ -1304,7 +1304,7 @@
occurOverSpeed = true;
// 瓒呴�燂紝涓嶅悎鏍�
DEBUG("瓒呴�� %f", ConvertMs2KMh(speed));
- AddExamFault(10, rtkTime);
+ AddExamFault(30118, rtkTime);
}
} else if (ConvertMs2KMh(speed) < examParam.road_max_speed - 5) {
occurOverSpeed = false;
@@ -1316,7 +1316,7 @@
if (!occurSecondBreak) {
DEBUG("鍓埞杞﹀姩浣滀簡");
occurSecondBreak = true;
- AddExamFault(17, rtkTime);
+ AddExamFault(30132, rtkTime);
}
} else {
occurSecondBreak = false;
@@ -1329,7 +1329,7 @@
if (currGear != GEAR_N && prevGear == GEAR_N) {
// 涓�娆℃崲鎸�
if (gearChange == currGear && TimeGetDiff(rtkTime, &gearChangeTimePoint) < D_SEC(5)) {
- AddExamFault(7, rtkTime);
+ AddExamFault(30113, rtkTime);
}
gearChange = currGear;
@@ -1392,7 +1392,7 @@
TimeGetDiff(rtkTime, &gearNSlideTimePoint) > examParam.gear_n_allow_time) {
// 绌烘。婊戣瓒�5绉掞紝涓嶅悎鏍�
DEBUG("鎸′綅婊戣锛岃秴杩�5绉�");
- AddExamFault(8, rtkTime);
+ AddExamFault(30114, rtkTime);
GearNSlideStatus = 2;
}
} else if (GearNSlideStatus != 0) {
@@ -1409,7 +1409,7 @@
if (gearErrorTime > examParam.gear_speed_error_cumulative_time) {
// 绱15绉掞紝鎸′綅-杞﹂�熶笉鍖归厤锛屼笉鍚堟牸
DEBUG("鎸′綅閿欒瓒呰繃15绉�");
- AddExamFault(6, rtkTime);
+ AddExamFault(30112, rtkTime);
gearErrorTime = 0;
}
@@ -1429,7 +1429,7 @@
if (slideNormalDistance) {
// 鍚庢粦锛屾墸10鍒�
- AddExamFault(18, rtkTime);
+ AddExamFault(30202, rtkTime);
DEBUG("鍚庢粦瓒呰繃10鍘樼背, 浣嗕笉瓒呰繃30鍘樼背");
}
@@ -1447,7 +1447,7 @@
if (TimeGetDiff(rtkTime, &stopTimepoint) >= CorrectPauseCriteria(examParam.road_pause_criteria) && !StopCarOnRedArea &&
StopOnRedArea(RoadMap, car)) {
// 鍋滆溅瓒�2绉掞紝鍋滃湪绾㈠尯锛屼笉鍚堟牸
- AddExamFault(16, rtkTime);
+ AddExamFault(30128, rtkTime);
DEBUG("绂佸仠鍖哄仠杞�");
StopCarOnRedArea = true;
}
@@ -1462,7 +1462,7 @@
if (slideDistance > examParam.road_slide_red_distance && !slideLongDistance) {
// 鍚庢粦瓒呰繃30鍘樼背, 涓嶅悎鏍�
- AddExamFault(5, rtkTime);
+ AddExamFault(30107, rtkTime);
DEBUG("鍚庢粦瓒呰繃30鍘樼背");
slideLongDistance = true;
slideNormalDistance = false;
@@ -1528,6 +1528,7 @@
}
}
}
+
ExitTarget(RoadMap, car, CarModelList, rtkTime);
if (RoadMap.calibrate == 0) {
@@ -1552,7 +1553,7 @@
if (!GetErrorLaneRpt(currExamMapIndex, stop_line_index)) {
DEBUG("涓嶆寜瑙勫畾杞﹂亾鏍囧悜琛岄┒ %d: %d 鏈熸湜 = %d guide = %d", currExamMapIndex,
stop_line_index, act, Lane.guide);
- AddExamFault(9, rtkTime);
+ AddExamFault(30117, rtkTime);
SetErrorLaneRpt(currExamMapIndex, stop_line_index, true);
}
}
@@ -1568,7 +1569,9 @@
road_end_point_t ep = NearbyRoadEndPoint(currExamMapIndex, RoadMap, car);
// 鎻愮ず璺彛鎬庝箞璧�
- HintCrossing(RoadMap, ep.road_index, ep.stop_line_index, ep.distance);
+ if (forward == 1) {
+ HintCrossing(RoadMap, ep.road_index, ep.stop_line_index, ep.distance);
+ }
double freeSepDis = SeparateLength(RoadMap, Lane, car);
@@ -1692,7 +1695,8 @@
freeRunExceptDistance = 60.0;
} else if (RoadExamStatus == ROAD_EXAM_ITEM_CAR_STOP) {
// 鑰冭瘯缁撴潫
- MA_SendExamStatus(1, 1);
+ MA_SendExamStatus(0, 0);
+ PlayTTS("鑰冭瘯缁撴潫", NULL);
} else {
freeRunExceptDistance = 2;//250.0;
}
@@ -1841,23 +1845,23 @@
if (turnSignalStatus.value != LEFT_TURN_LIGHT) {
DEBUG("鍙樿皟鏈墦鐏�!!");
// 娌℃墦鐏紝涓嶅悎鏍�
- AddExamFault(13, rtkTime);
+ AddExamFault(30121, rtkTime);
} else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) <
examParam.turn_signal_min_advance) {
DEBUG("杞悜鐏椂闂翠笉瓒�");
// 涓嶈冻3绉掞紝涓嶅悎鏍�
- AddExamFault(14, rtkTime);
+ AddExamFault(30122, rtkTime);
}
} else {
if (turnSignalStatus.value != RIGHT_TURN_LIGHT) {
DEBUG("鍙樿皟鏈墦鐏�!!");
// 娌℃墦鐏紝涓嶅悎鏍�
- AddExamFault(13, rtkTime);
+ AddExamFault(30121, rtkTime);
} else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) <
examParam.turn_signal_min_advance) {
DEBUG("杞悜鐏椂闂翠笉瓒�");
// 涓嶈冻3绉掞紝涓嶅悎鏍�
- AddExamFault(14, rtkTime);
+ AddExamFault(30122, rtkTime);
}
}
} else if (turnTimeCnt > D_SEC(10)) {
@@ -1986,6 +1990,8 @@
}
}
+// DEBUG("妫�鏌ヨЕ鍙戠偣 閬� %d 璺� %d", RoadMap.examScheme[0].triggerLines[0].road, RoadMap.roads[index].id);
+
for (int j = 0; j < RoadMap.examScheme[0].triggerLines.size(); ++j) {
if (RoadMap.examScheme[0].triggerLines[j].road == RoadMap.roads[index].id) {
@@ -2098,7 +2104,7 @@
TriggerDetect.insert(pair<int, trigger_detect_t>(j, up));
- DEBUG("瑙傚療瀛�<%d> 鍔犲叆 %f", j, MAX(dist1, dist2));
+ DEBUG("瑙傚療瀛�<%d> road_id %d 鍔犲叆 (%f,%f)", j, RoadMap.roads[index].id, RoadMap.examScheme[0].triggerLines[j].points[0].X, RoadMap.examScheme[0].triggerLines[j].points[0].Y);
}
}
}
diff --git a/lib/src/main/cpp/test_items2/stop_car.cpp b/lib/src/main/cpp/test_items2/stop_car.cpp
index 8071814..a894626 100644
--- a/lib/src/main/cpp/test_items2/stop_car.cpp
+++ b/lib/src/main/cpp/test_items2/stop_car.cpp
@@ -43,7 +43,7 @@
if (roadIndex < 0) {
DEBUG("鍋滆溅璺濈瓒呮爣锛岄潬杈瑰仠杞︾粨鏉�");
- AddExamFault(33, rtkTime);
+ AddExamFault(40602, rtkTime);
return false;
}
@@ -69,15 +69,16 @@
DistanceOf(p2, car->carXY[ car->right_rear_tire[TIRE_OUTSIDE] ]) > examParam.stop_car_edge_red_distance) {
DEBUG("鍋滆溅瓒呭嚭璺竟0.5绫�");
// 鍋滆溅璺濈瓒呰繃50鍘樼背锛屼笉鍚堟牸
- AddExamFault(36, rtkTime);
+ AddExamFault(40606, rtkTime);
return false;
} else if (DistanceOf(p1, car->carXY[ car->right_front_tire[TIRE_OUTSIDE] ]) > examParam.stop_car_edge_yellow_distance ||
DistanceOf(p2, car->carXY[ car->right_rear_tire[TIRE_OUTSIDE] ]) > examParam.stop_car_edge_yellow_distance) {
DEBUG("鍋滆溅瓒呭嚭璺竟0.3绫�");
// 鍋滆溅璺濈瓒呰繃30鍘樼背锛屾墸10鍒�
- AddExamFault(37, rtkTime);
+ AddExamFault(40607, rtkTime);
}
+ time = *rtkTime;
setup = 4;
}
} else if (setup == 4) {
@@ -89,7 +90,7 @@
if (!BreakHandbreakReleaseSametime && brk.value == BREAK_INACTIVE && hbrk.value == BREAK_INACTIVE) {
// 鎷夋墜鍒瑰墠锛屾澗鑴氬埞锛屾墸10鍒�
DEBUG("鎷夋墜鍒瑰墠锛屾澗鑴氬埞");
- AddExamFault(39, rtkTime);
+ AddExamFault(40609, rtkTime);
BreakHandbreakReleaseSametime = true;
}
@@ -98,12 +99,12 @@
if (rpm.value > ENGINE_MIN_ROTATE) {
// 涓嬭溅鍓嶏紝涓嶇唲鐏紝鎵�5鍒�
DEBUG("涓嬭溅鍓嶏紝涓嶇唲鐏�");
- AddExamFault(40, rtkTime);
+ AddExamFault(40610, rtkTime);
}
if (hbrk.value == BREAK_INACTIVE) {
// 寮�闂ㄥ墠锛屾湭鎷夋墜鍒癸紝 鎵�10鍒�
DEBUG("寮�闂ㄥ墠锛屾湭鎷夋墜鍒�");
- AddExamFault(38, rtkTime);
+ AddExamFault(40608, rtkTime);
}
time = *rtkTime;
OpenDoor = true;
@@ -112,7 +113,13 @@
if (TimeGetDiff(rtkTime, &time) > examParam.stop_car_open_door_allow_time) {
// 寮�闂ㄦ椂闂磋秴杩�15绉掞紝涓嶅悎鏍�
DEBUG("寮�闂ㄦ椂闂磋秴杩�15绉�");
- AddExamFault(35, rtkTime);
+ AddExamFault(40605, rtkTime);
+ return false;
+ }
+ } else {
+ if (TimeGetDiff(rtkTime, &time) > D_SEC(30)) {
+ DEBUG("瀹屾垚鍋滆溅瓒呮椂");
+ PlayTTS(examParam.stop_car_end_tts, NULL);
return false;
}
}
@@ -127,7 +134,7 @@
if (ReadOdo() - beginOdo > examParam.stop_car_limit_distance) {
// 150绫冲唴鏈仠杞︼紝涓嶅悎鏍�
DEBUG("鍋滆溅璺濈瓒呮爣锛岄潬杈瑰仠杞︾粨鏉�");
- AddExamFault(33, rtkTime);
+ AddExamFault(40602, rtkTime);
return false;
}
diff --git a/lib/src/main/cpp/test_items2/through_something.cpp b/lib/src/main/cpp/test_items2/through_something.cpp
index 31b0850..82f25c9 100644
--- a/lib/src/main/cpp/test_items2/through_something.cpp
+++ b/lib/src/main/cpp/test_items2/through_something.cpp
@@ -150,7 +150,7 @@
SetTargetReduceRec(TargetReduceRec2, key, rec | OVER_SPEED);
DEBUG("閫氳繃瀛︽牎鍖哄煙瓒呴�� %f kmh", ConvertMs2KMh(speed));
- AddExamFault(49, rtkTime);
+ AddExamFault(41101, rtkTime);
}
} else if (distance1 < -1e-3 && distance2 < -1e-3) {
if (rec != NOT_ENTER) {
@@ -191,26 +191,26 @@
DEBUG("涓嶆寜瑙勫畾鍑忛��");
if (ExamSchemeCrossing(RoadMap, road, x) == ROAD_ACTIVE_FORWARD) {
- AddExamFault(41, rtkTime);
+ AddExamFault(40701, rtkTime);
} else if (ExamSchemeCrossing(RoadMap, road, x) ==
ROAD_ACTIVE_TURN_LEFT) {
- AddExamFault(43, rtkTime);
+ AddExamFault(40801, rtkTime);
} else if (ExamSchemeCrossing(RoadMap, road, x) ==
ROAD_ACTIVE_TURN_RIGHT) {
- AddExamFault(46, rtkTime);
+ AddExamFault(40901, rtkTime);
}
}
if (!(it->second & STOP_CAR) && RoadMap.roads[road].stopLine[x].stopFlag) {
// 涓嶅仠杞︾灜鏈涳紝涓嶅悎鏍�
DEBUG("涓嶅仠杞︾灜鏈�");
if (ExamSchemeCrossing(RoadMap, road, x) == ROAD_ACTIVE_FORWARD) {
- AddExamFault(42, rtkTime);
+ AddExamFault(40701, rtkTime);
} else if (ExamSchemeCrossing(RoadMap, road, x) ==
ROAD_ACTIVE_TURN_LEFT) {
- AddExamFault(44, rtkTime);
+ AddExamFault(40801, rtkTime);
} else if (ExamSchemeCrossing(RoadMap, road, x) ==
ROAD_ACTIVE_TURN_RIGHT) {
- AddExamFault(47, rtkTime);
+ AddExamFault(40901, rtkTime);
}
}
}
@@ -245,12 +245,12 @@
if (RoadMap.specialAreas[x].type == ZEBRA_CROSSING &&
!(it->second & REDUCE_SPEED)) {
DEBUG("浜鸿閬� 涓嶆寜瑙勫畾鍑忛��");
- AddExamFault(48, rtkTime);
+ AddExamFault(41001, rtkTime);
}
if (RoadMap.specialAreas[x].type == BUS_STATION_AREA &&
!(it->second & REDUCE_SPEED)) {
DEBUG("鍏氦绔� 涓嶆寜瑙勫畾鍑忛��");
- AddExamFault(50, rtkTime);
+ AddExamFault(41201, rtkTime);
}
RemoveTargetReduceRec(TargetReduceRec2, it->first);
goto RECHECK2;
diff --git a/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java b/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java
index c2a0b8d..bbba352 100644
--- a/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java
+++ b/lib/src/main/java/com/anyun/exam/lib/InstallUtil.java
@@ -1,9 +1,14 @@
package com.anyun.exam.lib;
+import android.Manifest;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.Settings;
import android.util.Log;
import java.io.ByteArrayOutputStream;
@@ -14,6 +19,10 @@
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Locale;
+
+import androidx.annotation.NonNull;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.FileProvider;
public class InstallUtil {
public static final String TAG = InstallUtil.class.getCanonicalName();
@@ -144,23 +153,59 @@
try {
Log.d(TAG, "鍗囩骇app 鏂囦欢瀛樺湪 褰撳墠ver " + getVerCode() + " 褰撳墠Name " + getVerName() + " 鐩爣ver " + getVersionCodeFromApk(context, file.getAbsolutePath()) + " 鐩爣name " + getVersionNameFromApk(context, file.getAbsolutePath()));
-// Signature[] sig = getSignature();
-// Signature[] sig2 = getSignature(file.getAbsolutePath());
+ Signature[] sig = getSignature();
+ Signature[] sig2 = getSignature(file.getAbsolutePath());
- /*if ( getFingerprint(sig[0], "SHA-1").equals(getFingerprint(sig2[0], "SHA-1")))*/ {
- if ( getVerCode() <= getVersionCodeFromApk(context, file.getAbsolutePath()) ) {
+ if ( getFingerprint(sig[0], "SHA-1").equals(getFingerprint(sig2[0], "SHA-1"))) {
+ if ( getVerCode() < getVersionCodeFromApk(context, file.getAbsolutePath()) ||
+ (getVerCode() == getVersionCodeFromApk(context, file.getAbsolutePath()) &&
+ !getVerName().equals(getVersionNameFromApk(context, file.getAbsolutePath())))) {
Log.d(TAG, "瀹夎鏂囦欢 " + file.getAbsolutePath());
String result = execCommand("pm", "install", "-i", getPackageName(), "--user", "0", "-r", "-d", file.getAbsolutePath());
Log.d(TAG, "瀹夎缁撴灉 " + result);
} else {
file.delete();
}
- } /*else {
+ } else {
file.delete();
- }*/
+ }
} catch (Exception e) {
Log.e(TAG, "瀹夎鍙戠敓閿欒 " + e.getMessage());
}
+ }
+ }
+
+ public void InstallAppNormal(Context context, String path) {
+ File file = new File(path);
+ Log.d(TAG, "ManualInstall " + path);
+
+ if (file.exists() && file.isFile()) {
+ Signature[] sig = getSignature();
+ Signature[] sig2 = getSignature(file.getAbsolutePath());
+
+ if (getFingerprint(sig[0], "SHA-1").equals(getFingerprint(sig2[0], "SHA-1")) &&
+ (getVerCode() < getVersionCodeFromApk(context, file.getAbsolutePath()) ||
+ (getVerCode() == getVersionCodeFromApk(context, file.getAbsolutePath()) &&
+ !getVerName().equals(getVersionNameFromApk(context, file.getAbsolutePath()))))) {
+
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ Uri data;
+ String type = "application/vnd.android.package-archive";
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
+ data = Uri.fromFile(file);
+ } else {
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ String authority = context.getPackageName() + ".fileProvider";
+ data = FileProvider.getUriForFile(context, authority, file);
+ }
+ intent.setDataAndType(data, type);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ } else {
+ Log.d(TAG, "File illegal");
+ }
+ } else {
+ Log.d(TAG, "File not exist");
}
}
@@ -223,4 +268,37 @@
}
return result;
}
+
+/*
+ private void checkIsAndroidO() {
+ if (Build.VERSION.SDK_INT >= 26) {
+ if (context.getPackageManager().canRequestPackageInstalls()) {
+ mMainPresenter.installApk();
+ } else {
+ //璇锋眰瀹夎鏈煡搴旂敤鏉ユ簮鐨勬潈闄�
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES},INSTALL_PACKAGES_REQUEST_CODE);
+ }
+ } else {
+ mMainPresenter.installApk();
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ switch (requestCode) {
+ case INSTALL_PACKAGES_REQUEST_CODE:
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ mMainPresenter.installApk();
+ } else {
+ // 寮曞鐢ㄦ埛鎵嬪姩寮�鍚畨瑁呮潈闄�
+ Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
+ startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);
+ }
+ break;
+ default:
+ break;
+
+ }
+ }*/
}
diff --git a/lib/src/main/java/com/anyun/exam/lib/RemoteService.java b/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
index cfb15e1..b2ed87d 100644
--- a/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
+++ b/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
@@ -13,6 +13,7 @@
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
+import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -36,6 +37,7 @@
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
@@ -55,6 +57,9 @@
*/
public class RemoteService extends Service {
private static final String TAG = "RemoteService";
+
+ public static final boolean mAyDevice = true;
+
/**鏈嶅姟鏄惁閿�姣佹爣蹇�*/
private AtomicBoolean mIsServiceDestroyed = new AtomicBoolean(false);
private RemoteCallbackList<IListenerInterface> mListenerList = new RemoteCallbackList();
@@ -134,14 +139,31 @@
// PlayRing(this, ringUri);
LimitMaxMinVolume();
+ if (mAyDevice == false) {
+ mBluetooth = Bluetooth.getInstance(getApplicationContext(), mHandler);
+ mBluetooth.OpenBluetooth();
+ // Initialize the BluetoothChatService to perform mBluetooth connections
+ mChatService = new BluetoothChatService(this, mHandler);
+ }
+
Log.d(TAG, "鍩哄甫鐗堟湰 " + getBaseband_Ver());
String ver = getBaseband_Ver();
- mBluetooth = Bluetooth.getInstance(getApplicationContext(), mHandler);
- mBluetooth.OpenBluetooth();
- // Initialize the BluetoothChatService to perform mBluetooth connections
- mChatService = new BluetoothChatService(this, mHandler);
+ new Thread(new TestCls()).start();
+ }
+
+ class TestCls implements Runnable {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+
+ }
+
+ upgrade.ManualUpgrade(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "/Download/aks3b.apk");
+ }
}
class AutoUpdateMcuThread implements Runnable {
@@ -273,7 +295,7 @@
class StartNative implements Runnable {
@Override
public void run() {
- startNative();
+ startNative(mAyDevice);
}
}
@@ -296,10 +318,10 @@
Process.killProcess(Process.myPid());
}
- private void onMessageArrived(int cmd, String json) {
-
+ private int onMessageArrived(int cmd, String json) {
Log.d(TAG, "SendMsgToMainProc cmd = " + String.format("%04X", cmd) + " json = " + json);
int N = mListenerList.getRegisteredCallbackCount();
+ int ret = -1;
synchronized(this) {
mListenerList.beginBroadcast();
@@ -308,19 +330,24 @@
if (mListener != null) {
try {
mListener.onMessageArrived(cmd, json);
+ ret = 0;
} catch (RemoteException e) {
e.printStackTrace();
}
+ }else{
+
}
}
mListenerList.finishBroadcast();
}
+ return ret;
}
- public void SendMsgToMainProc(int cmd, String value) {
+ public int SendMsgToMainProc(int cmd, String value) {
if (!mIsServiceDestroyed.get()){
- onMessageArrived(cmd, value);
+ return onMessageArrived(cmd, value);
}
+ return -2;
}
public String javaDESEncrypt(String plaintext, String key) {
@@ -539,7 +566,7 @@
System.loadLibrary("native-lib");
}
- public native void startNative();
+ public native void startNative(boolean ayDevice);
public native void MainProcMsgEntry(int cmd, String value);
public native void MainProcBinMsgEntry(int cmd, byte []data, int length);
public native void UpgradeMcu(String vercode, byte []rom);
diff --git a/lib/src/main/java/com/anyun/exam/lib/Upgrade.java b/lib/src/main/java/com/anyun/exam/lib/Upgrade.java
index e42cd9c..98549f9 100644
--- a/lib/src/main/java/com/anyun/exam/lib/Upgrade.java
+++ b/lib/src/main/java/com/anyun/exam/lib/Upgrade.java
@@ -39,6 +39,7 @@
synchronized (Upgrade.class) {
if (instance == null) {
instance = new Upgrade(context);
+ instance.context = context;
}
}
}
@@ -249,6 +250,10 @@
handlerCheckNewVersion.postDelayed(runnableCheckNewVersion, 100);
}
+ public void ManualUpgrade(String path) {
+ installUtil.InstallAppNormal(context, path);
+ }
+
class DMCB implements DownloadManagerCallback {
@Override
public void DownloadComplete(String title, String path) {
@@ -258,7 +263,11 @@
Signature[] sig2 = installUtil.getSignature(path);
if (sig != null && sig2 != null && installUtil.getFingerprint(sig[0], "SHA-1").equals(installUtil.getFingerprint(sig2[0], "SHA-1"))) {
- installUtil.InstallApp(path);
+ if (RemoteService.mAyDevice) {
+ installUtil.InstallApp(path);
+ } else {
+ installUtil.InstallAppNormal(context, path);
+ }
}
}
}
--
Gitblit v1.8.0