From c64da51ae481dfc2a25e5a6e39bb94f22d65428a Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 10 一月 2020 13:33:09 +0800
Subject: [PATCH] s
---
lib/src/main/cpp/master/comm_if.h | 25 +++++
lib/src/main/cpp/driver_test.cpp | 90 ++++++++++++++++-
lib/src/main/cpp/master/comm_if.cpp | 95 ++++++++++++++++++
lib/src/main/cpp/native-lib.cpp | 9 +
lib/src/main/cpp/driver_test.h | 1
lib/src/main/cpp/rtk_platform/platform.cpp | 5
lib/src/main/java/com/anyun/exam/lib/RemoteService.java | 33 ++++--
7 files changed, 232 insertions(+), 26 deletions(-)
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 55464ad..945f6bb 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -86,6 +86,19 @@
struct car_desc_ *CarDesc = NULL;
+typedef struct {
+ PointF basePoint;
+ int axial[2];
+ int left_front_tire[2];
+ int right_front_tire[2];
+ int left_rear_tire[2];
+ int right_rear_tire[2];
+ int pointNum;
+ struct car_desc_ *carDesc;
+} car_model;
+
+static car_model *CarModel = NULL;
+
struct car_coord_ *CarCoord = NULL;
static double currSpeed = 0, currAzimuth = 0;
static PointF currCoord;
@@ -122,6 +135,7 @@
{
memset(&MapList, 0, sizeof(MapList));
MapNum = 0;
+ CarModel = NULL;
carModelDescFile = (carModelDesc_t *)malloc(sizeof(carModelDesc_t));
@@ -259,22 +273,20 @@
ErrorList.clear();
TextSpeak("寮�濮嬫祴璇�");
-
- AppTimer_add(ReadDriverExamPrimerTimeout, D_SEC(2));
- ReadDriverExamPrimer();
}
static void ReadDriverExamPrimerTimeout(union sigval sig)
{
AppTimer_delete(ReadDriverExamPrimerTimeout);
+ AppTimer_add(ReadDriverExamPrimerTimeout, D_SEC(2));
ReadDriverExamPrimer();
}
void ReadDriverExamPrimer(void)
{
-// MA_ReadMap();
-// MA_ReadCar();
-// MA_ReadSensor();
+ MA_ReadMap();
+ MA_ReadCar();
+ MA_ReadSensor();
}
void ClearMap(void)
@@ -327,6 +339,56 @@
double (*point)[2], int pointNum)
{
DEBUG("SetCarMeasurePoint pointNum %d", pointNum);
+
+ if (point == NULL || pointNum == 0) return;
+
+ if (CarModel != NULL) {
+ CarModel->carDesc != NULL;
+ free(CarModel->carDesc);
+ free(CarModel);
+ CarModel = NULL;
+ }
+
+ CarModel = (car_model *)malloc(sizeof(CarModel));
+ CarModel->basePoint.X = basePoint[0];
+ CarModel->basePoint.Y = basePoint[1];
+ CarModel->axial[0] = axial[0];
+ CarModel->axial[1] = axial[1];
+ CarModel->left_front_tire[0] = left_front_tire[0];
+ CarModel->left_front_tire[1] = left_front_tire[1];
+ CarModel->right_front_tire[0] = right_front_tire[0];
+ CarModel->right_front_tire[1] = right_front_tire[1];
+ CarModel->left_rear_tire[0] = left_rear_tire[0];
+ CarModel->left_rear_tire[1] = left_rear_tire[1];
+ CarModel->right_rear_tire[0] = right_rear_tire[0];
+ CarModel->right_rear_tire[1] = right_rear_tire[1];
+ CarModel->pointNum = pointNum;
+
+ CarModel->carDesc = (struct car_desc_ *)malloc(sizeof(struct car_desc_) * pointNum);
+
+ // 娴嬮噺鍧愭爣杞崲涓鸿窛绂�-瑙掑害褰㈠紡
+ double C02 = (point[0][0]-basePoint[0])*(point[0][0]-basePoint[0]) +
+ (point[0][1]-basePoint[1])*(point[0][1]-basePoint[1]);
+ double C0 = sqrt(C02);
+
+ CarModel->carDesc[0].distance = sqrt(C02);
+ CarModel->carDesc[0].angle = 0.0;
+
+ for (int i = 1; i < pointNum; ++i) {
+ double dis2 = (point[i][0]-basePoint[0])*(point[i][0]-basePoint[0]) +
+ (point[i][1]-basePoint[1])*(point[i][1]-basePoint[1]);
+ double dis = sqrt(dis2);
+
+ CarModel->carDesc[i].distance = dis;
+
+ CarModel->carDesc[i].angle = 180 * acos((dis2 + C02 - ((point[i][0]-point[0][0])*(point[i][0]-point[0][0]) +
+ (point[i][1]-point[0][1])*(point[i][1]-point[0][1])))/(2*C0*dis)) / M_PI;
+
+ if (i > axial[1])
+ CarModel->carDesc[i].angle = 360.0 - CarModel->carDesc[i].angle;
+ }
+
+ DEBUG("SetCarMeasurePoint Calc Over");
}
void SetSensorCfg(int (*sensor)[2], int sensorNum)
@@ -334,6 +396,22 @@
DEBUG("SetSensorCfg sensorNum %d", sensorNum);
}
+void StartDriverExam(int start)
+{
+ bool err = false;
+
+ if (MapNum == 0) {
+ err = true;
+ MA_SendExamStatus(0, -1);
+ }
+ if (CarModel == NULL) {
+ err = true;
+ MA_SendExamStatus(0, -2);
+ }
+ if (!err)
+ MA_SendExamStatus(1, 0);
+}
+
void UpdateRTKInfo(struct rtk_info *s)
{
struct tm test_tm;
diff --git a/lib/src/main/cpp/driver_test.h b/lib/src/main/cpp/driver_test.h
index 896814b..85ebb28 100644
--- a/lib/src/main/cpp/driver_test.h
+++ b/lib/src/main/cpp/driver_test.h
@@ -52,6 +52,7 @@
int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
double (*point)[2], int pointNum);
void SetSensorCfg(int (*sensor)[2], int sensorNum);
+void StartDriverExam(int start);
void UpdateRTKInfo(struct rtk_info *s);
void UpdateCarCoord(void);
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index 5301d23..ee203d4 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -14,8 +14,10 @@
#include <string>
#include <iostream>
+#include <vector>
using namespace rapidjson;
+using namespace std;
#define ID_SM_NDK_START 0x0001
#define ID_SM_REQ_RTK_PLAT_CFG 0x0002
@@ -33,7 +35,7 @@
#define ID_SM_EXAM_STATUS 0x0009
#define ID_SM_GPS_BRIEF 0x000A
#define ID_SM_RTK_BRIEF 0x000B
-#define ID_SM_EXAM_BRIEF 0x000B
+#define ID_SM_EXAM_BRIEF 0x000C
void MA_NdkStart(void)
{
@@ -113,6 +115,88 @@
void MA_ReadSensor(void)
{
SendMsgToMainProc(ID_SM_READ_SENSOR_CFG, NULL);
+}
+
+void MA_SendExamStatus(int start, int errorCode)
+{
+ StringBuffer sb;
+ Writer<StringBuffer> writer(sb);
+
+ writer.StartObject();
+
+ writer.Key("exam");
+ writer.Int(start);
+ writer.Key("error");
+ writer.Int(errorCode);
+
+ writer.EndObject();
+
+ SendMsgToMainProc(ID_SM_EXAM_STATUS, sb.GetString());
+}
+
+void MA_SendGpsBrief(const struct gpsBrief *brief)
+{
+ StringBuffer sb;
+ Writer<StringBuffer> writer(sb);
+
+ writer.StartObject();
+
+ writer.Key("utc");
+ writer.String(brief->utc);
+ writer.Key("sat_num");
+ writer.Int(brief->sat_num);
+ writer.Key("qf");
+ writer.Int(brief->qf);
+ writer.Key("latitude");
+ writer.Double(brief->latitude);
+ writer.Key("longitude");
+ writer.Double(brief->longitude);
+ writer.Key("altitude");
+ writer.Double(brief->altitude);
+ writer.Key("speed");
+ writer.Double(brief->speed);
+
+ writer.EndObject();
+
+ SendMsgToMainProc(ID_SM_GPS_BRIEF, sb.GetString());
+}
+
+void MA_SendRtkBrief(const struct rtkBrief *brief)
+{
+ char a[2] = {brief->coord_x_dir, 0};
+ char b[2] = {brief->coord_y_dir, 0};
+
+ StringBuffer sb;
+ Writer<StringBuffer> writer(sb);
+
+ writer.StartObject();
+
+ writer.Key("utc");
+ writer.String(brief->utc);
+ writer.Key("qf");
+ writer.Int(brief->qf);
+ writer.Key("coord_x");
+ writer.Double(brief->coord_x);
+ writer.Key("coord_x_dir");
+ writer.String(a);
+ writer.Key("coord_y");
+ writer.Double(brief->coord_y);
+ writer.Key("coord_y_dir");
+ writer.String(b);
+ writer.Key("heading");
+ writer.Double(brief->heading);
+ writer.Key("pitch");
+ writer.Double(brief->pitch);
+ writer.Key("roll");
+ writer.Double(brief->roll);
+ writer.EndObject();
+
+ SendMsgToMainProc(ID_SM_RTK_BRIEF, sb.GetString());
+}
+
+void MA_SendExamWrong(vector<int>&err)
+{
+
}
void MA_MainProcMsgEntry(int cmd, const char *value)
@@ -367,7 +451,14 @@
break;
}
case ID_MS_START_EXAM: {
-
+ Document doc;
+ doc.Parse(value);
+ if (!doc.HasParseError()) {
+ if (doc.HasMember("exam")) {
+ Value& s = doc["exam"];
+ StartDriverExam(s.GetInt());
+ }
+ }
break;
}
default:break;
diff --git a/lib/src/main/cpp/master/comm_if.h b/lib/src/main/cpp/master/comm_if.h
index 48633c7..33c6f32 100644
--- a/lib/src/main/cpp/master/comm_if.h
+++ b/lib/src/main/cpp/master/comm_if.h
@@ -7,6 +7,28 @@
#include <cstdint>
+struct gpsBrief {
+ char utc[32];
+ int sat_num;
+ int qf;
+ double latitude;
+ double longitude;
+ double altitude;
+ double speed;
+};
+
+struct rtkBrief {
+ char utc[32];
+ int qf;
+ double coord_x;
+ char coord_x_dir;
+ double coord_y;
+ char coord_y_dir;
+ double heading;
+ double pitch;
+ double roll;
+};
+
void MA_MainProcMsgEntry(int cmd, const char *value);
void MA_NdkStart(void);
@@ -17,5 +39,8 @@
void MA_ReadMap(void);
void MA_ReadCar(void);
void MA_ReadSensor(void);
+void MA_SendExamStatus(int start, int errorCode);
+void MA_SendGpsBrief(const struct gpsBrief *brief);
+void MA_SendRtkBrief(const struct rtkBrief *brief);
#endif //MYAPPLICATION2_COMM_IF_H
diff --git a/lib/src/main/cpp/native-lib.cpp b/lib/src/main/cpp/native-lib.cpp
index 0729f69..e813fed 100644
--- a/lib/src/main/cpp/native-lib.cpp
+++ b/lib/src/main/cpp/native-lib.cpp
@@ -25,6 +25,8 @@
const int RTK_PLATFORM_PORT = 12125;
const uint8_t phone[] = {0x20,0x19,0x10,0x15,0x00,0x00,0x00,0x01};
+static void SendBootIndicate(union sigval sig);
+
int DESEncrypt(const uint8_t *key, int key_length,
const uint8_t *plaintext, int plaintext_length,
uint8_t **ciphertext)
@@ -234,13 +236,18 @@
// 涓嶈兘鐩存帴璧嬪��(g_obj = ojb)
sg_obj = env->NewGlobalRef(thiz);
- MA_NdkStart();
AppTimer_Init();
ConfigMCU();
DriverTestInit();
ConfigRTKModule();
InitPlatform(phone, RTK_PLATFORM_IP, RTK_PLATFORM_PORT);
+ AppTimer_add(SendBootIndicate, 500);
+}
+
+static void SendBootIndicate(union sigval sig) {
+ AppTimer_delete(SendBootIndicate);
+ MA_NdkStart();
}
extern "C"
diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp
index f3d5bb9..0ed3ff3 100644
--- a/lib/src/main/cpp/rtk_platform/platform.cpp
+++ b/lib/src/main/cpp/rtk_platform/platform.cpp
@@ -107,9 +107,6 @@
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//detached
pthread_create(&pid, &attr, StatusListenThread, NULL);
-
- AppTimer_add(ReqRtkPlatformConfigTimeout, D_SEC(2));
- MA_ReqRtkPlatformConfig();
}
static void ReqRtkPlatformConfigTimeout(union sigval sig)
@@ -135,7 +132,7 @@
strcpy(deviceInfo.imei, p->imei);
SetPlatformTxPhoneNum(p->phone);
- platformStatus.registed = p->registered;
+ platformStatus.registed = 0;//p->registered;
platformStatus.platformKeyLength = strlen(p->password) / 2;
if (platformStatus.platformKeyLength > 0) {
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 f8b7133..c509eb4 100644
--- a/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
+++ b/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
@@ -68,7 +68,14 @@
Log.i(TAG,"onCreate()");
speaker = new Speaker(getApplicationContext());
- startNative();
+ new Thread(new StartNative()).start();
+ }
+
+ class StartNative implements Runnable {
+ @Override
+ public void run() {
+ startNative();
+ }
}
@Override
@@ -78,23 +85,23 @@
mIsServiceDestroyed.set(true);
}
- private void onMessageArrived(int cmd, String json){
+ private void onMessageArrived(int cmd, String json) {
int N = mListenerList.getRegisteredCallbackCount();
- mListenerList.beginBroadcast();
-
- for (int i = 0; i < N; i++) {
- mListener = mListenerList.getBroadcastItem(i);
- if (mListener != null){
- try {
- mListener.onMessageArrived(cmd, json);
- } catch (RemoteException e) {
- e.printStackTrace();
+ synchronized(this) {
+ mListenerList.beginBroadcast();
+ for (int i = 0; i < N; i++) {
+ mListener = mListenerList.getBroadcastItem(i);
+ if (mListener != null) {
+ try {
+ mListener.onMessageArrived(cmd, json);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
}
}
-
+ mListenerList.finishBroadcast();
}
- mListenerList.finishBroadcast();
}
public void SendMsgToMainProc(int cmd, String value) {
--
Gitblit v1.8.0