This is a fork of the InfiniTime firmware for the Pinetime smartwatch.
While maintaining most of the "under the hood" machinery of InfiniTime, this fork changes the way the display application works in significant ways:
- It decouples the display implementation from the base system by using interfaces and a container class for the device's controllers and drivers.
- The way a user interacts with the display is defined using a screen graph which contains all possible transitions between the screens and the triggers of these transitions.
- It comes with a specific base class for watch faces, which simplifies the development of new watch faces by providing ready-to-use common functionality such as handlers for time and date change events, widget creation helper functions, etc.
- A Qt mockup project is provided which allows for easy development of new screens. It provides mockups for most of the controllers and the system interface, so that you can share the very same screen source files between the Qt application and the actual firmware.
At the moment there are three watch faces: analog, digital and binary.
The watch faces can be locked and unlocked by pushing the side button. This feature is helpful to protect against unintended touch inputs when you wear the watch all day long.
Screens have been implemented for setting the brightness, the display wake up modes and the activity goal (steps per day).
New screens can be developed in the Qt mockup project. Swiping, tapping and pushing the side button can be simulated using the mouse.
The mockup provides GUI elements to generate different inputs from the watch's (mockup) controllers. That way, you can properly test the behavior of new screens before embedding them into the firmware.
The inner workings of the firmware are shared with InfiniTime:
- Build system based on CMake;
- Based on FreeRTOS 10.0.0 real-time OS.
- Using LittleVGL/LVGL 7 as UI library...
- ... and NimBLE 1.3.0 as BLE stack.
To get the most out of your Pinetime smartwatch, you can use a companion app which acts as a data provider for the watch.
- Gadgetbridge (on Android via F-Droid)
- Amazfish (on SailfishOS and Linux)
- Siglo (on Linux)
- [Experimental] WebBLEWatch Synchronize time directly from your web browser. video
- [Experimental] Infini-iOS (on iOS)
- Getting started with InfiniTime 1.0
- Flash, upgrade (OTA), time synchronization,...
- Bootloader based on MCUBoot
to be continued...
- Project branches
- Versioning
- Files included in the release notes
- Build the project
- Flash the firmware using OpenOCD and STLinkV2
- Build the project with Docker
- Build the project with VSCode
- Bootloader, OTA and DFU
- Stub using NRF52-DK
- Logging with JLink RTT.
- Using files from the releases
This project is released under the GNU General Public License version 3 or, at your option, any later version.
It integrates the following projects:
- RTOS : FreeRTOS under the MIT license
- UI : LittleVGL/LVGL under the MIT license
- BLE stack : NimBLE under the Apache 2.0 license
- TODO: Add license of fonts
All the credits go to the contributors of InfiniTime. :)


