From cd96e33c62570dc81399162fdef0f8a698cbf28d Mon Sep 17 00:00:00 2001 From: miketsai Date: Sun, 14 Jun 2026 15:41:30 +0800 Subject: [PATCH] feat: BLE plain-text cmd, AT probe fix, INI sed persist, log buffering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CLAUDE.md | 96 ++++++++++ GF_AI_Box_Test_Guide.docx | Bin 0 -> 14888 bytes GF_AI_Box_Test_Guide.md | 309 +++++++++++++++++++++++++++++++ GF_AI_Box_Test_Guide.pdf | Bin 0 -> 210715 bytes src/host_stream/bt_uart.c | 118 ++++++++++-- src/host_stream/buzzer.c | 12 +- src/host_stream/event_recorder.c | 2 +- src/host_stream/kp_firmware.c | 50 ++++- src/host_stream/uclibc_compat.c | 72 +++++++ 9 files changed, 630 insertions(+), 29 deletions(-) create mode 100644 CLAUDE.md create mode 100644 GF_AI_Box_Test_Guide.docx create mode 100644 GF_AI_Box_Test_Guide.md create mode 100644 GF_AI_Box_Test_Guide.pdf create mode 100644 src/host_stream/uclibc_compat.c diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..660db47 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,96 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +KL630 Host Stream Firmware — a real-time semantic segmentation system running on a Kneron KL630 AI SoC. It processes video from a Sony IMX662 DOL-HDR dual-exposure camera for golf course monitoring (pedestrian/vehicle detection via STDC semantic segmentation). The binary runs on embedded Linux (ARMv7-A, uClibc 1.0.34) and outputs via RTSP streaming, HDMI display, BLE (iPad app), and CAN bus (golf cart control). + +## Build + +Cross-compilation is Docker-based (Ubuntu 20.04 + `arm-linux-gnueabihf-gcc`). **Docker Desktop must be running.** + +```bash +# Install Python dependencies (one-time) +pip install -r requirements.txt + +# Compile via web UI (recommended) +python web_serve.py # then open http://localhost:8080/ and click "Compile" + +# Compile via CLI +python build_and_serve.py # outputs build/kp_firmware_host_stream + build/host_stream.ini +``` + +`compile.sh` is the script executed inside the Docker container — it performs the actual `arm-linux-gnueabihf-gcc` invocation. The `Dockerfile` defines the build image. + +## Deploy + +```bash +# Via web UI: click "Deploy to KL630" (requires device IP configured) + +# Manual: telnet into device, then pull from HTTP server on host: +wget http://:8080/deploy.sh -O /tmp/deploy.sh && sh /tmp/deploy.sh +``` + +Device paths: +- Binary: `/mnt/flash/vienna/kp_firmware_host_stream` +- Config: `/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin/ini/host_stream.ini` +- Model (NEF): `/mnt/flash/plus/kp_firmware/kp_firmware_0/kp_firmware/bin/nef/` + +## Testing + +No automated test framework. Manual verification: +- **Web UI** (`web_serve.py`): live RTSP preview, terminal, compile/deploy +- **Mock server** (`tools/mock_server/server.py`): simulates device events without hardware +- **On-device**: `ps | grep firmware`, `cat /tmp/fw.log`, `curl http://localhost:8080/api/stdc/stats` + +## Architecture + +**Video pipeline:** +``` +IMX662 (1920×1080, DOL-HDR) + → KL630 ISP (YUV420) + → VMF (Vatics Media Framework) + ├─ Stream 0 (1920×1080) → H.264 encoder → RTSP + └─ Stream 1 (724×362) → NPU (STDC inference) + → Post-processing + → HDMI overlay / BLE / CAN events +``` + +**Threading model** (all threads in `kp_firmware.c`): +- **Image thread**: reads ISP output from SSM → enqueues into FifoQ +- **Inference thread**: FifoQ dispatcher → NPU (STDC model, ModelId=32769) +- **Results thread**: FifoQ dequeue → post-processing → event dispatch +- **Video/VOC thread**: H.264 encoding + HDMI draw-box overlay + +**Key source directories:** +- `src/host_stream/` — main firmware logic, BLE/UART (`bt_uart.c`), CAN bus (`can_bus.c`, `mcp2515.c`), event recording, FEC API, GPIO +- `src/app_flow/` — NPU inference orchestration (`stdc_inf_single_model.c`) +- `src/pre_post_proc/` — STDC post-processing: motion detection, class distribution, ROI analysis +- `include/common/` — shared data structures (KP_STRUCT, model types) +- `include/fake/` — stub headers for SDK components unavailable at compile time +- `ini/host_stream.ini` — runtime config template (model, ISP, FEC, RTSP, event thresholds) +- `tools/` — deploy scripts, mock server, Python control scripts + +**Communication interfaces:** +- **BLE**: JSON over UART at 115200 baud (`/dev/ttyS1`) via DX-BT24 module → iPad app +- **CAN**: Standard CAN frames at 250 kbps via MCP2515 SPI → golf cart +- **RTSP**: H.264 from VMF encoder +- **Web API**: Flask HTTP server (`web_serve.py`) exposes compile/deploy/stats endpoints + +## Code Conventions + +- Global variables: `g_` prefix (e.g., `g_dwVocEnable`, `g_stdc_seg_map`) +- Boolean flags: `_bl` suffix; uint32_t: `_dw` suffix; struct pointers: `pt` prefix +- Config driven by INI file (iniparser library); sections: `[output]`, `[event]`, `[isp]`, `[fec]` +- Return codes: `KP_SUCCESS = 0`, negative values for errors +- Thread safety: mutex `g_stdc_seg_mutex` guards the shared segmentation map +- Logging: stdout/stderr + `/tmp/fw.log` on device; set `verbose_log=1` in INI for per-frame output + +## Important Runtime Notes + +- **ISP one-time setup**: DOL-HDR requires running firmware with `--setup` flag on first boot +- **Host IP**: configured in `.web_config.json` or via web UI; device uses it for `wget` downloads +- **FEC mode**: fish-eye correction mode 0–5 in INI; Mode 4 recommended for ceiling-mount +- **Model switching**: change `ModelId`/`JobId` in INI and redeploy +- **Startup mode**: `demo_rtsp.sh`, `demo_hdmi.sh`, or `demo_rtsp_hdmi.sh` on device sets output mode diff --git a/GF_AI_Box_Test_Guide.docx b/GF_AI_Box_Test_Guide.docx new file mode 100644 index 0000000000000000000000000000000000000000..b987555e59cfdfe32698b28ec986082b36c597ba GIT binary patch literal 14888 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 OV7~UhfU*AT>Hh%KS+f2B literal 0 HcmV?d00001 diff --git a/GF_AI_Box_Test_Guide.md b/GF_AI_Box_Test_Guide.md new file mode 100644 index 0000000..78ef561 --- /dev/null +++ b/GF_AI_Box_Test_Guide.md @@ -0,0 +1,309 @@ +# 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 = 0 或 1 +test_ble collision level = 0 或 1 +test_ble alert <左level> <左type> <右level> <右type> +test_ble_all + +test_can violation level = 0 或 1 +test_can collision level = 0 或 1 +test_can alert level = 0 或 1 +test_can_all [觀察秒數] 預設 10 秒 + +test_buzzer grass +test_buzzer alert +test_buzzer collision +test_buzzer off +test_buzzer_all + +te \ No newline at end of file diff --git a/GF_AI_Box_Test_Guide.pdf b/GF_AI_Box_Test_Guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..588b823795173a8c99d53136c1d95c80c2ae0e97 GIT binary patch literal 210715 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%0De@dexqGY~k{dsec*K_o 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 z v#bZui;qJc>f5$Ka4|(j>3q}epinq_y@0R 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 VWycR-%L-O8N{%|J-;m0Z{|nn5pOyds literal 0 HcmV?d00001 diff --git a/src/host_stream/bt_uart.c b/src/host_stream/bt_uart.c index 57cb0f3..43c21d3 100644 --- a/src/host_stream/bt_uart.c +++ b/src/host_stream/bt_uart.c @@ -165,21 +165,73 @@ static void *bt_reader_thread(void *arg) char buf[512]; int pos = 0, depth = 0; int in_str = 0, escaped = 0; + int is_text = 0; /* 1 = accumulating plain-text (non-JSON) line */ while (s_running) { if (s_bt_fd < 0) { usleep(100000); continue; } fd_set fds; - struct timeval tv = {0, 500000}; /* 500 ms — lets us recheck s_running */ + struct timeval tv = {0, 200000}; /* 200 ms — flush plain-text if no newline */ FD_ZERO(&fds); FD_SET(s_bt_fd, &fds); - if (select(s_bt_fd + 1, &fds, NULL, NULL, &tv) <= 0) + if (select(s_bt_fd + 1, &fds, NULL, NULL, &tv) <= 0) { + /* timeout: flush any pending plain-text (no newline from app) */ + if (is_text && pos > 0) { + buf[pos] = '\0'; + printf("[BT RX TEXT timeout-flush] %s\n", buf); + if (s_extra_cmd_cb) s_extra_cmd_cb(buf); + pos = 0; is_text = 0; + } continue; + } unsigned char c; - if (read(s_bt_fd, &c, 1) != 1) continue; + int n = (int)read(s_bt_fd, &c, 1); + if (n != 1) { + /* read timeout / error: flush any pending plain-text (app sent no newline) */ + if (is_text && pos > 0) { + buf[pos] = '\0'; + printf("[BT RX TEXT flush] %s\n", buf); + if (s_extra_cmd_cb) s_extra_cmd_cb(buf); + pos = 0; is_text = 0; + } + continue; + } - /* JSON brace / string-literal state machine */ + printf("[BT RX BYTE] 0x%02X '%c'\n", c, (c >= 0x20 && c < 0x7F) ? c : '.'); + + /* ── Plain-text line mode ────────────────────────────────────────── + * Entered when the first non-whitespace character at depth==0 is not '{'. + * Used for test-mode commands (test_enter, test_exit, etc.). + * Routes directly to s_extra_cmd_cb, bypassing JSON parser and + * handshake so test commands work with any BLE app without pairing. + * ─────────────────────────────────────────────────────────────── */ + if (is_text) { + if (c == '\r' || c == '\n') { + if (pos > 0) { + buf[pos] = '\0'; + printf("[BT RX TEXT] %s\n", buf); + if (s_extra_cmd_cb) s_extra_cmd_cb(buf); + pos = 0; + } + is_text = 0; + } else if (pos < (int)sizeof(buf) - 1) { + buf[pos++] = (char)c; + } else { + printf("[BT RX] text overflow — discarding\n"); + pos = 0; is_text = 0; + } + continue; + } + + /* ── Detect start of plain-text line (not JSON) ───────────────── */ + if (depth == 0 && pos == 0 && c != '{' && c != '\r' && c != '\n' && c > ' ') { + is_text = 1; + buf[pos++] = (char)c; + continue; + } + + /* ── JSON brace / string-literal state machine ────────────────── */ if (!in_str) { if (c == '"') { in_str = 1; } else if (c == '{') { depth++; } @@ -206,7 +258,7 @@ static void *bt_reader_thread(void *arg) /* Discard overlong garbage */ if (pos >= (int)sizeof(buf) - 1) { printf("[BT RX] buffer overflow — discarding\n"); - pos = 0; depth = 0; in_str = 0; escaped = 0; + pos = 0; depth = 0; in_str = 0; escaped = 0; is_text = 0; } } return NULL; @@ -310,10 +362,13 @@ static void bt_set_module_name(int fd, const char *name) int n; snprintf(cmd, sizeof(cmd), "AT+NAME%s\r\n", name); write(fd, cmd, strlen(cmd)); - usleep(100000); /* 100 ms — module needs time to process */ + usleep(300000); /* 300 ms — module needs time to process (longer after baud switch) */ n = read(fd, buf, sizeof(buf) - 1); buf[n > 0 ? n : 0] = '\0'; printf("[BT] AT+NAME%s => %d byte(s): %s\n", name, n, n > 0 ? buf : "(none)"); + /* Note: some DX-BT24 firmware versions accept AT+NAME silently (no response). + * Success is confirmed by scanning BLE after AT+RESET — the broadcast name + * should reflect the new value. */ } /* ── One-time AT baud setup (call only when bt_at_probe = 1 in INI) ─────── */ @@ -329,12 +384,20 @@ static void bt_uart_probe_and_upgrade(const char *dev) n = read(fd, buf, sizeof(buf) - 1); buf[n > 0 ? n : 0] = '\0'; printf("[BT] AT probe @ 115200 => %d byte(s): %s\n", n, n > 0 ? buf : "(none)"); - close(fd); if (n > 0) { - printf("[BT] module already at 115200 — no upgrade needed\n"); + /* Module already at 115200 — still set the BT name in case it changed */ + printf("[BT] module already at 115200 — setting BT name\n"); + bt_set_module_name(fd, s_bt_name); + write(fd, "AT+RESET\r\n", 10); + usleep(100000); + read(fd, buf, sizeof(buf) - 1); + close(fd); + usleep(500000); /* 500 ms: wait for module to reboot */ + usleep(300000); /* 300 ms: let module stabilise */ return; } + close(fd); /* No response at 115200 — try 9600 */ fd = open_uart(dev, B9600, 0, 10); @@ -353,25 +416,30 @@ static void bt_uart_probe_and_upgrade(const char *dev) /* Module is at 9600 — send AT+BAUD7 to switch to 115200. * The module switches baud immediately after responding; close this fd - * before sending any further commands. */ + * then reopen at 115200 before sending any further AT commands. */ printf("[BT] upgrading module from 9600 to 115200\n"); memset(buf, 0, sizeof(buf)); write(fd, "AT+BAUD7\r\n", 10); usleep(100000); /* 100 ms: wait for ack + baud switch */ n = read(fd, buf, sizeof(buf) - 1); printf("[BT] AT+BAUD7 => %d byte(s): %s\n", n, n > 0 ? buf : "(none)"); - bt_set_module_name(fd, s_bt_name); /* set BT broadcast name before reset */ + close(fd); + usleep(300000); /* 300 ms: let module stabilise at 115200 */ + + /* Reopen at 115200 to send AT+NAME and AT+RESET at the correct baud */ + fd = open_uart(dev, B115200, 0, 10); + if (fd < 0) { + printf("[BT] WARNING: reopen at 115200 failed after BAUD7\n"); + return; + } + bt_set_module_name(fd, s_bt_name); /* set BT broadcast name */ write(fd, "AT+RESET\r\n", 10); usleep(100000); read(fd, buf, sizeof(buf) - 1); close(fd); usleep(500000); /* 500 ms: wait for module to reboot */ - close(fd); - usleep(300000); /* 300 ms: let module stabilise at 115200 */ + usleep(300000); /* 300 ms: let module stabilise */ - /* Reopen at 115200 and reset so the new baud persists across power cycles */ - fd = open_uart(dev, B115200, 0, 10); - if (fd < 0) return; printf("[BT] upgrade complete — set bt_at_probe = 0 in INI to skip AT on next boot\n"); } @@ -453,7 +521,25 @@ void bt_uart_send_json(const char *json) msg->next = NULL; if (!msg->json) { free(msg); return; } - pthread_mutex_lock(&s_q_mtx); + /* Use trylock with retry instead of blocking lock. + * The bt_writer_thread may have died while holding s_q_mtx (e.g. due to + * SIGPIPE / SIGSEGV on a bad UART write), leaving the mutex permanently + * locked. A blocking pthread_mutex_lock would then stall the bt_reader + * thread forever. We retry for up to 200 ms; if the lock is still + * unavailable after that, we drop the message and log a warning so the + * reader thread can continue handling subsequent commands. */ + int locked = 0; + for (int i = 0; i < 200; i++) { + if (pthread_mutex_trylock(&s_q_mtx) == 0) { locked = 1; break; } + usleep(1000); /* 1 ms per retry */ + } + if (!locked) { + printf("[BT] WARN: send_json: s_q_mtx stuck (200 ms timeout), dropping: %.48s\n", json); + free(msg->json); + free(msg); + return; + } + if (s_q_tail) { s_q_tail->next = msg; s_q_tail = msg; diff --git a/src/host_stream/buzzer.c b/src/host_stream/buzzer.c index 7cd0a72..9852f7b 100644 --- a/src/host_stream/buzzer.c +++ b/src/host_stream/buzzer.c @@ -132,12 +132,16 @@ int buzzer_init(void) void buzzer_set_pattern(buzzer_pattern_t pattern) { - pthread_mutex_lock(&s_mtx); - if (s_pattern != pattern) { - s_pattern = pattern; + /* Write s_pattern directly (volatile, 32-bit ARM = atomic word write). + * Use trylock so callers never block even if the buzzer thread holds + * s_mtx briefly between its own pthread_mutex_lock and cond_wait. + * The thread will pick up the new pattern on its next cycle even + * without the signal, because s_pattern is checked after every sleep. */ + s_pattern = pattern; + if (pthread_mutex_trylock(&s_mtx) == 0) { pthread_cond_signal(&s_cond); + pthread_mutex_unlock(&s_mtx); } - pthread_mutex_unlock(&s_mtx); } void buzzer_close(void) diff --git a/src/host_stream/event_recorder.c b/src/host_stream/event_recorder.c index dfe8c00..2a39230 100644 --- a/src/host_stream/event_recorder.c +++ b/src/host_stream/event_recorder.c @@ -665,7 +665,7 @@ static void handle_test_cmd(const char *raw) } else if (strncmp(cmd, "TEST_CAN_ALL", 12) == 0) { if (s_test_all_running) { test_reply("TEST_ERR ALL_ALREADY_RUNNING"); return; } int obs = TEST_OBS_DEFAULT_SEC; - sscanf(cmd + 12, " %d", &obs); + int lv = atoi(obs + 12); if (obs <= 0 || obs > 60) obs = TEST_OBS_DEFAULT_SEC; s_test_all_running = 1; pthread_t tid; pthread_create(&tid, NULL, test_can_all_thread, (void*)(intptr_t)obs); pthread_detach(tid); diff --git a/src/host_stream/kp_firmware.c b/src/host_stream/kp_firmware.c index 6729aa4..6678455 100644 --- a/src/host_stream/kp_firmware.c +++ b/src/host_stream/kp_firmware.c @@ -275,15 +275,43 @@ int loadConfig(HOST_STREAM_INIT_OPT_T* pHostStreamInit) } if (need_ini_save) { - FILE *fini = fopen(HOST_STREAM_CONFIG_PATH, "w"); - if (fini) { - iniparser_dump_ini(ini, fini); - fclose(fini); - printf("[BT] INI persisted: bt_name=%s device_id=%s bt_at_probe=%d\n", - bt_name, device_id, bt_at_probe ? 0 : bt_at_probe); - } else { - printf("[BT] WARNING: cannot write INI back (%s)\n", HOST_STREAM_CONFIG_PATH); + /* Use sed in-place replacement to update ONLY the specific keys we need to + * persist. This preserves the original file structure, all other sections, + * inline comments, and avoids iniparser_dump_ini stripping all comments and + * potentially producing an unreadable flat-format output on some iniparser + * versions. + * + * Pattern: match the key at the start of a line (with optional spaces around + * '='), replace the value part. The sed expression targets the [event] block + * values by their key names — safe because these keys only appear once. */ + char cmd[512]; + int rc = 0; + + /* device_id */ + snprintf(cmd, sizeof(cmd), + "sed -i 's|^device_id[[:space:]]*=.*|device_id = %s|' %s", + device_id, HOST_STREAM_CONFIG_PATH); + rc |= system(cmd); + + /* bt_name */ + snprintf(cmd, sizeof(cmd), + "sed -i 's|^bt_name[[:space:]]*=.*|bt_name = %s|' %s", + bt_name, HOST_STREAM_CONFIG_PATH); + rc |= system(cmd); + + /* bt_at_probe → 0 (only when we just ran the AT probe) */ + if (bt_at_probe) { + snprintf(cmd, sizeof(cmd), + "sed -i 's|^bt_at_probe[[:space:]]*=.*|bt_at_probe = 0|' %s", + HOST_STREAM_CONFIG_PATH); + rc |= system(cmd); } + + if (rc == 0) + printf("[BT] INI persisted via sed: bt_name=%s device_id=%s bt_at_probe=%d\n", + bt_name, device_id, bt_at_probe ? 0 : bt_at_probe); + else + printf("[BT] WARNING: sed INI update returned %d (%s)\n", rc, HOST_STREAM_CONFIG_PATH); } event_recorder_init(ev_up, ev_sd, ev_max_mb, ev_delay, ev_enable); @@ -440,6 +468,12 @@ void free_stream_init(HOST_STREAM_INIT_OPT_T* pHostStreamInit) { int main (int argc, char* argv[]) { + /* Force line-buffered stdout so printf output appears immediately even + * when piped to tee (e.g. ./firmware 2>&1 | tee /tmp/fw.log). + * Without this, the pipe triggers full-buffering and log appears in chunks. */ + setvbuf(stdout, NULL, _IOLBF, 0); + setvbuf(stderr, NULL, _IOLBF, 0); + uint32_t major, minor, patch, build; pthread_t thread_f = 0; diff --git a/src/host_stream/uclibc_compat.c b/src/host_stream/uclibc_compat.c new file mode 100644 index 0000000..5728a93 --- /dev/null +++ b/src/host_stream/uclibc_compat.c @@ -0,0 +1,72 @@ +/* + * uclibc_compat.c — uClibc 相容性 shim + * + * 問題:cross-compiler 使用 glibc 標頭,-D_GNU_SOURCE 加上 C99/C11 模式會讓 + * glibc stdio.h 把所有 scanf 系列呼叫改成 __isoc99_* 版本。 + * 但目標裝置 (KL630) 跑的是 uClibc 1.0.34,沒有這些符號, + * 導致執行時出現 "can't resolve symbol" 錯誤。 + * + * 解法:在 binary 本身提供全部 __isoc99_* scanf 系列符號, + * 轉呼叫 uClibc 本身有的底層函數。 + * 由於符號定義在 binary 裡,執行時不需要 uClibc 提供。 + */ + +#include +#include + +/* 移除 glibc 所有 scanf 相關 macro,避免遞迴展開 */ +#undef scanf +#undef fscanf +#undef sscanf +#undef vscanf +#undef vfscanf +#undef vsscanf + +/* ---- 非 v 系列 ---- */ + +int __isoc99_scanf(const char *fmt, ...) +{ + va_list ap; + int ret; + va_start(ap, fmt); + ret = vscanf(fmt, ap); + va_end(ap); + return ret; +} + +int __isoc99_fscanf(FILE *stream, const char *fmt, ...) +{ + va_list ap; + int ret; + va_start(ap, fmt); + ret = vfscanf(stream, fmt, ap); + va_end(ap); + return ret; +} + +int __isoc99_sscanf(const char *s, const char *fmt, ...) +{ + va_list ap; + int ret; + va_start(ap, fmt); + ret = vsscanf(s, fmt, ap); + va_end(ap); + return ret; +} + +/* ---- v 系列(直接轉呼叫 uClibc 底層) ---- */ + +int __isoc99_vscanf(const char *fmt, va_list ap) +{ + return vscanf(fmt, ap); +} + +int __isoc99_vfscanf(FILE *stream, const char *fmt, va_list ap) +{ + return vfscanf(stream, fmt, ap); +} + +int __isoc99_vsscanf(const char *s, const char *fmt, va_list ap) +{ + return vsscanf(s, fmt, ap); +}