Files
VesiScan-Basic_Zephyr/plan/TODO.md
T

119 lines
4.0 KiB
Markdown

# TODO
현재 프로젝트에서 다음에 이어서 작업할 항목들을 정리한다.
## 현재 상태
- BLE 보안은 아직 개발 모드 기준이다.
- `CONFIG_BT_SMP=n`: [prj.conf](/C:/jhChun/blinky/prj.conf:42)
- `BLE_DEV_MODE = 1`: [src/ble/ble_service.h](/C:/jhChun/blinky/src/ble/ble_service.h:18)
- `Dev mode: no security / Production mode: bonding + passkey (TODO)`: [src/ble/ble_service.c](/C:/jhChun/blinky/src/ble/ble_service.c:10)
- 플래시 저장소는 아직 미구현이다.
- `Phase 3: FDS/NVS (TODO)`: [src/main.c](/C:/jhChun/blinky/src/main.c:328)
- DFU는 아직 미구현이다.
- `CONFIG_BOOTLOADER_MCUBOOT` 미설정: [build/blinky/zephyr/.config](/C:/jhChun/blinky/build/blinky/zephyr/.config:94)
- 파티션도 앱 단일 영역만 사용 중: [build/partitions.yml](/C:/jhChun/blinky/build/partitions.yml:1)
- `mcf?`는 현재 고정값 반환만 구현되어 있다.
- `freq=1`, `cycles=7`, `avg=10`, `delay=10`, `samples=100`: [src/parser.c](/C:/jhChun/blinky/src/parser.c:38)
- 실제 측정도 현재 위 고정값을 사용한다.
- `avg=10`: [src/parser.c](/C:/jhChun/blinky/src/parser.c:28)
- `cycles=7`, `delay=10us`: [src/drivers/piezo/piezo.h](/C:/jhChun/blinky/src/drivers/piezo/piezo.h:12)
- `samples=100`: [src/drivers/echo_adc/echo_adc.h](/C:/jhChun/blinky/src/drivers/echo_adc/echo_adc.h:11)
## 1. BLE 보안
목표:
- LESC
- MITM
- Fixed Passkey
- Bonding
해야 할 일:
- `CONFIG_BT_SMP=y`
- `CONFIG_BT_FIXED_PASSKEY=y`
- `CONFIG_BT_BONDABLE=y`
- `CONFIG_BT_SMP_ENFORCE_MITM=y`
- 필요 시 `CONFIG_BT_SMP_SC_ONLY=y` 또는 `CONFIG_BT_SMP_SC_PAIR_ONLY=y`
- `bt_conn_auth_cb` 등록
- 고정 패스키를 `m_static_passkey`와 연결
- 기본값 선언: [src/main.h](/C:/jhChun/blinky/src/main.h:21)
- RAM 보관: [src/main.c](/C:/jhChun/blinky/src/main.c:56)
- 본딩 키 복원을 위해 `BT_SETTINGS + SETTINGS + NVS` 연동
주의:
- Bonding은 저장소 없이 켜도 부팅 후 유지되지 않는다.
- 보안 설정을 올리면 앱 테스트 절차도 함께 바뀐다.
## 2. 플래시 저장소 (NVS)
목표:
- 예전 FDS 역할을 Zephyr/NCS 방식으로 대체
- 측정 파라미터, passkey, 필요 시 serial/HW info 저장
권장 방향:
- FDS를 다시 붙이기보다 `NVS` 사용
- Bluetooth bonding 키는 `BT_SETTINGS`가 저장하고
- 앱 파라미터는 별도 `NVS` 또는 `settings/NVS backend`로 저장
우선 저장할 후보:
- piezo config
- `freq`
- `cycles`
- `avg`
- `delay_us`
- `samples`
- passkey
- 필요 시 `SERIAL_NO`, `HW_NO`
해야 할 일:
- `piezo_config` 구조체 추가
- 부팅 시 기본값 로드 후 NVS 값이 있으면 덮어쓰기
- `mcf?`는 구조체 읽기
- `mcs?`는 구조체 갱신 + 저장
- 유효 범위 체크 추가
현재 메모:
- `mcf?`는 아직 고정 응답만 구현됨: [src/parser.c](/C:/jhChun/blinky/src/parser.c:442)
- `mcs?`는 아직 없음: [src/parser.c](/C:/jhChun/blinky/src/parser.c:503)
## 3. DFU
목표:
- BLE 기반 펌웨어 업데이트 지원
권장 방향:
- `MCUboot + MCUmgr SMP over BLE`
해야 할 일:
- `CONFIG_BOOTLOADER_MCUBOOT=y`
- `CONFIG_MCUMGR=y`
- `CONFIG_MCUMGR_TRANSPORT_BT=y`
- `CONFIG_IMG_MANAGER=y`
- 필요 시 `CONFIG_MCUMGR_GRP_IMG=y`
- 파티션 구성 추가
- `slot0`
- `slot1`
- 필요 시 `scratch` 또는 overwrite-only 전략
- 광고/서비스에 SMP transport가 정상 노출되는지 확인
주의:
- 지금 프로젝트는 NUS만 사용 중이라 일반적인 OTA DFU는 바로 안 된다.
- DFU를 넣으면 파티션 구조와 빌드 방식이 함께 바뀐다.
## 4. 권장 작업 순서
1. `piezo_config` 구조체 도입
2. `mcf?`를 고정값이 아닌 실제 구조체 반환으로 변경
3. `mcs?` 구현
4. `NVS` 저장/복원 구현
5. BLE 보안 적용
6. Bonding 저장 확인
7. 마지막에 DFU 적용
## 5. 체크 포인트
- `mcf?` 값과 실제 측정값이 항상 같아야 함
- `mcs?`로 바꾼 값이 재부팅 후에도 유지되어야 함
- 보안 적용 후 앱에서 pairing/passkey 흐름 확인
- DFU 적용 후 기존 NUS 기능과 충돌 없는지 확인