s
yy1717
2020-01-10 c64da51ae481dfc2a25e5a6e39bb94f22d65428a
s
7个文件已修改
258 ■■■■ 已修改文件
lib/src/main/cpp/driver_test.cpp 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/driver_test.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/master/comm_if.cpp 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/master/comm_if.h 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/native-lib.cpp 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/rtk_platform/platform.cpp 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/java/com/anyun/exam/lib/RemoteService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | 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) {