- Feature 1: Remote Battery Monitoring & Low-Battery LED Alert (Closes#5)
* Parse BLE Battery Service (0x180F) & Characteristic (0x2A19) with notifications and polling
* Double-pulse white LED blink on onboard NeoPixel when battery <= 15%
* Display real-time battery percentage in Web UI status bar and BLE tab
- Feature 2: Wake-on-LAN (WOL) & Advanced Actions Architecture (Closes#1)
* Implement UDP broadcast WOL Magic Packet builder and sender (ACTION_WOL = 11)
* Support MAC parsing in colon, dash, or 12-char hex formats, with port configuration
* Add 'Advanced Extension' mode in Keymap UI with WOL tester and placeholders for Macro, Webhook, and MQTT
* Persist wol_mac in NVS and handle immediate trigger on keypress
- Docs: Update README.md and ROADMAP.md reflecting new features and future plans
- Build: Update prebuilt firmware binaries in RemoteMapper-Flasher/bin
- Relax UAC isochronous watchdog timeout from 50ms to 3000ms to allow Windows audio engine scheduling headroom
- Remove unsafe DWC2 hardware register EPDIS/SNAK manipulation and invalid clear_stall on ISO endpoints
- Implement clean TinyUSB soft reset helper (uac_soft_reopen_endpoint) for recovery and SET_INTERFACE
- Update all prebuilt binaries in RemoteMapper-Flasher
- CLI listens on both UART0 and USB CDC; add 'wifi on|off|status' and 'log on|off'
- Wi-Fi on/off is persisted to NVS and applied on reboot; never de-init the Wi-Fi stack at runtime
- Skip Wi-Fi init and the web server when Wi-Fi is disabled (fixes the lwIP assert reboot loop)
- app_log mirrors logs to CDC only when enabled (default off)
- /api/status exposes wifi_enabled
- Refresh N16R8/N8R2/N4R2 prebuilt flasher binaries on top of the ATVV BLE fix from master
- Remove blocking GATT calls from on_hogp_report_notify to prevent NimBLE task deadlock
- Safely drop length > 8 non-keyboard packets from HOGP to eliminate ADPCM white noise
- Restructure GATT service discovery to prioritize ATVV service before HID with paced CCCD subscriptions
- Add safe non-blocking background ATVV recovery on Core 0 task loop
- Update all prebuilt binaries for N16R8, N8R2, and N4R2
- Eliminate 450ms BLE_SILENCE_WATCHDOG_MS to prevent prematurely cutting off voice while held
- Restore clean ADPCM audio pipeline state machine to eliminate decode desync / white noise
- Update GitHub Actions release workflow: trigger on git push instead of daily cron
- Update prebuilt firmware binaries and RemoteMapper-Flasher packages
- Remove boot-time forced MIC_OPEN in setup_services_and_handshake()
- Remove automatic cmd_open response in on_ctl_notify() when audio stops/mic closes
- Guard voice release event distribution so it only triggers during active speech (BLE_STATE_TALKING)
- Only open microphone on demand when MI_KEY_VOICE is physically pressed
- Update all prebuilt firmware binaries and RemoteMapper-Flasher packaging
- Fix cross-core deadlock in WebServer (Core 1) vs ble_remote_task (Core 0) via asynchronous request flags
- Fix BLE SMP connection drops by purging stale NimBLE bonds with deleteAllBonds() and correcting AuthReq to Just Works
- Remove periodic 5-second MIC_OPEN ping to allow BLE deep sleep and restore remote battery life
- Add strict exclusivity filter in is_target_remote() to prevent hijacking by neighbor devices
- Add Bluetooth pairing & unpair management card in WebUI
- Add GitHub Actions daily release workflow to package and update Flasher assets
- Update pre-built firmware binaries and RemoteMapper-Flasher archives