From e5e41dec2d41651c7160662ecf43325d49b07b66 Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期二, 10 三月 2020 21:51:00 +0800
Subject: [PATCH] 模拟夜间考试。

---
 lib/src/main/java/com/anyun/exam/lib/util/Speaker.java         |   13 +++-
 lib/src/main/cpp/driver_test.cpp                               |    8 ++
 lib/src/main/cpp/rtk_platform/platform.h                       |    1 
 lib/src/main/java/com/anyun/exam/lib/util/SpeakerCallback.java |    6 +-
 lib/src/main/cpp/native-lib.h                                  |    4 
 lib/src/main/cpp/native-lib.cpp                                |   45 ++++-----------
 lib/src/main/cpp/test_items2/dummy_light.cpp                   |   27 ++++++++
 lib/src/main/cpp/test_items2/dummy_light.h                     |    1 
 lib/src/main/cpp/rtk_platform/platform.cpp                     |    3 +
 lib/src/main/java/com/anyun/exam/lib/RemoteService.java        |   15 +++-
 10 files changed, 73 insertions(+), 50 deletions(-)

diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 94a5278..d795059 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -374,9 +374,9 @@
 
 void SetDummyLightExam(int n, struct dummy_light_exam *cfg)
 {
-    DEBUG("鑾峰彇妯℃嫙璺�冪伅鍏夋祴璇曢」鐩�");
+    DEBUG("鑾峰彇妯℃嫙璺�冪伅鍏夋祴璇曢」鐩� N = %d %d", n, TestStart);
 
-    if (TestStart) return;
+//    if (TestStart) return;
 
     if (DummyLightContent != NULL) {
         free(DummyLightContent);
@@ -389,6 +389,8 @@
     for (int i = 0; i < n; i++) {
         DummyLightContent[i] = cfg[i];
     }
+
+    StartDummyLightExam(DummyLightContent, DummyLightContentSize);
 }
 
 void StartDriverExam(int start, int type)
@@ -397,6 +399,7 @@
     DEBUG("++++++++++++鑰冭瘯鍚姩 start %d type %d+++++++++++++", start, type);
 
     if (start == 0) {
+        DEBUG("缁撴潫鑰冭瘯");
 //        CurrExamMapIndex = -1;
 //        TestStart = false;
 //        CommTestStart(false);
@@ -419,6 +422,7 @@
 
     if (!err) {
         if (!TestStart) {
+            DEBUG("鍚姩鑰冭瘯");
             ExamFaultList.clear();
             examFaultIndex = 0;
 
diff --git a/lib/src/main/cpp/native-lib.cpp b/lib/src/main/cpp/native-lib.cpp
index 69ef30e..e19a097 100644
--- a/lib/src/main/cpp/native-lib.cpp
+++ b/lib/src/main/cpp/native-lib.cpp
@@ -82,36 +82,6 @@
     return ciphertext_length;
 }
 
-void TextSpeak(const char *text)
-{
-    JNIEnv *env;
-    bool ready_in_java_env = false;
-
-    if (sg_jvm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) {
-        // Attach涓荤嚎绋�
-        if (sg_jvm->AttachCurrentThread(&env, NULL) != JNI_OK) {
-            LOGE("%s: AttachCurrentThread() failed", __FUNCTION__);
-            return;
-        }
-    } else {
-        ready_in_java_env = true;
-    }
-
-    jclass cls = env->GetObjectClass(sg_obj);
-    jmethodID fun = env->GetMethodID(cls, "TextSpeak", "(Ljava/lang/String;)V");
-
-    std::string cstext = text;
-    env->CallVoidMethod(sg_obj, fun, env->NewStringUTF(cstext.c_str()));
-    env->DeleteLocalRef(cls);
-
-    if (!ready_in_java_env) {
-        //Detach涓荤嚎绋�
-        if (sg_jvm->DetachCurrentThread() != JNI_OK) {
-            LOGE("%s: DetachCurrentThread() failed", __FUNCTION__);
-        }
-    }
-}
-
 void TextOsd(int type, const char *text)
 {
 /*    JNIEnv *env;
@@ -225,7 +195,7 @@
     }
 }
 
-void PlayTTS(const char *string)
+void PlayTTS(const char *string, int id)
 {
     DEBUG("PlayTTS: %s", string);
 
@@ -243,9 +213,9 @@
     }
 
     jclass cls = env->GetObjectClass(sg_obj);
-    jmethodID fun = env->GetMethodID(cls, "TextSpeak", "(Ljava/lang/String;)V");
+    jmethodID fun = env->GetMethodID(cls, "TextSpeak", "(Ljava/lang/String;I)V");
 
-    env->CallVoidMethod(sg_obj, fun, env->NewStringUTF(string));
+    env->CallVoidMethod(sg_obj, fun, env->NewStringUTF(string), id);
 
     env->DeleteLocalRef(cls);
 
@@ -266,6 +236,8 @@
     env->GetJavaVM(&sg_jvm);
     // 涓嶈兘鐩存帴璧嬪��(g_obj = ojb)
     sg_obj = env->NewGlobalRef(thiz);
+
+    srand(time(NULL));
 
     AppTimer_Init();
     ConfigMCU();
@@ -309,3 +281,10 @@
 
     env->ReleaseByteArrayElements(data, c_dat, NULL);
 }
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_com_anyun_exam_lib_RemoteService_TextSpeakEnd(JNIEnv *env, jobject thiz, jint id) {
+    // TODO: implement TextSpeakEnd()
+    PlatformStatusChanged(PLAY_TTS_DONE_EVT, (uint8_t *)&id, sizeof(id));
+}
diff --git a/lib/src/main/cpp/native-lib.h b/lib/src/main/cpp/native-lib.h
index c5133de..77011b3 100644
--- a/lib/src/main/cpp/native-lib.h
+++ b/lib/src/main/cpp/native-lib.h
@@ -14,10 +14,10 @@
                const uint8_t *plaintext, int plaintext_length,
                uint8_t **ciphertext);
 
-void TextSpeak(const char *text);
+
 void TextOsd(int type, const char *text);
 void DrawScreen(const Polygon *map, const Polygon *car);
 void SendMsgToMainProc(int cmd, const char *value);
-void PlayTTS(const char *string);
+void PlayTTS(const char *string, int id);
 
 #endif //RTKBASESTATION_NATIVE_LIB_H
diff --git a/lib/src/main/cpp/rtk_platform/platform.cpp b/lib/src/main/cpp/rtk_platform/platform.cpp
index 71b79ba..d44eac7 100644
--- a/lib/src/main/cpp/rtk_platform/platform.cpp
+++ b/lib/src/main/cpp/rtk_platform/platform.cpp
@@ -430,6 +430,9 @@
 
         MA_SendCardBrief(&brief);
     }
+    if (events & PLAY_TTS_DONE_EVT) {
+        DummyLightTTSDone(*((int *)data));
+    }
 }
 
 static void *PlatformDataListenThread(void *p) {
diff --git a/lib/src/main/cpp/rtk_platform/platform.h b/lib/src/main/cpp/rtk_platform/platform.h
index d0c6c57..4063643 100644
--- a/lib/src/main/cpp/rtk_platform/platform.h
+++ b/lib/src/main/cpp/rtk_platform/platform.h
@@ -15,6 +15,7 @@
 #define GPS_UPDATE_EVT                              0x0020
 #define MCU_UPDATE_EVT                              0x0040
 #define CARD_UPDATE_EVT                             0x0080
+#define PLAY_TTS_DONE_EVT                           0x0100
 
 typedef struct {
     char domain_name[32];
diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp
index 8bf7ec4..c25c199 100644
--- a/lib/src/main/cpp/test_items2/dummy_light.cpp
+++ b/lib/src/main/cpp/test_items2/dummy_light.cpp
@@ -14,14 +14,39 @@
 static int contentNum;
 static int currContent;
 
+static void DummyLightCheckLight(union sigval sig);
 static void ExamDummyLight(union sigval sig);
 
 void StartDummyLightExam(struct dummy_light_exam *ptr, int num)
 {
+    DEBUG("StartDummyLightExam");
     content = ptr;
     contentNum = num;
     currContent = 0;
+
+    AppTimer_delete(DummyLightCheckLight);
+    AppTimer_delete(ExamDummyLight);
     AppTimer_add(ExamDummyLight, D_SEC(2));
+}
+
+void DummyLightTTSDone(int id)
+{
+    DEBUG("DummyLightTTSDone %d", id);
+
+    if (id == 100) {
+        AppTimer_add(DummyLightCheckLight, D_SEC(3), id);
+    } else if (id == 101) {
+        AppTimer_add(DummyLightCheckLight, D_SEC(1), id);
+    } else {
+        AppTimer_add(DummyLightCheckLight, D_SEC(5), id);
+    }
+}
+
+static void DummyLightCheckLight(union sigval sig)
+{
+    AppTimer_delete(DummyLightCheckLight);
+
+    DEBUG("DummyLightCheckLight %d", sig.sival_int);
 }
 
 static void ExamDummyLight(union sigval sig)
@@ -31,7 +56,7 @@
     if (currContent < contentNum) {
         DEBUG("妯℃嫙鐏厜娴嬭瘯 %s", content[currContent].tts);
 
-        PlayTTS(content[currContent].tts);
+        PlayTTS(content[currContent].tts, content[currContent].item);
         currContent++;
         AppTimer_add(ExamDummyLight, D_SEC(5));
     }
diff --git a/lib/src/main/cpp/test_items2/dummy_light.h b/lib/src/main/cpp/test_items2/dummy_light.h
index 7ae97b3..34bc315 100644
--- a/lib/src/main/cpp/test_items2/dummy_light.h
+++ b/lib/src/main/cpp/test_items2/dummy_light.h
@@ -11,5 +11,6 @@
 };
 
 void StartDummyLightExam(struct dummy_light_exam *ptr, int num);
+void DummyLightTTSDone(int id);
 
 #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 2712b49..7b58c01 100644
--- a/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
+++ b/lib/src/main/java/com/anyun/exam/lib/RemoteService.java
@@ -159,9 +159,11 @@
         return null;
     }
 
-    public void TextSpeak(String text) {
+    public void TextSpeak(String text, int id) {
         if (speaker != null && ttsInitSucc) {
-            speaker.speak(text);
+            speaker.speak(text, Integer.toString(id));
+        } else {
+            TextSpeakEnd(id);
         }
     }
 
@@ -194,18 +196,20 @@
         }
 
         @Override
-        public void PlayStart() {
+        public void PlayStart(String s) {
             Log.d(TAG, "TTS寮曟搸鎾斁寮�濮�");
         }
 
         @Override
-        public void PlayDone() {
+        public void PlayDone(String s) {
             Log.d(TAG, "TTS寮曟搸鎾斁缁撴潫");
+            TextSpeakEnd(Integer.valueOf(s));
         }
 
         @Override
-        public void PlayError() {
+        public void PlayError(String s) {
             Log.d(TAG, "TTS寮曟搸鎾斁鍑洪敊");
+            TextSpeakEnd(Integer.valueOf(s));
         }
     }
 
@@ -217,4 +221,5 @@
     public native void startNative();
     public native void MainProcMsgEntry(int cmd, String value);
     public native void MainProcBinMsgEntry(int cmd, byte []data, int length);
+    public native void TextSpeakEnd(int id);
 }
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 dfbea00..f326415 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
@@ -49,28 +49,33 @@
             @Override
             public void onStart(String s) {
                 if (callback != null) {
-                    callback.PlayStart();
+                    callback.PlayStart(s);
                 }
             }
 
             @Override
             public void onDone(String s) {
                 if (callback != null) {
-                    callback.PlayDone();
+                    callback.PlayDone(s);
                 }
             }
 
             @Override
             public void onError(String s) {
                 if (callback != null) {
-                    callback.PlayError();
+                    callback.PlayError(s);
                 }
             }
         });
     }
 
+    public void speak(String text, String id) {
+//            tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
+        tts.speak(text, TextToSpeech.QUEUE_ADD, null, id);
+    }
+
     public void speak(String text) {
 //            tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
-        tts.speak(text, TextToSpeech.QUEUE_ADD, null, "speech");
+        tts.speak(text, TextToSpeech.QUEUE_ADD, null, "talk");
     }
 }
diff --git a/lib/src/main/java/com/anyun/exam/lib/util/SpeakerCallback.java b/lib/src/main/java/com/anyun/exam/lib/util/SpeakerCallback.java
index faaa68e..83bf769 100644
--- a/lib/src/main/java/com/anyun/exam/lib/util/SpeakerCallback.java
+++ b/lib/src/main/java/com/anyun/exam/lib/util/SpeakerCallback.java
@@ -2,7 +2,7 @@
 
 public interface SpeakerCallback {
     void PlayInit(boolean ret);
-    void PlayStart();
-    void PlayDone();
-    void PlayError();
+    void PlayStart(String s);
+    void PlayDone(String s);
+    void PlayError(String s);
 }

--
Gitblit v1.8.0