InfiniTime

Firmware for Pinetime smartwatch written in C++ and based on FreeRTOS

GPL-3.0 License

Stars
2.6K
Committers
137

Bot releases are visible (Hide)

InfiniTime - [Release Candidate 1] InfiniTime 1.0

Published by JF002 over 3 years ago

InfiniTime 1.0.0 RC1

I'm happy the release the first Release candidate version of InfiniTime 1.0.

The tag 1.0 is a great milestone! I think InfiniTime reached a point where it can actually be used by 'enthusiasts end-users' as a daily driver : it implements all the hardware of the watch, it provides many features and it's supported an awesome ecosystem of companion app running on many platforms and OSes.
Of course, it's probably not bug free, it certainly provide not all the functionalities everyone can dream of but we'll have plenty of time to implement them in the future!

This version brings many new features:

  • Step counter
  • Wake on wrist rotation
  • 12/24h display
  • Vibration enable/disable
  • Big UI rework by Joaquimorg
  • User settings saved in flash memory
  • Improve TWI driver that should not freeze anymore in games

The goal of this RC version is to test it as much as possible and fix the most critical bugs before releasing v1.0.0.

As always, do not forget this is a release candidate version, not a stable release, flash it at your own risk on your sealed devices ;)

*build date reported in About app: "Apr 16 2021 18:58:21"

InfiniTime - InfiniTime 0.15.0 "Yellow Banana" : Analog clock and stopwatch!

Published by JF002 over 3 years ago

This release adds three new features to InfiniTime : A new analog watch face, the possibility to switch from the digital watchface to the analog one and a new stopwatch application!!

The new analog watchface and the multi watchface support were contributed by J8oaquim. You can now easily switch the clock face (digital / analog) by long-tapping the screen. Joaquim also improved the digital watchface by adding some colors and fixed the display issue when the date was too long for the display.

The stopwatch is contributed by Panky-codes. It provides all the necessary function such as start, pause, stop and lap.

Joaquim also fixed a bug in the display driver that would display strange glitches in some apps like the game Paddle!

Thanks again for these contributions!

NOTE : bootloader.bin is now the new bootloader version 1.0.0.

InfiniTime - New bootloader & recovery firmware

Published by JF002 over 3 years ago

This release brings the new recovery firmware based on InfiniTime. This firmware is intended to be used in conjunction with the new version for the bootloader I've just released.

This new MCUBoot bootloader fixes a few bugs and add new features and a new UI. Among these new features is the recovery functionality which allows to load a recovery firmware from the external flash memory to recover the PineTime when the current firmware cannot boot anymore.
This recovery firmware is a slightly modified version of InfiniTime that only provides a basic UI and the OTA functionality. You'll be able to use this firmware to load a new firmware over-the-air using BLE connectivity.

Note that all version of InfiniTime from 0.7.1 are and will be compatible with the previous MCUBoot bootloader (the one that is loaded at factory since September 2020) and the new version. The update is not mandatory.

Other than the recovery firmware, this release does not bring any new features in InfiniTime.

InfiniTime - InfiniTime "Green avocado" - LVGL update

Published by JF002 over 3 years ago

This release updates the version of LVGL (LittleVGL) from version 6 to version 7. This is a major update that brings many improvement and update that have been made in the LVGL project.
I know that several contributors were waiting for this update to create new watchfaces and apps, and I hope they'll unleash their creativity now that it's finally there!

I would like to say a bit thank you to Joaquimorg for this contribution. Joaquimorg maintains his own fork of Infinitime and did a great work to port this update into InfiniTime, adapting all the apps and improving the theme used in InfiniTime!

Thanks also to roblabla for fixing the CMake FLASH target !

And also thanks to Nico for initiating the idea to name InfiniTime releases !

InfiniTime - Call notifications, vibration and BLE improvements!

Published by JF002 over 3 years ago

In this release, we added 2 new features and hopefully improved the BLE connectivity!

The first feature is the call notification. The companion app can now send a call notification to InfiniTime. InfiniTime displays this notification and gives the opportunity to accept the call, ignore it or reject it. Note that this feature needs to be implemented in the companion app. Thanks to jlukanc1 and petterhs for their work on this feature!

The second feature is the vibration on notification! I know a lot of people were waiting for it, me included since I wear my own PineTime! Thanks to petterhs, roka and t0tten for their contributions!

petterhs also improved the Music app by using nice icons for the buttons (next, previous, volume up/down).

Finally, after a lot of analysis and debugging, we might have improved the BLE connectivity a bit more. Let's hope everyone will notice a better connection reliability and less failed OTA!

InfiniTime - Fix crash after 4-5 ble reconnections

Published by JF002 over 3 years ago

This bugfix release fixes a bug that would cause a crash after 4 or 5 bluetooth reconnection. An error in the porting layer of Nimble (the glue between InfiniTime, FreeRTOS and Nimble) caused a leak each time a new connection was established. Once no memory was available, the firmware would crash.

InfiniTime - Improved BLE connection

Published by JF002 over 3 years ago

This release brings an update of NimBLE (our BLE stack) to improve the BLE connection reliability and stability.
I've already spent a long time trying to analyze and debug BLE connectivity issues (OTA failure and BLE connection drops for no reason) but couldn't find the cause of these issues.

It turns out that using a more recent version of NimBLE does improve the situation! Even if it's not perfect yet, it's still better than before so... enjoy an increased OTA success rate and long lasting BLE connections!

On the code level, many quality of life improvements have been made by Avamander (new clang-format and clang-tidy configuration, formatting rules,...).

InfiniTime - Heart rate sensor and navigation app

Published by JF002 over 3 years ago

Here is another big release with 2 major additions : the integration of theheart-rate sensor and InfiniNav, a navigation app!

Thanks to Daniel from Wasp-os, I've finally been able to integrate the heart rate sensor using a 100% FOSS implementation! To be honest, I've just ported the HR driver and algorithm from the Python code in Wasp-os and integrated it as an app in InfiniTime.

The Heart rate app in InfiniTime allows you to start and stop the heart rate sensor and displays the current heart rate value. This value is also displayed on the clock face when the HR sensor is running.

See it in video : https://video.codingfield.com/videos/watch/ee1e94e9-f2ae-4ea4-8f26-c16a8cb8e299

InfiniTime also exposes the standard Heart Rate Service over BLE, which allows any application supporting this service to read the heart rate value from the PineTime. Amazfish has added support for the heart rate service for InfiniTime in the last version.

InfiniNav is a great contribution from piggz, the creator of Amazfish. This app is design to work in conjunction with a companion app and a navigation app running on a phone, for example. As he doesn't things halfway, piggz also integrated this functionality in Amazfish and relies on Pure-Maps for the navigation.

Basically, all you have to do is connect your PineTime to Amazfish and start a route in PureMaps. Then you'll be able to receive the navigation instruction (text message, big icon and distance remaining) in the Navigation app in InfiniTime.

See it in video : https://video.codingfield.com/videos/watch/1fd64ff8-5a5b-48d9-b7f8-298df0dc383e

As a remainder, Amazfish is a nice companion app for many smartwatches and activity trackers, PineTime included, that runs on SailfishOS and that have recently been ported to 'mainstream' Linux distributions. A package has already been introduced in Manjaro-ARM.

Improvement on the display of the battery level have been done by Panky-codes : the battery level is filtered so that it doesn't fluctuate from +/- 10% each time the indicator is refreshed.

Finally, we had some fun with Nuxij and pfeerick adding support for Gitpod to the project. Gitpod allows you to create an online workspace (IDE, development environment,...) easily from configuration files included in the project. From Gitpod, you are able to edit the code, build it (and download binary files), create pull-requests,...

InfiniTime - It's gaming time!

Published by JF002 almost 4 years ago

I'm very happy to publish this new version of InfiniTime because it contains new features and bugfixes that have been mostly implemented by contributors to the project, not by me !

This version introduces the first 2 games into InfiniTime. The first one is the Paddle game from ZephyLabs, a single player pong game. The second one a 2048 clone from jedmijares.

The time needed to turn the display on when pushing on the button has been improved, and the small glitch that displayed the time it was when the display was shut down has been removed, thanks to IoTPanic.

A first step to the internationalization of the firmware has been taken by AirHamster who added the support for notifications written in Cyrillic.

The docker image (and the associated documentation) has been greatly improved by pfeerick and Nuxij.

Regarding the code quality, okaestne did a nice job by cleaning all the #includes of the project, and fixed some build issues and warnings at the same time.

Finally, the bug that would display an erroneous battery level in the app SystemInfo has been fixed by IoTPanic.

InfiniTime - New music app and new notifications

Published by JF002 almost 4 years ago

This version is certainly the first version that receives the most feedbacks from users and the most contributions from other developers, and I'm very happy that InfiniTime receives that much attention!

As usual, this new version fixes some bugs and brings new features and improvements.

Two major bugs have been fixed in this release. The first one prevented the bootloader from working correctly after a reset from sleep mode. This would temporarily brick the device, and the only way to revive it was to let the battery drain completely before charging it again. Note that this fix is also present in version 0.8.3.

The driver of the touch panel has also been fixed. This issue has been highlighted by the pong game of ColdBrewCaffin that would freeze InfiniTime. With the help of TT-392, we were able to fix the TWI driver and fix this issue.

The new features, now !
First, the music app have been greatly improved by Avamander. The UI is really amazing, displays a nice disc animation, uses gestures to switch controls from browsing to volume, and also displays the song progression. Avamander also added support for these new features into Gadgetbridge 0.48. Gadgetbridge is a companion app running on Android which provide support for InfiniTime. Note that this version of Gadgetbridge also support firmware upgrade over the air (OTA) for Infinitime!

Next, the notification UI has been completely re-written. The small modal dialog box that could display only 18 characters has been replaced by a shiny new notification app that displays up to 100 characters. Note that a new version of Gadgetbridge is needed to support notifications with more than 18 characters. This version (0.49?) is not yet released.

The BLE connectivity has also been improved, it is now easier to connect/reconnect with a smartphone. InfiniTime now exposes the Battery Information Service and the FindMe profile to BLE host.

Finally, multiple pull-requests that bring improvements to the documentation, code structure and coding guidelines have been merged in this version.

I would like to thank every one who contributed to this release by reporting bugs, by contributing to the code and documentation and simply by providing feedback to me and other developers!

InfiniTime - [0.9 RELEASE CANDIDATE 1] Music app, notifications,...

Published by JF002 almost 4 years ago

WARNING - WARNING - WARNING - WARNING
This release is a release candidate version : it is available for people to test the version before releasing it! It is NOT recommended to flash it on a sealed device.
WARNING - WARNING - WARNING - WARNING

New features :

  • Add Battery Info service (BLE)
  • Add FindMe profile (BLE)
  • Improved music app (by @Avamander)
  • Fix TWI driver (thanks to @TT-392 for his help on this subject, and to @ColdBrewCaffine for his Pong game that allowed me to test the fix)
  • Prevent the bootloader from failing to initialize the SPI flash (disable the SLEEP command on the spi flash).
  • Improve BLE connection and reconnection
  • Code improvements (folder renamed for coherency, new coding styles,...)
InfiniTime - [Bugfix] Fix bootloader stuck after a reset

Published by JF002 almost 4 years ago

One of the improvements in version 0.8.2 is power usage : most of the internal and external devices are switched in sleep mode when the display is off to improve the battery life.

This improvement had unwanted side effect : the bootloader cannot initialize properly when the SPI NOR Flash (external flash memory) is in sleep mode. In this case, the bootloader is stuck in an infinite loop and does not run at all. The result for the end user is the display that stays black, and the device that seems bricked. The only known workaround is to wait for the battery to drain completely, which can take some time.

This bugfix version disables the sleep mode on the SPI NOR Flash to ensure that the bootloader will be able to start and run the firmware. Sleep mode will be re-enabled when we’ll be able to update the bootloader using OTA and query its version at runtime.

InfiniTime - InfiniTime, license, documentation, improvements,...

Published by JF002 about 4 years ago

NOTE FOR THE USERS OF SEALED PINETIMES FROM PINE64:
After the firmware and bootloader were sent to production, we discovered 2 critical bugs : one in InfiniTime (https://github.com/JF002/Pinetime/issues/60) and one in the bootloader (https://github.com/lupyuen/pinetime-rust-mynewt/issues/24). These bugs could potentially brick (temporarily) your PineTime when it resets after the OTA from the original 0.7.1 version to this version, or when you force a reset with a long push on the button.
If you apply this update on a sealed PineTime and your device is stuck on a black screen, the only known workaround it to wait for the battery to drain completely before trying again.
If you use a development kit, you can just issue a reset using your SWD debugger. Your device should reboot properly.

Warning! Doing a force reset (long-pressing the button) can cause older bootloader to hang, it is not recommended!

These 2 bugs have since then been fixed (in this version 0.8.2 of InfiniTime and in the bootloader v5.0.4 (https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4). For now, the only way to upgrade the bootloader is via the SWD interface. There's currently no way to OTA a new version of the bootloader to a sealed PineTime.

I recommend you use version 0.8.3 which prevent the bootloader from being stuck in an infinite loop after a reset.

Sorry for the inconvenience.


This release is the first version officially released under the GPLv3 license and under the new name of the project : InfiniTime.

This version brings new features, more documentation, better battery life and improvements for the developers!

Let's talk about the new features! The biggest one is the Music application (thanks to @piggz for this PR) that allows you to control the music playback on your phone (integrated in Amazfish running on SailfishOS). See this video for a demo about this new app.

Next feature is the Touchmodes : each application can select between 2 touch modes : gestures or polling. Gesture mode is the mode that was previously implemented. In this mode, applications are notified when a gesture is detected (tap, swipe,...). In the new Polling mode, the application is notified as soon as a touchevent is detected. It allows the application to follow your finger moving on the screen to build pain application like InfiniPaint, which is also included in this release.

Another interesting feature is the manual validation of the updated firmware. Previously, the new version of the firmware was automatically validated. When the firmware is validated, the bootloader knows that the firmware is running correctly and does not revert to the previous version. Now, the user has to manually validate the new version of the firmware before the next reset. If the new version does not work correctly, the user can choose to reset the device and let the bootloader revert to the previous version. See this page for more information about the firmware validation process.

The battery life has been improved by switching most of the peripherals off when the display is shut down. I've measured a battery life of 7 days with this version. This is good, but in theory, we can do even better!

The last feature to be announced is the new application menu, that can now display multiple page and more than 6 apps!

The documentation has been greatly improved. Please have a look at the main Readme.md file and all the links it contains. There are a lot of informations about the bootloader, build process, branch management, contributions... Thanks to many contributors who helped me write and check the documentation!

On the development side, annoying #include errors and a lot of warnings have been fixed. InfiniTime can be now built using Docker, which is really helpful when you don't want to install the whole development environment on you computer, and to easily produce binaries, images and DFU files for the releases on Github! Thanks to @FWeissenb for his work on this!

During the RC phase, annoying crashes and freezes have been fixed in InfiniTime (https://github.com/JF002/Pinetime/issues/60) and in the bootloader (https://github.com/lupyuen/pinetime-rust-mynewt/issues/24). The bootloader has been updated in the source tree, but this version of InfiniTime is still compatible with the older version of the bootloader.

InfiniTime - [0.8 RELEASE CANDIDATE 3] Small improvements

Published by JF002 about 4 years ago

This new release candidates brings many small improvements:

InfiniTime - [0.8 RELEASE CANDIDATE 2] Bugfix

Published by JF002 about 4 years ago

This new RC fixes the following bugs:

A few typos were also fixed in the documentation (thanks to @Avamander)

During the analysis of https://github.com/JF002/Pinetime/issues/60, a potential bug was detected in the bootloader. An issue has been created to track it : https://github.com/lupyuen/pinetime-rust-mynewt/issues/24

This version will be release as 0.8.1 in Master is no major bug are discovered.

InfiniTime - [RELEASE CANDIDATE 1] InfiniTime, license, documentation, improvements,...

Published by JF002 about 4 years ago

This release is a release candidate version, it's not fully tested yet and could still contain bugs or errors. Please, test it and report issue if you find one!

This release is the first version officially released under the GPLv3 license and under the new name of the project : InfiniTime.

This version brings new features, more documentation, better battery life and improvements for the developers!

Let's talk about the new features! The biggest one is the Music application (thanks to @piggz for this PR) that allows you to control the music playback on your phone (integrated in Amazfish running on SailfishOS). See this video for a demo about this new app.

Next feature is the Touchmodes : each application can select between 2 touch modes : gestures or polling. Gesture mode is the mode that was previously implemented. In this mode, applications are notified when a gesture is detected (tap, swipe,...). In the new Polling mode, the application is notified as soon as a touchevent is detected. It allows the application to follow your finger moving on the screen to build pain application like InfiniPaint, which is also included in this release.

Another interesting feature is the manual validation of the updated firmware. Previously, the new version of the firmware was automatically validated. When the firmware is validated, the bootloader knows that the firmware is running correctly and does not revert to the previous version. Now, the user has to manually validate the new version of the firmware before the next reset. If the new version does not work correctly, the user can choose to reset the device and let the bootloader revert to the previous version. See this page for more information about the firmware validation process.

The battery life has been improved by switching most of the peripherals off when the display is shut down. I've measured a battery life of 7 days with this version. This is good, but in theory, we can do even better!

The last feature to be announced is the new application menu, that can now display multiple page and more than 6 apps!

The documentation has been greatly improved. Please have a look at the main Readme.md file and all the links it contains. There are a lot of informations about the bootloader, build process, branch management, contributions... Thanks to many contributors who helped me write and check the documentation!

On the development side, annoying #include errors and a lot of warnings have been fixed. InfiniTime can be now built using Docker, which is really helpful when you don't want to install the whole development environment on you computer, and to easily produce binaries, images and DFU files for the releases on Github! Thanks to @FWeissenb for his work on this!

InfiniTime - Fix touch controller initialization timing

Published by JF002 about 4 years ago

This bugfix release fixes the initialization sequence of the touch controller. In some cases, when the controller was put to sleep, the init sequence would not reset it correctly, which was preventing the touch screen from working correctly.

The README file has also been re-written and is now (hopefully) easier to read than before.

NOTE : the Clock screen shows a heartrate and step counter indicator. For now, they are just placeholders for a future release and they'll always display '0'. Heartrate sensor and accelerometer are not implemented yet.

About this version
This version is the second release candidate version of the firmware that will be pre-programmed in the next batch of Pinetime devkits! If no critical bugs are found, this version will become this first version of the firmware that'll be shipped with the Pinetime!

It' based on LittleVGL 6.1.2 and NimBLE 1.3.0
I built it using gcc-arm-none-eabi-8-2019-q3-update and nRF5_SDK_15.3.0_59ac345.

Files

  • pinetime-app.* is the standalone firmware (without support for bootloader)
  • pinetime-mcuboot-app.* is the firmware compatible with MCUBoot bootloader
  • pinetime-mcuboot-app.img is the firmware converted into an image for the MCUBoot bootloader (binary format)
  • pinetime-mcuboot-app-image.hex is the firmware converted into an image for the MCUBoot bootloader (hex format)
  • pinetime-graphics.* is a little firmware that write the boot graphics into the SPI flash memory
  • bootloader.hex is the MCUBoot bootloader from @lupyuen
  • pinetime-app-dfu.zip is the DFU file needed for the OTA with NRFConnect
InfiniTime - Memory optimisation, UI improvements, bugfixes

Published by JF002 over 4 years ago

The most visible modification of this release are the slight changes on the UI : smaller icons on the Clock screen, and the icons that replace the texts on the menu screen.
These icons are implemented using the symbol functionality of LVGL, which is easier to use, and which uses less memory space than bitmaps.
Also, a notification will turn the display on so that you can see the notification as soon as it reaches your Pinetime!

Under the hood, I also did a lot of memory analysis to free some space in RAM as it was nearly full. The space available now in RAM should allow us to add many functionalities!

NOTE : the Clock screen shows a heartrate and step counter indicator. For now, they are just placeholders for a future release and they'll always display '0'. Heartrate sensor and accelerometer are not implemented yet.

About this version
This version is the release candidate version of the firmware that will be pre-programmed in the next batch of Pinetime devkits! If no critical bugs are found, this version will become this first version of the firmware that'll be shipped with the Pinetime!

It' based on LittleVGL 6.1.2 and NimBLE 1.3.0
I built it using gcc-arm-none-eabi-8-2019-q3-update and nRF5_SDK_15.3.0_59ac345.

InfiniTime - Update to NimBLE1.3.0 and improve BLE connectivity

Published by JF002 over 4 years ago

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

InfiniTime - Bug fixes and information screen

Published by JF002 over 4 years ago

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,...).