8.1 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project follows Semantic Versioning.
[Unreleased]
Added
- One-second white RGB indication when firmware initialization completes and the keypad loop is ready.
- Branded Android launcher icon and native splash screen using the project assets.
- French and English mobile UI with automatic phone-language selection and a manual override.
- Dark mobile dashboard, shortcut bar, styled modals, code limits, opening history, phone-side NFC UID scanning, and administrator/guest role controls.
- Secure saved-box records, automatic BLE reconnection, invitation QR generation/scanning, and guest revocation.
- AES-256-GCM password-protected mobile backup and restore using a PBKDF2-SHA256 derived key.
- Persistent box names and administrator factory reset with BLE bond removal.
- Persistent seven-day opening history for permanent codes, temporary codes, named NFC tags, and named mobile identities.
- Fallback time
2026-06-01T00:00:00Zand reboot continuity from the newest persisted opening event. - Eight permanent and twenty temporary access-code slots.
- BLE LE Secure Connections, AES-CCM encrypted GATT access, persistent bonding, and 128-bit administrator/guest application identities.
- First-phone administrator provisioning without exposing the stored key.
- App-triggered NFC enrollment with persistent tag names.
- Initial project structure.
- Zephyr RTOS firmware baseline.
- Standardized project architecture.
- Firmware coding conventions.
- Documentation structure.
- RGB LED driver.
- GPIO expander abstraction layer.
- Matrix keypad driver.
- Active buzzer driver.
- Firmware component documentation.
- Firmware debugging documentation.
- Firmware buzzer documentation.
- Firmware lock control documentation.
- English architecture documentation in
docs/architecture.md. - Persistent six-digit access code storage.
- Persistent NFC tag UID storage with default development UID
60:4F:E2:B5. - NFC scan-mode application flow triggered by keypad activity.
- Flutter mobile application shell in
mobile-app/app. - Mobile application use of the root
images/logo andbackground.jpgassets. - Mobile BLE scan/connect flow targeting the OpenParcelBox XIAO service.
- Mobile commands for XIAO clock synchronization, direct lock opening, access-code management, and NFC tag management.
- Firmware BLE administration service with JSON command writes and stored-state readback.
- Volatile phone-synchronized firmware clock for lock-opening log timestamps.
- One-time access codes that are removed after first successful keypad use.
- Lock control pulse on XIAO pin
D9. - Lock state feedback detection using KR-S79
COM/NCon XIAOD7/D8. - Long buzzer success beep for accepted unlock codes.
- Door opened and door closed UART messages.
- NFC scan and UID validation UART messages.
Changed
- Refactored firmware into independent components.
- Standardized source file headers.
- Standardized project coding style.
- Centralized board-specific definitions into
board_config.h. - Updated project documentation to English.
- Renamed project constraint documents from
contraintes.mdtoconstraints.md. - Updated firmware, hardware, Home Assistant, and mobile application documentation.
- Aligned hardware documentation with the active buzzer transistor driver.
- Aligned firmware documentation with C17 and the current Zephyr build tools.
- Updated project tracking documents to reflect completed RGB LED, GPIO expander, keypad, and active buzzer work.
- Updated keypad unlock user feedback with off-at-rest LEDs, green-open indication, red invalid-code feedback, and
Bentry cancellation. - Updated runtime LED feedback with blue NFC scan-mode indication.
- Updated open-lock reminder beep interval to 2 seconds.
- Updated the mobile application to reload access codes and NFC tags from the firmware BLE state characteristic.
- Corrected NFC hardware documentation: the nRF52840 integrated NFCT peripheral is tag-side NFC-A hardware, while passive badge UID reading requires a dedicated NFC reader circuit.
Fixed
-
Removed oversized Settings callback allocations that exceeded the 1024-byte main stack once opening-history or application-identity records existed.
-
Moved Settings/NVS loading to a dedicated 4096-byte services thread and increased the main, system-workqueue, and Bluetooth RX stack margins.
-
Kept the keypad fallback code and default clock available from RAM before any flash or Bluetooth operation can run.
-
Added bounded retries when Bluetooth advertising temporarily returns
-EAGAIN, and no longer abort advertising solely because stored Bluetooth settings report a load error. -
Prevented invalid persisted box settings from overwriting the active default configuration before validation.
-
Kept opening-history timestamps monotonic after an older phone clock sync so one descending event cannot invalidate the complete table on reboot.
-
Provided Flutter's Material localization delegates so input fields and registration dialogs work when the phone language is French.
-
Prevented incompatible persistent development-table layouts from blocking firmware startup before keypad initialization; affected tables now recover through their safe defaults.
-
Made Bluetooth initialization asynchronous so keypad operation and USB availability no longer wait for BLE controller startup.
-
Removed the silent early exit when RGB LED initialization fails.
-
Kept keypad access available with in-memory default credentials when persistent settings fail, and added background keypad initialization retries.
-
Fixed secure BLE startup ordering: the persisted
bt/*settings and identity are now loaded afterbt_enable()and before advertising, preventingBLE advertising failed: -11. -
Moved secure BLE initialization to a dedicated thread started after the local keypad-ready indication, so Bluetooth or bond restoration can never block keypad access, lock control, or the main application loop.
-
Removed the interactive Zephyr/I2C shell and its competing serial backend; USB CDC is now owned exclusively by the firmware console, matching the validated standalone diagnostic configuration.
-
Restricted guest BLE sessions to authentication, clock synchronization, and lock opening, and replaced oversized full-state notifications with a compact change marker.
-
Added strict validation of persisted identity and opening-history records before they can be used or serialized.
-
Removed automatic NVS writes and migrations from the boot path. Default tables are now available immediately in RAM and are persisted only after a real credential, identity, tag, box-name, or history change.
-
Replaced the coupled application loop with a resilient local-first entry point: keypad input, code validation, lock control, buzzer, LEDs, and door feedback run independently from BLE and NFC processing.
-
Temporarily removed NFC polling from the production main loop while retaining NFC storage and BLE management initialization; it will be restored after the validated keypad/BLE baseline is confirmed on hardware.
-
Fixed Flutter inherited-widget assertions when closing input modals by keeping text controllers alive until their dialog widgets are actually unmounted.
-
Changed encrypted-backup restoration to select the backup file before asking for its password.
-
Matrix keypad scanning.
-
GPIO expander abstraction.
-
Firmware build configuration.
-
Removed obsolete documentation references to
board_pins.h. -
Removed obsolete documentation references to PWM buzzer control.
-
Removed stale development-environment references from project documentation.
-
Removed corrupted text encoding artifacts from Markdown documentation.
-
Prevented unintended lock command pulses at startup or after flashing by declaring D9 in Devicetree and configuring it directly inactive.
[0.1.0] - TBD
Added
- First public development release.
- Zephyr RTOS firmware.
- RGB LED driver.
- GPIO expander driver.
- Matrix keypad driver.
- Active buzzer driver.
- Initial documentation.
- Project roadmap.
- TODO list.