docs: BLE 명령어 포맷, 자동측정 루프, LED 모드, 향후 과제 업데이트
- BLE 명령어 포맷: 공백 필요 패턴 (buildCommandASCII) 문서화 - 자동측정: IMU 1초 × 9 + 6ch 측정 10초 루프 설명 - LED 모드: state 코드 + Placement 연동 흐름 - 기기 정보: mid? → rid: 자동 조회 설명 - 향후 과제: 17개 완료 항목 + 5개 예정 항목 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 작성일: 2026-04-23
|
## 작성일: 2026-04-23
|
||||||
## 작성자: dwjang
|
## 작성자: dwjang
|
||||||
## 마지막 업데이트: 2026-04-23
|
## 마지막 업데이트: 2026-04-24
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -888,21 +888,120 @@ RX: "raa all-ch complete [8B]"
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 14. 향후 과제
|
# 14. BLE 명령어 포맷 (펌웨어 특이사항)
|
||||||
|
|
||||||
|
이 기기(VBTFW0111)는 파라미터 없는 명령어에도 **`cmd? `(물음표+공백)** 포맷이 필요합니다.
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
// ❌ 안 됨 (rxs: cmd_not_supported 응답)
|
||||||
|
CRC16.buildCommand("mid") // → "mid?" + CRC
|
||||||
|
|
||||||
|
// ✅ 됨
|
||||||
|
CRC16.buildCommandASCII("mid", " ") // → "mid? " + CRC
|
||||||
|
```
|
||||||
|
|
||||||
|
### 명령어별 포맷
|
||||||
|
|
||||||
|
| 명령 | 함수 | 포맷 | 응답 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| `maa?` | `sendChannelsOnly()` | buildCommand("maa", [0]) | reb:×6 → raa: |
|
||||||
|
| `mbb? ` | `sendFullMeasurement()` | buildCommandASCII("mbb", " ") | rbb: → reb:×6 → raa: |
|
||||||
|
| `msp? ` | `sendImuQuery()` | buildCommandASCII("msp", " ") | rsp: (18B, accel+gyro) |
|
||||||
|
| `mid? ` | `sendDeviceInfoQuery()` | buildCommandASCII("mid", " ") | rid: (HW/SN/FW) |
|
||||||
|
| `mls?` + state | `sendLedMode(state)` | buildCommand("mls", [state]) | rls: |
|
||||||
|
| `msn?` + 0 | `sendBatteryQuery()` | buildCommand("msn", [0]) | rsn: (mV) |
|
||||||
|
| `mpa?` + freq/cyc | `sendPiezoPowerOn()` | buildCommand("mpa", [...]) | rpa: |
|
||||||
|
|
||||||
|
### 기기 정보 (연결 시 자동 조회)
|
||||||
|
|
||||||
|
```
|
||||||
|
연결 직후 mid? 전송 → rid: 응답:
|
||||||
|
DEVICE_INFO VBTHW0100 VBT26040001 VBTFW0111
|
||||||
|
├ HW Version ├ Serial Number └ FW Version
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 15. 자동 측정 루프 (IMU + 6ch)
|
||||||
|
|
||||||
|
### 동작 방식
|
||||||
|
|
||||||
|
```
|
||||||
|
자동측정 시작 (Spot 롱프레스)
|
||||||
|
↓
|
||||||
|
1초차: msp? (IMU) → rsp: accel(x,y,z) + gyro(x,y,z)
|
||||||
|
2초차: msp? (IMU)
|
||||||
|
...
|
||||||
|
9초차: msp? (IMU)
|
||||||
|
10초차: maa? (6ch 측정) → reb:×6 → raa: → BV 파이프라인
|
||||||
|
11초차: msp? (IMU)
|
||||||
|
...
|
||||||
|
20초차: maa? (6ch 측정)
|
||||||
|
... 반복 (Stop 누를 때까지)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 병렬 통신
|
||||||
|
|
||||||
|
배터리 쿼리(msn, 5초)와 IMU/측정이 동시에 진행됩니다:
|
||||||
|
|
||||||
|
```
|
||||||
|
13:52:09.549 TX msp IMU query [7B]
|
||||||
|
13:52:09.607 TX msn battery query [8B] ← 거의 동시
|
||||||
|
13:52:09.707 RX rsp IMU data [18B]
|
||||||
|
13:52:09.707 RX rsn battery=4128mV [8B] ← 둘 다 응답 옴
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 16. LED 모드 (Placement Guide 연동)
|
||||||
|
|
||||||
|
### LED 상태 코드
|
||||||
|
|
||||||
|
| state | 이름 | 용도 |
|
||||||
|
|-------|------|------|
|
||||||
|
| 0 | OFF | 기본 |
|
||||||
|
| 4 | DETACH_WARNING | 미부착 시 |
|
||||||
|
| 5 | ALIGN_SEARCHING | 정렬 모드 탐지 중 |
|
||||||
|
| 6 | ALIGN_COMPLETE | 정렬 모드 탐지 완료 |
|
||||||
|
| 7 | ERROR | 오류 발생 |
|
||||||
|
|
||||||
|
### Placement Guide 연동
|
||||||
|
|
||||||
|
```
|
||||||
|
Start Scanning → mls?(5) ALIGN_SEARCHING (LED 탐지 모드)
|
||||||
|
↓
|
||||||
|
3초 간격 스캔 중...
|
||||||
|
↓
|
||||||
|
CV PASS → mls?(6) ALIGN_COMPLETE (LED 완료)
|
||||||
|
↓
|
||||||
|
Stop Scanning → mls?(0) OFF
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 17. 향후 과제
|
||||||
|
|
||||||
| 항목 | 상태 | 비고 |
|
| 항목 | 상태 | 비고 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
| BLE 6채널 수신 | ✅ 완료 | |
|
| BLE 6채널 수신 | ✅ 완료 | |
|
||||||
| Low-echo Detection (prominence) | ✅ 완료 | lowEchoAmp=1150 |
|
| Low-echo Detection (prominence + edge penalty) | ✅ 완료 | VALLEY_STOP=50, EDGE_DECAY=0.12 |
|
||||||
| Frustum BV 추정 (6ch) | ✅ 완료 | center 4ch + lateral lr_ratio |
|
| Frustum BV 추정 (6ch) | ✅ 완료 | center 4ch + lateral lr_ratio |
|
||||||
| lr_ratio 동적 계산 | ✅ 완료 | CH4/CH5 타원 추정 |
|
| lr_ratio 동적 계산 | ✅ 완료 | CH4/CH5 타원 추정 |
|
||||||
| UrinAI Gate | ✅ 완료 | |
|
| Placement Guide (CV threshold) | ✅ 완료 | CV≤0.15 + LR dev≤0.15 |
|
||||||
| Placement Guide | ✅ 완료 | 방향 가이드 수정 완료 |
|
|
||||||
| 기기 자동 감지 (V0/V1/V2) | ✅ 완료 | Snell's law 각도 |
|
| 기기 자동 감지 (V0/V1/V2) | ✅ 완료 | Snell's law 각도 |
|
||||||
| Big Endian 자동 감지 | ✅ 완료 | |
|
| Big Endian 자동 감지 | ✅ 완료 | |
|
||||||
| BLE 자동 reconnect | ✅ 완료 | 3s→5s→10s, 5회 |
|
| BLE 자동 reconnect | ✅ 완료 | 무한 3초 재시도 + watchdog |
|
||||||
| 배터리 폴링 5초 | ✅ 완료 | keep-alive |
|
| BLE 디버그 로거 | ✅ 완료 | TX/RX 파싱 + Downloads 내보내기 |
|
||||||
|
| ADC 로그 저장 | ✅ 완료 | 6ch raw ADC → JSONL |
|
||||||
|
| 기기 정보 조회 (mid?) | ✅ 완료 | 연결 시 자동 (HW/SN/FW) |
|
||||||
|
| LED 모드 (mls?) | ✅ 완료 | Placement 연동 (5→6→0) |
|
||||||
|
| IMU 쿼리 (msp?) | ✅ 완료 | 1초 간격, 자동측정 루프 |
|
||||||
|
| 자동측정 (IMU 1s + 측정 10s) | ✅ 완료 | |
|
||||||
| iOS 동기화 (UI) | ✅ 완료 | 알림, Quick Save, 일지 |
|
| iOS 동기화 (UI) | ✅ 완료 | 알림, Quick Save, 일지 |
|
||||||
|
| 배터리 폴링 5초 | ✅ 완료 | keep-alive |
|
||||||
|
| Python ↔ Android 1:1 검증 | ✅ 완료 | 전수 상수 비교 |
|
||||||
| 금요일 APK 배포 | 🔜 예정 | Gitea 릴리즈 |
|
| 금요일 APK 배포 | 🔜 예정 | Gitea 릴리즈 |
|
||||||
| Adaptive TGC | 🔜 예정 | Python에서 확인 필요 |
|
| mbb 전체측정 전환 | 🔜 예정 | rbb: 헤더 파싱 검증 후 |
|
||||||
|
| Adaptive TGC | 🔜 예정 | 원은지님 코드 확인 필요 |
|
||||||
|
| Placement Score 캘리브레이션 | 🔜 예정 | 팬텀 실측 기반 CV threshold 조정 |
|
||||||
| 인체 임상 검증 | 🔜 예정 | 상수 재조정 |
|
| 인체 임상 검증 | 🔜 예정 | 상수 재조정 |
|
||||||
|
|||||||
Reference in New Issue
Block a user