Repository navigation
6.0.0
Version 6.0.0
This major release introduces new BLE functionality, adds experimental support for the FTMS Bluetooth profile, improves modularity through significant refactoring of the bluetooth core, and resolves several bugs. It also updates the Arduino framework to version 3.x and introduces compatibility with modern C++ standards for enhanced performance and maintainability.
Please note that this release completely removes any WebSocket or WebServer related feature from the codebase.
New Features
Experimental FTMS BLE Service
- FTMS Compatibility: Introduced the FTMS bluetooth profile to enable compatibility with various rowing apps (currently experimental).
Over-the-Air Firmware Updates
- BLE-Based OTA Updates: Users can now update firmware directly over Bluetooth, eliminating the need for physical connections.
Improved Stroke Detection
- Enhanced the stroke detection algorithm by switching to the Theil-Sen Linear Regression model for increased resilience to outliers.
- While this introduces a 5-10% execution time overhead, it provides significant accuracy improvements for stroke detection that is actually compensated by other improvements.
Updates and Improvements
-
Improved Execution Time and Support for Higher
IMPULSE_DATA_ARRAY_LENGTH:- As part of the version 6 update, significant work has been done to improve the execution time of the main loop and better support higher values of
IMPULSE_DATA_ARRAY_LENGTH. - Through various algorithmic optimizations, coupled with moving to Arduino Core 3., ESP-IDF 5., and a modern compiler/toolchain, there has been an approximate 6-10% improvement in execution time across all
IMPULSE_DATA_ARRAY_LENGTHcompared to version 5. - For example using double type: 3.3ms for a 15 data point set (v5: 3.4ms).
- The most significant gains are seen in maximum execution times due to proper offloading of peripheral calculations to the second core of the ESP32.
- As part of the version 6 update, significant work has been done to improve the execution time of the main loop and better support higher values of
-
Updated Framework: Upgraded to Arduino Core v3 and ESP-IDF v5.1, utilizing modern features such as the
std::spanand the xtensa toolchain v12. -
Improved BLE Data Flow: Refactored BLE state management and data flow into separate structures for enhanced clarity and performance.
-
Generic Ergometer Profile Updates: Fine-tuned moment of inertia values and drag coefficients for improved calibration and detection accuracy.
Bug Fixes
- Compile Date String: Fixed formatting issues for single-digit days in the compile date.
- Failsafe Mechanisms: Added safeguards for torque-based stroke detection to handle edge cases with drive phases.
Code Refactoring and Maintenance
-
Restructured Codebase:
- Grouped related files (e.g.,
SdCardService, utility classes) into dedicated folders for cleaner organization. - Restructured the test folder for better clarity between unit and end-to-end tests.
- Grouped related files (e.g.,
-
Enhanced Dependency Injection for BLE Services: Refactored the architecture of core BLE services (e.g.,
OtaBleService,BatteryBleService,SettingsBleService) to utilize dependency injection. This improves modularity and simplifies testing. -
Optimized MTU Calculation: Centralized MTU logic for more efficient characteristic management.
-
BLE Controller Enhancements: Elevated
BluetoothServiceto a controller managing sub-services, improving extensibility. -
Constexpr Improvements: Adopted
constexprfor constructors in various Series classes for better adherence to modern C++ practices. -
Move to CMake and improve testing workflow: Improve both unit testing and calibration workflows by using CMake to generate a build system instead of using a traditional makefile.
Full Changelog: 5.2.0...6.0.0