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

Overview

InfiniTime

Build PineTime Firmware

InfiniTime logo

The goal of this project is to design an open-source firmware for the Pinetime smartwatch :

New to InfiniTime?

Overview

Pinetime screens

As of now, here is the list of achievements of this project:

  • Fast and optimized LCD driver
  • BLE communication
  • Rich user interface via display, touchscreen and pushbutton
  • Time synchronization via BLE
  • Notification via BLE
  • Heart rate measurements
  • Step counting
  • Wake-up on wrist rotation
  • Quick actions
    • Disable vibration on notification
    • Brightness settings
    • Flashlight
    • Settings
  • 3 watch faces:
  • Multiple 'apps' :
    • Music (control the playback of music on your phone)
    • Heart rate (measure your heart rate)
    • Navigation (displays navigation instructions coming from the companion app)
    • Notification (displays the last notification received)
    • Paddle (single player pong-like game)
    • Twos (2048 clone game)
    • Stopwatch
    • Steps (displays the number of steps taken)
    • Timer (set a countdown timer that will notify you when it expires)
    • Metronome (vibrates to a given bpm with a customizable beats per bar)
  • User settings:
    • Display timeout
    • Wake-up condition
    • Time format (12/24h)
    • Default watch face
    • Daily step goal
    • Battery status
    • Firmware validation
    • System information
  • Supported by 3 companion apps (development is in progress):
  • OTA (Over-the-air) update via BLE
  • Bootloader based on MCUBoot

Documentation

Develop

Build, flash and debug

Contribute

API

Architecture and technical topics

Using the firmware

TODO - contribute

This project is far from being finished, and there are still a lot of things to do for this project to become a firmware usable by the general public.

Here a quick list out of my head of things to do for this project:

  • Improve BLE communication stability and reliability
  • Improve OTA and MCUBoot bootloader
  • Add more functionalities : Alarm, chronometer, configuration, activities, heart rate logging, games,...
  • Add more BLE functionalities : call notifications, agenda, configuration, data logging,...
  • Measure power consumption and improve battery life
  • Improve documentation, take better pictures and video than mine
  • Improve the UI
  • Create companion app for multiple OSes (Linux, Android, iOS) and platforms (desktop, ARM, mobile). Do not forget the other devices from Pine64 like the Pinephone and the Pinebook Pro.
  • Design a simple CI (preferably self-hosted and easy to reproduce).

Do not hesitate to clone/fork the code, hack it and create pull-requests. I'll do my best to review and merge them :)

Licenses

This project is released under the GNU General Public License version 3 or, at your option, any later version.

It integrates the following projects:

Credits

I’m not working alone on this project. First, many people create PR for this projects. Then, there is the whole #pinetime community : a lot of people all around the world who are hacking, searching, experimenting and programming the Pinetime. We exchange our ideas, experiments and code in the chat rooms and forums.

Here are some people I would like to highlight:

  • Atc1441 : He works on an Arduino based firmware for the Pinetime and many other smartwatches based on similar hardware. He was of great help when I was implementing support for the BMA421 motion sensor and I²C driver.
  • Koen : He’s working on a firmware based on RiotOS. He integrated similar libs as me : NimBLE, LittleVGL,… His help was invaluable too!
  • Lup Yuen Lee : He is everywhere: he works on a Rust firmware, builds a MCUBoot based bootloader for the Pinetime, designs a Flutter based companion app for smartphones and writes a lot of articles about the Pinetime!

If you feel like you should appear on this list, just get in touch with me or submit a PR :)

Issues
  • Watch does not automatically reconnect to GadgetBridge after turning airplane mode on and off

    Watch does not automatically reconnect to GadgetBridge after turning airplane mode on and off

    InfiniTime version: 1.0.0 RC3 Gadgetbridge version: 0.56.1

    Steps to reproduce:

    1. Pair InfiniTime with Gadgetbridge, enable the "Reconnect automatically" setting in GB
    2. While the two are connected turn airplane mode on and then off after the watch is disconnected
    3. GB tries to reconnect, first with status "Connecting" and then gets stuck with "Waiting for reconnect"

    The workaround I have found is to fully disconnect in GB - status "Not connected" and then pair the watch again. Restarting the watch or Gadgetbridge did not seem to help.

    I don't know if the problem is with GB or IT but it would be nice if the two could automatically reconnect in this scenario if possible.

    bug 
    opened by GithubUser5462 105
  • Connect and bond with a passkey

    Connect and bond with a passkey

    Add Feature - Connect and bond with a passkey

    • [X] Passkey pairing - passkey is displayed on watch and entered on phone
    • [X] Swipe down to clear passkey screen
    • [X] Connection encryption
    • [X] Connection bonding
    • [X] Automatic reconnects to bonded peripheral*
    • [X] Trusted device on Android
    • [X] Persist bond between reboots

    * ~~Rebooting the watch will cause reconnect failures. You must delete the bond from the phone to reconnect/pair. Persisting the bond between reboots will resolve this.~~

    Closes #224 Closes #302 Closes #502

    There are several tasks listed below that I have listed as future work in order to make this PR easier to review and test.

    Future work includes the following tasks:

    • Investigate encrypting other characteristics
    • Explore if a delete bond option in settings is desirable/needed
    • Enable RPA
    • Automatically clear the passkey screen on pairing completion
    • Enable the whitelist to conserve power and prevent non-bonded devices from pairing
    enhancement needs testing 
    opened by evergreen22 54
  • New touch handler

    New touch handler

    • Greatly improved responsiveness. Demonstration in #471.
    • TouchModes are no longer needed.
    • LVGL is now correctly told about the touch positions and times. Dragging, holding and long pressing etc. should now always work correctly. LVGL isn't aware if apps or screens have changed, so CancelTap() is used to stop the current touch from activating buttons.
    • Cleaned up touchdriver code. Events (0 = Down, 1 = Up, 2 = contact) seem inconsistent, so they're replaced with a simple boolean touching.
    • For a single touch, only one swipe gesture can be generated. This fixes double gesture in Twos and when swiping up during the animation going from QuickSettings to watch face.

    This code probably requires further stress testing to make sure it always works correctly.

    Implements #471 and fixes #491.

    opened by Riksu9000 48
  • Lvgl simulation run PineTime screens on your PC

    Lvgl simulation run PineTime screens on your PC

    Add simulator to have pinetime Screens on PC for development.

    The first Screen can be run locally, using your mouse to play Paddle.h!

    2021-10-13_lv_sim_paddle

    based on lvgl 8 port #734

    lv_sim based on: https://github.com/lvgl/lv_sim_eclipse_sdl


    2021-11-03 updated screens with PineTime fonts

    Screenshot_20211103_214140 Screenshot_20211103_214323 Screenshot_20211031_100600


    2021-11-07 new Screen Metronome and the first simulated external: MotorController (shown by red dot)

    Metronome.h


    2021-11-15 new Screen BatteryInfo.h with a very low Battery, according to the BatteryController.h stub

    BatteryInfo.h


    2021-11-28 rebased on develop branch getting the new v1.7.1 version of FlashLight.h

    flashlight_light flashlight_dark


    2021-11-30 All three PineTime Watch Faces are working now: WatchFaceDigital.h, WatchFaceAnalog.h and PineTimeStyle.h

    WatchFaceDigital WatchFaceAnalog PineTimeStyle


    2021-12-02 Can trigger a Notification, got the system time, and the first Settings-Screen QuickSettings.h

    20211202_WatchFaceDigital 20211202_WatchFaceAnalog 20211202_PineTimeStyle 2021-12-02_Quicksettings


    2021-12-03 Fix "score" alignment in Twos.h by upgrading lvgl submodule to the current master (v8.1.0-64-g628299676)

    2021-12-03 Twos fixed align and with lvgl-8.1-master

    2022-01-16 Ported the simulator to use lvgl7 like current PineTime firmware! much less porting and maintenance burden! :tada: And Music.h has shown up!

    WatchfaceDigital WatchfaceAnalog WatchfacePineStyle

    Paddle Twos Metronome

    Meter Battery

    Torch Black Torch White QuickSettings

    Music InfiniPaint


    2022-01-21: SystemInfo.h's first Screen, others available, but no swipe yet

    SystemInfo Screen 1


    2022-01-25: Swiping now works and most Screens are implemented

    2022-01-25_lv_sim_swiping


    2022-01-27: add SettingSetDate.h and SettingSetTime.h

    SettingsSetDateSettingSetTime


    2022-01-29: add Screen is OFF overlay when brightness is set to Off. Also add Notifications.h

    Screen is OFF message Notifications.h


    2022-01-30: add the last screens FirmwareValidator.h, FirmwareUpdater.h and PassKey.h

    FirmwareValidator FirmWareUpdater PassKey


    2022-02-02: increase and decrease steps (s/S) and heartrate (h/H)

    WatchFaceDigital with steps and heartrate

    opened by NeroBurner 47
  • Refactor ble advertising logic

    Refactor ble advertising logic

    This is my WIP attempt to resolve the ble re-connect issue and get more reliable ble behavior. Comments, discussion, and suggestions are welcome. I'm testing on both my watch and dev-kit. The watch has been connected now for 3+ days. The dev-kit still fails periodically. I'm using both nRFConnect and GB for testing. I am (still) waiting on the breakout to connect my Segger JLink and gaze into the dumpster fire that is ble.

    • Refactor ble advertising based on ble standards and conventions.
    • Changes are based on the bleprph example code, bluetooth docs, and nimble docs.
    opened by evergreen22 47
  • Shake wake

    Shake wake

    Adds shake to wake by calculating Y/Z acceleration. Essentially a gentle wrist flick action will turn the screen on.

    I think its set to be a hair over sensitive as of the moment. Looking for some feedback there. In the long run I want to break out a settings option to select how sensitive it is, but not there yet.

    .

    opened by geekbozu 38
  • add terminal watchface

    add terminal watchface

    I tried to add watchface found here https://zephyrlabs.github.io/Watchfaces/Terminal/, I asked the developer and he doesn't mind. but now I am not able to check its work.

    opened by 13werwolf13 33
  • Bluetooth connection still dropping out

    Bluetooth connection still dropping out

    So, I updated to version 1.6, but I still have the issue where after a number of hours that the bluetooth connection drops out, and Gadgetbridge can't reconnect until the watch is restarted. After restarting, pairing works fine.

    Steps to reproduce:

    1. Pair watch to phone
    2. Wait 12-24 hours.
    3. Watch bluetooth connection resets.

    Expected behavior: Connection remains active.

    Specs: Infinitime 1.6 with 1.0 bootloader flashed by Gadgetbridge 0.59.3 on Android 10 on a Samsung Galaxy A51. Is there any other info that would be useful?

    bug 
    opened by Bugsbane 33
  • Touch controller error warning on PineTime

    Touch controller error warning on PineTime

    • [X] I searched for similar bug reports and found none was relevant.

    What happened?

    Touch controller error warning appears on PineTime on boot

    What should happen instead?

    Touch controller error warning should not appear on PineTime

    Reproduction steps

    • Install the DFU artifact from #754
    • Reboot PineTime

    More details?

    This did not happen before installing the artifact from the mentioned PR. After tapping Proceed, touch works as expected.

    Version

    add-motion-service

    Companion app

    No response

    bug needs more info 
    opened by Arsen6331 32
  • 1.9.0 update from 1.8.0 gets stuck (Connection failed (0x85): GATT ERROR)

    1.9.0 update from 1.8.0 gets stuck (Connection failed (0x85): GATT ERROR)

    Verification

    • [X] I searched for similar bug reports and found none was relevant.

    What happened?

    The upgrade from 1.8.0 to 1.9.0

    What should happen instead?

    The device should upgrade to 1.9.0

    Reproduction steps

    Upgrade from 1.8.0 to 1.9.0, either using the .zip or the .bin app image using nRF Connect. The update always gets stuck at 13%.

    More details?

    nRF Connect, 2022-04-03
    InfiniTime (ED:4D:29:44:14:32)
    V 00:22:13.389 Connecting to ED:4D:29:44:14:32...
    D 00:22:13.389 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
    D 00:22:13.740 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    D 00:22:13.753 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
    I 00:22:13.753 Connected to ED:4D:29:44:14:32
    V 00:22:13.762 Discovering services...
    D 00:22:13.762 gatt.discoverServices()
    I 00:22:14.069 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
    D 00:22:15.333 [Callback] Services discovered with status: 0
    I 00:22:15.334 Services discovered
    V 00:22:15.365 Generic Access (0x1800)
    - Device Name [R] (0x2A00)
    - Appearance [R] (0x2A01)
    Generic Attribute (0x1801)
    - Service Changed [I] (0x2A05)
       Client Characteristic Configuration (0x2902)
    Device Information (0x180A)
    - Manufacturer Name String [R] (0x2A29)
    - Model Number String [R] (0x2A24)
    - Serial Number String [R] (0x2A25)
    - Firmware Revision String [R] (0x2A26)
    - Hardware Revision String [R] (0x2A27)
    - Software Revision String [R] (0x2A28)
    Current Time Service (0x1805)
    - Current Time [R W] (0x2A2B)
    Unknown Service (00000000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [N] (00000001-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    - Unknown Characteristic [R W] (00000002-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000004-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000003-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000005-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000006-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000007-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000007-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000008-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000009-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (0000000a-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (0000000b-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (0000000c-78fc-48fe-8e23-433b3a1942d0)
    Unknown Service (00040000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [W] (00040001-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00040002-78fc-48fe-8e23-433b3a1942d0)
    Unknown Service (00010000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010001-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010002-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010003-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010004-78fc-48fe-8e23-433b3a1942d0)
    Alert Notification Service (0x1811)
    - New Alert [W] (0x2A46)
    - Unknown Characteristic [N] (00020001-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    Device Firmware Update Service (00001530-1212-efde-1523-785feabcd123)
    - DFU Packet [WNR] (00001532-1212-efde-1523-785feabcd123)
    - DFU Control Point [N W] (00001531-1212-efde-1523-785feabcd123)
       Client Characteristic Configuration (0x2902)
    - DFU Version [R] (00001534-1212-efde-1523-785feabcd123)
    Battery Service (0x180F)
    - Battery Level [N R] (0x2A19)
       Client Characteristic Configuration (0x2902)
    Immediate Alert (0x1802)
    - Alert Level [WNR] (0x2A06)
    Heart Rate (0x180D)
    - Heart Rate Measurement [N R] (0x2A37)
       Client Characteristic Configuration (0x2902)
    Unknown Service (00030000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [N R] (00030001-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    - Unknown Characteristic [N R] (00030002-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    Unknown Service (0000febb-0000-1000-8000-00805f9b34fb)
    - Unknown Characteristic [R] (adaf0100-4669-6c65-5472-616e73666572)
    - Unknown Characteristic [N R W] (adaf0200-4669-6c65-5472-616e73666572)
       Client Characteristic Configuration (0x2902)
    D 00:22:15.366 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
    D 00:22:15.367 gatt.setCharacteristicNotification(00000001-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:15.368 gatt.setCharacteristicNotification(00020001-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:15.369 gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
    D 00:22:15.369 gatt.setCharacteristicNotification(00002a37-0000-1000-8000-00805f9b34fb, true)
    D 00:22:15.370 gatt.setCharacteristicNotification(00030001-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:15.370 gatt.setCharacteristicNotification(00030002-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:15.371 gatt.setCharacteristicNotification(adaf0200-4669-6c65-5472-616e73666572, true)
    I 00:22:15.418 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms)
    V 00:22:23.805 [DFU] DFU service started
    V 00:22:23.805 [DFU] Opening file...
    I 00:22:23.849 [DFU] Firmware file opened successfully
    V 00:22:23.849 [DFU] Connecting to DFU target...
    D 00:22:23.849 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
    I 00:22:23.894 [DFU] Connected to ED:4D:29:44:14:32
    V 00:22:23.896 [DFU] Discovering services...
    D 00:22:23.896 [DFU] gatt.discoverServices()
    I 00:22:23.925 [DFU] Services discovered
    D 00:22:23.942 [DFU] wait(1000)
    V 00:22:24.942 [DFU] Reading DFU version number...
    D 00:22:24.942 [DFU] gatt.readCharacteristic(00001534-1212-efde-1523-785feabcd123)
    I 00:22:25.094 [DFU] Read Response received from 00001534-1212-efde-1523-785feabcd123, value (0x): 51-00
    A 00:22:25.094 [DFU] Version number read: 0.1
    V 00:22:25.095 [DFU] Requesting new MTU...
    D 00:22:25.095 [DFU] gatt.requestMtu(517)
    I 00:22:25.184 [DFU] MTU changed to: 256
    D 00:22:25.185 [DFU] wait(1000)
    V 00:22:26.186 [DFU] Enabling notifications for 00001531-1212-efde-1523-785feabcd123
    D 00:22:26.186 [DFU] gatt.setCharacteristicNotification(00001531-1212-efde-1523-785feabcd123, true)
    D 00:22:26.187 [DFU] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00)
    I 00:22:26.265 [DFU] Data written to descr.00001531-1212-efde-1523-785feabcd123, value (0x): 01-00
    V 00:22:26.265 [DFU] Notifications enabled for 00001531-1212-efde-1523-785feabcd123
    A 00:22:26.265 [DFU] Notifications enabled
    D 00:22:26.265 [DFU] wait(1000)
    V 00:22:27.266 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:22:27.267 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:22:27.344 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 01-04
    A 00:22:27.345 [DFU] DFU Start sent (Op Code = 1, Upload Mode = 4)
    V 00:22:27.348 [DFU] Writing to characteristic 00001532-1212-efde-1523-785feabcd123
    D 00:22:27.348 [DFU] gatt.writeCharacteristic(00001532-1212-efde-1523-785feabcd123)
    I 00:22:27.354 [DFU] Data written to 00001532-1212-efde-1523-785feabcd123, value (0x): 00-00-00-00-00-00-00-00-18-2A-06-00
    A 00:22:27.354 [DFU] Firmware image size sent (0b, 0b, 403992b)
    I 00:22:34.546 [DFU] Notification received from 00001531-1212-efde-1523-785feabcd123, value (0x): 10-01-01
    A 00:22:34.547 [DFU] Response received (Op Code = 1 Status = 1)
    A 00:22:34.547 [DFU] Writing Initialize DFU Parameters...
    V 00:22:34.547 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:22:34.547 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:22:34.634 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 02-00
    V 00:22:34.636 [DFU] Writing to characteristic 00001532-1212-efde-1523-785feabcd123
    D 00:22:34.637 [DFU] gatt.writeCharacteristic(00001532-1212-efde-1523-785feabcd123)
    I 00:22:34.640 [DFU] Data written to 00001532-1212-efde-1523-785feabcd123, value (0x): 52-00-FF-FF-FF-FF-FF-FF-01-00-FE-FF-43-90
    V 00:22:34.640 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:22:34.641 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:22:34.769 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 02-01
    A 00:22:34.770 [DFU] Initialize DFU Parameters completed
    I 00:22:35.714 [DFU] Notification received from 00001531-1212-efde-1523-785feabcd123, value (0x): 10-02-01
    A 00:22:35.714 [DFU] Response received (Op Code = 2, Status = 1)
    V 00:22:35.715 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:22:35.715 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:22:35.804 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 03
    A 00:22:35.804 [DFU] Receive Firmware Image request sent
    A 00:22:35.841 [DFU] Uploading firmware...
    V 00:22:35.841 [DFU] Sending firmware to characteristic 00001532-1212-efde-1523-785feabcd123...
    D 00:22:40.885 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
    E 00:22:40.887 [DFU] Device has disconnected
    D 00:22:40.887 [DFU] gatt.disconnect()
    E 00:22:40.888 Error 8 (0x8): GATT CONN TIMEOUT
    I 00:22:40.888 Disconnected
    D 00:22:40.925 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
    D 00:22:40.940 [DFU] gatt.close()
    D 00:22:40.940 [DFU] [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
    V 00:22:40.980 [DFU] DFU service started
    I 00:22:40.980 [DFU] Firmware file opened successfully
    D 00:22:40.980 [DFU] wait(1000)
    D 00:22:42.009 [DFU] wait(1000)
    V 00:22:42.960 [DFU] Connecting to DFU target...
    D 00:22:42.989 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
    E 00:22:48.010 [DFU] Connection failed (0x85): GATT ERROR
    W 00:22:48.010 [DFU] Retrying...
    D 00:22:48.010 [DFU] gatt.refresh() (hidden)
    D 00:22:48.013 [DFU] gatt.disconnect()
    D 00:22:48.018 [DFU] gatt.close()
    V 00:22:48.039 [DFU] DFU service started
    I 00:22:48.039 [DFU] Firmware file opened successfully
    D 00:22:48.039 [DFU] wait(1000)
    D 00:22:49.061 [DFU] wait(1000)
    V 00:22:50.040 [DFU] Connecting to DFU target...
    D 00:22:50.040 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
    D 00:22:51.507 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    D 00:22:51.530 [DFU] [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    I 00:22:51.530 [DFU] Connected to ED:4D:29:44:14:32
    V 00:22:51.530 [DFU] Discovering services...
    D 00:22:51.530 [DFU] gatt.discoverServices()
    D 00:22:52.553 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
    I 00:22:52.553 Connected to ED:4D:29:44:14:32
    I 00:22:52.560 Notification received from 00002a19-0000-1000-8000-00805f9b34fb, value: (0x) 51, "Q"
    A 00:22:52.560 "81%" received
    V 00:22:52.597 Discovering services...
    D 00:22:52.597 gatt.discoverServices()
    I 00:22:53.078 [DFU] Services discovered
    D 00:22:53.083 [Callback] Services discovered with status: 0
    I 00:22:53.083 Services discovered
    D 00:22:53.107 [DFU] wait(1000)
    V 00:22:53.137 Generic Access (0x1800)
    - Device Name [R] (0x2A00)
    - Appearance [R] (0x2A01)
    Generic Attribute (0x1801)
    - Service Changed [I] (0x2A05)
       Client Characteristic Configuration (0x2902)
    Device Information (0x180A)
    - Manufacturer Name String [R] (0x2A29)
    - Model Number String [R] (0x2A24)
    - Serial Number String [R] (0x2A25)
    - Firmware Revision String [R] (0x2A26)
    - Hardware Revision String [R] (0x2A27)
    - Software Revision String [R] (0x2A28)
    Current Time Service (0x1805)
    - Current Time [R W] (0x2A2B)
    Unknown Service (00000000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [N] (00000001-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    - Unknown Characteristic [R W] (00000002-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000004-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000003-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000005-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000006-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000007-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000007-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000008-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00000009-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (0000000a-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (0000000b-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (0000000c-78fc-48fe-8e23-433b3a1942d0)
    Unknown Service (00040000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [W] (00040001-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00040002-78fc-48fe-8e23-433b3a1942d0)
    Unknown Service (00010000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010001-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010002-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010003-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [R W] (00010004-78fc-48fe-8e23-433b3a1942d0)
    Alert Notification Service (0x1811)
    - New Alert [W] (0x2A46)
    - Unknown Characteristic [N] (00020001-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    Device Firmware Update Service (00001530-1212-efde-1523-785feabcd123)
    - DFU Packet [WNR] (00001532-1212-efde-1523-785feabcd123)
    - DFU Control Point [N W] (00001531-1212-efde-1523-785feabcd123)
       Client Characteristic Configuration (0x2902)
    - DFU Version [R] (00001534-1212-efde-1523-785feabcd123)
    Battery Service (0x180F)
    - Battery Level [N R] (0x2A19)
       Client Characteristic Configuration (0x2902)
    Immediate Alert (0x1802)
    - Alert Level [WNR] (0x2A06)
    Heart Rate (0x180D)
    - Heart Rate Measurement [N R] (0x2A37)
       Client Characteristic Configuration (0x2902)
    Unknown Service (00030000-78fc-48fe-8e23-433b3a1942d0)
    - Unknown Characteristic [N R] (00030001-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    - Unknown Characteristic [N R] (00030002-78fc-48fe-8e23-433b3a1942d0)
       Client Characteristic Configuration (0x2902)
    Unknown Service (0000febb-0000-1000-8000-00805f9b34fb)
    - Unknown Characteristic [R] (adaf0100-4669-6c65-5472-616e73666572)
    - Unknown Characteristic [N R W] (adaf0200-4669-6c65-5472-616e73666572)
       Client Characteristic Configuration (0x2902)
    D 00:22:53.137 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
    D 00:22:53.140 gatt.setCharacteristicNotification(00000001-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:53.141 gatt.setCharacteristicNotification(00020001-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:53.142 gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
    D 00:22:53.143 gatt.setCharacteristicNotification(00002a37-0000-1000-8000-00805f9b34fb, true)
    D 00:22:53.144 gatt.setCharacteristicNotification(00030001-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:53.148 gatt.setCharacteristicNotification(00030002-78fc-48fe-8e23-433b3a1942d0, true)
    D 00:22:53.149 gatt.setCharacteristicNotification(adaf0200-4669-6c65-5472-616e73666572, true)
    I 00:22:53.160 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms)
    V 00:22:54.092 [DFU] Reading DFU version number...
    D 00:22:54.093 [DFU] gatt.readCharacteristic(00001534-1212-efde-1523-785feabcd123)
    I 00:22:54.163 [DFU] Read Response received from 00001534-1212-efde-1523-785feabcd123, value (0x): 51-00
    A 00:22:54.163 [DFU] Version number read: 0.1
    V 00:22:54.164 [DFU] Requesting new MTU...
    D 00:22:54.164 [DFU] gatt.requestMtu(517)
    I 00:22:54.254 [DFU] MTU changed to: 256
    D 00:22:54.255 [DFU] wait(1000)
    V 00:22:55.256 [DFU] Enabling notifications for 00001531-1212-efde-1523-785feabcd123
    D 00:22:55.256 [DFU] gatt.setCharacteristicNotification(00001531-1212-efde-1523-785feabcd123, true)
    D 00:22:55.258 [DFU] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00)
    I 00:22:55.334 [DFU] Data written to descr.00001531-1212-efde-1523-785feabcd123, value (0x): 01-00
    V 00:22:55.334 [DFU] Notifications enabled for 00001531-1212-efde-1523-785feabcd123
    A 00:22:55.334 [DFU] Notifications enabled
    D 00:22:55.334 [DFU] wait(1000)
    V 00:22:56.340 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:22:56.340 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:22:56.414 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 01-04
    A 00:22:56.415 [DFU] DFU Start sent (Op Code = 1, Upload Mode = 4)
    V 00:22:56.415 [DFU] Writing to characteristic 00001532-1212-efde-1523-785feabcd123
    D 00:22:56.415 [DFU] gatt.writeCharacteristic(00001532-1212-efde-1523-785feabcd123)
    I 00:22:56.417 [DFU] Data written to 00001532-1212-efde-1523-785feabcd123, value (0x): 00-00-00-00-00-00-00-00-18-2A-06-00
    A 00:22:56.417 [DFU] Firmware image size sent (0b, 0b, 403992b)
    I 00:23:03.568 [DFU] Notification received from 00001531-1212-efde-1523-785feabcd123, value (0x): 10-01-01
    A 00:23:03.569 [DFU] Response received (Op Code = 1 Status = 1)
    A 00:23:03.569 [DFU] Writing Initialize DFU Parameters...
    V 00:23:03.569 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:23:03.569 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:23:03.658 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 02-00
    V 00:23:03.659 [DFU] Writing to characteristic 00001532-1212-efde-1523-785feabcd123
    D 00:23:03.659 [DFU] gatt.writeCharacteristic(00001532-1212-efde-1523-785feabcd123)
    I 00:23:03.662 [DFU] Data written to 00001532-1212-efde-1523-785feabcd123, value (0x): 52-00-FF-FF-FF-FF-FF-FF-01-00-FE-FF-43-90
    V 00:23:03.663 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:23:03.663 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:23:03.749 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 02-01
    A 00:23:03.749 [DFU] Initialize DFU Parameters completed
    I 00:23:04.693 [DFU] Notification received from 00001531-1212-efde-1523-785feabcd123, value (0x): 10-02-01
    A 00:23:04.693 [DFU] Response received (Op Code = 2, Status = 1)
    V 00:23:04.693 [DFU] Writing to characteristic 00001531-1212-efde-1523-785feabcd123
    D 00:23:04.693 [DFU] gatt.writeCharacteristic(00001531-1212-efde-1523-785feabcd123)
    I 00:23:04.783 [DFU] Data written to 00001531-1212-efde-1523-785feabcd123, value (0x): 03
    A 00:23:04.783 [DFU] Receive Firmware Image request sent
    A 00:23:04.803 [DFU] Uploading firmware...
    V 00:23:04.803 [DFU] Sending firmware to characteristic 00001532-1212-efde-1523-785feabcd123...
    D 00:23:09.896 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
    E 00:23:09.896 Error 8 (0x8): GATT CONN TIMEOUT
    I 00:23:09.896 Disconnected
    E 00:23:09.937 [DFU] Device has disconnected
    D 00:23:09.938 [DFU] gatt.disconnect()
    D 00:23:09.950 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
    D 00:23:09.967 [DFU] gatt.close()
    D 00:23:09.967 [DFU] [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
    V 00:23:10.013 [DFU] DFU service started
    I 00:23:10.013 [DFU] Firmware file opened successfully
    D 00:23:10.013 [DFU] wait(1000)
    D 00:23:11.001 [DFU] wait(1000)
    V 00:23:11.990 [DFU] Connecting to DFU target...
    D 00:23:12.020 [DFU] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferredPhy = LE_1M | LE_2M)
    E 00:23:17.040 [DFU] Connection failed (0x85): GATT ERROR
    W 00:23:17.040 [DFU] Retrying...
    D 00:23:17.040 [DFU] gatt.refresh() (hidden)
    D 00:23:17.040 [DFU] gatt.disconnect()
    D 00:23:17.043 [DFU] gatt.close()
    V 00:23:17.062 [DFU] DFU service started
    I 00:23:17.062 [DFU] Firmware file opened successfully
    D 00:23:17.062 [DFU] wait(1000)
    

    Version

    1.8.0

    Companion app

    NRF Connect

    opened by lytex 31
  • Freeze/crash in About menu since 9f15fd1

    Freeze/crash in About menu since 9f15fd1

    I've had frequent crashes since yesterday merges. Here is how to reliably reproduce the issue:

    • Open and close About menu twice
    • Open About menu a third time
    • Swipe up to try to access screen 2
    • Watch freezes and is reset by watchdog a few seconds later

    https://user-images.githubusercontent.com/69880003/116891847-b9bb7a80-ac1e-11eb-9d82-254a69eaa988.mp4

    I've bisected the problem to commit 9f15fd1820e620e42fb717fb5d692d44a3f0f70d. However given its content, I don't understand how it could create this crash. Maybe it's a problem with some completely unrelated part of the code which only becomes visible after this commit due to some timing or memory position constraint?

    Could someone with a dev kit and SWD access please see if they manage to get more info about what is creating the above crash?

    In case this bug is memory location dependent and strings with file path in the firmware change the behavior, here is my version of the above commit.

    Thanks a lot for your help!

    bug 
    opened by nlfx 31
  • Step length calibration

    Step length calibration

    Verification

    • [X] I searched for similar feature request and found none was relevant.

    Pitch us your idea!

    Calibrate step-length with Gadgetbridge to show an accurate distance

    Description

    When a constant step count for more like say one minute is determined by the watch, a calibration process could be started by sending a "workout request" to Gadgetbridge, which then returns GPS data every second, which then could be buffered for some 30 seconds until sending a "workout ended".

    From the buffered GPS data a step length could be calculated then, which could be utilized to display a relatively accurate distance on the watch.

    https://codeberg.org/Freeyourgadget/Gadgetbridge/wiki/OpenTracks-API

    Related issue: #883

    feature request 
    opened by haecksenwerk 2
  • Chronograph watch face

    Chronograph watch face

    Verification

    • [X] I searched for similar feature request and found none was relevant.

    Pitch us your idea!

    I'd like a chronograph watch face

    Description

    Having a modern looking chronograph watch face with a usable stopwatch such as on the apple watch would not only look good but is also useful for those that often utilize the stopwatch function. The link below is one apple uses that I like because of its simplicity but there are others. Similar ease of usability may not be possible without a turn dial though, perhaps instead one could incorporate a double push of the button or long/double press of the screen.

    https://help.apple.com/assets/620FD4265AC6AE3F090A11D6/620FD42A5AC6AE3F090A11EE/en_US/69821899a86c61c11c3abb24d68e907b.png

    https://dribbble.com/shots/3403013-Apple-Watch-Faces-Chronograph

    feature request new watchface 
    opened by calhix 0
  • Tweaked issue forms

    Tweaked issue forms

    When people suggest a solution to a generic issue they encounter, they have to open a feature request, which is not optimal. Submitting an issue through this new form will require writing about the issue that led to the idea, which will make it easier to discuss different solutions.

    I figured we can keep the bug form as it is working well.

    You can preview the form by viewing the file through GitHub.

    opened by Riksu9000 0
  • Improve status icon visibility

    Improve status icon visibility

    Making the icons white Improves the visibility, but also makes them more subdued instead of attention grabbing. I was planning on making this change regardless of #1263.

    Relates to #958. One of the necessary changes for #1263.

    InfiniSim_2022-08-03_092844 InfiniSim_2022-08-03_092845 InfiniSim_2022-08-03_092847 InfiniSim_2022-08-03_092851

    opened by Riksu9000 13
  • BLE connection request notifications

    BLE connection request notifications

    Verification

    • [x] I searched for similar feature request and found none was relevant.

    Pitch us your idea!

    In case we keep support for unpaired/unverified devices, we could show a notification like the one for incoming calls with the name of the other device for an incoming BLE connection request. Thus, every connection would be at least known and wanted.

    opened by minacode 0
Releases(1.10.0)
  • 1.10.0(Jun 29, 2022)

    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.

    InfiniSim_2022-06-28_204429

    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: https://github.com/InfiniTimeOrg/InfiniTime/compare/1.9.0...1.10.0

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.10.0.zip(392.09 KB)
  • 1.9.0(Apr 2, 2022)

    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:

    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)

    collage

    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 : https://github.com/InfiniTimeOrg/InfiniTime/compare/1.8.0...1.9.0

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.9.0.zip(395.45 KB)
    pinetime-mcuboot-app-image-1.9.0.bin(394.52 KB)
  • 1.8.0(Jan 7, 2022)

    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.

    collage

    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.

    collage-gb

    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: https://github.com/InfiniTimeOrg/InfiniTime/compare/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.

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.8.0.zip(390.45 KB)
    pinetime-mcuboot-app-image-1.8.0.bin(389.52 KB)
  • 1.7.1(Nov 15, 2021)

  • 1.7.0(Nov 13, 2021)

    Improvements:

    • More accurate battery percentage
    • Faster wakeup (video)
    • New touch handler
    • Wake on notification and charge
    • Memory usage and speed optimizations

    New features:

    • Motion service (video)
    • Flashlight brightness changes
    • Manual date and time setting

    Bugs fixed:

    • Battery percentage reporting
    • Disabled Touch Controller error check
    • Paddle game bounds checking

    In addition to the previously listed things there was also a bunch of housekeeping and documentation improvements done.

    collage

    This release contains 42 pull requests in total.

    Thank you @Riksu9000, @jonvmey, @hubmartin, @JF002, @danielgjackson, @Avamander, @clemensvonmolo, @coxtor, @mabuch, @NeroBurner, @Quantum-cross, @carlosperate, @dyamon, @Arsen6331, @stephanie-eng, @xan-m, @SteveAmor, @evergreen22, @Sematre, @maksalees, @geekbozu and @timaios for your contributions. Thanks to whoever also participated in Hacktoberfest, hope you got your four PRs.

    Also thank you for your support of the project on LiberaPay and elsewhere.

    With the advent of 1.7.0 the PineTime project also went through organizational changes, bringing aboard a few new maintainers.

    Full diff: https://github.com/InfiniTimeOrg/InfiniTime/compare/1.6.0...1.7.0

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.7.0.zip(358.07 KB)
    pinetime-mcuboot-app-image-1.7.0.bin(357.14 KB)
  • 1.6.0(Sep 28, 2021)

    I'm really happy to release InfiniTime 1.6.0. Even if this release is very small in terms of number of commits (1 commit, actually) and modifications (1 line of code was changed), it will have a huge impact on most of the users of InfiniTime : it fixes a BLE issue we were chasing since well before the release of 1.0.0 !

    I spent countless hours trying to understand why the BLE connection would just stop working after a day of usage. I set up complex testing environment, ran many tests overnight, scratched my head on a lot of code, with no luck : BLE would work for most of the day and then die.

    I was quickly joined by many other developers who tried to figure out this issue. Together, we checked a lot of code, made assumptions, tested many possible solutions, but still no luck until this week-end!

    Daniel Jackson created this very small PR claiming it fixes this issues we were debugging for so long!

    Quickly, many users installed that patch and reported only positive feebacks : their PineTime would still advertise and connect to the companion app after more than 18h of uptime!

    Daniel didn't stop there and also sent the fix to Nimble, the FOSS BLE stack integrated in InfiniTime. This fix has already been approved and merged into NimBLE!

    I can't thank Daniel enough for this fix, it relieves many developers (me included) from this burden, and they'll be able to focus on much more interesting features now :-)

    Thanks also to all the developers and users who helped debugging this issue! We had the opportunity to check a lot of code in InfiniTime, FreeRTOS and NimBLE and now, we are confident that most of this code is rock solid !

    As this fix will probably make a lot of PineTime happy, I decided to release it as soon as possible, only 2 days after the release of InfiniTime 1.5 !

    Full diff: https://github.com/InfiniTimeOrg/InfiniTime/compare/1.5.0...1.6.0

    Source code(tar.gz)
    Source code(zip)
    merged-internal.hex(1.02 MB)
    pinetime-mcuboot-app-dfu-1.6.0.zip(353.61 KB)
    pinetime-mcuboot-app-image-1.6.0.bin(352.68 KB)
    spinor.bin(165.55 KB)
  • 1.5.0(Sep 26, 2021)

    InfiniTime 1.5 "Huckleberry" comes with a new features many users have been asking for for a long time : an Alarm app!

    Thanks to mruss77, InfiniTime now comes with a shiny new alarm app. This new app allows you to specify the time you want the alarm to be triggered, and also to specify which days it should be triggered (only once, every days, week days). It also displays when the next alarm will be triggered. This is the first version of this app, and we've already identified many functionalities that could be added in the future like the support for multiple alarm, and persisting the settings after a reset.

    collage

    The handling of vibrations for notifications has also been improved by Riksu9000 : the button in the quick actions menu now only toggles vibrations on notifications, while still allowing other apps (Metronome, Timer and the new Alarm app) to enable the vibrations.

    InfiniTime is now able to recover the time after a reset! This quality of life improvement, added by geekbozu, stores the date and time in a spefific area in memory that can be recovered after the reset. This way, you won't have to re-sync the time with your phone each time your reset your watch (to workaround those annoying BLE issues, for example).

    Talking of BLE, evergreen22 improved the adertising strategy, which should improve the connection and reconnection reliability between your watch and your phone. In Bluetooth Low Energy, a BLE device advertises (announces) itself by broadcasting a small message with various info about itself. The other devices are then able to detect your watch by listenning (scan) for those messages. These changes improved the advertising strategy by following state of the art recommandations.

    The battery level monitoring have also been improved by Riksu9000. The measurements should now bit more consistent and reliable.

    This release also brings a few documentation update and code cleanings.

    Full diff: https://github.com/InfiniTimeOrg/InfiniTime/compare/1.4.0...1.5.0

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.5.0.zip(353.59 KB)
    pinetime-mcuboot-app-image-1.5.0.bin(352.67 KB)
  • 1.4.0(Sep 2, 2021)

    This is InfiniTime 1.4 "Pink Grapefruit"! This new version brings, among other things, a vastly improved touch driver and a color picker for the PineTimeStyle watchface.

    collage

    Fun fact : the commit that updated the version number is exactly the 1000th commit on the project. What a milestone!

    Let me start with the touch driver. Before this update, it was working fine. Now, it's working a lot better! The touch driver, and the handling of touch inputs have been improved by a lot. The latency of the touch input (the time between your finger tapping the display and InfiniTime registering the touch event) have been reduced, and the whole touch experience is a lot more snappy. For example, the Paddle and Two games are now playable again, and gestures are detected with more accuracy than before. This feature was mostly contributed by Riku Isokoski.

    The color picker is a nice addition to the PineTimeStyle watchface. This watchface, introduced in InfiniTime 1.3 by KieranC, is a really nice looking watchface inspired by a Pebble watchface. In this new version, you have the possibility to customize the colors (background, text and lateral bar) of your favorite watch. Thanks KieranC for this nice addition!

    On the UI side, the application list, quick actions and settings menu and also the music and metronome apps have been slightly improved to make a better use of the small screen of the PineTime. Also, before going to sleep, the display is dimmed to a lower brightness level, notifying the user that the watch is going to sleep soon.

    Call notifications also received a bit of love. They now vibrate longer and following a repetitive pattern so that you never miss a phone call again! Thanks to Florian and Riku Isokoski for these improvements!

    Many users noticed that the battery level displayed in InfiniTime was a bit off : it never reached 100% on charge, and the device would shut down at almost 30%. While still not perfect (other improvements are still in the works), the battery measurement should now be a bit more consistent and reliable. These improvements were initiated by hassless.

    In the version, we also tried to fix the bootloop issue some of you encountered. As this issue is not easy to reproduce, we cannot guarantee it won't happen again, but we really hope we've improved the situation on that matter. As a reminder, if your PineTime enters in a bootloop, the best solution is to wait for the battery to drain completely before charging it again. Your PineTime should then restart as if nothing happened.

    On the development side, we've added support for the devcontainers in VSCode, thanks to Niall Cooling and Tim Keller.

    Thanks again to everyone who contributed to this new version of InfiniTime!

    Full diff: https://github.com/InfiniTimeOrg/InfiniTime/compare/1.3.0...1.4.0

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.4.0.zip(350.34 KB)
    pinetime-mcuboot-app-image-1.4.0.bin(349.41 KB)
  • 1.3.0(Jul 23, 2021)

    First, let me thank everyone who contributes to this project, directly or indirectly! Every contribution counts : bug fix, new feature, code maintenance and code cleaning, code review and test, animation and support on the community chat, mentions on social networks, blog articles and video, development of companion apps,.. All of these contributions are invaluable and are part of the success of this project! Thanks everyone!

    As announced in the last Pin64 Community Update, this new version of InfiniTime brings a new watchface to InfiniTime : PineTimeStyle ! This very stylish watchface written by Kieranc and inspired by a watchface for the Pebble display the time is large characters, the battery level, ble connection status, the date and the evolution of your steps according to your step goal! Try it, you'll love it!

    This release also brings another very important feature, even if it's not visible from the end user point of view : the integration of LittleFS by Joaquimorg. LittleFS is A high-integrity embedded file system, it allows applications running on microcontrollers to create a filesystem on flash memories very easily. For now, InfiniTime only uses this filesystem to store the user settings, but in the near future, we'll be able to add many interesting functionalities like storing an history of the heart rate values and steps, for example. We will also be able to free a lot of space in the internal memory of the PineTime by storing fonts, pictures and icons on the external memory. As I wrote previously, the end user won't see anything new from this integration, but this is only the first step toward a lot of new features !

    In this release, InfiniTime now sends the battery level as a BLE notification, allowing companion apps like Gadgetbridge to display the up to date battery level of the PineTime. Gadgetbridge offers the possibility to display a graph of the battery level, and recently added the support for those notifications in version 0.58.2. Thanks to Andreas for their help on this feature!

    This release also brings many improvements in the Stopwatch app, the Paddle game and the call notifications by Riku Isokoski. Riku also improved the 'tick' management in LVGL, which enables a smoother refresh of the display. Last but not least, Riku has made the firmware update app more foolproof by preventing the user from closing the app while an update is in progress

    Finally, this release also brings other improvements and bugfixes!

    collage gadgetbridge

    Changelog:

    • LittelFS integration by Joaquimorg
    • New watchface, PineTimeStyle by Kieranc
    • Battery level notification on BLE (supported by Gadgetbridge)
    • Improved stopwatch app, Paddle game and call notifications by Riku Isokoski
    • Firmware update app is now more foolproof thanks to Riku Isokoski
    • The SPI flash is put in sleep mode when the watch goes to sleep (only if the new bootloader is detected) by Neil O'Fix
    • UI improvements (better 'tick' handling in LVGL, more consistent refresh rate) by Riku Isokoski
    • Various improvements and code cleaning
    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.3.0.zip(348.83 KB)
    pinetime-mcuboot-app-image-1.3.0.bin(347.91 KB)
  • 1.2.0(Jun 20, 2021)

    I wasn't planning on releasing InfiniTime 1.2.0 so soon, as many interesting features are in the work right now. But, as we announced in Pine64 monthly update, the factory cannot source the accelerometer (BMA421) anymore. As an alternative, they propose to use the BMA425 instead. This new sensor is very similar (it actually support more built-in features) but needed a few minor modifications to the driver (we need to take into account the new chip ID of the BMA425, for example). As the factory is waiting for a version of InfiniTime that supports the BMA425, I decided to release the version as it is as soon as possible.

    So, in addition to the added support for the BMA425, this new version brings 1 new app, many improvements and bugfixes!

    The Metronome app was contributed by Bryton Hall. It uses the vibrator to give the tempo to the user, and provides a nice user interface to select the beats per minute (BPM) and beats per bar (BPB, for creating an accent beat).

    The Stopwatch app was also improved by Riku Isokoski. It now provides a cleaner user interface.

    This release also includes many "behind the scene" developments mostly focused on memory usage optimizations. I did a detailed analysis of RAM and Flash memory usage and I've already implemented a few changes that reduce the size of the firmware (from ~420KB to ~340KB) and to reduce the RAM memory usage.

    We've also fixed a few bugs (like this strange memory corruption issue on which I spent far more time than expected) and implemented a few improvements and code cleanings.

    collage

    Source code(tar.gz)
    Source code(zip)
    merged-internal.hex(977.50 KB)
    pinetime-mcuboot-app-dfu-1.2.0.zip(327.28 KB)
    pinetime-mcuboot-app-image-1.2.0.bin(326.35 KB)
    spinor.bin(165.55 KB)
  • 1.1.0(May 21, 2021)

    I'm happy to release InfiniTime 1.1.0 Dragon Fruit, the first update since we released InfiniTime 1.0. This release brings many improvements, fixes and functionalities.

    poster

    We have 2 new apps : Steps and Timer! Steps (by @joaquimorg) displays your step count of the day and your progress according to your step goal. You can specify your step goal in a new entry in the Settings application.

    Timer (by @Raupinger) is a timer application : set a duration, start the timer and you'll be notified when the time's elapsed. Quite handy when you cook eggs or pasta for example :)

    Many improvements have been done on the UI : long notification titles handling by @Raupinger, better detection of the charger to display the power indicator accordingly (by @DavidVentura) and the heart rate indicator is now greyed out when the sensor is not activated.

    I would also like to highlight @Avamander work. Avamander works behind the scene to keep the code clean and tidy thanks to multiple PRs to introduce clang-format and clang-tidy configuration files, reformat the code using these tools and refactor parts of the code to keep it consistent. This work is not as visible as user facing features but it's really important for the maintainability of the project in the long term!

    We also fixed a few bugs like that crash in the Stopwatch app (by @MFAshby).

    Finally, the documentation got many improvements, typos and fixes, and I also wrote a new Getting started guide for InfiniTime 1.0.

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.1.0.zip(418.37 KB)
    pinetime-mcuboot-app-image-1.1.0.bin(417.45 KB)
  • 1.0.0(Apr 22, 2021)

    This is InfiniTime 1.0, the first non-beta release of InfiniTime!

    You can read the official announcement on the Pine64 blog.

    What's new in this release since the last 0.15 version?

    First, there is the integration of the motion sensor, which allowed us to add the long awaited features : step counting and wake up on wrist rotation! This integration is important because the motion sensor was the last part of the hardware that was not integrated yet in InfiniTime!

    The most noticeable new feature in this release is probably the redesign of the UI which is, I think we'll all agree about that, a lot better now than before. This redesign brought many new features :

    • A quick action menu
      • brightness setting
      • do not disturb mode (disable vibrations on notifications)
      • flash light application
    • A settings menu, allowing the users to configure their watch
      • display timeout
      • wakeup source (button only, single tap, double tap and wrist rotation)
      • time format (12/24H)
      • default watchface
    • The settings menu also give access to the redesigned system information application, a new battery info application and the firmware validation application.
    • A new navigation flow :
      • On the clock face, swipe down to display the notifications
      • swipe up to access to the applications menu
      • and swipe right to access to the quick actions menu
    • The user settings are stored in flash memory and are restored when the watch restarts.

    This HUGE list of new features were contributed by joaquimorg. Thanks again for this amazing work!

    In this release, we also improved the notification management. Now, companion app have the opportunity to send a title along with the text message, which will now be fully displayed. A bug that would crash the system in the notification popup was also fixed, and empty notifications are now correctly ignored.

    The TWI (I²C) driver has also been fixed and should not crash anymore in games.

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.0.0.zip(404.33 KB)
    pinetime-mcuboot-app-image-1.0.0.bin(403.41 KB)
  • 1.0.0-RC4(Apr 20, 2021)

  • 1.0.0-RC3(Apr 18, 2021)

    This is the 3rd release candidate for InfiniTime 1.0.0 !

    Since the RC2, one bug was fixed:

    • Fix display glitch on the firmware update app when OTA was started while another app was open and the device was sleeping.

    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 18 2021 15:45:13"

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.0.0.zip(404.33 KB)
    pinetime-mcuboot-app-image-1.0.0.bin(403.41 KB)
  • 1.0.0-RC2(Apr 18, 2021)

    This is the 2nd release candidate for InfiniTime 1.0.0 !

    A few changes and improvements have been done since RC1:

    • Stopwatch : improve number formatting
    • Music : apply the theme to the buttons on the application
    • Heart Rate : fix display inconsistencies when the app was closed and open again while HR measurement was running
    • Fix Gitpod workspace since the project was renamed

    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 18 2021 14:15:42"

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.0.0.zip(404.27 KB)
    pinetime-mcuboot-app-image-1.0.0.bin(403.34 KB)
  • 1.0.0-RC1(Apr 16, 2021)

    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"

    Source code(tar.gz)
    Source code(zip)
    pinetime-mcuboot-app-dfu-1.0.0.zip(404.16 KB)
    pinetime-mcuboot-app-image-1.0.0.bin(403.23 KB)
  • 0.15.0(Mar 21, 2021)

    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.

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(21.15 KB)
    pinetime-mcuboot-app-dfu-0.15.0.zip(391.47 KB)
    pinetime-mcuboot-app-image-0.15.0.bin(390.53 KB)
  • 0.14.1(Mar 7, 2021)

    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.

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(21.15 KB)
    bootloader.hex(59.51 KB)
    merged.hex(1.04 MB)
    pinetime-mcuboot-app-dfu-0.14.1.zip(360.63 KB)
    pinetime-mcuboot-recovery-loader-dfu-0.14.1.zip(194.25 KB)
    reloader-mcuboot.zip(149.59 KB)
    spinor.bin(165.55 KB)
    spinor.hex(465.68 KB)
  • 0.14.0(Feb 24, 2021)

    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 !

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.14.0.zip(360.37 KB)
    image-0.14.0.bin(359.56 KB)
  • 0.13.0(Feb 14, 2021)

    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!

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.13.0.zip(333.57 KB)
    image-0.13.0.bin(332.76 KB)
  • 0.12.1(Feb 7, 2021)

  • 0.12.0(Feb 4, 2021)

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

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.12.0.zip(351.43 KB)
    image-0.12.0.bin(350.62 KB)
  • 0.11.0(Jan 23, 2021)

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

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.11.0.zip(331.94 KB)
    image-0.11.0.bin(331.13 KB)
  • 0.10.0(Jan 4, 2021)

    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.

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.10.0.zip(272.68 KB)
    image-0.10.0.bin(271.87 KB)
  • 0.9.0(Nov 10, 2020)

    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!

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.9.0.zip(262.72 KB)
    image-0.9.0.bin(261.92 KB)
    pinetime-app-0.9.0.bin(261.85 KB)
    pinetime-app-0.9.0.hex(736.57 KB)
    pinetime-app-0.9.0.map(3.88 MB)
    pinetime-app-0.9.0.out(7.58 MB)
    pinetime-graphics-0.9.0.bin(137.88 KB)
    pinetime-graphics-0.9.0.hex(387.88 KB)
    pinetime-graphics-0.9.0.map(551.80 KB)
    pinetime-graphics-0.9.0.out(1.56 MB)
    pinetime-mcuboot-app-0.9.0.bin(261.85 KB)
    pinetime-mcuboot-app-0.9.0.hex(736.57 KB)
    pinetime-mcuboot-app-0.9.0.map(4.00 MB)
    pinetime-mcuboot-app-0.9.0.out(7.52 MB)
  • 0.9.0-develop(Oct 30, 2020)

    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,...)
    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.9.0-develop.zip(262.72 KB)
    image-0.9.0-develop.bin(261.92 KB)
    pinetime-app-0.9.0-develop.bin(261.85 KB)
    pinetime-app-0.9.0-develop.hex(736.57 KB)
    pinetime-app-0.9.0-develop.map(3.88 MB)
    pinetime-app-0.9.0-develop.out(7.58 MB)
    pinetime-graphics-0.9.0-develop.bin(137.88 KB)
    pinetime-graphics-0.9.0-develop.hex(387.88 KB)
    pinetime-graphics-0.9.0-develop.map(551.80 KB)
    pinetime-graphics-0.9.0-develop.out(1.56 MB)
    pinetime-mcuboot-app-0.9.0-develop.bin(261.85 KB)
    pinetime-mcuboot-app-0.9.0-develop.hex(736.57 KB)
    pinetime-mcuboot-app-0.9.0-develop.map(4.00 MB)
    pinetime-mcuboot-app-0.9.0-develop.out(7.52 MB)
  • 0.8.3(Oct 27, 2020)

    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.

    Source code(tar.gz)
    Source code(zip)
    dfu-0.8.3.zip(253.97 KB)
    image-0.8.3.bin(253.17 KB)
    pinetime-app-0.8.3.bin(253.10 KB)
    pinetime-app-0.8.3.hex(711.95 KB)
    pinetime-app-0.8.3.map(3.68 MB)
    pinetime-app-0.8.3.out(7.09 MB)
    pinetime-graphics-0.8.3.bin(137.88 KB)
    pinetime-graphics-0.8.3.hex(387.88 KB)
    pinetime-graphics-0.8.3.map(551.80 KB)
    pinetime-graphics-0.8.3.out(1.56 MB)
    pinetime-mcuboot-app-0.8.3.bin(253.10 KB)
    pinetime-mcuboot-app-0.8.3.hex(711.97 KB)
    pinetime-mcuboot-app-0.8.3.map(3.79 MB)
    pinetime-mcuboot-app-0.8.3.out(7.09 MB)
  • 0.8.2(Sep 26, 2020)

    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.

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(22.80 KB)
    dfu-0.8.2.zip(254.00 KB)
    image-0.8.2.bin(253.19 KB)
    pinetime-app-0.8.2.bin(253.12 KB)
    pinetime-app-0.8.2.hex(712.03 KB)
    pinetime-app-0.8.2.map(3.68 MB)
    pinetime-app-0.8.2.out(7.09 MB)
    pinetime-graphics-0.8.2.bin(137.88 KB)
    pinetime-graphics-0.8.2.hex(387.88 KB)
    pinetime-graphics-0.8.2.map(551.80 KB)
    pinetime-graphics-0.8.2.out(1.56 MB)
    pinetime-mcuboot-app-0.8.2.bin(253.12 KB)
    pinetime-mcuboot-app-0.8.2.hex(712.04 KB)
    pinetime-mcuboot-app-0.8.2.map(3.79 MB)
    pinetime-mcuboot-app-0.8.2.out(7.09 MB)
  • 0.8.1-develop(Sep 13, 2020)

    This new RC fixes the following bugs:

    • The firmware version reported via BLE was incorrect : https://github.com/JF002/Pinetime/issues/58
    • Firmware freeze/crash when the button was pressed (to go to sleep) while a touch event was generated https://github.com/JF002/Pinetime/issues/60

    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.

    Source code(tar.gz)
    Source code(zip)
    bootloader.bin(21.71 KB)
    dfu-0.8.1-develop.zip(254.01 KB)
    image-0.8.1-develop.bin(253.21 KB)
    pinetime-app-0.8.1-develop.bin(253.14 KB)
    pinetime-app-0.8.1-develop.hex(712.06 KB)
    pinetime-app-0.8.1-develop.map(3.68 MB)
    pinetime-app-0.8.1-develop.out(7.09 MB)
    pinetime-graphics-0.8.1-develop.bin(137.78 KB)
    pinetime-graphics-0.8.1-develop.hex(387.60 KB)
    pinetime-graphics-0.8.1-develop.map(551.72 KB)
    pinetime-graphics-0.8.1-develop.out(1.56 MB)
    pinetime-mcuboot-app-0.8.1-develop.bin(253.14 KB)
    pinetime-mcuboot-app-0.8.1-develop.hex(712.08 KB)
    pinetime-mcuboot-app-0.8.1-develop.map(3.79 MB)
    pinetime-mcuboot-app-0.8.1-develop.out(7.09 MB)
Owner
InfiniTime
InfiniTime is a FOSS firmware for the PineTime, the open source smartwatch from Pine64
InfiniTime
Simple template project to build a firmware for the STM32F4 Discovery board with FreeRTOS and libopencm3

STM32F4 Discovery FreeRTOS Makfile This is a simple template project to build a firmware for the STM32F4 Discovery board with FreeRTOS and libopencm3

Andrea Colla 8 May 22, 2022
Boilerplate to create a project with: STM32 + Ethernet + micro-ROS + FreeRTOS + Arduino + PlatformIO

micro_ros_stm32_template Boilerplate to create a project with: STM32 + Ethernet + micro-ROS + FreeRTOS + Arduino + PlatformIO Default config STM32F407

Husarion 11 May 7, 2022
The purpose of this project is to create a modern C++17 header-only interface to the FreeRTOS kernel API

FreeRTOS-Cpp The purpose of this project is to create a modern C++17 header-only interface to the FreeRTOS kernel API. Goals of this project include:

Jon Enz 16 Jul 16, 2022
This FreeRTOS example builds a simple Timer application for Linux using the ESP-IDF

Supported Targets Linux This FreeRTOS example builds a simple Timer application for Linux using the ESP-IDF. Build Source the IDF environment as usual

null 13 Apr 4, 2022
Web Server based on the Raspberry Pico using an ESP8266 with AT firmware for WiFi

PicoWebServer This program runs on a Raspberry Pico RP2040 to provide a web server when connected to an Espressif ESP8266. This allows the Pico to be

null 46 Jul 19, 2022
ESP based garage opener firmware.

NOTE: The hardware is in its early development. This is meant to replace your garage opener, if you'd like to use this with your existing garage door

null 4 Jul 31, 2022
MarlinRB - 3D Printer Firmware based on Marlin 3D v2.0.9.2, for Flyingbear Reborn with MKS Robin Nano v1.2, MKS Robin Nano v1.3, MKS Robin Nano S v1.3

English Прошивка MarlinRB для принтера Flyingbear Reborn Работает с платами: MKS Robin Nano v1.3 (съемные драйвера, контроллер STM32F407), MKS Robin N

AndyBig 14 Jul 25, 2022
Firmware for Acorn Archimedes RP2040-based podule

Acorn Archimedes Pipe Podule firmware v0.1 5 October 2021 This repository contains firmware for the Arc Pipe Podule. (PCB design files can be found in

Matt Evans 4 Oct 31, 2021
Marlin is an optimized firmware for RepRap 3D printers based on the Arduino platform.

Marlin 3D Printer Firmware Additional documentation can be found at the Marlin Home Page. Please test this firmware and let us know if it misbehaves i

Marlin 13.5k Aug 1, 2022
ESP32 firmware to read and control EMS and Heatronic compatible equipment such as boilers, thermostats, solar modules, and heat pumps

EMS-ESP is an open-source firmware for the Espressif ESP8266 and ESP32 microcontroller that communicates with EMS (Energy Management System) based equipment from manufacturers like Bosch, Buderus, Nefit, Junkers, Worcester and Sieger.

EMS-ESP 163 Aug 3, 2022
Firmware for DMR transceivers using the NXP MK22 MCU, AT1846S RF chip and HR-C6000 DMR chipset. Including the Radioddiy GD-77, Baofeng DM-1801 and Baofeng RD-5R.

OpenGD77 Firmware for DMR transceivers using the NXP MK22 MCU, AT1846S RF chip and HR-C6000 DMR chipset. This includes the Radioddiy GD-77, Radioddity

Open Ham 87 Jul 25, 2022
Firmware update for XeniumOS used on Xenium and OpenXenium modchips to provide software fixes and various improvements.

Firmware update for XeniumOS used on Xenium and OpenXenium modchips to provide software fixes and various improvements. About • Features • Installatio

MakeMHz LLC 49 Jul 24, 2022
Firmware, mechanical and electrical design files for the Inline Filament Diameter Estimator, Lowcost (InFiDEL).

Inline Filament Diameter Estimator, Lowcost (InFiDEL) Originally created by Thomas Sanladerer A cheap, yet precise filament diameter sensor, intended

Daniel Smullen 93 Aug 3, 2022
OTA Third Party Firmware Flasher for the original Wyze Plug (WLPP1) and Wyze Bulb (WLPA19).

Wyze Plug (and Bulb!) Flasher Use this software to install third party firmware on the original Wyze Plug (model WLPP1) and Wyze Bulb (model WLPA19) o

Elahd Bar-Shai 2 Nov 13, 2021
Custom firmware for Quicko and KSGER T12 soldering stations

STM32 Soldering Station Firmware Project details Compatibility Operations guide Frequently asked questions Building Creating a .ioc file from scratch

null 170 Jul 31, 2022
Toolchain and dockerfile to build the Miyoo Custom Firmware (CFW)

Miyoo Toolchain Toolchain and dockerfile to build the Miyoo Custom Firmware (CFW) See https://github.com/TriForceX/MiyooCFW/wiki/Build-Source for more

Nathan Friedly 3 Jul 17, 2022
Contains firmware and software used for the bead sprite printer v2 robotic system

Bead-Sprite-Printer-V2 Contains firmware and software used for the bead sprite printer v2 robotic system bead_fuser_arduino - this folder contains the

null 3 Jun 23, 2022
kianv a simple implementation of a rv32im riscv cpu and soc in verilog with firmware that runs raytracer, mandelbrot, etc.....

A very simple riscv cpu/soc one single file implementation created in my spare time! But it is full rv32im CPU :) I have wrote all from scratch to lea

splinedrive 78 Jul 23, 2022
Gamepad firmware for RP2040 microcontrollers supporting Nintendo Switch, XInput and DirectInput

GP2040 Firmware GP2040 is a gamepad firmware for the RP2040 microcontroller that provides high performance and a rich feature set across multiple plat

null 223 Aug 1, 2022