gf_ai_box/GF_AI_Box_Test_Guide.md
miketsai cd96e33c62 feat: BLE plain-text cmd, AT probe fix, INI sed persist, log buffering
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
2026-06-14 15:41:30 +08:00

309 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GF AI Box — 測試人員操作指南
> 文件版本v2.0
> 適用韌體gf_ai_box_v4
> 更新日期2026-06-14
---
## 一、測試環境準備
### 所需工具
- 藍芽串口工具iOSLightBlue / Serial Bluetooth TerminalAndroidSerial 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=1type=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靜音| 無聲 |
| GRASSViolation 草地)| 慢速500ms 響 / 500ms 停 |
| ALERTAlert 方向警示)| 中速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