dw.jang 25317282d7 refactor(firmware): 임상앱에서 프로브 DFU 와 펌웨어 버전 판정을 뺀다 — 펌웨어 갱신은 사용자 앱이 맡는다
사용자 결정(2026-10-13). 임상 폰 두 대 모두 사용자 앱이 같이 깔려 있고 거기서 양산 펌웨어
VB0FW0100 으로 올리므로, 임상앱이 번들 zip 과 버전 판정을 따로 들고 있을 이유가 없다.
실제로 임상 번들은 1.0.0+5 로 VBTFW0207 보다 낡아 "재설치"가 다운그레이드였고, 최소빌드
118 규칙은 0100 부터 다시 세는 양산 펌웨어에 "구버전" 거짓 경고를 낼 참이었다.

뺀 것
- firmware/ 패키지 전부(DfuManager·DfuNus·DfuNusConnection·DfuBleScanner·FirmwarePackage·
  FirmwareUpdateView)와 assets/dfu_application_1.0.0+5.zip, mcumgr-ble 의존성.
- AppScreen.FIRMWARE_UPDATE 라우트·뒤로가기 매핑, 홈 화면 "펌웨어 업데이트" 버튼(여백만 남김).
- BleManager 의 MIN_FIRMWARE_BUILD · parseFirmwareBuild · parseFwSemver · isFirmwareOutdated ·
  isFirmwareUpdateAvailable · currentBluetoothDevice(DFU 전용이었다).
- 배너의 주황(구버전)·파랑(새 펌웨어) 분기와 그 문자열. 빨강 "기기 응답 없음"은 생존 신호라 남긴다.

남긴 것
- 펌웨어 버전 표시(설정)와 세션 JSON·CSV 의 firmware_version 기록 — 어떤 펌웨어로 잰 세션인지는
  계속 추적된다.
- ClinicalEvent.FIRMWARE_OUTDATED 카테고리는 스키마 호환을 위해 두되, 올리는 곳은 없다.

검증: assembleDemoDebug · testDemoDebugUnitTest 통과. 수신 CRC 가드(사용자 앱 a0a61773)는 별건으로
남아 있다.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 10:21:49 +09:00

VesiscanClinicalAndroid

VesiScan 병원 임상 측정 앱 (Android · Kotlin · Compose). 정해진 프로토콜로 환자 데이터를 받아 폰에 저장하고 labdb 로 올리는 사내·병원 임상 전용 앱이다. 일반 사용자 앱이 아니다.

  • applicationId com.medithings.vesiscan.demo · 플레이버 demo(임상) / dev
  • 빌드 · 설치: ./gradlew :app:assembleDemoDebug → adb install -r app/build/outputs/apk/demo/debug/app-demo-debug.apk
  • 단위시험: ./gradlew :app:testDemoDebugUnitTest
  • local.properties 는 커밋하지 않는다(local.properties.template 참조)

어디서 왔나

구저장소 medithings-rnd/VesiscanBasicAndroid 의 demo-final 브랜치를 히스토리째 (2026-03-09 초기 커밋부터) 떼어 2026-10-01 에 이 저장소의 main 으로 옮겼다. 그 브랜치는 구저장소에 보관만 하고 더 쓰지 않는다. 일반 사용자 앱은 vesiscan_pre_product/vesiscan_android_user.

화면 흐름 (병원 임상)

연결 → labdb 등록 확인 → 환자명 · 자세 → 그 자세의 정렬(치골 위 0~4cm 탐색 → N cm 확인 → N cm 에서 바로 좌우) → 마킹·떼기·크래들 → 재부착 확인 → 채움 정도마다 측정 → 다음 자세는 정렬부터 다시. 자세한 것은 docs/CLINICAL_ALGORITHM.md §3.6, labdb 적재 모양은 docs/LABDB_DATATYPES.md (600 측정 · 601 정렬).

데이터

폰 Downloads/VesiScan_Hospital/{날짜}_{환자}/ 에 조합별 CSV + IMU, align_{자세}/ 에 그 자세의 정렬 원시·요약(2026-10-01 이전은 align/). labdb 업로드 마커(*.labdb.json, align_*/.labdb_align.json)로 재시도 대상을 가린다.

S
Description
No description provided
Readme 21 MiB
Languages
Kotlin 97%
Python 3%