提交图
98 次代码提交
作者 SHA1 备注 提交日期
Guoguo 06e8c9831c fix: skip fitting/run_state monitoring in normal mode (mode=0) 2026-07-01 05:29:22 -07:00
Guoguo 515153f134 feat: auto-scan 3-phase state machine with proper PD collection timing
- Phase 1 (waiting_fit): after sending control=0x01, wait for fitting=1
- Phase 2 (collecting): once fitting=1 AND run_state=1, start PD accumulation
- Phase 3 (done): run_state 1→0, calculate averages, auto-send treatment
- Check start-collecting in BOTH fitting and run_state handlers
- fitting=0 + run_state 1→0 = fitting failure, prompt retry
- Timeout 3 minutes (was 30s), auto-start treatment on completion
2026-06-29 05:36:12 -07:00
Guoguo b7b76a675d chore: remove dead regions param from wear-check 2026-06-29 05:29:51 -07:00
Guoguo f85925ecd1 fix: correct page flow — wear-check before mode select, smart mode to auto-scan
- wear-check onNext → treatment-setup (was auto-scan)
- treatment-setup smart mode → auto-scan (was wear-check)
Flow: index → wear-check → treatment-setup → normal: treat / smart: auto-scan → treat
2026-06-29 05:28:05 -07:00
Guoguo 74591d4da2 fix: audit fixes — dedupe run_state logs, stop device on scan exit
- Only log run_state when value changes (avoid flooding console)
- Send stopTreatment on unload if scan is in progress (stop device LEDs)
2026-06-29 04:02:16 -07:00
Guoguo f5cd882986 feat: redesign auto-scan as detection page with manual trigger and PD averaging
- Add "start detection" button (not auto-start on page load)
- Send control=0x01 only when user clicks button
- Accumulate PD values across all ADC frames during scan
- Monitor run_state: wait for 0x01→0x00 transition as completion signal
- Calculate PD averages on completion
- Send treatment command (control=0x02) on "next" with calculated params
- TODO: plug in full NR diagnosis algorithm when PD→region mapping confirmed
2026-06-29 03:58:40 -07:00
Guoguo 2995b0ee02 fix: smart mode goes to wear-check first instead of directly to auto-scan 2026-06-29 03:57:31 -07:00
Guoguo f9141b25d0 refactor: wear-check is now pure manual confirm, no BLE commands
Remove all fitting detection logic (setParams, fitting event listener,
timeout). User manually confirms wearing, then proceeds to detection
page. No BLE commands sent on this page.
2026-06-29 03:57:05 -07:00
Guoguo 52f3ef971b fix: auto-scan onNext goes directly to treating instead of looping back to setup 2026-06-24 19:38:16 -07:00
Guoguo c5afce59d5 fix: restore fitting check control to 0x01 (scan/detect mode) 2026-06-24 18:55:27 -07:00
Guoguo 5cd3dc1e5d fix: fitting check uses control=IDLE to avoid triggering scan sequence 2026-06-24 18:49:17 -07:00
Guoguo bf83adcd28 chore: bump version to v0.1.7 2026-06-24 05:21:19 -07:00
Guoguo ec5b8584ec refactor: remove 17-byte FFE4 and 33-byte FFE1 legacy compat code
- Remove parseVendorStatus 17-byte branch (FFE4 is now 19 bytes)
- Remove parseVendorStatus 33-byte branch (FFE1 is now 34 bytes)
- Remove buildVendorCommand33 deprecated alias
- Remove fitting/run_state !== -1 guards in connection.js
- Update commands.js to use buildVendorCommand directly
2026-06-24 05:13:36 -07:00
Guoguo 29975c6043 fix: restore fitting timeout to 10s for hardware detection delay 2026-06-24 04:12:50 -07:00
Guoguo ca1b9b4377 debug: log FFE1 command hex on every writeRawCommand 2026-06-24 04:10:58 -07:00
Guoguo a5dacef4a7 debug: log stopTreatment success/failure on stop button 2026-06-24 03:53:31 -07:00
Guoguo 229e5f4ed5 fix: default gain to 0 instead of brightness per protocol examples 2026-06-24 03:16:19 -07:00
Guoguo da307e32c8 fix: reduce fitting timeout from 10s to 3s (firmware not yet reporting fitting) 2026-06-24 03:11:32 -07:00
Guoguo c6d958d2ea debug: log FFE4 frame length and type on receive 2026-06-24 02:31:23 -07:00
Guoguo 4c674e5c23 fix: address audit findings — fitting trigger, race guards, state conflicts
wear-check:
- Send weak pulse light (brightness=26) to trigger FFE4 fitting report
- Timeout degrades to pass (backward compat with 17-byte firmware)
- Sync _resolved flag prevents double-resolve

treating:
- Only treat run_state=0x00 as completion after seeing run_state=0x02
  (prevents false completion on startup)
- Sync _finishing flag replaces async data.completed for race prevention
- onStatus preserves paused state during fitting loss (|| fittingLost)
- Remove dead _fittingTimer reference from onUnload

auto-scan:
- Sync _completed flag in _scanComplete prevents double-build
2026-06-22 06:28:25 -07:00
Guoguo c5a9e89bd9 feat: treating page monitors fitting/run_state and handles safety events
- Listen for 'fitting' event: detect skin detachment, pause on loss,
  resume on re-attach
- Listen for 'run_state' event: detect device fault (0xFF) and IDLE
  completion (0x00)
- Low battery warnings: toast at <=10%, force stop at <=5%
- Guard finishAsComplete against double-completion
- Proper cleanup of all new event listeners on unload
2026-06-22 06:21:59 -07:00
Guoguo f4e74e9460 feat: auto-scan receives 4 sequential ADC sets for multi-spectrum scan
Firmware does R→UV→Y→IR sequential scan autonomously. Miniprogram
now listens for 4 consecutive ADC notifications, storing each as a
separate spectrum group. Also listens for run_state=IDLE as scan
completion signal. Displays all 4 spectrum groups with PD1-PD7 bars.
Stores full scan data in globalData.lastScanData for diagnosis phase.
2026-06-22 06:20:53 -07:00
Guoguo b5c6038273 feat: wear-check uses FFE4 fitting status instead of hardcoded ok
Listen for 'fitting' event from FFE4 Byte17 (0=not fitted, 1=fitted).
10s timeout if no fitting signal received. Removes vendor_33 bypass
that always returned ok.
2026-06-22 06:19:23 -07:00
Guoguo 8a4f9382e4 fix: audit fixes — add checksum_ok to params parse, passthrough control in command-sync
- parseVendorStatus: add checksum_ok verification for 34-byte and 33-byte params
- command-sync.js: passthrough control, current_gain, hold_time from server payload
- Mark buildVendorCommand33 as deprecated alias
2026-06-12 09:02:43 -07:00
Guoguo 36f12e098e feat: upgrade FFE1 command to 34 bytes with control byte
Per 协议简述(3): Byte33 is now control instruction (0=IDLE, 1=scan,
2=treat), Byte34 is XOR checksum. Backward compat with 33-byte
read-back preserved. All command sites updated with correct control:
- auto-scan: control=0x01 (scan mode)
- treatment-setup: control=0x02 (treat mode)
- stopTreatment: control=0x00 (IDLE)
2026-06-12 09:00:01 -07:00
Guoguo 69621fd2b6 feat: support FFE4 19-byte format with fitting and run_state fields
Per 协议简述(3): FFE4 now 19 bytes — adds Byte17 fitting status
(0=not fitted, 1=fitted) and Byte18 run state (0=IDLE, 1=scanning,
2=treating, FF=fault). Maintains backward compat with 17-byte format.
2026-06-12 08:52:44 -07:00
Guoguo 340837c700 feat: rebrand to LumiFlow across miniprogram, admin-console, and server 2026-06-10 18:47:22 -07:00
Guoguo edf45690c3 fix: address audit findings for Phase 1 scan
- Extract _cleanup() to properly unregister ADC listener + clear timers
- ADC callback unregisters itself on first receive (prevent duplicates)
- setParams failure now stops scanning and clears all state
- Timeout handler unregisters ADC listener
- Add BLE connection check before scan
- SCAN_TIMEOUT 8s → 12s (must exceed hold_time 10s)
- Pre-compute barWidth in JS instead of float math in WXML
- Error only shows when scanning is false
2026-06-10 08:18:54 -07:00
Guoguo 0ffa67da65 feat: implement MVP Phase 1 — full-area scan with ADC data collection
- Send scan command: all 5 regions LED on, brightness 128
- Listen for ADC notify (17 bytes) instead of broken queryStatus
- Parse and display PD1-PD7 values with visual bars
- Show VBAT/battery info
- Store scan PD data in globalData for Phase 3 smart adjustment
- 8s timeout fallback, stop LED on page unload
2026-06-10 08:16:17 -07:00
Guoguo c9799a5fc1 chore: bump version to v0.1.6 2026-06-05 23:38:02 -07:00
Guoguo 44935c4bf3 fix: correct region mapping (swap left/right, swap middle/bottom) and auto-scan proceeds on timeout
Region name mapping corrected to match actual hardware IO positions:
- 0x01: 左区→右区, 0x02: 右区→左区
- 0x08: 下区→中区, 0x10: 中区→下区
Auto-scan no longer shows timeout error, proceeds to next step instead.
2026-06-05 23:37:03 -07:00
Guoguo 4666050458 feat: add version number v0.1.5 to profile page footer 2026-06-05 23:12:15 -07:00
Guoguo dc0bcbdca3 fix: decodeURIComponent device_id in ble-connect to fix space matching 2026-06-05 22:41:28 -07:00
Guoguo 5bce7060ac fix: BLE scan match use indexOf instead of exact equals
Fixes timeout during binding when targetDeviceId is set but exact
string match fails due to encoding differences. Also skips devices
with no name, and logs match result for every candidate.
2026-06-05 22:38:07 -07:00
Guoguo e4d11d30a8 feat: add BLE scan/connect/service discovery console logs 2026-06-05 22:30:01 -07:00
Guoguo 810a3a19a5 feat: support JW_ device ID format in QR scan and BLE matching
- parseDeviceId accepts hex with spaces (e.g. "672B6D5A 4DCD861")
- BLE scan does exact match on "JW_<device_id>" when target is known
- Manual input placeholder updated to show new format
2026-06-05 19:21:43 -07:00
Guoguo 9882d19b54 fix: replace leftover 我的光面膜 with 我的设备 on home page 2026-06-05 04:37:39 -07:00
Guoguo ba3c621294 feat: add JW_ prefix to BLE device scan filter 2026-06-05 03:59:05 -07:00
Guoguo 29ff1c015b fix: replace facial/medical terms with neutral position labels
Region names: 左脸→左区, 右脸→右区, 额头→上区, 下巴→下区,
鼻唇→中区, 左眼→左上区, 右眼→右上区, 全脸→全区域.
Replace 面部/面罩 with 设备 in wear-check and auto-scan pages.
2026-05-31 23:39:06 -07:00
Guoguo aff8c2d9b5 fix: remove all medical device terms from user-facing text
Replace '光子美容仪' with '智美'/'智能面膜'/'我的设备' throughout.
Replace '护理' with '使用' in all UI text.
Replace '皮肤' with '检测'/'智能' where applicable.
Replace 🌸 with 💎 for brand identity.
Internal code (variable names, API paths, file names) unchanged.
2026-05-29 01:34:54 -07:00
Guoguo 22110e866a feat: add Simple Peripheral back to BLE scan for dev board testing 2026-05-20 07:41:49 -07:00
Guoguo a65dbfc5a8 chore: remove dead debug code — isDevMode, debug CSS, __DEV__ flag 2026-05-20 07:23:26 -07:00
Guoguo f0fdb285b5 chore: remove all mock/debug code for production release
Miniprogram:
- ENV switched to 'prod' (disables __DEV__ flag)
- Deleted mock.js and test-ble-frame.js
- Removed mockBind/mockPurchase from api.js
- Removed all debug UI panels and onMock* handlers from 6 pages
- Removed mock purchase fallback in subscribe-plans
- Removed SIMPLE PERIPHERAL dev board from BLE scan

Server:
- Removed /device/mock-bind route
- Removed /subscription/mock-purchase route
- Removed dev_openid fallback in wechat.js
- Removed mockBind() from binding.dao.js
- Removed mock fallback in purchase endpoint
- NODE_ENV default changed to 'production'

Admin:
- ENV switched to 'prod'

All mock code preserved in 'test' branch for future development use.
2026-05-20 07:19:26 -07:00
Guoguo 778167e47d Merge branch 'feat/production-ready' 2026-05-20 06:59:35 -07:00
Guoguo f1a2523cb4 fix: ADC notifications no longer emit 'status' (prevents timer jump)
- ADC (17-byte) now emits 'adc' + 'battery' events, not 'status'
- Fixes CRITICAL timer jump: remaining_ms:0 was resetting countdown
- Drop ADC packets with bad XOR checksum
- treating.js + index.js subscribe to 'battery' for live battery updates
- onStatus only updates remaining_ms when > 0
2026-05-19 03:57:47 -07:00
Guoguo 3fd7578163 feat: support 17-byte ADC status from updated vendor protocol
Protocol update adds FFE4 Status format: 7×PD sensors (little-endian)
+ VBAT battery voltage (mV) + XOR checksum = 17 bytes.

- parseVendorStatus: handles 1-byte heartbeat, 17-byte ADC, 33-byte params
- handleValueChange: ADC type extracts PD array + battery % from VBAT
- Battery calculated as linear 3000mV(0%) to 4200mV(100%)
- PD data passed through status event for treatment pages
- Updated protocol doc with full byte table and old/new comparison
2026-05-19 03:54:15 -07:00
Guoguo afcc8d12de fix: index page — no loading flash on tab switch, subscription always tappable
- Loading animation only shows on first visit, subsequent onShow updates silently
- Subscription row always navigates to plans page (was no-op when active)
- Move devMode init to onLoad (only needs to run once)
2026-05-18 06:04:25 -07:00
Guoguo fda403d6a9 fix: index page center-aligned layout for device card 2026-05-18 05:57:47 -07:00
Guoguo b9a4f484bb fix: index page layout — separate badge from reconnect, space buttons
- Device card: top row with icon+name+badge, reconnect button below
- Action buttons wrapped in flex column with 20rpx gap
- Removed inline device-battery, now part of device-meta row
2026-05-18 05:51:13 -07:00
Guoguo 731122064b fix: 5 critical payment issues from code review
1. Move notify route before authMiddleware (WeChat callback has no JWT)
2. Add await to verifyNotifySignature call (was fire-and-forget)
3. Remove dangerous verify fallback — all signature failures now throw
4. Payment sync polls 3x before giving up, never redirects to success
   page unless confirmed paid
5. Production guard enforces all WX_MCH_* env vars on startup
2026-05-18 03:16:44 -07:00