lib/src/main/cpp/driver_test.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/driver_test.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/master/comm_if.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/master/comm_if.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/native-lib.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/cpp/rtk_platform/platform.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/src/main/java/com/anyun/exam/lib/RemoteService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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; 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); 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; 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 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" 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) { 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) {