From 2dd405a64e0a6e468a205e7348520e87576e5358 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期一, 09 三月 2020 17:13:12 +0800
Subject: [PATCH] 更新地图

---
 lib/src/main/cpp/master/comm_if.h                       |    3 
 lib/src/main/java/com/anyun/exam/lib/util/Speaker.java  |    3 +
 lib/src/main/cpp/driver_test.cpp                        |   34 ++++++++++-
 lib/src/main/cpp/master/comm_if.cpp                     |   52 ++++++++++++++++
 lib/src/main/cpp/native-lib.cpp                         |    2 
 lib/src/main/cpp/test_items2/dummy_light.cpp            |   16 +++++
 lib/src/main/cpp/test_items2/dummy_light.h              |   13 ++++
 lib/src/main/cpp/CMakeLists.txt                         |    1 
 lib/src/main/cpp/driver_test.h                          |    5 +
 lib/src/main/java/com/anyun/exam/lib/RemoteService.java |   21 ++++++
 10 files changed, 141 insertions(+), 9 deletions(-)

diff --git a/lib/src/main/cpp/CMakeLists.txt b/lib/src/main/cpp/CMakeLists.txt
index 31b9e27..a194d80 100644
--- a/lib/src/main/cpp/CMakeLists.txt
+++ b/lib/src/main/cpp/CMakeLists.txt
@@ -36,6 +36,7 @@
         test_items/comm_test.cpp
 
         test_items2/common_check.cpp
+        test_items2/dummy_light.cpp
 
         rtk_module/rtk.cpp
         rtk_module/virtual_rtk.cpp
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index c961a25..699c23c 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -93,6 +93,9 @@
 
 static int SensorValidLevel;
 
+static struct dummy_light_exam *DummyLightContent;
+static int DummyLightContentSize;
+
 #define MOV_AVG_SIZE                1
 #define RTK_BUFFER_SIZE            100
 #define CAR_MODEL_CACHE_SIZE      10
@@ -129,6 +132,9 @@
     memset(SensorConfig, 0, sizeof(SensorConfig));
 
     SensorValidLevel = 0;
+
+    DummyLightContentSize = 0;
+    DummyLightContent = NULL;
 
     RtkBuffer = (rtk_info *) malloc(RTK_BUFFER_SIZE * sizeof(rtk_info));
     RtkBufferNum = RtkBufferIn = 0;
@@ -359,7 +365,24 @@
     }
 }
 
-void StartDriverExam(int start)
+void SetDummyLightExam(int n, struct dummy_light_exam *cfg)
+{
+    if (TestStart) return;
+
+    if (DummyLightContent != NULL) {
+        free(DummyLightContent);
+        DummyLightContent = NULL;
+    }
+
+    DummyLightContent = (struct dummy_light_exam *)malloc(n * sizeof(struct dummy_light_exam));
+    DummyLightContentSize = n;
+
+    for (int i = 0; i < n; i++) {
+        DummyLightContent[i] = cfg[i];
+    }
+}
+
+void StartDriverExam(int start, int type)
 {
     bool err = false;
 
@@ -383,6 +406,11 @@
         err = true;
         MA_SendExamStatus(0, -2);
     }
+    if (DummyLightContent == NULL && type == 3) {
+        err = true;
+        MA_SendExamStatus(0, -3);
+    }
+
     if (!err) {
         if (!TestStart) {
             ExamFaultList.clear();
@@ -498,7 +526,7 @@
                     CurrEnterMapIndex = EnterMap(CarModel, MapList, MapNum);
                     if (CurrEnterMapIndex >= 0) {
                         DEBUG("鍙戦�佽繘鍏ュ満鍦版姤鍛� %d", GetMapId(CurrEnterMapIndex, MapList, MapNum));
-                        MA_EnterMap(GetMapId(CurrEnterMapIndex, MapList, MapNum), 1);
+                        MA_EnterMap(GetMapId(CurrEnterMapIndex, MapList, MapNum), GetMapType(CurrEnterMapIndex, MapList, MapNum), 1);
 
                         CurrExamMapIndex = CurrEnterMapIndex;
                         CurrExamStatus = EXAM_AREA_START;
@@ -506,7 +534,7 @@
                 } else {
                     if (ExitMap(CarModel, CurrEnterMapIndex, MapList, MapNum)) {
                         DEBUG("鍙戦�佺寮�鍦哄湴鎶ュ憡 %d", GetMapId(CurrEnterMapIndex, MapList, MapNum));
-                        MA_EnterMap(GetMapId(CurrEnterMapIndex, MapList, MapNum), 0);
+                        MA_EnterMap(GetMapId(CurrEnterMapIndex, MapList, MapNum), GetMapType(CurrEnterMapIndex, MapList, MapNum), 0);
                         CurrEnterMapIndex = -1;
                     }
                 }
diff --git a/lib/src/main/cpp/driver_test.h b/lib/src/main/cpp/driver_test.h
index c411cf2..6f6288d 100644
--- a/lib/src/main/cpp/driver_test.h
+++ b/lib/src/main/cpp/driver_test.h
@@ -7,6 +7,7 @@
 
 #include "Geometry.h"
 #include "rtk_module/rtk.h"
+#include "test_items2/dummy_light.h"
 
 #include <vector>
 
@@ -92,7 +93,7 @@
 void GetSensorCfg(int gpio, int &func, bool &lvl);
 void FindSensorCfg(int func, int &gpio, bool &lvl);
 
-void StartDriverExam(int start);
+void StartDriverExam(int start, int type);
 void StartMapExam(int map_id, int exam);
 void GetRtkClock(struct RtkTime *s);
 void UpdateRTKInfo(const rtk_info *s);
@@ -100,4 +101,6 @@
 car_model_cache_t *GetCarModelCache(int node);
 void SystemShutdown(int event, int timeout);
 
+void SetDummyLightExam(int n, struct dummy_light_exam *cfg);;
+
 #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 3ee83da..5b64329 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -53,6 +53,8 @@
 #define ID_MS_READ_CARD         0x8011
 #define ID_SM_PUT_CARD          0x0011
 #define ID_MS_SYS_SHUTDOWN      0x8010
+#define ID_SM_LIGHT_EXAM_REQ    0x0012
+#define ID_MS_LIGHT_EXAM_RES    0x8012
 
 #define MA_OUT_GPS_BRIEF        0x0001
 #define MA_OUT_RTK_BRIEF        0x0002
@@ -708,10 +710,16 @@
             Document doc;
             doc.Parse(value);
             if (!doc.HasParseError()) {
+                int start = 0, type = 0;
                 if (doc.HasMember("exam")) {
                     Value& s = doc["exam"];
-                    StartDriverExam(s.GetInt());
+                    start = s.GetInt();
                 }
+                if (doc.HasMember("type")) {
+                    Value& s = doc["type"];
+                    type = s.GetInt();
+                }
+                StartDriverExam(start, type);
             }
             break;
         }
@@ -763,6 +771,39 @@
             }
             break;
         }
+        case ID_MS_LIGHT_EXAM_RES: {
+            Document doc;
+            doc.Parse(value);
+            if (!doc.HasParseError()) {
+                if (doc.HasMember("exam")) {
+                    const Value& s = doc["exam"];
+                    s.GetInt();
+                }
+                if (doc.HasMember("question")) {
+                    const Value& s = doc["question"];
+                    if (s.IsArray() && s.Size() > 0) {
+                        int n = 0;
+                        struct dummy_light_exam *content = new struct dummy_light_exam[s.Size()];
+
+                        for(Value::ConstValueIterator itr = s.Begin(); itr != s.End(); ++itr) {
+                            if (itr->HasMember("item") && itr->HasMember("tts")) {
+                                const Value &s1 = (*itr)["item"];
+                                const Value &s2 = (*itr)["tts"];
+
+                                content[n].item = s1.GetInt();
+                                strcpy(content[n].tts, s1.GetString());
+                                n++;
+                            }
+                        }
+
+                        SetDummyLightExam(n, content);
+
+                        delete []content;
+                    }
+                }
+            }
+            break;
+        }
         default:break;
     }
 }
@@ -779,7 +820,7 @@
     }
 }
 
-void MA_EnterMap(int map_id, int enter)
+void MA_EnterMap(int map_id, int type, int enter)
 {
     StringBuffer sb;
     Writer<StringBuffer> writer(sb);
@@ -787,9 +828,16 @@
     writer.StartObject();
     writer.Key("map_id");
     writer.Int(map_id);
+    writer.Key("type");
+    writer.Int(type);
     writer.Key("enter");
     writer.Int(enter);
     writer.EndObject();
 
     SendMsgToMainProc(ID_SM_ENTER_MAP, sb.GetString());
 }
+
+void MA_ExamLight(void)
+{
+    SendMsgToMainProc(ID_SM_LIGHT_EXAM_REQ, NULL);
+}
diff --git a/lib/src/main/cpp/master/comm_if.h b/lib/src/main/cpp/master/comm_if.h
index 0c5da32..2f02af1 100644
--- a/lib/src/main/cpp/master/comm_if.h
+++ b/lib/src/main/cpp/master/comm_if.h
@@ -93,6 +93,7 @@
 void MA_SendExamWrong(vector<ExamFault> &ExamFaultList);
 void MA_SendRtcmInd(int length);
 void MA_SendDebugInfo(const char *str, ...);
-void MA_EnterMap(int map_id, int enter);
+void MA_EnterMap(int map_id, int type, int enter);
+void MA_ExamLight(void);
 
 #endif //MYAPPLICATION2_COMM_IF_H
diff --git a/lib/src/main/cpp/native-lib.cpp b/lib/src/main/cpp/native-lib.cpp
index bd79e17..8f18adf 100644
--- a/lib/src/main/cpp/native-lib.cpp
+++ b/lib/src/main/cpp/native-lib.cpp
@@ -26,7 +26,7 @@
 const int RTK_PLATFORM_PORT = 12125;
 const uint8_t phone[] = {0x20,0x19,0x10,0x15,0x00,0x00,0x00,0x01};
 
-const char *VIRTUAL_RTK_IP = "192.168.3.52";
+const char *VIRTUAL_RTK_IP = "192.168.16.100";
 const int VIRTUAL_RTK_PORT = 9001;
 
 static void SendBootIndicate(union sigval sig);
diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp
new file mode 100644
index 0000000..4cd2771
--- /dev/null
+++ b/lib/src/main/cpp/test_items2/dummy_light.cpp
@@ -0,0 +1,16 @@
+//
+// Created by YY on 2020/3/9.
+//
+
+#include <cstdlib>
+#include "dummy_light.h"
+
+static struct dummy_light_exam *content;
+static int cn;
+
+void StartDummyLightExam(struct dummy_light_exam *ptr, int num)
+{
+    content = ptr;
+    cn = num;
+}
+
diff --git a/lib/src/main/cpp/test_items2/dummy_light.h b/lib/src/main/cpp/test_items2/dummy_light.h
new file mode 100644
index 0000000..68d4a06
--- /dev/null
+++ b/lib/src/main/cpp/test_items2/dummy_light.h
@@ -0,0 +1,13 @@
+//
+// Created by YY on 2020/3/9.
+//
+
+#ifndef MYAPPLICATION2_DUMMY_LIGHT_H
+#define MYAPPLICATION2_DUMMY_LIGHT_H
+
+struct dummy_light_exam {
+    int item;
+    char tts[512];
+};
+
+#endif //MYAPPLICATION2_DUMMY_LIGHT_H
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 d6ba6fd..bc33c8a 100644
--- a/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
+++ b/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
@@ -33,6 +33,7 @@
     private IListenerInterface mListener;
     private int msgId = 0;
     private Speaker speaker = null;
+    private boolean ttsInitSucc = false;
 
     private IRemoteInterface.Stub iRemoteInterface = new IRemoteInterface.Stub(){
         @Override
@@ -80,6 +81,20 @@
         speaker = new Speaker(getApplicationContext());
 
         new Thread(new StartNative()).start();
+
+        new Thread(new TestThread()).start();
+    }
+
+    class TestThread implements Runnable {
+        @Override
+        public void run() {
+            try {
+                Thread.sleep(500);
+            } catch (InterruptedException e) {
+
+            }
+            ttsInitSucc = true;
+        }
     }
 
     class StartNative implements Runnable {
@@ -145,11 +160,15 @@
     }
 
     public void TextSpeak(String text) {
-        if (speaker != null) {
+        if (speaker != null && ttsInitSucc) {
             speaker.speak(text);
         }
     }
 
+    public void TextSpeakInitCallback(boolean ret) {
+        ttsInitSucc = ret;
+    }
+
     private String byte2hex(byte [] buffer){
         StringBuilder h = new StringBuilder();
 
diff --git a/lib/src/main/java/com/anyun/exam/lib/util/Speaker.java b/lib/src/main/java/com/anyun/exam/lib/util/Speaker.java
index 4cfb739..8a7c738 100644
--- a/lib/src/main/java/com/anyun/exam/lib/util/Speaker.java
+++ b/lib/src/main/java/com/anyun/exam/lib/util/Speaker.java
@@ -4,6 +4,8 @@
 import android.speech.tts.TextToSpeech;
 import android.util.Log;
 
+import com.anyun.exam.lib.RemoteService;
+
 import java.util.Locale;
 
 public class Speaker {
@@ -14,6 +16,7 @@
 
     public Speaker(final Context context) {
         // TODO Auto-generated constructor stub
+        Log.d(TAG, "Speaker Init...");
         this.context = context;
         tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
             @Override

--
Gitblit v1.8.0