13ba88b72b5a4afa0ae283ce6385a62cb05765d3
증상 (사용자 보고):
기기 fw = VBTFW0200 · 번들 DFU = 1.0.0+5 · 앱이 "새 펌웨어 사용 가능" 배너 노출.
실제로는 기기 (2.0.0) > 번들 (1.0.0) 이라 업데이트 불필요.
원인:
기존 isFirmwareUpdateAvailable 은 단순 String contains 비교 (`!fw.contains(bundled)`)
→ "VBTFW0200" 은 "1.0.0+5" 를 포함 안 하므로 무조건 true. 방향성 없음.
FW 팀 스펙 (2026-08-05 슬라이드 · Firmware 식별 코드):
A. 공식 펌웨어 버전: VBTFW MMNN → M.0.N (major=MM, patch=NN, minor 항상 0)
· VBTFW0100 = 1.0.0
· VBTFW0200 = 2.0.0
· VBTFW0201 = 2.0.1
B. MCUboot/DFU 이미지: major.minor.patch+build (build 는 major/minor/patch 비교 무관)
C. 두 포맷 1:1 매칭 관리 (VBTFW0100 = 1.0.0+0)
수정:
BleManager.parseFwSemver(raw): Triple<Int, Int, Int>?
- VBTFW / VB0FW / VBFW 정규식 (`VB\d?FW(\d{2})(\d{2})`) → (M, 0, N)
- MCUboot 정규식 (`(\d+)\.(\d+)\.(\d+)`) → (major, minor, patch)
BleManager.compareSemver(a, b): Int (튜플 3단계 비교)
isFirmwareUpdateAvailable: bundled 튜플 > device 튜플 일 때만 true
→ 기기가 이미 최신이거나 동일하면 배너 미노출
검증 케이스:
device VBTFW0200 · bundled 1.0.0+5 → (1,0,0) < (2,0,0) → false (no banner)
device VBTFW0100 · bundled 2.0.0+0 → (2,0,0) > (1,0,0) → true (banner)
device VBTFW0200 · bundled 2.0.1+0 → (2,0,1) > (2,0,0) → true (banner)
빌드 SUCCESSFUL 37s.
Description
No description provided
Languages
Kotlin
97.1%
Python
2.9%