github InfiniTimeOrg/InfiniTime 1.14.0
InfiniTime 1.14 "Quince Fruit"

3 months ago

Let's start the new year with a new version of InfiniTime!

Here is a summary of the changes and addition of InfiniTime 1.14:

  • Reduced memory footprint in flash memory: the analog watch face draws the background at runtime instead of using a pre-defined background picture and we moved the font for the navigation app to the external memory.
  • Improved raise-to-wake algorithm and new lower-to-sleep functionality
  • New weather service and new setting to select °C/°F
  • The build system now allows to easily select which user applications and watch faces are built into the firmware
  • Replace the node.js tool that convert the images (lv_img_conv) by a custom re-implementation in Python
  • InfiniLink, the iOS companion app has a new maintainer!

Let get into more details!

Memory usage is a major concern for the developer team. The amount of memory in the PineTime is fixed and not extensible. We have to take a great care with memory usage to ensure that all the functionalities fit into this limited space. In InfiniTime 1.14, we were able to free ~40KB in the internal flash memory, which is around 8.5% of the available space! To reach this achievement, @minacode helped to make some changes in the Analog watch face: it now draws the background at run-time instead of drawing a pre-defined picture as background. This background picture alone weighted for ~15KB! As a bonus, the analog watch face is now much faster since drawing the picture was quite slow. We also moved the fonts for the Navigation app to the external memory (resources) to free another 19KB!

@FintasticMan did a great job improving the raise-to-wake algorithm (the feature that wakes the watch up when you raise your wrist to look at your watch) and also added a new lower-to-sleep functionality that is a nice complement to the raise-to-wake: it puts the watch to sleep when you lower your wrist. Those improvements help with the battery life since they reduce the false positives in the raise detection and put the watch to sleep faster to save a bit of power.

InfiniSim_2024-01-06_142333

InfiniTime 1.13 brought the weather integration in PineTimeStyle watch face. This feature finally allowed users to use the weather functionality from InfiniTime and companion apps. We however received multiple bug reports about this feature : the info displayed by InfiniTime were not consistent with the companion apps, the fonts on the watch would be corrupt on the display and the watch would simply crash after some time.
In this release, we've made a new implementation of the weather service, which is much simpler, more reliable and uses less memory. It also comes with a new BLE API, which means that companion apps will have to integrate it to make the weather feature working again. Amazfish already supports it in version 2.2.1 (thanks to @jmlich and @piggz for their help!) and it will be available in the next release of Gadgetbridge. Other companion apps will hopefully integrate it soon!

Note: we removed the previous implementation of the weather service, so the weather feature won't work until you update your companion app to a version that integrates this new API.

If you are a companion app developer, feel free to reach out to us if you need help with the integration!

Oh and cherry on the cake: we also added a new settings to choose between °C and °F !

InfiniSim_2024-01-06_142319

InfiniTime is a monolithic firmware: everything is built into a single binary file: OS, drivers, BLE stack, applications and watch faces. We recently improved our build system so that it's now much easier to select which watch faces and applications are built into the firmware. Just by recompiling the firmware with a few CMake options, you can now easily build a custom version of InfiniTime that contains your selection of apps and watch faces, displayed in the order you like. You can for example build InfiniTime with no user application and a single watch face that uses only ~300KB in the internal flash memory!

Images used in InfiniTime must be converted from their original format (jpeg, png) into a specific binary format supported by LVGL, the FOSS UI library integrated in the project. We previously used a tool provided by LVGL to do this conversion. However, this tool, based on node.js was not easy to deploy and install. To overcome this issue, @NeroBurner decided to re-implement the subset of functionalities we need in Python. This new script has fewer dependencies and makes the development environment easier to setup.

Let me end this release note with a great news: InfiniLink, the iOS companion app has a new maintainer! @liamcharger took over the project and will hopefully bring improvements and new features to InfiniLink!

As always, I would like to thank everyone who contributed to this new release of InfiniTime!

Notes about this release

The format of the settings file changed since InfiniTime 1.13 so the settings might be reset to their default value after the update.
The resource file was updated to integrate the font for the Navigation app. You'll need to update the resources to be able to use this app.

Unfortunately there is a bug with v0.77.0 of Gadgetbridge on Android 14, that means that it can't update InfiniTime. We have submitted a fix, which will be available in the next release of Gadgetbridge. In the meantime, you can use another device to do the upgrade or use a nightly build of GadgetBridge (it's recommended to use the no pebble flavour, as that can be installed alongside your existing GadgetBridge app).

PRs merged since last release
Full list of changes

Thanks

@minacode @TailyFair @SteveAmor @FintasticMan @JF002 @NeroBurner @kieranc @blm768 @Alex-EEE @szsam @mark9064 @everypizza1 @liamcharger

Contribute

Everyone is very welcome to report any new bugs they encounter, features they miss, send InfiniTime some code or to simply donate.

Don't miss a new InfiniTime release

NewReleases is sending notifications on new releases.