Releases: InfiniTimeOrg/InfiniTime
Update to NimBLE1.3.0 and improve BLE connectivity
This release updates to NimBLE 1.3.0 and fixes a IRQ issue that was causing random connectivity issues with Android phones.
FYI Gadgetbridge is working on the integration of Pinetime in this branch : https://codeberg.org/Freeyourgadget/Gadgetbridge/src/branch/pinetime-jf
Bug fixes and information screen
This release contains mostly bugfixes:
- Fix a bug that prevent the wake up of the screen once it has been automatically switched off;
- Fix include path that were dependant of my own FS;
- Fix build errors when CMAKE_BUILD_TYPE is not defined.
The informations screen has also been improved to add more information (BLE MAC, uptime, build date/time,...).
Bootloader, OTA, DFU
This release brings a very important feature for the Pinetime project : firmware update via BLE ! This is the result of the combined work of @lupyuen and myself, with the help of the whole #Pinetime community !
For this to happen, we had to build a firmware that integrates MCUBoot, agree on a memory map for the internal and external flash memories and implement the whole OTA procedure (upload data via BLE, store it on the SPI flash memory, integrate with MCUBoot,...).
Note that the current status of OTA is still considered experimental. Do not rely on it to safely update your Pinetime for now !
The documentation about OTA and the bootloader is located into the folder bootloader of the source code.
This release contains 3 binaries:
- pinetime-app : an autonomous version of the application (does not work with MCUBoot). It's easier and faster to use this one if you're working on and debugging the code;
- pinetime-mcuboot-app : this is the binary you want to use with MCUBoot
- pinetime-graphics : a simple app that writes the bootloader graphic assets into the SPI flash memory.
This release also provide 2 files to work with the bootloader:
- pinetime-mcuboot-app.img is the file you must program to address 0x8000 of the internal flash memory
- pinetime-app-dfu.zip is the file you need to test the OTA procedure (upload via BLE).
Memory usage of pinetime-app:
text data bss dec hex filename
250828 772 41976 293576 47ac8 pinetime-app.out
NimBLE & Amazfish
This version brings 2 major improvements:
- The integration of NimBLE open source BLE stack instead of closed source Nordic Softdevice.
- Pinetime-JF is now supported by Amazfish.
The integration of NimBLE was a lot of time, but it's totally worth it because I want this project to be as open source as possible. I also want to build OTA update via BLE on MCUBoot bootloader, and using another BLE stack than the NRF Softdevice was needed for this.
I would like to thank Adam for his work on Amazfish, a companion app for many smartwatches running on SailfishOS (which runs on the Pinephone !). He contributed to the code of Pinetime-JF to make the integration into Amazfish possible. Amazfish supports the connection to the pinetime via BLE, time synchronization and notifications. See this video for a live demo!
This version also brings some bugfixes
- Update to LittleVGL to fix a memory leak issue on the Clock screen.
- Improve the SPI driver to prevent race conditions on the SPI port.
Memory usage:
text data bss dec hex filename
245840 772 41328 287940 464c4 pinetime-app.out
BLE notifications
There are two main features that have been added in this release.
This firmware now supports BLE notifications : it can receive notification from a companion app and display them on the screen. As I couldn't find any 'reference' application that could send BLE notification using ANS (Alert Service Notification), I've build a fork of gobbledegook, it's available here
The second nice feature are the icons that display the battery level and BLE connection state. These icons are provided by @arteeh. Here is his repo
Here is a complete changelog:
- Add Brightness app : configure the brightness level (low, medium, high).
- Add Sysinfo app : display runtime info about the firmware : date, time, version, battery level,...
- Display ble connection state and battery level with icon (thanks to @arteeh : https://gitlab.com/arteeh/pinetimeos)
- Add support for BLE notification using companion app (https://github.com/JF002/gobbledegook)
- BLE connection should be now a bit easier
Memory usage:
text data bss dec hex filename
174712 1280 27160 203152 31990 pinetime-app.out
Fix first boot after flashing the firmware
This bugfix release fixes the first boot after flashing the firmware. In previous releases, multiple hardware resets from the debugger were needed before the firmware was able to run properly.
This release should fix this bug and the allow the firmware to run directly after the programming.
Integration of lvgl
The most visible changes of the release are the integration of LittleVGL and the change of default font.
LittleVGL, an open-source embedded GUI library, comes with a lot of functionalities and widgets that’ll allow more rich and interactive user-interfaces.
The user-interface now provides a basic user interaction : touch any part of the screen on the watchface to display a menu of applications. Tap on an app to open it, and use the button to go back. There are 5 apps for now :
- The watchface
- A spinning meter (that could be used in a chrono app)
- An analog gauge (that could be used as an analog watchface)
- A message box that displays the version of the firmware
- A simple Hello world application with a display that counts the number of time that a button has been pressed.
the digital watchface
Except the watchface, these apps are demo showing the possibilities that are already implemented in the firmware. In the future, actual apps could be designed.
This release also brings another new feature : the watchdog is enabled. The watchdog will automatically reboot the device if the firmware crashes or freezes. The firmware can also be manually reset by pressing the button for a long time (5-10 seconds).
Finally, a bug in the time synchronization has been fixed (#21) and the correct time should be displayed after the time synchronization is finished.
Memory usage:
text data bss dec hex filename
162316 1276 26708 190300 2e75c pinetime-app.out
V0.2.2 - Powered by the community
This version brings the following new features:
- The performances of the SPI drivers have been greatly improved by using DMA and IRQ. It means that the refresh of the screen is now a lot faster than before
- Support for OpenOCD in CMake scripts (thanks to @luben93)
- The minimum version of CMake has been set to 3.10 to be compatible with more dev environments (thanks to @danielkucera)
This is the first version that contains contributions from the community. I appreciate them!
This version also fixes the clock drift : before, the pinetime clock would drift for more than 30 minutes a day. Now, the drifting is reduced ... 0 minute a day!
I've also measured the battery life : my pinetime dev kit ran for more than 7 days on battery. Not bad knowing that I cannot measure the current drawn by the pinetime!
Memory usage:
text data bss dec hex filename
132640 988 27860 161488 276d0 pinetime-app.out
Translation :
- FLASH : 132640 / 524288 Bytes (25%)
- RAM : 27860 + 988 = 28848 / 65536 Bytes (44%)
Version 0.2.0
This version provides many improvements since version 0.1.0 :
- The date and time should be correctly processed (Monday 23:59 + 1 minute => Tuesday 00:00).
- BLE disconnect is now managed, and the display is updated accordingly.
- Support for Black Magic Probe (and other programmer/debugger using GDB client) has been added in CMake targets.
- Battery life should be improved by disabling the SPI and I²C peripherals during sleep.
- The version of the firmware is displayed on the bottom of the screen.
Some bugs have also been fixed:
- Fixed a stack overflow when waking-up, which would make the soft crash after ~7 wake-ups.
- Fix an error that would prevent building the project if the file nrf_common.ld was not in a subdirectory of the project.
- Improve the time tracking process so that the soft keep track of the time even when it's sleeping for more than 4 hours.
This release also provides a "-full" binary that contains the pinetime application and the Nordic Semiconductor SoftDevice needed for the BLE stack.
Early development stage release
This is the first release of this project. As the project is in early development phase, there are very few functionalities and probably a lot of bugs !
Implemented functionalities:
- Display the date/time, BLE connection status and battery level on screen
- The button allows to switch the screen on/off, and put the device to sleep
- BLE advertising
- BLE connection and bonding
- Fetch the time if a CTS (Current Time Service) server is found on the device connecting to the Pinetime.
- Basic touch functions : wakes up the device when it's sleeping, and draw squares on the screen when it's running
NOTE : This firmware needs the BLE softdevice (S132) to work. You must program it in the MCU flash memory before programming this firmware.
Feel free to test it, report bugs, suggest next features to be implemented and to submit pull requests!