- Remove scripts/ble_client.py (uses old UUIDs, incompatible)
- Move test_ota_notify.py to tools/ directory
- Make serial port configurable via SYLDA_CLIENT_PORT env var
- Client: change passive BLE scan to active scan (setActiveScan(true))
Server puts name/UUID in scan response; passive scan never
received them, so isAdvertisingService() and getName() failed.
- Server: add INPUT_PULLUP on touch pins to prevent floating
triggers when sensors disconnected
- Server: update BLE UUID characteristic in SET_ID handler
(pUuidChar->setValue) so reconnecting clients see correct UUID
- Server: touch logic changed from t1Active/t2Active to
!t1Active/!t2Active (door closed = relay ON)
- Android: flushReadBuffer before VERSION? to discard stale
boot log output; use Regex for BUILD_NR parsing
- copy_firmware.sh: copy to firmware/server/ and firmware/client/
subdirectories to match EspFlasher.assetPath()
- version.txt: server=20 client=5
- New tools/check_versions.sh: verifies version.txt, version.h, SylDaVersions.kt match
- release.yml: 'Verify version consistency' step after build, aborts release if mismatch
- ci.yml: same check after debug APK build
- scripts/release.sh: now runs full pipeline (pio run -> copy firmware -> gradle -> check)
and refuses dirty working tree
- Untrack version.h, SylDaVersions.kt, release/ — always regenerated fresh from version.txt
Prevents the v1.1 bug where stale generated files caused version mismatch
and infinite re-flash loop.
- Add ID? command to firmware: server responds 'SylDa_Server', client 'SylDa_Client'
- Add tools/pio_upload_port.py POST-script that queries connected ESP32s
- Remove hardcoded upload_port from platformio.ini
- Script logic: 1 ESP32 → use directly, 2+ → ID? query, no match → prompt user
- Requires pyserial for serial queries (graceful fallback if missing)
ESP firmware:
- Store HMAC key in NVS via Preferences library instead of compile-time
hmac_key.h
- KEY? responds with HMAC_KEY:<hex> (if provisioned) or NO_KEY
- New SET_KEY:<64-hex> command stores key in NVS and responds OK
- Boot messages updated to reflect provisioning state
Android app:
- UsbKeyReceiver detects NO_KEY response and auto-provisions:
generates random 32-byte key via SecureRandom, sends SET_KEY,
waits for OK, saves key to SharedPreferences
- Read loop now breaks on both HMAC_KEY: and NO_KEY responses
Cleanup:
- Removed tools/generate_hmac_key.py and src/hmac_key.h
- Removed hmac_key.h from .gitignore
- README updated for new provisioning flow