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