Releases: InfiniTimeOrg/InfiniTime
InfiniTime 1.15.0 "Ribes rubrum"
We haven't released a new version of InfiniTime for almost a year, so we are very happy to release InfiniTime 1.15.0 today! The list of changes is quite impressive! I would like to thank everyone who took part one way or another in this new milestone for the InfiniTime project!
Always-on display is a highly requested feature for a long time. Even if the hardware of the PineTime is not designed for such feature, @KaffeinatedKat and @mark9064 managed to make it possible by doing a lot of power and code optimizations. When enabled, the AOD feature will dim the brightness to the lowest level and put the display in a low-power mode to save as much battery power as possible while still allowing the user to read the time. According to our measurements and testing, the PineTime should last around 2-3 days in this mode.
You can enable the AOD in the "Display" settings
InfiniTime 1.15 also adds a new weather forecast application that displays the forecast for the next 5 days. Thanks to @vkareh for this nice addition!
A new dice rolling app (by @yusufmte) was also added in this new release of InfiniTime. This new app will come in handy for tabletop players, for example.
The alarm is now saved in the settings file in the SPI NOR flash. This will ensure that the alarm is restored whenever the watch reboots (after an upgrade, for example). Thanks @NeroBurner !
InfiniTime 1.15 also brings many other improvements to the firmware, the CI and the documentation, along with bug fixes and code improvements!
Another small but notable change is that the watch's default year is now set at compile time, so you don't need to increase the year counter since 1970 when you want to manually set the time! Thanks to @FintasticMan for this nice quality of life improvement!
I would also like to take the opportunity to welcome @mark9064 in the @InfiniTimeOrg/core-developers Team! @mark9064 contributed to many high quality additions and improvements to InfiniTime, and I'm really happy he accepted to join our team!
What's Changed
- Update pre-commit hook by @FintasticMan in #1511
- WatchFacePineTimeStyle: Fix conditional in weather display by @vkareh in #1965
- Split declaration and implementation of GetSymbol by @ljahn in #1969
- lv_img_conv: support other modes like 'P' by @NeroBurner in #1989
- New dice-rolling app: InfiniDice! by @yusufmte in #1326
- Fix motion service not updating when sleeping by @FintasticMan in #1970
- WatchFaceDigital: Add weather display by @vkareh in #1856
- Missing character for navigation font by @kieranc in #2005
- SimpleWeatherService: Add forecast operator overrides by @vkareh in #2011
- Remove GFX (and unused GFX dependencies) by @mark9064 in #2010
- WatchFaceDigital: Move weather widget away from status icons by @vkareh in #1998
- Change Acceleration Values to milli-g units rather than Raw Counts by @jones139 in #1950
- Alarm: Replace clock icon with bell by @vkareh in #1996
- Fix OOB flash write when DFU interrupted by @mark9064 in #2020
- README: Make hex and UTF-8 code consistent for the chosen example by @timteichmann in #1993
- weather: Add new app with forecast by @vkareh in #1995
- README: Fix broken URLs by @vkareh in #2025
- Fix chimes by @mark9064 in #2019
- Simplify ISR task wake checks by @mark9064 in #2018
- lowersleep: Improve algorithm by checking wrist angle by @FintasticMan in #2014
- ApplicationList: Reset app menu screen when loading watch face by @vkareh in #2009
- Fix conflicts of min and max from stl_algo.h included from stdatomic by @PwnVerse in #2026
- Fix and update documentation by @idealemu in #2036
- chrono: Resolve TODOs related to C++20 chrono feats by @FintasticMan in #2016
- Fix bluetooth setting : emit the radio toggle message only if the value of the setting changed by @JF002 in #2037
- WatchFaceDigital: Remove unused variables by @vkareh in #2039
- Unify docker devcontainer with dockerfile used for CI by @BloodStainedCrow in #1587
- Heartrate app displays --- instead of 000 by @KaffeinatedKat in #1887
- SPI transaction hooks by @mark9064 in #2046
- LCD delay improvements by @mark9064 in #2043
- Fix erratum 58 workaround by @mark9064 in #2042
- Fix MotorController::Init call order by @pipe01 in #2070
- Remove unnecessary BMA421 reads by @pipe01 in #2064
- Continuous time updates by @mark9064 in #2041
- README: Change links from Pine wiki to new documentation by @1Maxnet1 in #2076
- Batch display command arguments by @mark9064 in #2059
- Always on display by @KaffeinatedKat in #1869
- Display the SPI flash JEDEC IDs in SystemInformation. by @JF002 in #2097
- Upload standalone ELF build as artifact by @pipe01 in #2083
- Remove space before colon by @everypizza1 in #2090
- Advertise HR service by @mark9064 in #2088
- Documentation improvements by @everypizza1 in #2091
- DisplayApp: Go to clock on wakeup if no app loaded by @vkareh in #1980
- Size optimise NRF SDK build by @mark9064 in #2102
- Use DirtyValue for timer by @mark9064 in #2103
- Clean unused DisplayApp messages by @mark9064 in #2104
- Restrict debugging monitor to debug builds by @mark9064 in #2105
- notifications: Dismiss to watchface when empty by @eliedrian in #1716
- SystemTask state refactor by @mark9064 in #2109
- Refactor doNotGoToSleep to a wakelock counter by @mark9064 in #2107
- Atomic HRS reads by @mark9064 in #1845
- Hrs3300: fix includes for std::begin/std::end by @NeroBurner in #2128
- Alarm persist to flash by @NeroBurner in #1367
- Remove unused pointer to DisplayApp member variables by @NeroBurner in #2125
- MusicService: add missing includes for TickType_t and xTaskGetTickCount by @NeroBurner in #2130
- Remove unused submodule QCBOR by @NeroBurner in #2138
- README: Header redesign by @liamcharger in #2032
- AOD fixup by @mark9064 in #2106
- datetime: Set the default year to the year during compile by @FintasticMan in #2133
- SimpleWeatherService #include by @lmamane in #2148
- Clear ongoing taps when going to sleep by @mark9064 in #2108
- Update Date&Time settings label for "Date & Time" by @ajira86 in #1782
- weather: Add function for converting to units by @FintasticMan in #2015
- Weather: fix min and max temperature being switched by @lmamane in #2168
- Update Amazfish details in README.md by @jmlich in #2167
- ci: Normalise slash-containing
github.head_ref
values by @shymega in #2166 - Fix git hash calculation with Docker build by @febrezo in #1935...
InfiniTime 1.14.1
This is a small patch version of InfiniTime 1.14.1 that adds a very small feature : the JEDEC IDs of the SPI flash memory chip are now displayed in the SystemInfo application.
We released this new version when PineStore notified us that the current flash memory chip is EoL (end of life) ) and will be replaced by another one.
Following this announcement, we published on a upgrade of the bootloader.
InfiniTime did not really need any changes to run on the new chip, but it might be useful in the future to know exactly which chip is installed, hence this small patch.
Both the bootloader 1.0.1 and InfiniTime 1.14.1 has been sent to the production team of the PineTime. All new PineTimes will be flashed at the factory with those versions.
Please note that you don't need to update to InfiniTime 1.14.1 if you already run 1.14.0 since this new version does not bring any other new feature or patch.
InfiniTime 1.14 "Quince Fruit"
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.
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 !
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). The fix for this is included in v0.78.0 of GadgetBridge!
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.
InfiniTime 1.13 "Pomegranate"
Highlights
- New heart rate processing algorithm, provides more accurate and faster results
- New memory management (heap unification)
- Weather integration in PineTimeStyle watch face
- Power optimizations
- Bug fix in shake wake
- InfiniSim : New status window
Improved heart rate algorithm
The improved signal processing algorithm for the heart rate sensor was contributed by @Ceimour. They reworked the signal processing code that converts the raw values returned by the sensor, and also fine-tuned the senor settings. All in all, this new algorithm should return results faster (6.4s) and more often (each 800ms) than the previous one. You'll find more information about this change in this comment by Ceimour.
New memory management aka Heap Unification
InfiniTime was previously allocating 3 memory "heaps" (memory area managed by software modules) : one for FreeRTOS, one for LVGL and one "global" heap allocated by the C++ standard library.
To make memory usage more efficient, and to make the monitoring of the memory usage easier, we merged these 3 heaps into a single one managed by FreeRTOS.
This change allows us to have a better overview of the memory usage and reduces the overhead generated by multiple heaps.
See this page for more information about this change.
Weather in PTS
The ground work in the form of the weather service was introduced in InfiniTime 1.8. It enables companion applications to send weather information, which is then available in InfiniTime for processing and display.
However, apart from a debug application (which is not available in released versions), InfiniTime did not display this information... until now. Thanks to @kieranc, the watch face PineTimeStyle now displays the weather forecast sent by the companion app. Please see the documentation on the Pine64 wiki here and here. To enable it, press and hold on the watch face, tap the settings icon and enable weather. The temperature displayed is in Celsius.
Improved battery life
Following @aykevl's recommendations on the wiki, we were able to reduce the idle power consumption down to around 200µA, where it would use ~900µA previously! The PineTime can now easily run more than 10 days, while it would need to be recharged after 3-5 days previously!
See this issue for more information!
InfiniSim
The status window in InfiniSim was redesigned by @Brod8362 and now displays the status of BLE connection, brightness, charger, battery and alarm much more clearly!
Notes about this update
The resource file was not updated since InfiniTime 1.12, you don't need to update it if you already flashed the file from the previous release.
PRs merged since last release
Full list of changes : 1.12.0...1.13.0
Thanks
@Riksu9000 @fossison @FintasticMan @Ceimour @minacode @Elara6331 @kieranc @NeroBurner @ic-27 @TimothyRab @Brod8362
Contribute?
Everyone is very welcome to report any new bugs they encounter, features they miss, send InfiniTime some code or to simply donate.
InfiniTime 1.12 "Olallieberry"
InfiniTime 1.12 is the result of nearly 6 months of work from the community and from the @InfiniTimeOrg/core-developers team!
During this (very) long development cycle, we focused mainly on the maintenance of the project : make the code more readable and easier to extend, optimize the memory usage, improve the CI workflows,...
InfiniTime 1.12 also brings some improvements many users were waiting for like a better estimation of the battery level!
Project maintenance
We wrote a new maintainers guide and updated and improved the contributing guide. These documents will provide a better overview about the project organization and management : how to contribute to the project, what is the review process,...
We also applied many refactoring and optimizations that reduced the memory usage of the code (both in RAM and Flash) and that make it more easy to maintain.
Last but not least, we also added a new workflow in our CI (based on Github Actions) that automatically compares the changes in the PRs with the original branch and that displays a nice overview of the memory usage of those changes. This is very useful to check the impact of the changes regarding the memory usage!
Oh and finally, we added Watchmate to the [list of companion apps that support InfiniTime]!
Battery level monitoring
Many users noticed that the battery level displayed in InfiniTime was a bit optimistic, and that their PineTime would shut down because of a flat battery while InfiniTime still displayed 40% of battery level. In InfiniTime 1.12, we improved the battery level monitoring and implemented a new discharge curve. The battery level monitoring should now be more accurate than before!
InfiniTime will also notify the users that they should charge their PineTime by drawing the battery indicator in yellow.
UI
InfiniTime 1.12 brings a few improvements in the UI.
The settings for the date and time are now combined in a single setting page:
We updated the settings list style (the background of the items is now gray) to make it more consistent with other parts of the UI:
Notes about this update
The resources package was not updated for this release, so there's no need to re-install it.
The resources package was slightly updated to add a missing character to the font used by the Infineat watchface. Updating the resources is recommended, especially if you use this watchface.
PR merged since last release
Full list of changes : 1.11.0...1.12.0
Thanks
@cybuzuma @minacode @Elements6007 @NeroBurner @JF002 @hassless @AlexXZero @kieranc @tom-programming @Avamander @Riksu9000 @jonvmey @AlexXZero @tgc-dk @tnixeu @FintasticMan @JohnBlood @TailyFair @azymohliad
Contribute?
Everyone is very welcome to report any new bugs they encounter, features they miss, send InfiniTime some code or to simply donate.
InfiniTime 1.11 - FOSDEM 2023 edition
Free and Open source Software Developers' European Meeting (FOSDEM) is a non-commercial, volunteer-organized European event centered on free and open-source software development. It is aimed at developers and anyone interested in the free and open-source software movement. It aims to enable developers to meet and to promote the awareness and use of free and open-source software.
FOSDEM is held annually, usually during the first weekend of February, at the Université Libre de Bruxelles Solbosch campus in the southeast of Brussels, Belgium.
After 2 virtual editions FOSDEM 2023 will take place at the ULB (Brussels, Belgium) on the 4th and 5th of February 2023
I want to celebrate this by releasing a special edition of InfiniTime : InfiniTime FOSDEM 2023 edition! Based on InfiniTime 1.11.0, it proudly shows the FOSDEM logo on the Analog and Digital watchfaces.
Feel free to flash your PineTime with this special edition if you plan to attend FOSDEM this year. And who knows, maybe meet other happy PineTime users :)
How to install this version ?
The installation procedure is exactly the same than for any other release of InfiniTime : update the firmware using the companion app of your choice, and then install the external resource packages (supported by ITD and Amazfish at this time). Please have a look at the release note of InfiniTime 1.11 for more info!
Note that this is a oneshot version : those changes won't be integrated in the development branch of InfiniTime and won't be available in next versions of InfiniTime.
InfiniTime 1.11 "Red Nectarine"
InfiniTime 1.11 "Red Nectarine" introduces the support for external resources!
Until now, all images and fonts had to be built in the main firmware which uses a lot of space in the main program memory. This new feature allows us to store those heavy data into the external flash memory. This will obviously bring a bit of fresh air to InfiniTime: we’ll be able to move some of the current pictures and fonts to the external memory and also add new apps and watch faces.
InfiniTime 1.11 also introduces 2 new watch faces that leverage the external resources feature: Infineat and G7710. Infineat is a stylish and colorful watch face that displays the time, date, BLE status, step count and also the battery level using an animated Pine64 logo. The G7710 watch face is inspired by a well known LCD watch. The memory usage of those contributions was the only reason why we couldn’t integrate them in InfiniTime sooner, and I’m really happy we are finally able to!
As always, this new version comes with many additions, improvements and bugfixes. You’ll find a detailed list in the bottom of this release note!
How to upgrade to InfiniTime 1.11 and install the external resources
You can update to InfiniTime 1.11 as you’ve always done: download the DFU ZIP file and use the companion app of your choice to update the firmware over the air.
This simple operation will bring all the additions and improvements we’ve done in InfiniTime 1.11 except… the new watch faces: they are grayed out in the settings:
To enable those new watch faces, you’ll need to install the new resource package. This package contains all the fonts and pictures needed by the watch faces and must be installed separately from the firmware. The installation procedure of the resources package is very similar to the update procedure of the firmware. But, as this is a very new feature, not all companion apps support it.
ITD integrated support for external resources in version 0.0.8.
It's also merged in Amazfish, and a new version with those changes should be published very soon.
Other companion apps will hopefully add support for this new feature soon ! Let's give the companion app developers time to integrate and release this new feature ;-)
You’ll find more details about the installation procedure in the documentation.
Once the installation is done, Infineat and G7710 should be available in the settings:
Enjoy!
InfiniSim and External Resources
Shiny new watch faces using external resources want to be created. InfiniSim provides a safe way to hack on apps and watch faces, but we need a way to provide those resources to InfiniSim.
Welcome littlefs-do
to the InfiniSim repository!
This new little command line program helps us work on the SPI-raw file used to simulate the external memory of the PineTime. It can list files inside the SPI-raw file using the ls
command, copy files into and out using cp
, create and remove directories with mkdir
and rmdir
and much more.
Making working with external resources a breeze littlefs-do can load a resource.zip
into the SPI-raw file using the command ./littlefs-do res load resource.zip
.
For more information on all the helpful commands of littlefs-do see the littlefs-do section of the documentation.
But where does one get this resource .zip file? Download it from GitHub or build the InfiniTime firmware? Both are valid options, but for development with InfiniSim, it would be cumbersome to constantly leave the InfiniSim repository. To solve that the resource file is created when compiling InfiniSim and can be found in the build directory under build/resources/infinitime-resources-1.11.0.zip
.
Additions
- Created a document to better communicate the vision of InfiniTime project to users, developers and everyone else
- Compatibility with LFCLK calibration and reduced the power consumption of Nimble
- Limit backlight brightness when flashlight is off
- Watch face inspired by the G7710, with day of year and week number info (+ battery level %)
- Infineat watch face + its external resources
- Added pink color for PinetimeStyle watch face
- PineTimeStyle watch face : make step count display configurable (full gauge for step count, half gauge with seconds and numerical display of the step count).
Improvements
- SystemInfo: Display target build variant
- Use Counter widget in SettingSetTime
- Reset timer by long pressing on the button
- Reorganized documentation
- Date formats: Use ISO 8601 to avoid confusion
- Bunch of code cleanup
- Add status icons widget
- Use Counter widget in Alarm
- More timeout options
- Notification swap text colors
- P8: Mirror the display for P8b variant
- Improved checkbox visibility
- Add sleep mode
- Package resources + a metadata file into a single .zip file
- Improve status icon visibility
Bug Fixes
- motorController: Fix infinite vibration on RunForDuration(0)
- Build automation workflow fixes and improvements
- Brightness is always restored on app switch
Thanks
- @Riksu9000, @StarGate01, @JF002, @earboxer, @dmlls, @minacode, @NeroBurner, @mashuptwice @Akselmo, @ITCactus, @ght, @FintasticMan @kieranc and everyone else who contributed!
Contribute?
Everyone is very welcome to report any new bugs they encounter, features they miss, send InfiniTime some code or to simply donate.
Full list of changes: 1.10.0...1.11.0
InfiniTime 1.10.0 "Yellow Mango"
It's time for the next version of InfiniTime! This new version is the result of nearly 3 months of work from 20 contributors who made 53 pull-requests and 136 commits! Thanks to everyone who contributed to the new version of InfiniTime!
InfiniTime 1.10 contains a lot of changes. Even if most of them will not be visible to the end users, they are very important for the maintenance of the project. We improved a lot, fixed a handful of bugs, improved the build process and the CI in Github Actions, published an official docker container and even fixed a single pixel in the font!
InfiniTime 1.10 also contains changes that most of you will be able to enjoy like... the possibility to dismiss notifications by right swiping them! I know a lot of users were asking for this feature and we hope you'll enjoy it!
InfiniSim has also received great improvements like support for the animations during transitions and GIF recording! The following GIF was recorded with InfiniSim to showcase the new notification dismissal feature:
The Timer app has also received an UI overhaul that greatly improves the user experience. The buttons are easier to press and you can hold them down to quickly change the value.
Here are the main changes in InfiniTime 1.10:
Improvements
- Notifications can now be dismissed by right swiping on the notification
- Faster sleep time
- New sharper battery icon
- Timer UI was overhauled
- Tweaked and improved display gamma to improve the colors displayed by the LCD
- Flashlight now defaults to max brightness
Bug fixes
- Fixed track progress in Music app
- Fixed alarm sometimes not ringing
Under the hood
- Auto-generate fonts at build time
- Updated the GCC toolchain
- Github Actions now build the project using the Docker InfiniTime-build docker container
- Added basic hardware configuration options for P8
- And many many many other improvements in the code, build system and user interface!
InfiniSim
- Added support for GIF screen capture
- Implemented the screen transition and animations from InfiniTime
- Implemented SpiNorFlash and FS
Thanks to everyone who contributed to this release: @StarGate01 @Riksu9000 @FintasticMan @NeroBurner @mabuch @luzpaz @sethitow @FederAndInk @JF002 @yehoshuapw @rev22 @minacode @ildar @kieranc @dmlls @Avamander
Full diff: 1.9.0...1.10.0
InfiniTime 1.9.0 "Limeberry"
It's been almost 3 months since the last release of InfiniTime. A lot of work happened since them, and I'm happy to announce the release of InfiniTime 1.9 !
New Features:
- Terminal watchface (#932)
- Enable/Disable BLE (#888 #1065)
- InfiniSim, the LVGL simulator for InfiniTime
Improvements:
- Improve notification and call notification timeout (#903)
- Improve heart-rate measurements (#531 #876)
- Improve Alarm App (#945)
- Better 12-hours mode integration (in settings, alarm and status bar) (#821, #938, #907)
- Code cleanup and many improvements needed by InfiniSim
Bug fixes:
- Fix display corruption when the timer is triggered (#1053)
- Fix freeze in Music app when the title/album name were too long (#1036 #1054)
The most visible feature of this release is certainly the new Terminal watchface by Zephyrlabs and 13werwolf13. This watchface displays all the information you need (time, date, battery level, steps,...) as if they were displayed in a Linux terminal. Let your inner geek express itself through it !
The bluetooth enable/disable mode (previously called airplane mode) is contributed by Evergreen22. By disabling all BLE communication, this feature allows you to save a bit of battery life and also to preserve your privacy.
A few weeks ago, NeroBurner joined the InfiniTime Github organization and released InfiniSim, the LVGL simulator for InfiniTime. This simulator allows you to easily test and debug new developments on your PC before testing them on the actual hardware. NeroBurner did a great job with the simulator and also created many PRs that improved the code of InfiniTime so the integration with the simulator would be easier. He also created new Github Actions workflows that automatically build the simulator when a pull-request is created on InfiniTime, which will help us ensure both project will be kept in sync.
InfiniTime 1.9 also improves the heart-rate measurements, the 12-hours mode, the notifications and call notifications and the Alarm app.
And, as usual, we fixed a few bugs and applied a few code cleanings!
Thanks to everyone who contributed to this release : @Riksu9000 @NeroBurner @yehoshuapw @hatmajster @eliwss0 @Zorvalt @mruss77 @13werwolf13 @evergreen22 @Arsen6331 @aveeryy @medeyko @JF002 @ZephyrLabs and many many others!
Full diff : 1.8.0...1.9.0
InfiniTime 1.8.0 - 🥝 Fuzzy Kiwi 🥝
Improvements:
- Improved gesture consistency (#720)
- Digital watchface: Changed the color of the BLE icon to the official "Bluetooth™ blue" (#556)
- PineTimeStyle: Integrated color picker into the watchface (long tap on the PTS watch face, and then tap on the gear icon that appears to open the color settings) (#718)
- PineTimeStyle: Fixed alignment of the icons (#869)
- Settings: Styled checkboxes as radio buttons (#679)
- Paddle: Speed randomization (#797)
- InfiniPaint: Vibration on color change (long tap to change color when running InfiniPaint) (#803)
New features:
- BLE secure pairing (#796 - #886)
- BLE file system API (#756 - #839)
- Weather service (integrations are planned for the future) (#353)
- Trip meter in Step app (#764)
- Chimes: Short vibration every hour or half an hour. Settings are available in the 3rd page of settings (#813)
- Shake to wake: The calibration of the sensitivity is available in the 3rd page of settings (#691)
Bugs fixed:
- Removed misleading info in SystemInfo app (#785)
In addition to the previously listed things there was also a bunch of housekeeping and documentation improvements done.
This release contains 47 pull requests and 232 commits in total.
This release brings the BLE secure pairing. When enabled by the companion app, this feature makes the BLE connectivity much more secure: InfiniTime displays a PIN code that the user must enter in the companion app. The connection is accepted only if this PIN code matches. The change makes transport encryption possible. Last but not least, this new mode makes the (re)connection a lot more reliable and fast, and it should resolve most if not all reconnection issues some users still encounter.
For now, the secure pairing is optional, and companion apps can still use the legacy (unsecured) mode, but we'll probably disable this legacy mode in the future to improve the security and privacy of InfiniTime. So, if you are a contributor to a companion app for InfiniTime, please check that your app supports this secure pairing mode!
For example, if you are using Gadgetbridge on Android, a prompt will ask you if you want to pair with your watch. Previously, we recommended to select "Do not pair" as pairing was not supported. Now, you can accept the pairing, which will enable this secure pairing mode. Using NRFConnect, you can enable this feature by selecting the Bond option when connecting to your watch.
This release also include 2 features that are not yet visible to the end-users: the weather service and the BLE file system API. Those feature were merged to allow developers and contributors of companion apps to implement them while we are working on their integrations in InfiniTime.
The weather service, as its name says, is a BLE API that allows the companion app to send weather data (temperatures, forecasts, ...) so InfiniTime can display it. The API is ready, but we still need to work on a weather app, and on integrating the weather info into the watchfaces.
The BLE file system API allows the companion app to send files to the external SPI flash memory. The ultimate goal is to offload the storage of static resources (bitmaps, fonts, ...) from the (relatively small) internal memory (512kB) to the external memory (4MB) and this API brings us a little closer to that goal.
Thank you @stephanie-eng, @SteveAmor, @geekbozu, @jharmer95, @Riksu9000, @kieranc, @Avamander, @NeroBurner, @eliwss0, @hubmartin, @evergreen22, @Arsen6331, @clemensvonmolo, @JF002 and @mabuch for your contributions.
Also thank you for your support of the project on LiberaPay and elsewhere.
Full diff: 1.7.1...1.8.0
Note to Gadgetbridge users : Please update to the latest version of Gadgetbridge (0.64.0 from F-Droid) before trying to update InfiniTime. We recently found an issue in Gadgetbridge 0.63.1 that confused the OTA in InfiniTime. Version 0.64.0 will fix the error message at the beginning of the OTA.