# 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 기능과 충돌 없는지 확인