From 682b17ff66dff23e03c6a57de276ea0c3e670c0e Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期一, 23 三月 2020 18:44:47 +0800
Subject: [PATCH] 起步和直线
---
lib/src/main/cpp/test_items2/dummy_light.cpp | 90 ++++++++++++++++++++++++++++++++++-----------
1 files changed, 68 insertions(+), 22 deletions(-)
diff --git a/lib/src/main/cpp/test_items2/dummy_light.cpp b/lib/src/main/cpp/test_items2/dummy_light.cpp
index 83d3ee1..3f7298d 100644
--- a/lib/src/main/cpp/test_items2/dummy_light.cpp
+++ b/lib/src/main/cpp/test_items2/dummy_light.cpp
@@ -11,12 +11,22 @@
#define DEBUG(fmt, args...) LOGD("<dummy_light> <%s>: " fmt, __func__, ##args)
+enum {
+ TTS_NOT_START,
+ TTS_DOING,
+ TTS_DONE,
+ WAIT_OPERATE,
+ CHECK_OPERATE
+};
+
static struct RtkTime currRtkTime;
static struct dummy_light_exam *content;
static int contentNum;
-static int currContent;
+
static int checkCnt;
static bool turn_left_active, flash_beam_active;
+static int examTtsSeq = 0;
+static bool testing;
static void DummyLightCheckActive(union sigval sig);
static void ExamDummyLight(union sigval sig);
@@ -26,10 +36,13 @@
DEBUG("StartDummyLightExam");
content = ptr;
contentNum = num;
- currContent = 0;
+
currRtkTime = *rtkTime;
- AppTimer_delete(DummyLightCheckActive);
+ for (int i = 0; i < contentNum; ++i) {
+ content[i].itemStatus = TTS_NOT_START;
+ }
+ testing = true;
AppTimer_delete(ExamDummyLight);
AppTimer_add(ExamDummyLight, D_SEC(2));
}
@@ -37,31 +50,28 @@
int ExecuteDummyLightExam(const struct RtkTime* rtkTime)
{
currRtkTime = *rtkTime;
- return (currContent == contentNum)?2:1;
+ return (testing)?1:2;
}
void DummyLightTTSDone(int id)
{
DEBUG("DummyLightTTSDone %d", id);
// 绛夎闊虫挱鎶ュ畬姣曞悗璁℃椂
- if (id == 100) {
- AppTimer_add(DummyLightCheckActive, D_SEC(3), id);
- } else if (id == 101) {
- AppTimer_add(DummyLightCheckActive, D_SEC(1), id);
- } else if (id == OVERTAKE) {
- checkCnt = 0;
- turn_left_active = flash_beam_active = false;
- AppTimer_add(DummyLightCheckActive, D_SEC(1), id);
- } else {
- AppTimer_add(DummyLightCheckActive, D_SEC(5), id);
+ if (id == examTtsSeq) {
+ for (int i = 0; i < contentNum; ++i) {
+ if (content[i].itemStatus == TTS_DOING) {
+ content[i].itemStatus = TTS_DONE;
+ break;
+ }
+ }
+
+ AppTimer_add(ExamDummyLight, 100);
}
}
static void DummyLightCheckActive(union sigval sig)
{
- AppTimer_delete(DummyLightCheckActive);
-
- DEBUG("DummyLightCheckActive %d", sig.sival_int);
+ DEBUG("DummyLightCheckActive item = %d", sig.sival_int);
switch (sig.sival_int) {
case DRIVE_AT_NIGHT:
@@ -119,17 +129,53 @@
break;
}
- AppTimer_add(ExamDummyLight, D_SEC(1));
+ for (int i = 0; i < contentNum; ++i) {
+ if (content[i].item == sig.sival_int) {
+ content[i].itemStatus = CHECK_OPERATE;
+ break;
+ }
+ }
+
+ AppTimer_add(ExamDummyLight, 500);
}
static void ExamDummyLight(union sigval sig)
{
+ int i = 0;
AppTimer_delete(ExamDummyLight);
- if (currContent < contentNum) {
- DEBUG("妯℃嫙鐏厜娴嬭瘯 %s", content[currContent].tts);
+ for (; i < contentNum; ++i) {
+ switch (content[i].itemStatus) {
+ case TTS_NOT_START:
+ content[i].itemStatus = TTS_DOING;
+ examTtsSeq = PlayTTS(content[i].tts);
+ // 绛夊緟TTS鎾斁瀹屾瘯
+ return;
+ case TTS_DOING:
+ return;
+ case TTS_DONE:
+ content[i].itemStatus = WAIT_OPERATE;
- PlayTTS(content[currContent].tts, content[currContent].item);
- currContent++;
+ AppTimer_delete(DummyLightCheckActive);
+ if (content[i].item == OVERTAKE) {
+ checkCnt = 0;
+ turn_left_active = flash_beam_active = false;
+ AppTimer_add(DummyLightCheckActive, D_SEC(1), content[i].item);
+ }
+ else if (content[i].item >= 100)
+ AppTimer_add(DummyLightCheckActive, D_SEC(3), content[i].item);
+ else
+ AppTimer_add(DummyLightCheckActive, D_SEC(5), content[i].item);
+ return;
+ case WAIT_OPERATE:
+ return;
+ case CHECK_OPERATE:
+ default:
+ break;
+ }
+ }
+
+ if (i >= contentNum) {
+ testing = false;
}
}
--
Gitblit v1.8.0