bt_uart.c: - Reader thread: accept plain-text (non-JSON) lines from BLE app; routes directly to extra_cmd_cb — test commands no longer need JSON wrapping - bt_uart_probe_and_upgrade(): fix AT+BAUD7 sequence — reopen fd at 115200 before sending AT+NAME/AT+RESET (was sending on stale 9600 fd) - bt_uart_send_json(): replace blocking mutex_lock with 200 ms trylock retry to avoid deadlock if writer thread dies holding the queue mutex - Reader select timeout 500 ms → 200 ms for faster plain-text flush buzzer.c: - buzzer_set_pattern(): write s_pattern directly then trylock+signal, so callers never block on the buzzer thread's mutex can_bus.c: - Add debug printf in can_bus_send_control_cmd() (temporary) event_recorder.c: - TEST_MODE_TIMEOUT_SEC 60 → 300 (5 min, enough for full test run) kp_firmware.c: - Persist INI keys via sed in-place instead of iniparser_dump_ini, preserving comments and original file structure - setvbuf stdout/stderr to line-buffered so tee log appears immediately Add GF_AI_Box_Test_Guide (.md/.docx/.pdf) and uclibc_compat.c
309 lines
9.7 KiB
Markdown
309 lines
9.7 KiB
Markdown
# GF AI Box — 測試人員操作指南
|
||
|
||
> 文件版本:v2.0
|
||
> 適用韌體:gf_ai_box_v4
|
||
> 更新日期:2026-06-14
|
||
|
||
---
|
||
|
||
## 一、測試環境準備
|
||
|
||
### 所需工具
|
||
- 藍芽串口工具(iOS:LightBlue / Serial Bluetooth Terminal;Android:Serial Bluetooth Terminal)
|
||
- CAN bus 分析儀(選配,用於驗證 CAN 訊號)
|
||
- 油門踏板(CAN 測試時需要)
|
||
|
||
### 連線方式
|
||
1. 開啟藍芽工具,掃描並連線到 AI Box 的 BLE 裝置
|
||
2. 完成握手後即可送出指令
|
||
3. 指令為**純文字**,大小寫不分,直接輸入後送出
|
||
|
||
### 重要說明
|
||
- **硬體 Reset 後預設為正常模式**,必須先送 `test_enter` 才能執行測試指令
|
||
- 進入測試模式後,AI Box 的 AI 推論結果暫停處理(NPU 繼續運算但不派發事件)
|
||
- 測試模式下如果 **60 秒無任何指令**,系統會自動退出測試模式並恢復正常
|
||
- 若 TEST_ALL 系列正在執行,請勿重複送出測試指令
|
||
|
||
---
|
||
|
||
## 二、基本控制指令
|
||
|
||
| 指令 | 說明 | 預期回覆 |
|
||
|------|------|---------|
|
||
| `test_enter` | 進入測試模式 | `TEST_ACK ENTER` |
|
||
| `test_exit` | 退出測試模式,恢復正常 | `TEST_EXIT_OK` |
|
||
|
||
---
|
||
|
||
## 三、大項一:BLE JSON 測試
|
||
|
||
**測試目的**:驗證各警示事件觸發時,藍芽送出的 JSON 格式與內容正確。
|
||
**注意**:只送出 BLE JSON,**不觸發** CAN bus 指令與 Buzzer。
|
||
|
||
### 3.1 單項測試指令
|
||
|
||
#### Violation(草地違規)
|
||
|
||
| 指令 | 說明 | 預期 BLE 回傳 JSON |
|
||
|------|------|-----------------|
|
||
| `test_ble violation 1` | 觸發 violation level=1 | `{"response_type":"violation","content":{"id":"...","date":"...","type":"lane","level":1}}` |
|
||
| `test_ble violation 0` | 解除 violation | `{"response_type":"violation","content":{"id":"...","date":"...","type":"lane","level":0}}` |
|
||
|
||
#### Collision(碰撞警示)
|
||
|
||
| 指令 | 說明 | 預期 BLE 回傳 JSON |
|
||
|------|------|-----------------|
|
||
| `test_ble collision 1` | 觸發 collision level=1(type=vehicle)| `{"response_type":"collision_warning","content":{"level":1,"type":"vehicle"}}` |
|
||
| `test_ble collision 0` | 解除 collision | `{"response_type":"collision_warning","content":{"level":0,"type":null}}` |
|
||
|
||
#### Alert(方向警示)
|
||
|
||
| 指令 | 說明 | 預期 BLE 回傳 JSON |
|
||
|------|------|-----------------|
|
||
| `test_ble alert 1 tree 0 null` | 左側 tree 警示,右側無 | `{"response_type":"alert","content":{"left":{"level":1,"type":"tree"},"right":{"level":0,"type":null}}}` |
|
||
| `test_ble alert 0 null 1 person` | 左側無,右側 person | `{"response_type":"alert","content":{"left":{"level":0,"type":null},"right":{"level":1,"type":"person"}}}` |
|
||
| `test_ble alert 1 tree 1 vehicle` | 左右都有警示 | `{"response_type":"alert","content":{"left":{"level":1,"type":"tree"},"right":{"level":1,"type":"vehicle"}}}` |
|
||
| `test_ble alert 0 null 0 null` | 解除所有 alert | `{"response_type":"alert","content":{"left":{"level":0,"type":null},"right":{"level":0,"type":null}}}` |
|
||
|
||
> **Alert 指令格式**:`test_ble alert <左level> <左type> <右level> <右type>`
|
||
> type 可以是:`tree` / `person` / `vehicle` / `null`
|
||
|
||
### 3.2 BLE 全項自動測試
|
||
|
||
| 指令 | 說明 |
|
||
|------|------|
|
||
| `test_ble_all` | 自動跑完所有 BLE 測項(約 20 秒)|
|
||
|
||
**TEST_BLE_ALL 執行順序:**
|
||
|
||
```
|
||
[00s] violation level=1 → 等 3 秒
|
||
[03s] violation level=0 → 等 2 秒
|
||
[05s] collision level=1 → 等 3 秒
|
||
[08s] collision level=0 → 等 2 秒
|
||
[10s] alert left=tree, right=無 → 等 3 秒
|
||
[13s] alert clear → 等 2 秒
|
||
[15s] alert left=tree, right=vehicle → 等 3 秒
|
||
[18s] alert clear → 等 2 秒
|
||
[20s] TEST_BLE_ALL_DONE,自動退出測試模式
|
||
```
|
||
|
||
---
|
||
|
||
## 四、大項二:CAN bus 測試
|
||
|
||
**測試目的**:驗證各警示事件觸發時,CAN bus 送出正確速度指令。
|
||
**注意**:只觸發 CAN bus 速度指令,**不送出** BLE JSON,**不啟動** Buzzer。
|
||
|
||
### 速度對照表
|
||
|
||
| 事件 | CAN 速度值 |
|
||
|------|-----------|
|
||
| 正常行駛 | 240 |
|
||
| Violation / Alert | 35 |
|
||
| Collision | 10 |
|
||
|
||
### 4.1 單項測試指令
|
||
|
||
#### Violation CAN 測試
|
||
|
||
| 指令 | CAN 速度 | 預期回覆 |
|
||
|------|---------|---------|
|
||
| `test_can violation 1` | 35 | `TEST_ACK CAN VIOLATION 1 speed=35` |
|
||
| `test_can violation 0` | 240 | `TEST_ACK CAN VIOLATION 0 speed=240` |
|
||
|
||
#### Collision CAN 測試
|
||
|
||
| 指令 | CAN 速度 | 預期回覆 |
|
||
|------|---------|---------|
|
||
| `test_can collision 1` | 10 | `TEST_ACK CAN COLLISION 1 speed=10` |
|
||
| `test_can collision 0` | 240 | `TEST_ACK CAN COLLISION 0 speed=240` |
|
||
|
||
#### Alert CAN 測試
|
||
|
||
| 指令 | CAN 速度 | 預期回覆 |
|
||
|------|---------|---------|
|
||
| `test_can alert 1` | 35 | `TEST_ACK CAN ALERT 1 speed=35` |
|
||
| `test_can alert 0` | 240 | `TEST_ACK CAN ALERT 0 speed=240` |
|
||
|
||
### 4.2 CAN 全項自動測試
|
||
|
||
| 指令 | 說明 |
|
||
|------|------|
|
||
| `test_can_all` | 自動跑完所有 CAN 測項(預設觀察 10 秒,約 39 秒)|
|
||
| `test_can_all 15` | 每個測項觀察時間改為 15 秒 |
|
||
|
||
**TEST_CAN_ALL 執行順序(預設觀察 10 秒):**
|
||
|
||
```
|
||
[00s] violation level=1 → speed=35
|
||
↓ 觀察 10 秒(踩油門,確認轉速被限制)
|
||
[10s] violation level=0 → speed=240
|
||
↓ 等 3 秒(確認恢復正常)
|
||
[13s] collision level=1 → speed=10
|
||
↓ 觀察 10 秒(踩油門,確認轉速被限制到最低)
|
||
[23s] collision level=0 → speed=240
|
||
↓ 等 3 秒
|
||
[26s] alert level=1 → speed=35
|
||
↓ 觀察 10 秒
|
||
[36s] alert level=0 → speed=240
|
||
↓ 等 3 秒
|
||
[39s] TEST_CAN_ALL_DONE,自動退出測試模式
|
||
```
|
||
|
||
---
|
||
|
||
## 五、大項三:Buzzer 測試
|
||
|
||
**測試目的**:驗證各警示事件觸發時,Buzzer 發出正確嗶聲節奏。
|
||
**注意**:只觸發 Buzzer,**不送出** BLE JSON,**不發** CAN bus 指令。
|
||
|
||
### Buzzer Pattern 對照表
|
||
|
||
| Pattern | 節奏 |
|
||
|---------|------|
|
||
| OFF(靜音)| 無聲 |
|
||
| GRASS(Violation 草地)| 慢速:500ms 響 / 500ms 停 |
|
||
| ALERT(Alert 方向警示)| 中速:300ms 響 / 200ms 停 |
|
||
| COLLISION(碰撞)| 急促:100ms 響 / 100ms 停 |
|
||
|
||
### 5.1 單項測試指令
|
||
|
||
| 指令 | Buzzer 動作 | 預期回覆 |
|
||
|------|-----------|---------|
|
||
| `test_buzzer grass` | 慢速嗶(500ms 響 / 500ms 停)| `TEST_ACK BUZZER GRASS OK` |
|
||
| `test_buzzer alert` | 中速嗶(300ms 響 / 200ms 停)| `TEST_ACK BUZZER ALERT OK` |
|
||
| `test_buzzer collision` | 急促嗶(100ms 響 / 100ms 停)| `TEST_ACK BUZZER COLLISION OK` |
|
||
| `test_buzzer off` | 靜音 | `TEST_ACK BUZZER OFF OK` |
|
||
|
||
> Buzzer 指令送出後立即生效,持續到下一個指令為止。
|
||
|
||
### 5.2 Buzzer 全項自動測試
|
||
|
||
| 指令 | 說明 |
|
||
|------|------|
|
||
| `test_buzzer_all` | 自動跑完所有 Buzzer 測項(約 12 秒)|
|
||
|
||
**TEST_BUZZER_ALL 執行順序:**
|
||
|
||
```
|
||
[00s] GRASS 慢速嗶 → 等 4 秒
|
||
[04s] ALERT 中速嗶 → 等 4 秒
|
||
[08s] COLLISION 急促嗶 → 等 4 秒
|
||
[12s] OFF 靜音
|
||
[12s] TEST_BUZZER_ALL_DONE,自動退出測試模式
|
||
```
|
||
|
||
---
|
||
|
||
## 六、全功能自動測試
|
||
|
||
| 指令 | 說明 |
|
||
|------|------|
|
||
| `test_all` | 依序執行 BLE → CAN → Buzzer 三大群組(預設觀察 10 秒,約 77 秒)|
|
||
| `test_all 15` | CAN 觀察時間改為 15 秒(約 92 秒)|
|
||
|
||
**執行順序(預設觀察 10 秒):**
|
||
|
||
1. **BLE 群組**(約 20 秒)— 驗證 BLE JSON
|
||
2. 休息 3 秒
|
||
3. **CAN 群組**(約 39 秒)— 驗證 CAN bus 速度指令
|
||
4. 休息 3 秒
|
||
5. **Buzzer 群組**(約 12 秒)— 驗證 Buzzer 嗶聲節奏
|
||
6. 送出 `TEST_ALL_DONE`,自動退出測試模式
|
||
|
||
**進度訊息:**
|
||
|
||
| 回傳訊息 | 說明 |
|
||
|---------|------|
|
||
| `TEST_ALL_START` | 全功能測試開始 |
|
||
| `TEST_ALL_BLE_GROUP_START` | BLE 群組開始 |
|
||
| `TEST_ALL_BLE_GROUP_DONE` | BLE 群組完成 |
|
||
| `TEST_ALL_CAN_GROUP_START` | CAN 群組開始 |
|
||
| `TEST_ALL_CAN_GROUP_DONE` | CAN 群組完成 |
|
||
| `TEST_ALL_BUZZER_GROUP_START` | Buzzer 群組開始 |
|
||
| `TEST_ALL_BUZZER_GROUP_DONE` | Buzzer 群組完成 |
|
||
| `TEST_ALL_DONE` | 全部完成 |
|
||
|
||
---
|
||
|
||
## 七、錯誤回覆說明
|
||
|
||
| 回傳訊息 | 說明 |
|
||
|---------|------|
|
||
| `TEST_ERR NOT_IN_TEST_MODE` | 尚未執行 `test_enter` |
|
||
| `TEST_ERR ALL_ALREADY_RUNNING` | TEST_ALL 系列仍在執行中,請等待完成 |
|
||
| `TEST_ERR UNKNOWN_CMD` | 指令不正確,請確認格式 |
|
||
| `TEST_ACK ALREADY_IN_TEST` | 已在測試模式,不需重複 `test_enter` |
|
||
| `TEST_TIMEOUT_EXIT` | 60 秒逾時,自動退出測試模式 |
|
||
|
||
---
|
||
|
||
## 八、快速測試流程範例
|
||
|
||
### 範例 A:只測試藍芽 JSON
|
||
|
||
```
|
||
test_enter
|
||
test_ble collision 1
|
||
(確認收到 collision_warning JSON)
|
||
test_ble collision 0
|
||
test_exit
|
||
```
|
||
|
||
### 範例 B:只測試 CAN 限速
|
||
|
||
```
|
||
test_enter
|
||
test_can collision 1
|
||
(踩油門 → 確認轉速被限制 + 確認 ACK speed=10)
|
||
test_can collision 0
|
||
(確認轉速恢復正常)
|
||
test_exit
|
||
```
|
||
|
||
### 範例 C:只測試 Buzzer
|
||
|
||
```
|
||
test_enter
|
||
test_buzzer collision
|
||
(聽到急促嗶聲)
|
||
test_buzzer off
|
||
(靜音)
|
||
test_exit
|
||
```
|
||
|
||
### 範例 D:全自動測試(觀察 15 秒)
|
||
|
||
```
|
||
test_enter
|
||
test_all 15
|
||
(等待約 92 秒,觀察各測項)
|
||
(收到 TEST_ALL_DONE 後自動退出測試模式)
|
||
```
|
||
|
||
---
|
||
|
||
## 附錄:指令速查表
|
||
|
||
```
|
||
test_enter
|
||
test_exit
|
||
|
||
test_ble violation <level> level = 0 或 1
|
||
test_ble collision <level> level = 0 或 1
|
||
test_ble alert <左level> <左type> <右level> <右type>
|
||
test_ble_all
|
||
|
||
test_can violation <level> level = 0 或 1
|
||
test_can collision <level> level = 0 或 1
|
||
test_can alert <level> level = 0 或 1
|
||
test_can_all [觀察秒數] 預設 10 秒
|
||
|
||
test_buzzer grass
|
||
test_buzzer alert
|
||
test_buzzer collision
|
||
test_buzzer off
|
||
test_buzzer_all
|
||
|
||
te |