Commit Graph

9 Commits

Author SHA1 Message Date
dw.jang 748ccbd796 revert(bv): demo-final default → METHOD_D 로 원복 (250ml 재현)
D-P (legacy bcbc7b4) 로직 진단:
  · Halir-Flusser ellipse fit · adaptive_large_bladder_relax · b_si_floor 미탑재.
  · 300ml phantom 시연 값 = 130~150ml (원리상 큰 방광 처리 불가).
  · 사용자 관찰 250ml 는 METHOD_D (Halir + adaptive) 의 결과 · D-P 로는 재현 불가.

조치:
  · default = METHOD_D 복귀. 250ml 스케일 즉시 회복.
  · D-P 는 dev-mode BV chip 에 "D-P" 로 남김 (phantom 소볼륨 실험 · 로직 대조용).
  · Legacy fork 파일 (PiezoBVEstimatorLegacyDP.kt) 유지 · 삭제 안 함.
  · DPS 1.968 은 유지 (사용자 별도 지시).

빌드: BUILD SUCCESSFUL 2s.
2026-08-11 15:14:27 +09:00
dw.jang fd7b5dad53 feat(bv): METHOD_D_P legacy fork · phantom 시연용 (bcbc7b4 시점 로직 격리)
배경:
  · 8/4 default 스위치 (bvMethod V41 → METHOD_D) 순간 · 7/20 도입돼 있던
    Python parity fix 4종 (Halir-Flusser ellipse fit · adaptive_large_bladder_relax ·
    b_si_floor · subsample refined wall) 이 처음 활성화됨.
  · 사용자 관찰 "이전 시연 대비 volume 값이 조금 작음" 은 이 fix 들의 정확도
    개선 (실제값에 가까워짐) 효과. 인체엔 좋으나 phantom (구 형태 방광 모형)
    시연 재현성이 손상됨.

해결:
  · BvMethod 에 METHOD_D_P 추가 (P = phantom · 구 가정) · demo-final default 로.
  · bcbc7b4 (2026-07-02) 시점 PiezoBVEstimator 를 legacydp 서브패키지에 격리.
  · BVResult · WallWithSpan · GreenZoneConstants 등 최상위 shared 심볼은 최신 참조
    (BVResult 신규 optional 필드는 default 로 자동 채워짐).
  · PiezoHW 는 legacy 파일 내부에 격리 (bcbc7b4 시점 V0/V1/V2 preset · 최신
    R100/R200/R300 preset 변경과 무관하게 phantom 재현성 유지).

파일:
  · [신규] managers/legacydp/PiezoBVEstimatorLegacyDP.kt (821 lines)
    - bcbc7b4 원본 855 lines 에서 BVResult 정의 (40 lines) 제거 · import 로 대체
    - package = com.medithings.vesiscan.managers.legacydp
  · [수정] managers/GreenZoneConstants.kt — BvMethod 확장 · demo default 변경
  · [수정] ui/views/monitoring/PiezoMonitoringView.kt — dispatcher 분기
    (WallWithSpan → Pair<Int,Int> 변환 · legacy estimateBladderVolume6ch 호출)

효과:
  · demo-final default = METHOD_D_P → phantom 값 재현
  · 인체용/개발용은 dev-mode 토글로 METHOD_D 선택 가능 (기존 로직 무손상)
  · cloud-mvp 브랜치의 METHOD_D 개선사항은 계속 원본 코드로 흘러올 수 있음
    (legacy 는 완전 격리 · touch 안 됨).

빌드: BUILD SUCCESSFUL 8s (첫 시도 통과).
2026-08-11 14:41:48 +09:00
dw.jang 8cab1d084c change(bv): demo-final default 조합 재조정 · detection=C + bv=METHOD_D
사용자 요청 (2026-08-10 재조정):
  · detectionMethod: METHOD_C (유지 · walls 검출 phantom-검증 파이프라인)
  · bvMethod: V41 → METHOD_D  (BV 계산은 Python parity 적용)

이유:
  - walls 검출은 기존 방식 (Method C) 이 phantom QC 에서 안정
  - BV 계산은 Method D 로 · estimateBv(walls) wrapper 가 lumen_inset(0.15)
    + adaptive_large_bladder_relax + b_si_floor 자동 적용 (Python 1:1)
  - PiezoMonitoringView 의 useMethodDBv 분기가 Method C 검출된 walls 를
    Method D 방식으로 BV 재계산 (기존에 이미 지원)

cloud-mvp 는 detection/bv 둘 다 METHOD_D 유지.
2026-08-10 18:13:37 +09:00
dw.jang 5d64b69282 change(bv): demo-final ROLLBACK · default detectionMethod/bvMethod 8/4 이전으로 복귀
사용자 요청 (2026-08-10): demo-final 버전만 8/4 이전 default 로 롤백.
  · detectionMethod: METHOD_D → METHOD_C (2026-08-04 0184c6d 이식 롤백)
  · bvMethod: METHOD_D → V41         (2026-08-04 f3b15ce 이식 롤백)

METHOD_D 는 dev panel 에서 여전히 수동 선택 가능. cloud-mvp 브랜치는 METHOD_D 유지.

2026-08-04 변경 이유 (Method D 로의 통일 · 그래프 walls vs BV 값 파이프라인 일치)
는 유효하지만 · demo 버전은 시연/안정 검증용으로 기존 (C · V41) 회귀 확인이
필요해 롤백.
2026-08-10 17:50:06 +09:00
dw.jang 0184c6d694 change(detect): default detectionMethod METHOD_C → METHOD_D (cloud-mvp 1896e9b 이식) 2026-08-04 12:08:25 +09:00
dw.jang f3b15cef63 change(bv): default bvMethod V41 → METHOD_D (cloud-mvp b49170e 이식) 2026-08-04 11:58:03 +09:00
dw.jang 097d086bce tune(walking): walkingStartHoldMs 6000 → 4000ms — UX 반응성
- 걷기 시작 후 4초에 chip "걷는중" 전이 (기존 6초)
- 이중 안전장치 유지:
  * walkingStartWmean=10dps 로 stand-up motion (5~10dps) 이미 필터
  * walkingMinPitchDeg=45° 로 upright 자세만 candidate
- Stand-up 자체가 4초 이내 대개 안정화되므로 false positive 여지 낮음.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-03 11:19:32 +09:00
dw.jang 506d50d2c6 feat(posture): idle 폴링을 msp → mim 로 전환 — 펌웨어 신규 IMU FIFO 명령 활용
## 배경
6/30 msp 전환으로 piezo 무음은 확보했지만, 1샘플/폴링 이라 WalkingDetector
1.5초 window 를 채우려면 200ms 주기 폴링 필요 → BLE 왕복 5배 트래픽 +
나이퀴스트 aliasing 위험 → walking 감지 실제로 어려움.

7/03 펌웨어 신규 명령 `mim?` 배포:
- 요청: mim? [tag 4B][space 1B][crc 2B] = 7B
- 응답: rim: [tag 4B][total 2B][sample 12B × 15][crc 2B] = 188B
- 15 sample (300ms 시계열) 무음 반환
- 응답 프레임은 mtb? 의 rim: 와 동일 스키마 → 파서 재사용

## 변경
- BleManager.sendImuFifoQuery() 추가 — mim? 명령 전송
  * imuCollector.reset() 선행 (frame buffer 초기화)
  * 기존 sendImuQuery(msp) 는 유지 (watchdog heartbeat 계속 사용)
  * sendRaw 디버그 라벨에 "mim" 추가
- PiezoMonitoringView idle 폴러 sendImuQuery → sendImuFifoQuery
- GreenZoneConstants.posturePollIntervalMs 200 → 1000ms
  * mim 1회에 300ms 시계열 얻으므로 1초 주기로도 walking window 충분히 채움
  * BLE 왕복 5배 감소 → 배터리 유리

## 결과 (예상)
- Idle 도넛 화면에서 walking 감지 정상 작동
- BLE 트래픽·전력 감소
- 응답 파서 (imuCollector.parseRim + onComplete) 그대로 재사용, 로직 무변경

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-03 10:50:58 +09:00
dw.jang bcbc7b440c refactor: 데모 브랜치 패키지 통일 com.example.medilightv2android → com.medithings.vesiscan
사용자앱 (feature/tab-navigation) 과 패키지 이름 일치. namespace + applicationId
둘 다 com.medithings.vesiscan 로 변경 (기존 데모 앱은 재설치 필요).

## 변경 범위
- Kotlin 148 파일: package + import 문 (714 occurrences)
- 디렉토리 이동: com/example/medilightv2android → com/medithings/vesiscan
  (main, test, androidTest 각각)
- app/build.gradle.kts: namespace, applicationId
- docs/FLAVOR_DEMO_STABLE.md: 참조 갱신
- V41DetectorCH4Test: BvDispatchResult.methodChosen → method (dto field name fix)

## 주의
- applicationId 가 바뀌므로 기존 데모 앱 (com.example.medilightv2android.demo) 은
  Android 관점에서 다른 앱으로 취급 — 재설치 시 PIN/설정 초기화됨.
- Fresh install 권장. 기존 앱 (com.example...) 은 별도로 uninstall 필요.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-02 14:30:43 +09:00