Compare commits

...

1981 Commits

Author SHA1 Message Date
Jean-François Milants
0fabfe99d9 Set version to 1.16.0.
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2026-01-06 21:29:56 +01:00
mark9064
7dea64af99 Remove unneeded casts
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2026-01-05 13:19:06 +01:00
Jean-François Milants
a277316f98 WatchFaceTerminal : Apply better curve in BatteryIcon::ColorFromPercentage() so the color doesn't start going yellow until the battery is low. 2026-01-05 13:19:06 +01:00
Jean-François Milants
c2e59583e1 WatchFaceTerminal : rename a few fields to camelCase. 2026-01-05 13:19:06 +01:00
Jean-François Milants
c451d2ce9f Refactor battery color calculation logic into BatteryIcon::ColorFromPercentage(). 2026-01-05 13:19:06 +01:00
JustScott
8d87a9ed2a Improved the Terminal Watchfaces UI
+ Reorder code to match the widgets order in the UI.

+ Moved all objects (rows) into a container

+ Use InfintimeTheme Colors instead of hardcoded hex values

+ Added a new InfinitimeTheme color: gray, using it to turn certain
  values gray when they contain no data

+ Implement @vkareh's [variable battery icon](https://github.com/InfiniTimeOrg/InfiniTime/pull/1964)
  color to the battery percentage text.

+ Replaced the 'You have mail.' notification message with the message
  '[1]+ Notify' to better fit the terminal lore.
2026-01-05 13:19:06 +01:00
Victor Kareh
f88c69a31a
SimpleWeatherService: Add sunrise and sunset data (#2100)
* SimpleWeatherService: Add sunrise and sunset data

---------

Co-authored-by: mark9064 <30447455+mark9064@users.noreply.github.com>
2026-01-05 13:12:08 +01:00
mark9064
51a6fb6a7e Use simple condition for terminal watchface
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-12-31 18:21:16 +00:00
Jean-François Milants
2702d07548 WatchFaceTerminal : Remove unused include directive. 2025-12-31 18:21:16 +00:00
JustScott
4a9932da68 Swapped bluetooth and weather positions, and removed degree symbol when
no weather data is present.
2025-12-31 18:21:16 +00:00
JustScott
edd67caa7b Add weather to the terminal watchface 2025-12-31 18:21:16 +00:00
Jean-François Milants
41050e6a98 Weather : Improve simple weather conditions (Pinetime::Applications::Screens::Symbols::GetSimpleCondition) to be more consistent with OpenWeather Api (https://openweathermap.org/weather-conditions) 2025-12-31 17:52:55 +00:00
JustScott
526d8416ba Add shorter/simpler weather condition options. 2025-12-31 17:52:55 +00:00
mark9064
f2814dd5ed Use RoundedDiv utility function across project
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-12-21 20:18:04 +00:00
FintasticMan
52baa265fe weather: Fix incorrect rounding for negative temperatures 2025-12-21 20:18:04 +00:00
Victor Kareh
66b5977f39 timer: Refactor ringing state management
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Consolidate timer ringing logic and use Timer component as single source
of truth for expired state.
2025-12-13 21:31:50 +01:00
JustScott
a4918c0e96 Keep screen on during timer buzzing
This prevents the motorController from buzzing infinitely while the
watch is sleeping.
2025-12-13 21:31:50 +01:00
Victor Kareh
54f20ff4cb timer: Add ringing and counter
The timer app issues a short buzz once and then disappears. There is no
trace left that the timer finished or how long ago. This change makes
the motor start ringing and presents a timer counter.

The timer stops buzzing after 10 seconds, and finally resets after
1 minute.
2025-12-13 21:31:50 +01:00
Titus
7128fc045d
Firmware validation: UI redesign (#2338)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
* redesign UI for firmware validation settings page

* remove period for the sake of uniformity

* remove unnecessary symbol I added for testing purposes

* remove unnecessary whitespace

* formatting

* temporarily comment out circle radius until we deicde

* change label from Reset to Rollback

* remove commented out lines
2025-11-13 21:40:51 +01:00
mark9064
99ae2f368b
Refactor Timer component to provide expiry information (#2365)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-11-09 19:17:51 +01:00
Hunman
716deff7d0
Step counter history
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Store 2 days steps history and display yesterday's steps on the Steps screen
2025-11-08 20:58:23 +00:00
Scott
9093d18efc
Move TemperatureColor to SimpleWeatherService for reusability
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-11-08 18:53:04 +00:00
mark9064
075e02a33e Constant frequency SystemTask state updates
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-11-06 21:45:03 +00:00
mark9064
ab0ba1b237 Mildly more correct linker flags 2025-11-06 21:44:38 +00:00
mark9064
56c55add59 GCC 14 compatibility 2025-11-06 21:44:38 +00:00
mark9064
3a1f4fe211 Correct tick overflow handling for timer reset 2025-11-06 21:43:48 +00:00
mark9064
fcc8073fab Isochronous PPG sampling
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-11-05 10:34:49 +00:00
mark9064
8daddf8778 Background heartrate measurement
Co-Authored-By: Patric Gruber <me@patric-gruber.at>
2025-11-05 10:34:49 +00:00
Steve Amor
04afd22943 Refactor pageindicator
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-11-04 21:46:23 +01:00
Steve Amor
101f9626e3 Refactor pageindicator 2025-11-04 21:46:23 +01:00
Steve Amor
e33a83a811 Adds SetCurrentScreen method to page indicator 2025-11-04 21:46:23 +01:00
Steve Amor
026c86ef4a Adds page indicator to music app 2025-11-04 21:46:23 +01:00
Jean-François Milants
aaf98a292a Fix formatting 2025-11-04 21:25:31 +01:00
codingjourney
0bfa2770d5 fixed irregular pause mode blinking at clock wraparound 2025-11-04 21:25:31 +01:00
codingjourney
144242afc2 fixed a type declaration 2025-11-04 21:25:31 +01:00
codingjourney
919b578540 fixed issues found by the test-format CI job 2025-11-04 21:25:31 +01:00
codingjourney
46e4c71ef8 lap times without leading zeroes 2025-11-04 21:25:31 +01:00
codingjourney
e53e4ed23c tightened declarations of integer fields 2025-11-04 21:25:31 +01:00
codingjourney
8a5c637eb7 prevent unnecessary redrawing of the time label 2025-11-04 21:25:31 +01:00
codingjourney
11436090f7 elapsedTimeBoundary as constexpr 2025-11-04 21:25:31 +01:00
codingjourney
b4032fff4d fixed issues found by the test-format CI job 2025-11-04 21:25:31 +01:00
codingjourney
526b7844bb tweaked some margins to improve aesthetics 2025-11-04 21:25:31 +01:00
codingjourney
487205ef6a length of lap list adapting to available space 2025-11-04 21:25:31 +01:00
codingjourney
4de9fc9b88 improved layout, improved re-alignment of time fields 2025-11-04 21:25:31 +01:00
codingjourney
9a4131c40e fixed layout of lap data 2025-11-04 21:25:31 +01:00
codingjourney
183337b6d3 upper bound for elapsed time 2025-11-04 21:25:31 +01:00
codingjourney
f720a7fb3c upper bound for lap numbers 2025-11-04 21:25:31 +01:00
codingjourney
5c2d4a5151 fixed an integer overflow bug in time rendering 2025-11-04 21:25:31 +01:00
codingjourney
af84ec2549 added missing newline 2025-11-04 21:25:31 +01:00
codingjourney
08043c3078 common method for entering the Paused state 2025-11-04 21:25:31 +01:00
codingjourney
f1f4c9028e fixed issues found by the test-format CI job 2025-11-04 21:25:31 +01:00
codingjourney
88e396f45f render accurate time at pause 2025-11-04 21:25:31 +01:00
codingjourney
6361bf2838 removed superfluous default values in controller 2025-11-04 21:25:31 +01:00
codingjourney
f5a5600b79 improved naming of lap-related fields and methods 2025-11-04 21:25:31 +01:00
codingjourney
d927a22847 lap storage as CircularBuffer, minor fixes 2025-11-04 21:25:31 +01:00
codingjourney
f28aca7541 minor fixes:
* more consistent function names
* lapCapacity as constexpr
* LastLap returns std::optional
* simplified handling of TickType_t values
* removed unused methods
* minor fix in lap rendering
2025-11-04 21:25:31 +01:00
Jan Hustak
db5d4704cc StopWatch: add persistence
# Conflicts:
#	src/displayapp/screens/StopWatch.h
2025-11-04 21:25:31 +01:00
Dāvis Mošenkovs
74cf69bb67
ImmediateAlertService: fix latent bug (#2159)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Include null terminator in the bytes copied.
Set notif.size as it is done in AlertNotificationService.cpp and
AlertNotificationClient.cpp.
2025-11-04 09:22:44 +01:00
Steve Amor
c9a9e72c13 Removes redundant words to save space
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-10-21 11:02:18 +01:00
mark9064
ba1934f85a Fix typos/formatting
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-10-16 09:34:55 +01:00
mark9064
cd4682d1ef Remove unused motion subscribed method 2025-10-16 09:34:55 +01:00
mark9064
7ea36e8cac Unconditionally calculate shake speed
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-10-15 17:36:02 +01:00
mark9064
90e458b000 Unconditionally update motion 2025-10-15 17:36:02 +01:00
mark9064
8a60a2147c Disable touch panel auto-reset
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-10-14 21:20:55 +01:00
mark9064
8422923ea0 Resolve paint corrupting screen scrolling
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-10-10 11:42:32 +01:00
mark9064
0881edd2e6 Remove redundant touchpanel read
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-10-08 17:54:18 +01:00
Hugo Osvaldo Barrera
957ba59ef3 docs: --user is only required when docker run as root
Some checks failed
Build and push Docker image / build (push) Has been cancelled
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
The --user argument attempts to map the uid of the user inside the
container to the user in the host. This works if docker is running as
root, but is docker is running as the current user, then the uid in the
container is mapped to a surrogate uid on the host, and this surrogate
user does not have permissions to complete the build process.

Clarify that the --user flag is only required when running docker as
root. It is also likely not required by users using podman as a docker
drop-in replacement, since podman always runs in rootless mode.
2025-09-23 16:28:57 +01:00
Hugo Osvaldo Barrera
09b1342eae docs: remove superfluous link
The docker build section points to another page with instructions on how
to clone the repository, but this same page already contains these same
instructions in the previous section.
2025-09-23 16:28:57 +01:00
Hugo Osvaldo Barrera
5516cc7e0a docker: update deprecated syntax
`docker build` warns of deprecated syntax:

    1 warning found (use docker --debug to expand):
    - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 71)

Update Dockerfile, removing the deprecated syntax usage.
2025-09-23 16:28:57 +01:00
Hugo Osvaldo Barrera
ea98db0b1d docs: shuffle sections into logical order
The first section explains how to clone the repository, the second how
to build Infinitime with the docker image, but the details on actually
provisioning the image are at the end, despite this step taking place
before the build itself.

Move the sections into the order in which the steps should be followed.
2025-09-23 16:28:57 +01:00
Dāvis Mošenkovs
e03414ce6d
Setting to disable DFU and FS access (#1891)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
* Expose SystemTask dependency controllers

Expose NotificationManager and Settings for use by the feature in next commit.

This is a memory efficient way for accessing SystemTask dependencies from
controllers that have SystemTask injected as a dependency.
Looks like each direct dependency injection uses 4 bytes RAM.
As InfiniTime is close to running out of RAM (using 16 more bytes causes build
to fail with "ld: region RAM overflowed with stack") it might be helpful to use
this approach more.

* Add setting to disable DFU and FS access
2025-09-03 20:50:13 +02:00
Heiko Stuebner
9afc23cba9 navigation: fix greying out the app icon if not enabled
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Commit 0aead42fdf51 ("navigation: Add is available (#1847)") added the
ability to draw the app icon in grey and in a disabled state when some
prerequisits were not met. Only the Navigation app was using this mechanism
due to its icons being stored in the external memory and possibly missing.

Commit 63e0c4f4efb0 ("Application selection at build time") broke this by
always setting the state as true:
      for (const auto& userApp : userApps) {
        apps[i++] = Screens::Tile::Applications {userApp.icon, userApp.app, true};
      }

Fix this by creating an isAvailable() strcuture in the app classes, similar
to how the Watchfaces handle the same problem of checking availability.
2025-07-03 13:19:56 +01:00
Titus
250e7a7032
Dark App Launcher Tiles (#2294)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-06-29 17:39:48 +02:00
Titus
c3afbc59ce
(small) Music App Redesign (#2292) 2025-06-29 16:43:41 +02:00
mark9064
c1b9967d92 Analog face constexpr fix
Some checks are pending
CI / build-firmware (push) Waiting to run
CI / build-simulator (push) Waiting to run
CI / get-base-ref-size (push) Waiting to run
CI / Compare build size (push) Blocked by required conditions
2025-06-28 18:30:54 +01:00
mark9064
b3f4831e54 Initialise DisplayApp components in DisplayApp context
Some checks are pending
CI / build-firmware (push) Waiting to run
CI / build-simulator (push) Waiting to run
CI / get-base-ref-size (push) Waiting to run
CI / Compare build size (push) Blocked by required conditions
2025-06-28 16:33:49 +01:00
mark9064
343962da5d Disable legacy FreeRTOS functions
Some checks are pending
CI / build-firmware (push) Waiting to run
CI / build-simulator (push) Waiting to run
CI / get-base-ref-size (push) Waiting to run
CI / Compare build size (push) Blocked by required conditions
2025-06-27 20:53:26 +01:00
Eshe
4517fb8c4b
Pride flag watchface (#2201)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-06-19 17:53:45 +01:00
Owen from Canada
3fc00f80db
Ignore npm files (#2313)
Some checks are pending
CI / build-firmware (push) Waiting to run
CI / build-simulator (push) Waiting to run
CI / get-base-ref-size (push) Waiting to run
CI / Compare build size (push) Blocked by required conditions
2025-06-18 13:17:57 +02:00
zyphlar
1340f56344
Set LF-only (\n) line endings for .sh files to fix #1905 (#2181)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-06-16 22:31:28 +01:00
Titus
b2d0e04e42
BatteryInfo App Redesign: Fixup (#2310)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
* remove leading zeros from battery percentage
* add correct colors matching the battery icon color thresholds
2025-06-12 09:13:53 +02:00
lmamane
4f426f00a8
set static text as static text (#2312)
and save a few bytes of heap memory

Co-authored-by: Lionel Elie Mamane <lionel@mamane.lu>
2025-06-12 09:12:11 +02:00
Reinhold Gschweicher
85a0542d93 DisplayApp: use std::ranges function where possible
Some checks failed
Build and push Docker image / build (push) Has been cancelled
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Instead of raw for loops use `std::ranges::transform` where possible.
And also use `std::ranges::find_if` instead of `std::find_if`.
2025-05-30 22:57:12 +01:00
kon-foo
8423ed675b fixed libpango1.0-dev install 2025-05-30 19:52:23 +01:00
NeroBurner
22cb7e3388
CI: use bash for get-base-ref-size job (#2305)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Same change as done in c3295d6d2a
But for get-base-ref-size job

The variable substitution I introduced are bash features. So they don't work with sh.

Update the size job to use `bash` instead of `sh` as shell
2025-05-29 09:36:50 +02:00
NeroBurner
c3295d6d2a
CI: use bash for output-sizs-job
Some checks failed
Build and push Docker image / build (push) Has been cancelled
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Firmware build works. But the build size job afterwards fails.
The firmware build uses `shell: bash --noprofile --norc -e -o pipefail {0}` as shell.

The size job uses `shell: sh -e {0}`

The variable substitution I introduced are bash features. So they don't work with sh.

Update the size job to use `bash` instead of `sh` as shell
2025-05-27 23:26:43 +02:00
NeroBurner
6f2a661a36
docker: fix NRF_SDK download and subsequent build.sh (#2299)
The upstream NRF-SDK download url and zip archive filename changed,
which was fixed with https://github.com/InfiniTimeOrg/InfiniTime/pull/2270

But the archive contents stayed the same, with the "old" folder name.

After #2270 we have basically the same docker-container as before the PR,
but the `GetNrfSdk` function of the `build.sh` script is called again during
firmware build time as the expected foldername for the SDK isn't the same as
the zip filename:

```sh
[ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ] && GetNrfSdk
```

Then during the build the `buils.sh` script tries to execute `GetNrfSdk` again,
which fails as the files already exist resulting in the following error:

```
replace /opt/nRF5_SDK_15.3.0_59ac345/components/802_15_4/api/HAL/hal_atomic.h? [y]es, [n]o, [A]ll, [N]one, [r]ename:  NULL
```

Fix this by reverting the `NRF_SDK_VER` to the folder name in the zip
archive and by some character replacement generate the download URL from
the above (the download is in lower-case without the `_` and `.`
characters).

Furthermore add safeguards to check after the `GetNrfSdk` call if the
expected folder is really created. Then we have an error early during
container image creation if the contents of the zip-archive are
unexpected.
2025-05-27 22:56:10 +02:00
Steve Amor
9fb35cc073 Refactors watch faces. Replace lv_tick_get() with xTaskGetTickCount()
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-05-23 17:46:14 +01:00
Darius Arnold
248a6aea87
Fix nRF SDK download links (#2270)
Some checks failed
Build and push Docker image / build (push) Has been cancelled
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
nRF has moved the download to a new location- Update the build script to fetch from the same URL the download website currently provides.
2025-05-21 21:17:42 +01:00
Jean-François Milants
0880b08546 Fix conflict in NotificationManager 2025-05-21 20:53:47 +02:00
Julian Vos
e27e51d36a fix: fix short ref not getting set in github builds 2025-05-21 20:18:23 +02:00
Matt Zrinsky
fb70b538e4 Fix about screen vertical centering.
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
There was a newline at the end of the last line on the third screen,
which was causing the label to not be centered vertically.
Removing it fixes the centering.
2025-05-19 21:49:46 +02:00
Titus
bb8923b56e
Center text on timer button (#2229)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-05-16 23:01:19 +02:00
Max Friedrich
4e1ee90286
Remove the vibration while charging (#1768)
* DisplayApp.cpp: Remove the vibration from OnChargingEvent

This fixes a bug where the vibration interupts the physical connection with the charger and therefore triggers a new charging event and vibration, ending in a cycle of vibrations while charging.

* remove OnChargingEvent message from DisplayApp

---------

Co-authored-by: minacode <minamoto9@web.de>
2025-05-16 21:29:06 +02:00
Titus
85be83beab
Add background color to progress bar when flashing firmware (#2237)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
2025-05-15 20:46:25 +01:00
Max Friedrich
5b20e8e2ba
Simple calculator (#1483)
Some checks failed
CI / build-firmware (push) Has been cancelled
CI / build-simulator (push) Has been cancelled
CI / get-base-ref-size (push) Has been cancelled
CI / Compare build size (push) Has been cancelled
Co-authored-by: minacode <minamoto9@web.de>
Co-authored-by: Finlay Davidson <finlay.davidson@coderclass.nl>
Co-authored-by: SuIông N. <Boteium@users.noreply.github.com>
Co-authored-by: mark9064 <30447455+mark9064@users.noreply.github.com>
2025-05-12 23:32:03 +01:00
Max Jakobitsch
6a6981c912 Revert "docs: add git config items to docs"
This reverts commit 4066cc03004c89a7ac4d5a7a327729184ecac7b6.
2025-03-21 17:36:47 +01:00
Max Jakobitsch
483435ae3d docs: add git config items to docs 2025-03-21 17:36:47 +01:00
Max-Julian Jakobitsch
3659e9a4ba chore: remove defunct .gitconfig
not actually used by git, see https://git-scm.com/docs/git-config and https://stackoverflow.com/q/18329621
2025-03-21 17:36:47 +01:00
Lukas H.
445aa1da83 Update Apps.md 2025-03-21 17:33:50 +01:00
Lionel Elie Mamane
e06dd405bc make cmake command coherent with previous documentation 2025-03-21 17:32:07 +01:00
lmamane
c0638c6007
work around g++ version 12, 13 and 14 spurious warning (#2158)
which is an error since we compile with -Werror

Co-authored-by: Lionel Elie Mamane <lionel@mamane.lu>
2025-03-14 13:10:41 +01:00
Titus
30e56834d5
BatteryInfo App Redesign using arc (#2236)
Redesign BatteryInfo App using an Arch widget instead of a bar.

The colors I used are as follows:
- Discharging (default): green
- Charging: lime
- Battery full: blue
- Battery low (<10%): red
2025-03-14 13:07:46 +01:00
Steveis
728da0f4a0
Fix Infineat crash when charging with AOD (#2256)
Optimise the battery animation to not use 100% CPU (which causes DisplayApp to spin forever with AOD)
(DisplayApp also needs to be fixed in the future so it cannot spin infinitely)
2025-02-26 23:16:20 +00:00
Max Jakobitsch
993118a3bc
Fix EOL related build issues on Windows (#2077)
Prevent line endings from getting normalised to CRLF

Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2025-02-11 23:43:10 +00:00
Titus
d371ebc9e2
Improve no notification text (#2238)
Change the "No notification" text to "No notifications"
2025-02-10 19:28:20 +00:00
Felipe Martínez
7b39d81c8c
Add "Run on InfiniEmu" link to pull requests (#2150) 2025-01-28 19:57:07 +00:00
Jozef Mlich
de87a0dd3d Fixes #2219: use artifact v4 instead of v3 2025-01-23 19:23:36 +00:00
ljahn
dbe8820834
Alarm: Simplify alarm alerting screen (#2211)
Simplify alarm alerting screen and fix bug with
alerting on time value change

SetAlerting creates an lv_task to automatically call StopAlerting after one minute. This task will call an invalid function reference and lead to a crash under the following condition:

All exit paths but the time value change (so not considering this fix) call StopAlerting themselves, which also terminates the lv_task.
However, the value change callback only calls DisableAlarm, because its normal use case is for setting up an alarm, where you have to re-confirm enabling the alarm after every change you make.
DisableAlarm still sets isAlerting in the alarmController to false, probably because someone thought a currently alerting but also disabled alarm makes no sense, this was introduced in a0cd439.
That causes the destructor of Alarm to think there is nothing to do regarding the alerting when the alarm screen is dismissed.
Therefore it does not call StopAlerting and the lv_task is left with an invalid function pointer, because Alarm does not exist anymore once the lv_task finally goes to call the callback function
2025-01-21 09:10:41 +01:00
Jozef Mlich
3e23ee7c78 Show alarm controller state in status icon 2025-01-05 14:37:35 +01:00
Victor Kareh
d69cfcfb13 weather: Fix inverted imperial forecast temperatures
When converting to imperial units, the min and max temperatures were
incorrectly inverted, causing confusion in the display.

Fixes https://github.com/InfiniTimeOrg/InfiniTime/issues/2183
2024-12-10 00:02:17 +01:00
Felipe Martínez
b8c51abe69
Use all free RAM for FreeRTOS heap
* Use all free RAM for FreeRTOS heap
* Wrap newlib malloc and related functions
* Implement calloc
2024-12-09 00:10:09 +00:00
Jean-François Milants
2105a7b63d Set version to 1.15.0 2024-12-03 20:11:08 +01:00
Lionel Elie Mamane
79ee886904 spelling 2024-11-25 08:55:37 +01:00
Lionel Elie Mamane
b1d70ae2ed remove unused include 2024-11-25 08:55:37 +01:00
xz-dev
a77a3dcb8b cmake: fix python path with use multi-version python 2024-11-17 23:36:22 +00:00
mark9064
8aefa3b9a6 Ignore old GoToRunning messages 2024-11-17 15:35:15 +01:00
febrezo
6c7eb6630e Fix git hash calculation with Docker build
Fix error when compiling the Pinetime using the Docker image.
If done with Docker, the container does not trust the /sources
folder, leading to a blank response of the command that grabs
the git commit `git rev-parse --short HEAD`.

```
fatal: detected dubious ownership in repository at '/sources'
To add an exception for this directory, call:

        git config --global --add safe.directory /sources
PROJECT_GIT_COMMIT_HASH_SUCCESS? 128

BUILD CONFIGURATION
-------------------
    * Mode : Release
    * Version : 1.3.0
    * Toolchain : /opt/gcc-arm-none-eabi-10.3-2021.10
    * GitRef(S) :
    * NRF52 SDK : /opt/nRF5_SDK_15.3.0_59ac345
    * Target device : PINETIME
    * Build DFU (using adafruit-nrfutil) : Enabled
    * Build resources : Enabled
```

If the `git config --global --add safe.directory /sources` is
added to the Dockerfile, the problem is solved and the hash is
added correctly.
2024-11-17 15:22:22 +01:00
Dom Rodriguez
4dd0d60eeb ci: Normalise slash-containing github.head_ref values
This fixes CI on #2121.

Signed-off-by: Dom Rodriguez <shymega@shymega.org.uk>
2024-11-17 15:13:38 +01:00
Jozef Mlich
a2ced5659d Update Amazfish details in README.md
The openrepos contain obsolete version (description on the openrepos page says that). New SailfishOS version is in chum repo. Additionally, there is Ubuntu Touch and Flatpak version.
2024-11-17 00:10:20 +00:00
Lionel Elie Mamane
5ea9c5537e Weather: fix min and max temperature being switched 2024-11-16 23:53:33 +00:00
FintasticMan
f7c87a700d weather: Switch to std::optional for Forecast days
Also only iterate over the number of days actually in use, rather than
MaxNbForecastDays.
2024-11-04 21:22:38 +01:00
FintasticMan
e247bd7019 Switch to simpler temperature interface 2024-11-04 21:22:38 +01:00
FintasticMan
29ad09f4ef weather: Refactor temperature type for type safety
There is now a Temperature struct in the weather service, which holds
the internal representation. There is also a temperature struct in the
Applications namespace, which holds the temperature in either Celsius or
Fahrenheit.
2024-11-04 21:22:38 +01:00
Samuel Dorsaz
afeded0126 Update Date&Time settings label for "Date & Time" 2024-11-04 21:20:44 +01:00
mark9064
57b6db8b2a Remove OnTouchEvent 2024-10-27 19:51:01 +01:00
mark9064
0076962588 Unify touch panel handling 2024-10-27 19:51:01 +01:00
mark9064
e6ee548536 Process touch events only when awake 2024-10-27 19:51:01 +01:00
mark9064
1808634f0e Clear ongoing taps when going to sleep 2024-10-27 19:51:01 +01:00
Lionel Elie Mamane
cfaad261dc SimpleWeatherService #include <array>
not <vector> as that is what is actually used.
Fixes build failure
InfiniTime/src/components/ble/SimpleWeatherService.h:86:18: error: field ‘location’ has incomplete type ‘Pinetime::Controllers::SimpleWeatherService::Location’ {aka ‘std::array<char, 33>’
2024-10-27 18:27:03 +01:00
FintasticMan
f1651c8000 datetime: Set the default year to the year during compile 2024-10-27 17:01:07 +01:00
mark9064
8a2ee437f5 Restrict hardware reactivation when not sleeping 2024-10-27 16:56:47 +01:00
mark9064
06b721a71f Improve sleep time calculation docs 2024-10-27 16:56:47 +01:00
mark9064
771008495e Replace rounded div macro 2024-10-27 16:56:47 +01:00
mark9064
f032847ae1 Refactor into defined states 2024-10-27 16:56:47 +01:00
mark9064
97ba39988b 8hz idle 2024-10-27 16:56:47 +01:00
liamcharger
879bdccd92
README: Header redesign (#2032)
* Reformat README.md

* Update README.md

* Add files via upload

* Add files via upload

* Add new README.md header image

* Remove unnecessary <br> tag

* Scale watchface logo down; add downloads badge

* Remove unnecessary <br> tag

* Add <br> tag to maintain spacing consistency

* Remove incorrect link

* Add watchface logo with dark logo

* Replace logo image with dark version

* Add files via upload

* Add header image

* Fix row spacing in header image

* Remove unnecessary <br> tag

* Add corner radius to header image

* Add files via upload

* Update image background

* Add reference to InfiniTimeExplorer

* Remove unnecessary image

* Remove unnecessary image

* Remove unnecessary images

* Rename watchface_collage_no_shadow.png to watchface_collage.png

* Update header image URL

* Remove unnecessary <br> tag

* SPI transaction hooks

* Remove task to notify

* Refactor display WriteToRam

* Use functional abstraction for hooks

* Refactor lambdas

* Avoid storing lambda

* Rename to pre-transaction hook

* Use FreeRTOS delay instead of spinning the CPU

* Apply display driver datasheet delays

* Move includes back

* Include task header (Fixes sim)

* Make chime vibrate twice

* Remove commit from main

* README: improve wording

* Add bootloader to DeviceInformationService.cpp

* Add bootloader to DeviceInformationService.h

* Revert "Add bootloader to DeviceInformationService.h"

This reverts commit f3f0fd568d96dea1ebd30529b4b8b6d5f4d5444b.

* Revert "Add bootloader to DeviceInformationService.cpp"

This reverts commit 35570edafab1b061442ae89b01a2ced8b9a812bd.

* Delete doc/logo/watchface_collage.png

* Add files via upload

* Delete doc/logo/watchface_collage.png

* Add files via upload

* Replace collage with correct image

---------

Co-authored-by: mark9064 <30447455+mark9064@users.noreply.github.com>
2024-10-23 19:00:48 +02:00
NeroBurner
8598142c27
Remove unused submodule QCBOR (#2138)
The submodule isn't used anymore. Remove the submodule reference
completely.
2024-10-09 20:26:08 +02:00
NeroBurner
a2356f2f4a
MusicService: add missing includes for TickType_t and xTaskGetTickCount (#2130)
Add `FreeRTOS.h` include for the directly used data type `TickType_t` in the header
and the function `xTaskGetTickCount` from FreeRTOS's `task.h`
2024-09-29 21:10:32 +02:00
NeroBurner
3db4e012ce
Remove unused pointer to DisplayApp member variables (#2125)
In the screens that use `DisplayApp *app` and pass it to a child item,
or use the reference just in the constructor. Afterwards the `app`
member is not used. So remove it from the private member variables.

Completely remove `app` parameter from `SettingDisplay` constructor as
it is unused.
2024-09-29 19:39:14 +02:00
NeroBurner
a0cd439efc
Alarm persist to flash (#1367)
* AlarmController: Add saving alarm time to file

Save the set alarm time to the SPI NOR flash, so it does not reset to
the default value when the watch resets, e.g. due to watchdog timeout
or reflashing of a new version of InfiniTime.

Just like the `Settings.h` `LoadSettingsFromFile()` the previous alarm
at boot (if available) and `SaveSettingsToFile()` the current alarm when
the `Alarm.h` screen is closed (only if the settings have changed).

The alarm-settings file is stored in `.system/alarm.dat`. The `.system`
folder is created if it doesn't yet exist.

Fixes: https://github.com/InfiniTimeOrg/InfiniTime/issues/1330

* alarmController: close .system dir after usage

Close the `lfs_dir` object for the `.system` dir after usage. Otherwise
on the second changed alarm the system will lockup because the `.system`
dir is already open and was never closed.

---------

Co-authored-by: Galdor Takacs <g@ldor.de>
2024-09-28 08:14:08 +02:00
Reinhold Gschweicher
997e4cee8c Hrs3300: fix includes for std::begin/std::end
Fix for Hrs3300 PR about Atomic HRS reads:
https://github.com/InfiniTimeOrg/InfiniTime/pull/1845

We use `std::begin` and `std::end`, but we don't include one of the
headers that define those functions.
See https://en.cppreference.com/w/cpp/iterator/begin for a list of
headers that define `std::begin` and `std::end`.

Starting with GCC 14 this leads to a compilation error presumably
because they cleaned up their headers.

Fix code by inlcuding `<iterator>`
2024-09-22 16:15:48 +02:00
mark9064
ad3bf49c7b
Atomic HRS reads (#1845)
- Combine the reading of all `HRS3300` registers into one I2C read so data is not partial
- Downsizes both HRS and ALS to 16bit as the sensor does not generate larger than
  16bit values in its current configuration
  - Increasing the resolution by 1 bit doubles the sensor acquisition time,
    since we are already at 10Hz we are never going to use a higher resolution
  - The PPG algorithm buffers for ALS/HRS are already 16bit anyway
- Remove functions for setting gain / drive that are unused throughout the codebase
- Calculate constants with constexpr
2024-09-22 00:29:15 +02:00
mark9064
7ca0418c82 Refactor doNotGoToSleep to a wakelock counter 2024-09-21 22:45:57 +02:00
mark9064
c3d05901a0 Refactor SystemTask state handling for resilience
State transitions now happen immediately where possible
This simplifies state management in general,
and prevents bugs such as the chime issue from occurring in the first place
2024-09-21 21:08:07 +02:00
mark9064
b3756e45fa Remove unused method declarations 2024-09-21 21:08:07 +02:00
Eli Tan
a266202831
notifications: Dismiss to watchface when empty (#1716)
Set `running` to false to flag end of watchface when there are no more
notifications left to display.

I found it slightly annoying that dismissing all notifications leaves me with
a "No notification to display" message. Instead of dismissing to a relatively
useless message, dismiss to watchface.
2024-09-18 22:31:15 +02:00
mark9064
c8236afbef Restrict debugging monitor to debug builds 2024-09-14 12:10:55 +02:00
mark9064
5040733a97 Clean unused DisplayApp messages 2024-09-14 12:10:14 +02:00
mark9064
fd019c7aad Use DirtyValue for timer 2024-09-14 11:20:47 +02:00
mark9064
975bfc5420 Size optimise NRF SDK build 2024-09-14 11:19:34 +02:00
Victor Kareh
2625ed39e5 DisplayApp: Go to clock on sleep if no app loaded
When turning off the screen, if there is no actual app loaded (i.e. we
are still in the Launcher, Notifications, QuickSettings, or Settings
screens) we should just reload the Clock app directly.
2024-08-22 17:34:25 +02:00
Derry Tutt
a3dbcd62f6
Documentation improvements (#2091)
Add documentation about watch faces and applications.
Update getting started documentation.

Co-authored-by: tituscmd <154823939+tituscmd@users.noreply.github.com>
2024-08-18 16:18:15 +02:00
mark9064
4fddf93114 Advertise HR service 2024-08-18 12:00:13 +02:00
Derry Tutt
83922fb3de Remove space before colon 2024-08-18 11:58:56 +02:00
Felipe Martínez
95917c65a5 Update main.yml 2024-08-18 11:55:03 +02:00
Jean-François Milants
3a0d673df4 Display the SPI flash JEDEC IDs in SystemInformation.
This is needed since a new memory chip will be used in future batches of PineTimes.
2024-08-05 20:34:41 +02:00
mark9064
53dc9dafe7 aod: simplify AOD disablement based on notification status 2024-08-05 20:32:43 +02:00
mark9064
a407902b06 aod: avoid spinning DisplayApp under high LVGL load 2024-08-05 20:32:43 +02:00
mark9064
3e8accde69 aod: run LVGL task handler until all work finished 2024-08-05 20:32:43 +02:00
mark9064
2bb611db8e aod: constant frequency idle frames 2024-08-05 20:32:43 +02:00
mark9064
ef88e8165c aod: porch control: 2Hz idle + 75Hz on 2024-08-05 20:32:43 +02:00
mark9064
da9ab4a7b4 aod: lower lcd voltage 2024-08-05 20:32:43 +02:00
John Crawford
0bcd7e0009 aod: lower voltage going to the display 2024-08-05 20:32:43 +02:00
mark9064
bf69e0dcc5 aod: fix flashlight brightness restore 2024-08-05 20:32:43 +02:00
mark9064
947c4f5067 aod: fix brightness getting stuck high 2024-08-05 20:32:43 +02:00
John Crawford
0960d67001 aod: lower refresh rate when always on 2024-08-05 20:32:43 +02:00
John Crawford
5385f7e275 aod: switch to 8 colors when always on 2024-08-05 20:32:43 +02:00
John Crawford
e884b053d3 aod: disable while in notification sleep 2024-08-05 20:32:43 +02:00
John Crawford
85a2181b64 aod: integrate with display timeout 2024-08-05 20:32:43 +02:00
mark9064
3dca742b65 aod: PPI/RTC-based backlight brightness 2024-08-05 20:32:43 +02:00
KaffeinatedKat
20ac7e8df3 feat: always on display 2024-08-05 20:32:43 +02:00
mark9064
f8f8993fac Batch display command arguments 2024-06-19 17:25:15 +02:00
Max Buchholz
fdc3b8badb README: Change links from Pine wiki to new documentation
As the Wiki was replaced by a new documentation website and is read-only, we should update the links, to point to the most up-to-date documentation.
2024-06-15 12:00:37 +02:00
Jean-François Milants
f9a16feeaf Continuous time updates
Add TODO.md in src/components/datetime. This file give detailed information about a refactoring of the DateTimeController that would be nice to do in the future.
2024-06-09 18:34:07 +02:00
mark9064
4930c0cab7 Include assert (fix sim) 2024-06-09 18:34:07 +02:00
mark9064
a449b272f7 Continuous time updates 2024-06-09 18:34:07 +02:00
Felipe Martínez
9e406c70f9 Remove unnecessary BMA421 reads 2024-06-02 15:48:26 +02:00
Felipe Martinez
0c87bc27b2 Move motorController.Init call to DisplayApp::Start 2024-06-02 15:14:02 +02:00
mark9064
0dcfb2edb7 Fix erratum 58 workaround 2024-05-12 13:57:12 +02:00
mark9064
06c6935315 Include task header (Fixes sim) 2024-05-01 16:17:59 +02:00
mark9064
47c104643d Move includes back 2024-05-01 16:17:59 +02:00
mark9064
7b1110187e Apply display driver datasheet delays 2024-05-01 16:17:59 +02:00
mark9064
7e460d3c80 Use FreeRTOS delay instead of spinning the CPU 2024-05-01 16:17:59 +02:00
mark9064
7a9211587a Rename to pre-transaction hook 2024-05-01 16:13:47 +02:00
mark9064
24e6a2f8ab Avoid storing lambda 2024-05-01 16:13:47 +02:00
mark9064
9a7ba405e1 Refactor lambdas 2024-05-01 16:13:47 +02:00
mark9064
940cd3459f Use functional abstraction for hooks 2024-05-01 16:13:47 +02:00
mark9064
869bec8f88 Refactor display WriteToRam 2024-05-01 16:13:47 +02:00
mark9064
ee925200c3 Remove task to notify 2024-05-01 16:13:47 +02:00
mark9064
079e676baf SPI transaction hooks 2024-05-01 16:13:47 +02:00
John Crawford
6b5235c301
fix: heartrate app displays --- instead of 000 (#1887) 2024-04-12 14:50:33 +02:00
BloodStainedCrow
57e625d4dc
Unify docker devcontainer with dockerfile used for CI (#1587)
* Only use one Dockerfile and build.sh script for both docker and devcontainer
* Remove all now unneccessary tasks and scripts
* Update to clang-format-14
* Move devcontainer.json into root folder
* Fix conditional statements in Dockerfile
* Move .devcontainer/README into doc/usingDevcontainers
* Remove obsolete VSCode Task
* Change standard compiler path to the correct compiler
* Set GDB Path for debugging
* Hide broken buttons from CMake Extension
* Refactor .devcontainer
* Remove unneccessary postBuildCommand
* Add devcontainer dependencies to all docker images
* Add Devcontainer Debug launch config
* Add an additional c_cpp_properties config as a fallback for devcontainer
* Remove obsolete Docker Argument
* Fix wrong C/Cpp versions
* Fix silent fail of gdb, add libncurses5
2024-03-23 10:45:45 +01:00
Victor Kareh
9a5f516c42 WatchFaceDigital: Remove unused variables 2024-03-20 20:31:35 +01:00
JF
4ca2112890
Emit the message BleRadioEnableToggle to DisplayApp only if the enable state of the radio has actually changed. (#2037)
This fixes an issue where the BLE connected logo would disappear when opening and closing the BLE setting (without changing it) while InfiniTime was already connected to a companion app.

Co-authored-by: JustScott <development@justscott.me>
2024-03-15 09:20:19 +01:00
FintasticMan
7dbb8f54c6 chrono: Resolve TODOs related to C++20 chrono feats 2024-03-14 21:09:03 +01:00
adumelie
14c6270903 Typo in example code 2024-03-14 20:27:19 +01:00
adumelie
ef38472278 More typos in code example 2024-03-14 20:27:19 +01:00
adumelie
4c9d5332c7 Typo in code example 2024-03-14 20:27:19 +01:00
adumelie
9aa0bc8ecf Fix and update documentation
Fixed missing colon typo in template for minimal app example
Updated reference to Apps enum after file move
2024-03-14 20:27:19 +01:00
Ritvik
4d86a3c6c1 Fix conflicts of min and max from stl_algo.h (included from atomic) 2024-03-13 21:58:13 +01:00
Victor Kareh
3b4b5a5163 ApplicationList: Reset app menu screen when loading watch face
This prevents the application list from loading in the last used screen
and instead goes back to the first screen whenever the watch face is
loaded.

Fixes #2006
2024-03-12 21:01:42 +01:00
FintasticMan
f2df0c45ef lowersleep: Improve algorithm by checking wrist angle
Inspired by https://github.com/InfiniTimeOrg/InfiniTime/pull/827#issuecomment-1881580414.
2024-03-12 19:14:58 +01:00
mark9064
636af4d33d Simplify ISR task wake checks
The macro checks the variable, so we don't need to check it ourselves
2024-03-12 19:09:01 +01:00
mark9064
70f6604878 Fix chimes 2024-03-12 19:08:17 +01:00
Victor Kareh
004b2bf3a0 README: Fix broken URLs 2024-02-25 13:17:19 +01:00
Victor Kareh
6ab512a6b6 weather: Define function to round and render temperature 2024-02-18 12:57:48 +01:00
Victor Kareh
68ae335a97 weather: Pad forecast temperatures
This ensures temperatures are correctly aligned with one another
2024-02-18 12:57:48 +01:00
Victor Kareh
1857b02efa weather: Colorize forecast temperatures 2024-02-18 12:57:48 +01:00
Victor Kareh
f422929d8c weather: Add new app with forecast 2024-02-18 12:57:48 +01:00
Victor Kareh
5d971690cb DateTimeController: Make DayOfWeekShortToStringLow static
This allows it to be used outside of the current datetime context and
makes it consistent with the MonthShortToStringLow function.
2024-02-18 12:57:48 +01:00
Tim Teichmann
b0a0afdd4b README: Make hex and UTF-8 code consistent for the chosen example 2024-02-15 21:20:33 +01:00
mark9064
93d7da1691 Fix OOB flash write when DFU interrupted
If a DFU is restarted, the write indices aren't reset causing the image to be written out of bounds. The CRC check prevents the faulty image from booting but LittleFS still gets nuked.
2024-02-14 19:12:08 +01:00
Victor Kareh
fa1af55a45
Alarm: Replace clock icon with bell 2024-02-12 16:08:40 +01:00
Graham Jones
c2c53bc6ab
bma421: Change acceleration values to 'binary milli-G' units
Co-authored-by: FintasticMan <finlay.neon.kid@gmail.com>
2024-02-11 20:46:26 +01:00
Victor Kareh
a49dc15a6e WatchFaceDigital: Move weather widget away from status icons
The weather widget is too high and could overlap the status icons.
Moving it to match the rest of the face avoids this issue and makes it
align with the rest of the theme.
2024-02-11 14:13:17 +01:00
mark9064
4c274421d9 Remove GFX (and unused GFX dependencies) 2024-02-11 13:28:01 +01:00
Victor Kareh
2db920599e
SimpleWeatherService: Add forecast operator overrides (#2011)
Any screen that relies on DirtyValue to display up-to-date forecast data
would require the struct to provide an operator override for comparison.
2024-02-10 19:24:46 +01:00
kieranc
44be356dc2
navigation: Missing character for font 2024-02-07 08:46:09 +01:00
Victor Kareh
2135e12b33
WatchFaceDigital: Add weather display
If weather is available, display the cloud icon and temperature.
2024-01-23 23:39:28 +01:00
apilat
a6cd3679eb Only inhibit sleep if motion notifications are enabled, not just Bluetooth 2024-01-23 14:58:21 +01:00
apilat
074df0526f Keep updating motion during sleep when Bluetooth is on 2024-01-23 14:58:21 +01:00
Yusuf Ebrahim
a40168a9d7
New dice-rolling app: InfiniDice! (#1326)
Add new App `Dice.h` to randomly roll the dice(s).
The number of dice can range from 1-9 (default 1), and the sides can
range from d2-d99 (default d2).

To have a haptic feedback we make Dice vibrate on roll.

Regarding the use of C++ `<random>` library:
There are known problems with `rand()` and `srand()` (see https://en.cppreference.com/w/cpp/numeric/random/rand)
and the `<random>` library is preferred for this reason. The function used from
`<random>` also avoids a very rare bias that would occur using `rand()` and modulo,
when `RAND_MAX` is not a multiple of `d` and the initially generated number falls in
the last "short" segment. This commit also updates the seed to derive entropy
(via `seed_seq`) from a mix of the system tick count and the x,y,z components of the
PineTime motion controller -- taking inspiration from and with credit to @w4tsn
(https://github.com/InfiniTimeOrg/InfiniTime/pull/1199)

Thanks for suggestions:
* in Dice, when rolling 1d2, also show "HEADS" or "TAILS" -- suggestion by @medeyko
* ui adjustments and result realignment -- suggestion by @Boteium

---------

Co-authored-by: NeroBurner <pyro4hell@gmail.com>
Co-authored-by: Riku Isokoski <riksu9000@gmail.com>
Co-authored-by: Paul Weiß <45500341+Poohl@users.noreply.github.com>
Co-authored-by: FintasticMan <finlay.neon.kid@gmail.com>
2024-01-23 09:45:52 +01:00
Reinhold Gschweicher
a481af06cf lv_img_conv: support other modes like 'P'
Support other image modes like `P`, which uses 8 bits per pixel and a
color palette to save space.

Luckily the Pillow module can do the mode conversion for us.

Fixes: https://github.com/InfiniTimeOrg/InfiniTime/issues/1985
2024-01-23 08:51:14 +01:00
Lennart Jahn
034d83fe6b Split declaration and implementation of GetSymbol 2024-01-16 22:34:51 +01:00
Victor Kareh
264b5bed43
WatchFacePineTimeStyle: Fix conditional in weather display (#1965)
Since returning a valid weather is always considered an updated value,
if the current weather is empty, the face will attempt to display the
temperature and icon as empty values, rather than clearing the labels.
2024-01-14 22:37:26 +01:00
FintasticMan
0503248a25 hook: Find correct clang-format version better 2024-01-12 14:42:53 +01:00
FintasticMan
c634a4e3b4 hook: Use clang-format with highest version 2024-01-12 14:42:53 +01:00
FintasticMan
ab8e267e28 hook: Update pre-commit git hook 2024-01-12 14:42:53 +01:00
Jean-François Milants
ecf2f564f7 Set version to 1.14.0 2024-01-06 15:21:29 +01:00
Jean-François Milants
6505336d60 CMake watch faces selection
Documentation : watch faces are not system apps anymore.

Co-authored-by: FintasticMan <finlay.neon.kid@gmail.com>
2024-01-06 14:44:10 +01:00
Jean-François Milants
25b3e2461d CMake watch faces selection
Improve wording and replace "watchface" by "watch face" in Apps.md.
Improve CMake readability regarding watch face selection

Co-authored-by: Reinhold Gschweicher <pyro4hell@gmail.com>
2024-01-06 14:44:10 +01:00
Jean-François Milants
72c992c84e Watch face selection using CMake
Update Apps.md to mention the selection of watchfaces using Cmake.
2024-01-06 14:44:10 +01:00
Jean-François Milants
22f6d4a40b Watch face selection using CMake
The list of watch face to build into the firmware is now set by CMake (-DENABLE_WATCHFACES).

Fix SettingWatchFace : convert to index to/from WatchFace when needed.
2024-01-06 14:44:10 +01:00
Reinhold Gschweicher
12acef6a71 apps: restore default apps ordering in CMake
Restore the default list of apps to compile. The ordering was changed in
the changeset to make the app-list configurable through a CMake-variable
in https://github.com/InfiniTimeOrg/InfiniTime/pull/1928

In the process have one app per line to create the default app list in
CMake. This makes git diffs easer and more readable.
2024-01-06 12:38:36 +01:00
Jean-François Milants
f34aede897 Simple Weather Service : Fix timestamp
Wording improvements in doc.

Co-authored-by: Reinhold Gschweicher <pyro4hell@gmail.com>
2024-01-04 13:00:01 +01:00
Jean-François Milants
95e2f9e701 Simple Weather Service : Fix timestamp
Mention that the timestamp should be expressed in localtime time.
2024-01-04 13:00:01 +01:00
Jean-François Milants
b4ff1f9ca2 Simple Weather Service : Fix timestamp
In the documentation, specify that the timestamp is expressed in seconds from epoch (instead of nanoseconds).
SimpleWeatherService now uses "localtime" (GetCurrentDateTime()) instead of UTC time.
2024-01-04 13:00:01 +01:00
FintasticMan
9b36afc787 pinetimestyle: Round the displayed temperature
Instead of truncating. This fixes the displayed temperature being 1
degree lower than expected when using GadgetBridge.
2024-01-03 21:01:53 +01:00
FintasticMan
3f51923c3b docs: Fix simple weather forecast message type 2024-01-03 20:58:58 +01:00
liamcharger
82db3dcd18 Update incorrect icon in weather settings 2023-12-30 20:11:13 +01:00
liamcharger
ab8515f766 PineTimeStyle: fix brief display of weather dummy data 2023-12-30 20:09:10 +01:00
liamcharger
f17bbc38da Remove 'Looking for Maintainer' 2023-12-27 20:59:57 +01:00
Derry Tutt
02a7a3a45f Update README.md 2023-12-23 21:45:57 +01:00
Derry Tutt
b0f1a49775 Typo fixed 2023-12-23 21:45:57 +01:00
FintasticMan
e88d0afabf pinetimestyle: Display temp in Fahrenheit with setting 2023-12-23 21:42:16 +01:00
FintasticMan
d889f3e444 settings: Add settings item for weather format 2023-12-23 21:42:16 +01:00
FintasticMan
c04813b6d3 weather: Add function for temperature in Fahrenheit 2023-12-23 21:42:16 +01:00
Jean-François Milants
fc5424cb72 User applications selection using CMake
Fix include path since last rebase.
2023-12-23 21:29:13 +01:00
Jean-François Milants
2ee2b8523a User applications selection using CMake
Fix typos in Apps.md and add new line in src/displayapp/apps/CMakeLists.txt
2023-12-23 21:29:13 +01:00
JF
06171dad38 Fix trailing space in doc/code/Apps.md
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2023-12-23 21:29:13 +01:00
Jean-François Milants
7794378e96 CMake user application selection
Move ENABLE_USERAPPS and USERAPP_TYPES from the root CMake file to src/displayapp/apps/CMakeLists.txt so we do not need to repeat it in InfiniSim
2023-12-23 21:29:13 +01:00
Jean-François Milants
f0e8bb26e9 Watch face selection with CMake
Move displayapp/Apps.h into a header only library (to make the integration easier in InfiniSim.
2023-12-23 21:29:13 +01:00
Jean-François Milants
1ad7840072 Watch face selection at build time
Replace the options that allowed to select the user apps independently by a single string variable that contains the ordered list of apps to build.
2023-12-23 21:29:13 +01:00
Jean-François Milants
f2996f54a8 CMake User Applications selection
Update documentation about building a new application and add instructions to add the app in CMake files.
2023-12-23 21:29:13 +01:00
Jean-François Milants
e00b98b82c CMake User Applications selection
Revert changes that need "return PROPAGATE" since this is not available in our Docker build (it needs CMake 3.25 and we have 3.22).
2023-12-23 21:29:13 +01:00
Jean-François Milants
2bc9318451 CMake User Applications selection
Use CMake's configure_file() functionality to generate the list of User Applications.

All the apps included in current versions of InfiniTime are enabled by default, but this can now be overridden by setting variables ENABLE_APP_XXX to True or False.

CMake CMP0140 is set to NEW to enable the return PROPAGATE functionality.
2023-12-23 21:29:13 +01:00
Jean-François Milants
ca7d8a668d Simple Weather Service
Fix ToUInt64() in SimpleWeatherService.cpp.
Fix typo in SimpleWeatherService.md.
2023-12-23 21:12:25 +01:00
Jean-François Milants
d56df38aeb Simple Weather Service
Fix typo in doc/ble.md.
2023-12-23 21:12:25 +01:00
Jean-François Milants
6f83a3bade Simple Weather Service
Fix code formatting.
2023-12-23 21:12:25 +01:00
Jean-François Milants
e5b73212f6 Simple Weather Service
Store temperatures as int16_t (instead of uint8_t previously). The temperature is expressed in °C * 100.
2023-12-23 21:12:25 +01:00
Jean-François Milants
ad090ab188 Simple Weather Service
Move the function GetIcon that converts SimpleWeatherService::Icons to char (symbol) into a new header file so that it can be used by other apps and companion apps.
2023-12-23 21:12:25 +01:00
Jean-François Milants
ef2c431569 Simple Weather Service
Code improvements : icon fields are now typed as Icons, move the location string when creating a new instance of CurrentWeather, fix SimpleWeatherService::CurrentWeather::operator== (location was missing from the comparison).
2023-12-23 21:12:25 +01:00
Jean-François Milants
199aefc617 Simple Weather Service - code cleaning and improvements
Rename Symbols::cloud_meatball to Symbols::cloudMeatball.
2023-12-23 21:12:25 +01:00
Jean-François Milants
d29eb1ea99 Simple Weather Service - code cleaning and improvements
Remove unused Weather debug app.
Fix formatting in SimpleWeatherService.cpp.
2023-12-23 21:12:25 +01:00
Jean-François Milants
3a8c7dc038 Simple Weather Service - code cleaning and improvements
Add missing icons (heavy clouds, thunderstorm, snow).
Remove unneeded comparison operator (!=), improve conversion of Timestamp and MessageType, order includes.
Fix typo in documentation.
Remove not related change in StopWatch.
2023-12-23 21:12:25 +01:00
Jean-François Milants
fe4b07c610 Simple Weather Service : fix out of bounds access while creating Forecast instance. 2023-12-23 21:12:25 +01:00
Jean-François Milants
50c679023f SimpleWeather service : new weather implementation
Fix recovery firmware and code formatting.
2023-12-23 21:12:25 +01:00
Jean-François Milants
c94a59e7d3 SimpleWeather service : new weather implementation
This new implementation of the weather feature provides a new BLE API and a new weather service.
The API uses a single characteristic that allows companion apps to write the weather conditions (current and forecast for the next 5 days).
The SimpleWeather service exposes those data as std::optional fields.

This new implementation replaces the previous WeahterService.

The API is documented in docs/SimpleWeatherService.md.
2023-12-23 21:12:25 +01:00
Jean-François Milants
088082d32d Watch face selection at build time
Do not assign specific values to the fields of the enum WatchFace.
2023-12-21 20:49:22 +01:00
Jean-François Milants
39bc166e54 Watch face selection at build time
Watch faces can now be selected at buid time. It's implemented in a similar way than the selection of user apps, using a list of watch face description that is generated at build time (consteval, constexpr)
2023-12-21 20:49:22 +01:00
Reinhold Gschweicher
a544da9ed1 cmake: update the TARGET_DEVICE selection choices as well
The properties are used for CMake-GUI configuration applications to
provide a set of values by dropdown.
2023-12-16 11:43:31 +01:00
FintasticMan
69b9d30a30 p8: Fix build when building for P8 variants
Building with a TARGET_DEVICE set to any of the P8 variants' names
caused the build to fail, because they contained hyphens.
The build defines a macro `TARGET_DEVICE_$VARIANT`, which fails if
`$VARIANT` contains a hyphen.
2023-12-16 11:43:31 +01:00
Jean-François Milants
d79766bccd Allow zero app to be selected at build time
Fix 'nScreens' calculation in ApplicationList so that we can build the project with zero user app selected.
2023-12-10 18:16:41 +01:00
mark9064
80607282dd Update VS Code config to C++20 2023-12-10 12:02:42 +01:00
mark9064
54b4750c6f Apply suggestion 2023-12-09 21:20:21 +01:00
mark9064
41a4813c8b Fix calculation of number of app screens 2023-12-09 21:20:21 +01:00
Mingjie Shen
42fcb99b38 StopWatch: Add an extra space to the string without the hour
so that it's just as long as with the hour.
2023-12-01 08:52:42 +01:00
Mingjie Shen
cd8216d1c9 SettingDisplay: Reduce buffer size
Given that 2^16 / 1000 is 65, we can make the buffer only 3 chars.
2023-12-01 08:52:42 +01:00
Mingjie Shen
c9fbcd8818 Fix potential buffer overflows when calling sprintf
1. Replace sprintf with snprintf, which is safer
2. An unsigned int or unsigned long int requires 11 bytes to print
   (including the null terminator)
3. Use PRIu16 macro to print uint16_t
4. Format string "#%2d %2d:%02d:%02d.%02d\n" in
   StopWatch::stopLapBtnEventHandler() requires at least 17 bytes.
   The 16-byte buffer would clearly be overrun if sprintf were used.
2023-12-01 08:52:42 +01:00
FintasticMan
e89e5e4d66 apps: Restore app list order
The build-time selection PR updated the order, this restores what it was
before.
2023-11-29 17:17:16 +01:00
Jean-François Milants
f3d4f04827 Application selection at build time : update documentation
Update documentation about the apps (Apps.md) : fix obsolete information, add doc about user/system apps and update the part about the implementation of a new app.
2023-11-19 21:13:55 +01:00
Jean-François Milants
473d9c4fa4 Fix code formatting 2023-11-19 21:13:55 +01:00
Jean-François Milants
97ba1a456d Add missing new line at end of file. 2023-11-19 21:13:55 +01:00
Jean-François Milants
02af09d943 Application selection at build time
Fix DisplayAppRecovery so it builds with -std=c++20.
2023-11-19 21:13:55 +01:00
Jean-François Milants
63e0c4f4ef Application selection at build time
A list of "user applications" is built at compile time. It contains all the info needed to create the application at runtime (ptr to a create() function) and to display the app in the application menu. All applications declare a TypeTrait with these information.
When a new app must be loaded, DisplayApp first check if this app is a System app (in which case it creates it like it did before). If it's not a System app, it looks for the app in the list of User applications and creates it if it found it.
Those changes allow to more easily add new app and to select which app must be built into the firmware.
Switch to C++20 (and fix a few issues in SpiMaster.cpp and Watchdog.cpp.
2023-11-19 21:13:55 +01:00
Jean-François Milants
f6d7f602f5 Fix deadlock when a lot of notifications are received in a very short time span.
When a notification is received, SystemTask sends messages to DisplayApp, which loads the Notifications apps that sends a few messages to SystemApp.
When notification are received too quickly, DisplayApp and SystemTask cannot process those messages fast enough (probably because of the time it takes to refresh the display) and the message queues fill up. When they are full, the current implementation just waits until there's room available to store the event. In this case, since both tasks exchange messages, they end up in a deadlock.

This fix consists in setting the timeout value to 0 (non-blocking mode) for the NewNotification messages on the DisplayApp side. This will prevent the SystemTask from being blocked (which would result in the watchdog reseting the watch). A more generic approach should be design in the future.
2023-11-19 20:58:29 +01:00
Alex E
930284adc2
docs: Update Apps.md to remove Screen param (#1752)
This is needed since #1629.

Co-authored-by: FintasticMan <finlay.neon.kid@gmail.com>
2023-11-16 18:46:25 +01:00
Ben Merritt
9b8eb75f34
docker: Install Node.js in a non-deprecated way (#1849) 2023-11-12 14:09:41 +01:00
Kieran Cawthray
b191a30947 Tidy up 2023-11-11 18:07:07 +01:00
Kieran Cawthray
d930fd4fa2 Initial commit 2023-11-11 18:07:07 +01:00
Reinhold Gschweicher
e6b96c2863 CI: install build resource dependency python3-pil package
Used by script `lv_img_conv.py`, should be provided by docker image, but
until then explicitly install in workflow.
2023-10-26 22:45:01 +02:00
Reinhold Gschweicher
77546c9fe2 lv_img_conv_py: minimal python port of node module
Create a minimal python port of the node.js module `lv_img_conv`. Only
the currently in use color formats `CF_INDEXED_1_BIT` and
`CF_TRUE_COLOR_ALPHA` are implemented.

Output only as binary with format `ARGB8565_RBSWAP`.

This is enough to create the `resources-1.13.0.zip`.

Python3 implements "propper" "banker's rounding" by rounding to the nearest
even number. Javascript rounds to the nearest integer.
To have the same output as the original JavaScript implementation add a custom
rounding function, which does "school" rounding (to the nearest integer)

Update CMake file in `resources` folder to call `lv_img_conf.py` instead of
node module.

For docker-files install `python3-pil` package for `lv_img_conv.py` script.
And remove the `lv_img_conv` node installation.

---

gen_img: special handling for python lv_img_conv script

Not needed on Linux systems, as the shebang of the python script is read
and used. But just to be sure use the python interpreter found by CMake.
Also helps if tried to run on Windows host.

---

doc: buildAndProgram: remove node script lv_img_conv mention

Remove node script `lv_img_conv` mention and replace it for
runtime-depency `python3-pil` of python script `lv_img_conv.py`.
2023-10-26 22:45:01 +02:00
FintasticMan
eac460f030
weather: Fix GetCurrent* functions returning future events (#1879) 2023-10-06 19:54:20 +02:00
Steve Amor
46b664b528 Corrects typo for make option for recovery-loader 2023-10-04 20:24:37 +02:00
FintasticMan
3a7dfdba8e workflows: Fix InfiniSim CI build
InfiniSim has removed the libpng submodule and moved it to a system
dependency.
2023-09-18 15:26:09 +02:00
JF
0aead42fdf
navigation: Add is available (#1847)
Navigation app now needs 2 images to be loaded from the resources on the external filesystem. This PR adds an 'enabled' field to the Applications struct. This field is true for all applications expect for Navigation which calls Navigation::IsAvailable(). This methods returns true if the 2 files are available in the resources.

The application list disables the application (draws it in grey, disables the touch callback) if the enable flag is not set.
2023-09-02 19:43:39 +02:00
JF
44d1798f4f
navigation: Move font to external memory (#1838)
The TTF font used by the navigation app is ~20KB and is stored in internal flash memory.
To free this space, the TTF font is now converted in 2 "atlas pictures" (pictures that contain multiple concatenated images) stored in the external flash memory. The navigation app now accesses one of those 2 files and apply an offset to display the desired picture.

The corresponding documentation has also been updated.

Add comments about the layout of the pictures that contain the icon and about the indexing of those icons.

In documentation (buildAndProgram.md), edit the section about the debug compilation mode. Remove the part about removing the Navigation app to free some memory (since it's not relevant anymore) and explain how to selectively build parts of the firmware in Debug mode.
2023-09-02 19:41:51 +02:00
FintasticMan
0f9f606b78
lowersleep: Implement Lower to Sleep functionality (#827) 2023-08-27 18:15:21 +02:00
Finlay Davidson
2b1eae7f59 raisewake: Improve raise to wake algorithm
This new algorithm calculates the number of degrees that the wrist has
rolled, and checks if that is above a threshold.

First it checks if the wrist is still enough for the acceleration values
to be considered mostly from gravity. It does this by calculating the
mean over the past 2 SystemTask loops, and checking that the variance
from that mean is below a threshold.
Then it calculates the angle the wrist is being held at, and calculates
the difference from the angle some time ago. If this difference is above
the threshold, it wakes the watch.
2023-08-17 21:21:22 +02:00
Finlay Davidson
cfe21103ea motioncontroller: Add functions for analysis
These are functions for converting acceleration due to gravity to angles
in degrees, and some statistical analysis including the mean and
variance.
2023-08-17 21:21:22 +02:00
Finlay Davidson
3085bb3990 motioncontroller: Store acceleration history
Store history of acceleration values for the y and z axes.
2023-08-17 21:21:22 +02:00
Finlay Davidson
47ca403857 shakewake: Slightly improve accuracy
The accumulated speed was calculated by dividing first and multiplying
after, which results in more rounding errors than if you multiply first
and then divide. The values aren't big enough to overflow.
2023-08-17 21:21:22 +02:00
Finlay Davidson
6d5847e046 circularbuffer: Add circular buffer utility struct 2023-08-17 21:21:22 +02:00
SteveAmor
cf782bb615 check closed issues 2023-08-17 19:40:32 +02:00
SteveAmor
9196c18d37 check closed bugs 2023-08-17 19:37:20 +02:00
Max Friedrich
6d0d8c7d63
watchfaceanalog: Background in lvgl (#1824)
* change background image to widgets

This commit removes the background image for the WatchFaceAnalog and replaces it with lvgl widgets. It aims to keep the original look.

* remove comments and background image

---------

Co-authored-by: minacode <minamoto9@web.de>
2023-08-15 13:01:17 +02:00
TailyFair
782ef7902f Include repository initialization in docker build docs 2023-08-11 21:08:26 +02:00
Max Friedrich
39d5b5c3a2
NotificationManager.h: Reorder notification struct fields to allow easier creation. (#1774)
This commit changes the order for the notification struct fields to allow the creation of notifications using a string literal.
```cpp
NotificationManager::Notifiation notification {
  "String literal with notification text",
  42,
  NotificationManager::Categories::SimpleAlert
};
```

Co-authored-by: minacode <minamoto9@web.de>
2023-07-09 14:39:38 +02:00
Jean-François Milants
5f3acfadd2 Set version to 1.13.0 2023-06-24 16:00:10 +02:00
Finlay Davidson
505520d83b arduinofft: Move to submodule, define srqt_internal externally 2023-06-17 17:46:48 +02:00
Timothy
473a0795d6 Fix Typo
label_battery_vallue > label_battery_value
2023-06-17 17:44:28 +02:00
Isaac
9e128c838e
ShakeWake: Fixed instant wake after sleep issue in certain positions (#1691)
* ShakeWake: Fixed instant wake after sleep issue in certain positions

Add lastX var to track the previous x acceleration for correct calculation of speed.

Reorder axes for clarity.

---------

Co-authored-by: Isaac <114504394+isaacc27@users.noreply.github.com>
Co-authored-by: FintasticMan <52415484+FintasticMan@users.noreply.github.com>
2023-06-17 17:37:53 +02:00
Reinhold Gschweicher
f057894d26 Allow mcuboot tool to use cbor2 additional to cbor
The mcuboot imgtool uses the python module `cbor`.

An equivalent and updated package `cbor2` requires Python 3.7 or newer.

The arch packages provide a package `python-cbor2`, but no package for
`cbor`.

This patch makes it possible to use the system package by adding
support for the `cbor2` package additionally to the `cbor` package.
2023-06-04 19:46:37 +02:00
Jean-François Milants
8fee341b86 ST7789 : do not reconfigure the reset pin to default during sleep. 2023-06-04 17:22:27 +02:00
Jean-François Milants
c9747462f7 Power optimization - Improve SPI sleep mode
Fix RecoveryLoader.
2023-06-04 17:22:27 +02:00
Jean-François Milants
e224263828 Power optimization - Improve SPI sleep mode
Fix formatting issue in St7789.cpp
2023-06-04 17:22:27 +02:00
Jean-François Milants
9bd90c906e Power optimization - Improve SPI sleep mode
ST7789 driver : replace the constant '26' with a named constant to specify the pin number of the reset pin of the LCD controller.
2023-06-04 17:22:27 +02:00
Jean-François Milants
62848b33fb Power optimization - Improve SPI sleep mode
Calls to Spi::Init() are not needed, pin initialization is already done in ctor().
Remove calls to Spi::Sleep()/Spi::Wakeup() to ensure that SPI CS pins are kept high even in sleep mode.
2023-06-04 17:22:27 +02:00
Jean-François Milants
4c0f897953 Power optimization - Improve SPI sleep mode
Ensure that all pins are set to their default configuration during sleep mode.
Disable the workaround for FTPAN58 (SPI freezes when transfering a single byte) at the end of the transfer. This disables the resources needed for the workaround.
Those changes reduce the power usage by 430-490µA.
2023-06-04 17:22:27 +02:00
Jean-François Milants
2fa3aaa161 Power optimization - enable the DC/DC regulator.
The DC/DC regulator reduce the power consumption of the MCU compared to the default LDO regulator. The DC/DC regulator needs additional HW that is mounted on the PineTime.

This change reduces the power usage by 380µA during fast advertising, by 200µA during slow advertising and by 186µA when BLE is disabled.
2023-06-04 17:03:37 +02:00
Jean-François Milants
a48d4e0b13 Power optimization - Enable HRS3300 (heart rate sensor) sleep mode.
Put the HRS3300 to sleep mode when InfiniTime is going to sleep. This change reduces the power consumption by 130µA when the heart rate sensor is disabled.
2023-06-04 17:03:22 +02:00
Jean-François Milants
32a9fff60c Add links to documentation about PineTimeStyle (PTS) and weather integration in PTS. 2023-06-04 17:01:42 +02:00
kieranc
94f41258d5
PineTimeStyle weather display (#1459)
Weather display for PineTimeStyle

Documentation : https://wiki.pine64.org/wiki/PineTimeStyle and https://wiki.pine64.org/wiki/Infinitime-Weather
2023-06-04 16:52:31 +02:00
FintasticMan
394f58fbb2
clangd: Add clangd cache directory to gitignore (#1763) 2023-05-27 20:24:17 +02:00
Elara Musayelyan
24af739af8 Update link for ITD 2023-05-18 21:08:24 +02:00
Jean-François Milants
8abfd25a6c Fix code formatting 2023-05-18 19:58:09 +02:00
Jean-François Milants
e038703efe Refactor pvPortRealloc() to improve readability. 2023-05-18 19:58:09 +02:00
Jean-François Milants
611e0ff768 Enable malloc error and stack overflow error detection in FreeRTOS. Count them and display them in the SystemInfo app. 2023-05-18 19:58:09 +02:00
Jean-François Milants
1911e2d928 Unify all heaps (stdlib + LVGL + FreeRTOS) into a single heap managed by FreeRTOS and heap_4_infinitime.c.
LVGL supports custom implementation of malloc() and free() so using pvPortMalloc() and vPortFree() is just a matter of setting the right variables.

Other libraries (NimBLE, LittleFS) and InfiniTime code (new) call malloc() and free() from stdlib. InfiniTime now provides the file stdlib.c that provides a custom implementation for malloc(), free(), calloc() and realloc(). This ensures that all calls to the standard allocator are redirected to the FreeRTOS memory manager.

Note that realloc() is needed by NimBLE.
2023-05-18 19:58:09 +02:00
Jean-François Milants
9e808a65ec Add pvPortRealloc() in heap_4_infinitime.c. An implementation of realloc() is needed by NimBLE. 2023-05-18 19:58:09 +02:00
Jean-François Milants
1df3d1a14d Copy the memory manager heap_4.c from the FreeRTOS distribution to the InfiniTime project codebase. This will allow to implement custom functionalities that are not available in the original implementation. 2023-05-18 19:58:09 +02:00
Max Friedrich
020a7fd11d
Refactor watch face to enum (#1339)
change watch face from int to enum

---------

Co-authored-by: minacode <minamoto9@web.de>
2023-04-30 17:03:46 +02:00
JF
5f19f689f9
Refactor, document and fix the Watchdog driver (#1710)
* Refactor and document the Watchdog driver to make it more readable.

Fix the configuration of the behaviours configuration that was not properly implemented (but it didn't cause any side effect since the correct value was eventually set in NRF_WDT->CONFIG).

Fix the wrong interpretation of the reset reasons caused by implicit conversions of int to bool.
2023-04-30 15:56:13 +02:00
Ceimour
c22e30a4a6
Refactored Ppg for frequency based algorithm. (#1486)
New implementation of the heart rate sensor data processing using a frequency based PPG algorithm.
The HRS3300 settings are fine-tuned for better signal to noise at 10Hz.
The measurement delay is now set to 100ms.
Enable and use the ambient light sensor.
FFT implementation based on ArduinoFFT (https://github.com/kosme/arduinoFFT, GPLv3.0).
2023-04-30 15:50:18 +02:00
Riku Isokoski
40f7e1c7be TimerController: Rename to Timer 2023-04-16 14:33:23 +00:00
Riku Isokoski
661ffbeb1e TimerController: Make TimerController reusable
TimerController instance was moved to DisplayApp.
2023-04-16 14:33:23 +00:00
Riku Isokoski
4d93ae6d27 MotionController: Remove IsOk variable
We should be able to assume MotionController is safe to use.
2023-04-16 14:15:49 +00:00
Riku Isokoski
348d3de60b Watchfaces: Assume motionsensor is ok
The watch face shouldn't and doesn't start before the sensor is ready.
2023-04-16 14:15:49 +00:00
Finlay Davidson
e4a6f6ad77 fonts: Make patching silent
The generate script should only output anything if there are errors.
2023-04-16 15:57:18 +02:00
fossison
d472a71078
stopwatch: Add hours tracking (#1692)
Stopwatch application : add hours tracking

---------

Co-authored-by: fossison <fossison@mailbox.org>
Co-authored-by: Jean-François Milants <jf@codingfield.com>
2023-04-16 15:55:49 +02:00
Riku Isokoski
5d45392453 lvgl: Use InfiniTime fork of LVGL 2023-04-03 09:46:41 +00:00
Riku Isokoski
56fe2e4c43 WatchFaceTerminal: Simplify time update check 2023-04-02 18:19:10 +00:00
Riku Isokoski
d251a47828 WatchFaceG7710: Simplify time update check 2023-04-02 18:14:42 +00:00
Riku Isokoski
8d089b1429 WatchFaceInfineat: Simplify time update check 2023-04-02 18:07:29 +00:00
Riku Isokoski
c5c3e81e15 WatchFaceDigital: Simplify update check 2023-04-02 17:56:51 +00:00
Jean-François Milants
238a829577 Set version to 1.12.0 2023-04-02 14:48:26 +02:00
Finlay Davidson
616aa91b4c dirtyvalue: Move to src/utility 2023-03-27 22:12:32 +00:00
Finlay Davidson
47931f41d5 staticstack: Move to src/utility 2023-03-27 22:12:32 +00:00
Finlay Davidson
2ba8b17967 linearapproximation: Move to src/utility 2023-03-27 22:12:32 +00:00
Riku Isokoski
9641fd7308 pr-comment: Comment instructions instead of failing 2023-03-27 19:54:36 +00:00
Riku Isokoski
0a4f015783 WeatherService: const DateTimeController reference 2023-03-19 12:41:01 +02:00
Riku Isokoski
829ab86f37 HeartRateService: Remove SystemTask dependency 2023-03-19 12:41:01 +02:00
Riku Isokoski
7c98f26f12 MotionService: Remove SystemTask dependency 2023-03-19 12:41:01 +02:00
Riku Isokoski
ca5e7d1adf NavigationService: Remove unused SystemTask ref 2023-03-19 12:41:01 +02:00
Riku Isokoski
7e15a1e340 WeatherService: Remove unused SystemTask reference 2023-03-19 12:41:01 +02:00
Riku Isokoski
c7a9b3d7d3 MusicService: Remove SystemTask dependency 2023-03-19 12:41:01 +02:00
Riku Isokoski
310ea81eec inactivity: Use LVGL inactivity timers
Replace custom FreeRTOS inactivity timers with LVGL inactivity timers.

DisplayApp: Trigger display activity on timer done.

inactivity: Add additional checks
The backlight could be turned on by RestoreBrightness() on ble connect
event.

inactivity: Trigger activity on screen switch

A notification timing out could put the watch to sleep immediately.
While this could be ideal behaviour, it was caused by delay in
processing the EnableSleeping event and pushing RestoreBrightness to
DisplayApp.
2023-03-18 01:15:33 +02:00
Finlay Davidson
a7746d3a31 notification: Initialise message
Prevents reading uninitialised memory if notification gets cut off due
to being more than 100 chars. The last character is assumed to be \0, but
it is actually uninitialised.
2023-03-16 22:18:04 +01:00
Riku Isokoski
11ade64166 WatchFaceAnalog: Simplify date update check 2023-03-15 08:30:03 +02:00
Finlay Davidson
e55a76f740 raisewake: Change names in line with the style guide 2023-03-09 10:17:03 +02:00
Finlay Davidson
49ad5be742 motioncontroller: Fix clang-tidy warnings
Also move one-line functions to header.
2023-03-09 10:17:03 +02:00
Finlay Davidson
76e79df375 shakewake: Switch to more generic timekeeping
Could be used for other motion-based algorithms in the future.
2023-03-09 10:17:03 +02:00
Finlay Davidson
a43463762c shakewake: Simplify return code 2023-03-09 10:17:03 +02:00
Finlay Davidson
6cf6455313 shakewake: Switch to more generic last* vars
These could be used for other motion-based algorithms in the future.
Also fix includes.
2023-03-09 10:17:03 +02:00
Finlay Davidson
f993311830 shakewake: Fix names according to style guide 2023-03-09 10:17:03 +02:00
kieranc
ada182336f
PTS: Fix double tap behaviour on settings screen (#1669)
Fixes #1467 "Double tapping PineTimeStyle steps style button sends watch to sleep"
Double tap is disabled on the color settings screen by checking if the Rnd button is visible, but this didn't work for the options screen as the Rnd button isn't visible. I've changed it to check if the Close button is visible instead, which is used on both settings screens, and resolves the bug. I also changed the button used to disable the long press behaviour which was an as-yet-undiscovered bug which would have allowed the long press action to be used when the options screen was visible.
2023-03-04 09:16:10 +02:00
Riku Isokoski
08b4cfbb50 Add low battery indicator to StatusIcons, digital and analog watchfaces
Define deepOrange color in InfiniTimeTheme
2023-03-02 13:38:31 +02:00
Riku Isokoski
fff0a00a4a Revert "added low battery message"
This reverts PR https://github.com/InfiniTimeOrg/InfiniTime/pull/1352
2023-03-02 13:38:31 +02:00
Finlay Davidson
3b084d74c3 branches: Update files to refer to main instead of develop 2023-03-02 09:45:47 +02:00
Riku Isokoski
692a9bee5d README: Remove status badge
I don't think this badge has shown the actual status of the current
workflows for a long time. The real status can easily be seen by
clicking on the checkmark or cross icon on the front page. It's also
supposed to show the status of the master branch, not develop (default).
2023-02-27 19:44:51 +02:00
Jean-François Milants
9bbd2ddbc4 LVGL / FS : Initialize the LVGL FS driver in LittleVgl (instead of FS).
Previously, the LVGL driver for the filesystem was initialized in the class FS. However, since 6f942e2, the order of the initializations was incorrect  : the driver was initialized (FS::LVGLFileSystemInit()) before LVGL (LittleVgl.Init()), which means that the driver registration was probably dropped when LVGL was initialized.

The LVGL driver is now initialized in LittleVgl.Init(), which seems to make much more sense, since all LVGL drivers are initialized there. This way, we ensure that the initialization of the drivers is consistent.
2023-02-26 22:10:03 +02:00
Riku Isokoski
ce2277cbca infineat: Create colors at compile time.
lv_color_hex can't be evaluated at compile time, but LV_COLOR_MAKE can.
2023-02-26 19:53:14 +02:00
Riku Isokoski
dd8a9a274f warnings: Treat warnings as error
This way warnings will be taken seriously, and will cause PR checks to
fail when they throw warnings.
2023-02-26 19:32:30 +02:00
Riku Isokoski
77f9f6d6fd Apps: Remove Weather from app enum
Weather app is not fully implemented and is causing a warning
2023-02-26 19:32:30 +02:00
Riku Isokoski
6b11d0700a QCBOR: Update to v1.0
Fixes a compiler warning
2023-02-26 19:32:30 +02:00
Riku Isokoski
bf8dca202c DateTimeController: Fix integer overflow 2023-02-26 17:30:01 +02:00
Riku Isokoski
a5eac74fb5 motion: Disable Motion app
This is a debugging app, not useful for most people.
Also remove the app icon.
2023-02-25 18:06:37 +02:00
Riku Isokoski
0d074ee6e9 screens: Add notes about using C++20 features 2023-02-25 17:44:06 +02:00
Riku Isokoski
8baa317e7e date: Remove date lib
DateTimeController can provide everything we need.
2023-02-25 17:44:06 +02:00
Riku Isokoski
959778d770 DateTimeController: Use std::tm for storing date 2023-02-25 17:37:56 +02:00
Riku Isokoski
b63bb798ac DateTimeController: Remove SetTime tick parameter
The systick doesn't need to be updated when setting time.

Also removed unused nrf_rtc.h includes.
2023-02-25 17:22:25 +02:00
Riku Isokoski
eccea5ab9f SystemTask: Move lcd to DisplayApp
SystemTask should never write to the lcd
2023-02-25 16:58:31 +02:00
Riku Isokoski
6f942e20ed LittleVgl: Instantiate in DisplayApp
LVGL is only a part of the main DisplayApp. Other "DisplayApps" can be
implemented without LVGL.

DummyLittleVgl isn't needed anymore and has been removed
2023-02-25 16:58:10 +02:00
Riku Isokoski
ff34cf196e watchdog: Replace WatchdogView with const Watchdog 2023-02-25 16:57:12 +02:00
Riku Isokoski
26478d9006 screens: Remove unused DisplayApp parameters 2023-02-25 16:56:03 +02:00
Riku Isokoski
c78211952e screens: Remove explicit Screen constructors
This constructor didn't do anything since DisplayApp reference was
removed from the Screen base class.
2023-02-25 16:56:03 +02:00
Riku Isokoski
7c7a8602c4 screens: Remove displayapp parameter from screen
The DisplayApp class isn't used in the Screen base class and most
screens, so requiring it is pointless.

In this commit, DisplayApp pointers were added to screens which use it
and the explicit Screen constructor was removed in those screens.
2023-02-25 16:56:03 +02:00
Riku Isokoski
e2d4084701 CONTRIBUTING: Fix broken links 2023-02-25 15:12:06 +02:00
Riku Isokoski
5ab255b26b SystemTask: Move MotorController to DisplayApp
Vibrations should be associated with something happening on the UI.
Therefore SystemTask should not be controlling the motor.
2023-02-25 12:15:00 +02:00
Riku Isokoski
255b07094b displayapp: Make Ble references const 2023-02-24 17:41:41 +02:00
Riku Isokoski
76f07de64b displayapp: Make Cst816S references const 2023-02-24 17:41:41 +02:00
Riku Isokoski
1c4b97382a displayapp: Make Battery class references const 2023-02-24 17:41:41 +02:00
Riku Isokoski
1516b082fd TouchHandler: Do not store touch panel reference 2023-02-24 00:05:21 +02:00
Riku Isokoski
7066ff5aba touchhandler: Remove LVGL dependency
Move LVGL specific code to the LittleVgl class
2023-02-24 00:05:21 +02:00
Riku Isokoski
6542f255cd libs: Disable clang-format and -tidy 2023-02-23 23:55:48 +02:00
Riku Isokoski
0d494136c9 LittleVgl: Remove unused Cst816S reference 2023-02-23 23:43:24 +02:00
Riku Isokoski
05f404950a TimerController: Use chrono for durations 2023-02-23 23:17:18 +02:00
Itai Nelken
56b6291ab7
WatchfaceAnalog: add ble icon (#1430) 2023-02-21 20:48:42 +02:00
Riku Isokoski
f4684f6ea5 CONTRIBUTING: Move from doc to root
This is so the GitHub UI picks it up correctly.
2023-02-20 22:27:10 +02:00
Riku Isokoski
c95a788101 CONTRIBUTING: Remove CONTRIBUTING link
The GitHub UI doesn't resolve the link correctly
2023-02-20 22:27:10 +02:00
Finlay Davidson
d968bcb1f3 docs: Limit number of jobs used for compilation 2023-02-19 20:26:08 +01:00
Riku Isokoski
6dc49e5bdb clang-format: Always break template declarations
I find this format easier to read, because the definitions are at the
expected indentation, making it easier to find what I'm looking for.
2023-02-16 09:13:58 +02:00
Tim Aschhoff
512ebf0704 Fix Link in buildWithVScode 2023-02-16 08:47:46 +02:00
Riku Isokoski
8e2dcda14f files-needed-by-factory: Adjust headers 2023-02-13 11:03:14 +02:00
Riku Isokoski
dddca33d2f files-needed-by-factory: Move to separate document
These are instructions for maintainers, and should be in a separate
document.
2023-02-13 11:03:14 +02:00
Riku Isokoski
27c241c7ee SettingSteps: Update UI
Bigger buttons, use new color.
2023-02-12 17:07:45 +02:00
Riku Isokoski
d4eb24b7f8 SettingSteps: Improve goal setting
Long pressing will change the value by 1000, whereas clicks will change
it by 500. This allows setting more precise values, while also making it
easier to set any value.
2023-02-12 17:07:45 +02:00
Riku Isokoski
4e1a2aff47 contribute.md: Add commit format section
Inspired by:
https://www.klipper3d.org/CONTRIBUTING.html#format-of-commit-messages
2023-02-12 14:36:04 +02:00
Riku Isokoski
f9d03cc396 contribute.md: Improve contributing instructions
Denser instructions for absolute beginners. Links to GitHub docs.

Add PR checklist and commit conventions sections based on the
maintainer's guide.
2023-02-12 14:36:04 +02:00
Andrii Zymohliad
859fe26fe0 Add WatchMate to the list of companion apps 2023-02-12 12:01:29 +01:00
Riku Isokoski
049fbba516 Steps: Update UI 2023-02-01 10:13:57 +02:00
Riku Isokoski
822f857d9e stopwatch: Update UI
The time used to be yellow while paused. Changing it to white made the
paused state less distinct. Blinking the time while paused makes the
state distinct again.
2023-02-01 09:52:04 +02:00
Riku Isokoski
81bc16fd92 workflow: Buildsize comment when simulator fails
The workflow checks that the buildsize comparison succeeds. The download
artifact step also checks that all of the main workflow succeeds. This
isn't necessary, and causes the comment not to be created when the
simulator build fails. This change disabled the success conclusion
requirement.
2023-01-31 22:38:17 +02:00
Riku Isokoski
cb91943f12 workflow: Updated workflow comment for all
The previous version failed, because it looked for the check from the
branch in the fork, but looked for it in the main repo. Now uses the sha
to get the commit on which checks were run.

Previous description

This works by uploading the data from the main workflow with low
permissions as an artifact, then downloading the data in a workflow with
higher permissions to post the comment.

Third party actions are fixed at a commit, in case they get compromised.

Also set the build-firmware VM to ubuntu-22.04, which was missed when
updating workflow deps earlier.
2023-01-31 21:56:24 +02:00
Riku Isokoski
3e964e20ac Revert "workflow: Comment build size on all PRs"
This reverts commit 012c3d25f313148734b4720e376ec24ff6089453.
2023-01-31 09:33:56 +02:00
Riku Isokoski
012c3d25f3 workflow: Comment build size on all PRs
This works by uploading the data from the main workflow with low
permissions as an artifact, then downloading the data in a workflow with
higher permissions to post the comment.

Third party actions are fixed at a commit, in case they get compromised.

Also set the build-firmware VM to ubuntu-22.04, which was missed when
updating workflow deps earlier.
2023-01-31 09:21:02 +02:00
Jean-François Milants
9b2e1b3250 Merge branch 'aleexxzeero-proper-mcuboot-app-size' into develop 2023-01-29 12:47:12 +01:00
Jean-François Milants
98d1de070a Linker script: Update gcc_nrf52.ld to reflect changes done in gcc_nrf52-mcuboot.ld.
The only change between the 2 linker scripts is the ORIGIN address of the flash memory allocated to InfiniTime. The MCUBoot one starts at 0x8000, which is the address that will be loaded by MCUBoot after the boot process. This linker script allow to run the application without MCUBoot by setting the origin address to 0x00. The APP_SIZE is the same for both linker scripts, but it could be set to a higher value in this one for development purposes.
2023-01-29 12:38:05 +01:00
Riku Isokoski
97123d99c9 SettingChimes: Use CheckboxList 2023-01-29 09:55:54 +02:00
Riku Isokoski
32875944f9 SettingBluetooth: Use CheckboxList 2023-01-29 09:55:54 +02:00
Riku Isokoski
4b2a61ea4a LittleVgl: Small cleanup 2023-01-29 08:51:37 +02:00
Riku Isokoski
8e8215d360 theme: Replace LV_DPX with a constexpr variant 2023-01-29 08:51:37 +02:00
Riku Isokoski
547c46a588 theme: Cleanup unused styles
Condensed paddings with pad_all
No visual changes
2023-01-29 08:51:37 +02:00
Riku Isokoski
7aa215fcfa theme: Remove unused parameters 2023-01-29 08:51:37 +02:00
Riku Isokoski
056b0f5b3f build-size-workflow: Fix when base gets updated
The github.event.pull_request.base.sha in the workflow doesn't get
updated when there are new commits in the base branch. Instead always
checkout the branch to check the sha manually and cache only the build.

The ownership fix seems to still be necessary
2023-01-28 17:58:43 +02:00
Riku Isokoski
5feccb382a infineat: Fix 12-hour time
Missing characters
2023-01-26 10:58:47 +02:00
Riku Isokoski
7bd215bc06 infineat: Remove use with builtin fonts
The watchface cannot be enabled without the correct font anyway.
2023-01-26 10:58:47 +02:00
Riku Isokoski
52bc0cd623 infineat: Battery display simplification 2023-01-26 10:58:47 +02:00
Riku Isokoski
a3a4091e03 infineat: Use set_text_static where applicable 2023-01-26 10:58:47 +02:00
Riku Isokoski
eae60b6a3d infineat: Remove batterystyle
Setting local style is more efficient
2023-01-26 10:58:47 +02:00
Riku Isokoski
a7a1dcbf23 infineat: Remove unnecessary background colorization 2023-01-26 10:58:47 +02:00
Riku Isokoski
1feb01b25f infineat: Optimize lv_lines
Reduce code duplication massively
2023-01-26 10:58:47 +02:00
Riku Isokoski
a3e14c012d src: Enable unused parameter warning
Fix warnings.
Some clang-formatting was necessary.
DebugPins is unused and was removed.
2023-01-24 10:43:17 +02:00
Finlay Davidson
8b0d888952 batt: Improve discharge curve values
Values calculated using multiple tests on 3 PineTimes
2023-01-23 21:48:29 +01:00
TailyFair
762d52e114 Fix Apps documentation DisplayApp method name 2023-01-22 09:08:06 +02:00
Riku Isokoski
4b75605412 contribute.md: Update
Cleaned up the list of things you can help with.
Added a few points
2023-01-22 09:02:47 +02:00
Riku Isokoski
aed37dd74d readme: Add Project management section
The list of development docs was getting long, so move docs more
intended for maintainers to a separate section.
2023-01-22 09:00:14 +02:00
Riku Isokoski
ee8349a676 doc: Add maintainer guide 2023-01-22 09:00:14 +02:00
John Paul Wohlscheid
2692231b95 minor grammar edits 2023-01-22 08:51:02 +02:00
John Paul Wohlscheid
7fe5e54adc minor grammar edit 2023-01-21 19:35:31 +01:00
John Quigley
a7f8b59bfb
Combine Date and Time Settings (#1465)
Replace separate SettingSetDate and SettingSetTime with a combined screenlist.
Add DotIndicators. Similar to PageIndicator, but for use when separating screens instead of pages of a list.

Co-authored-by: Riku Isokoski <riksu9000@gmail.com>
2023-01-14 21:50:21 +02:00
Jean-François Milants
6f6ea68aca Add a link to the "Ideas" (feature requests) Discussions board in the Github contact links. 2023-01-12 22:46:49 +02:00
Riku Isokoski
61698b6e19
Tweaked issue forms (#1267)
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.
2023-01-12 22:46:30 +02:00
Riku Isokoski
c5fb41beb7 List: Update list style and make it gray 2023-01-12 22:39:38 +02:00
Riku Isokoski
7508dd74ee
Update workflow dependencies (#1504)
* Update workflow dependencies

ubuntu-latest vm has been updated from 20.04 to 22.04.
To avoid sudden issues, use 22.04 explicitly.
CMake doesn't need to be updated on 22.04, but ninja must be installed separately in the simulator workflow.
actions/checkout@v2 uses deprecated Node.js 12.
Update to v3 which uses 16
2023-01-12 22:04:25 +02:00
Riku Isokoski
3c9b3435a5 SetingTimeFormat use CheckboxList, reduce duplication 2023-01-12 22:02:32 +02:00
Finlay Davidson
96165a8541 Format header files
In my PR updating clang-format, I forgot to also format the headers.
2023-01-09 21:41:21 +01:00
Riku Isokoski
09db67e003 workflow: echo build diffs for viewing without the comment 2023-01-07 20:58:18 +02:00
Riku Isokoski
dca11812c2 workflows: Disable build size comment in fork PRs
Due to a security concern, comments can only be created in the context
of branches in the repo. PRs from forks can't get the comment.

https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md#restrictions-on-repository-forks
https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
2023-01-07 20:58:18 +02:00
Riku Isokoski
028d40860d workflows: Add build size comparison workflow
Add .github/workflows/getSize.sh to extract sizes of sections from the
objfile

build-firmware uses getSize.sh to output the section sizes.

get-base-ref-size job added, which builds the base branch of the PR and
outputs the section sizes. Caches are used to avoid unnecessary builds
when the base branch hasn't been updated.

leave-build-size-comment job added, which creates or updates a comment
on the PR with the build size information from other jobs.
2023-01-07 18:56:15 +02:00
Riku Isokoski
499f0875d3 workflows: Update workflow dependency
The workaround is no longer necessary
2023-01-07 18:56:15 +02:00
Riku Isokoski
bd8e6d8c15 docker: Make build.sh more portable 2023-01-07 18:56:15 +02:00
Riku Isokoski
fb19c491b6 Fix returning to the same screen 2023-01-05 15:13:05 +01:00
Riku Isokoski
5ef3c0d3be Implement a return app stack
Each opened app (screen) is pushed on a stack, which is then popped from
when returning instead of hard coded "previous apps". Return swipe and
refresh directions are automatically determined from the app transition.
2023-01-05 15:13:05 +01:00
Finlay Davidson
3617569795 Add missing clang-format options from version 12 2023-01-04 17:15:33 +01:00
Finlay Davidson
eda96ffadc Update clang-{format,tidy} to 14
Also add configuration options only available in 13 and 14.
Fixes warning about -fstack-usage in clang-tidy check.
2023-01-04 17:15:33 +01:00
Riku Isokoski
318a243df1 Revert "prepare cmake unity build"
This reverts commit 21f3bd708261ece47096961039e65d5b6f113c73.
2022-12-31 12:41:45 +01:00
Riku Isokoski
419d8413c6 Revert "enable CMake unity build in build.sh"
This reverts commit 35654fbd982e27383ffc15446d9ab0a8606ae29d.
2022-12-31 12:41:45 +01:00
Riku Isokoski
2b62eaf65f Revert "Update docker/build.sh"
This reverts commit 7103f9d8063431b778df83244de5862d963e1ce8.
2022-12-31 12:41:45 +01:00
Alex Dolzhenkov
cfc86d7d85 #1463 Updated CMakeLists.txt for building images with expected alignment 2022-12-29 18:11:24 +13:00
Dominik Nussbaumer
7103f9d806 Update docker/build.sh
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2022-12-27 12:17:46 +01:00
tnixeu
35654fbd98 enable CMake unity build in build.sh 2022-12-27 12:17:46 +01:00
tnixeu
21f3bd7082 prepare cmake unity build
Exclude files from unity build which currently cause compile erros because of redefinitions.
2022-12-27 12:17:46 +01:00
Jean-François Milants
298f80d504 Include algorithm and cstring for std::memcpy and std::min 2022-12-27 12:13:52 +01:00
Max Friedrich
fdc89f1a20 Update src/systemtask/SystemTask.cpp
Co-authored-by: JF <JF002@users.noreply.github.com>
2022-12-27 12:13:52 +01:00
minacode
dbbbbfd1ac hopefully fixed crash on notification 2022-12-27 12:13:52 +01:00
minacode
c02b505998 format 2022-12-27 12:13:52 +01:00
minacode
d62402cb3f removed magic number 2022-12-27 12:13:52 +01:00
minacode
a82a34cd11 format 2022-12-27 12:13:52 +01:00
minacode
557a328409 changed to bool 2022-12-27 12:13:52 +01:00
minacode
51d818b774 fixed a comment, set threshold to 15% 2022-12-27 12:13:52 +01:00
minacode
60027f217c cutout scaling hack 2022-12-27 12:13:52 +01:00
minacode
276b17979e added punctuation 2022-12-27 12:13:52 +01:00
minacode
08fa6bd4e4 format 2022-12-27 12:13:52 +01:00
minacode
cad58f190f added message, changed UI 2022-12-27 12:13:52 +01:00
minacode
59ee0ad1aa add percentage rescaling 2022-12-27 12:13:52 +01:00
minacode
5f5c771752 format 2022-12-27 12:13:52 +01:00
minacode
ccc8cee07a added low battery message 2022-12-27 12:13:52 +01:00
tgc-dk
29673892c2 Fix formatting 2022-12-26 22:18:50 +01:00
Tomas Groth
861ed3584c Put common code into DismissToBlack helper function 2022-12-26 22:18:50 +01:00
Tomas Groth
bef65bcd55 Make it possible to dismiss new notifications 2022-12-26 22:18:50 +01:00
Alex Dolzhenkov
1e8ed181ea
Update gcc_nrf52-mcuboot.ld
Co-authored-by: JF <JF002@users.noreply.github.com>
2022-12-27 09:58:51 +13:00
Alex Dolzhenkov
71e9a97e7c
Update gcc_nrf52-mcuboot.ld
Co-authored-by: JF <JF002@users.noreply.github.com>
2022-12-27 09:57:50 +13:00
Riku Isokoski
b071422f91 Small fixup for cmake cleanup 2022-12-26 20:46:39 +01:00
Jonathan Vander Mey
44ba4dd470 Clean up target compile option assignments
Removed/simplified some generator expressions that had more repeated
elements than they needed to. Extracted some repeated sets of options
into separate variables as well.
2022-12-26 20:46:39 +01:00
Jonathan Vander Mey
91851d191e Split warning flags from common
Only enable the warning flags when building InfiniTime firmware, not
when building third-party libraries.
2022-12-26 20:46:39 +01:00
Riku Isokoski
afea7ca0d1
Update clang-tidy configuration and fix some warnings (#1474)
Don't enable coding conventions from unrelated projects. Only enable
generic checks.
2022-12-18 18:14:36 +01:00
Riku Isokoski
bfedf47d1a Optimize SettingWatchFace 2022-12-18 16:39:34 +01:00
Riku Isokoski
99b5b49993 Optimize SettingWakeUp 2022-12-18 16:39:34 +01:00
Riku Isokoski
9c5b1437ec Optimize SettingTimeFormat 2022-12-18 16:39:34 +01:00
NeroBurner
23a68ba45a PineTimeStyle: use "" for our includes
Small fix to be consistent: use "" for our includes and <> for system
includes or packages by others.
2022-12-18 16:32:16 +01:00
cybuzuma
081cc60aa5
fixing build.sh not returning error in build (#1460)
Return the build status as return code from the `main` helper function.
In the process convert the handling if the file was sourced or directly
executed into an explicit if/else statement to make the intent clearer.

In case of an build error the error is now reported at the build step,
where the error happened.

Fixes: https://github.com/InfiniTimeOrg/InfiniTime/issues/1292
2022-12-13 08:18:53 +01:00
cybuzuma
1062fec5f2
compiler warnings, #1035 and #notreported (#1481) 2022-12-12 22:28:39 +02:00
tom-programming
361e381ac3 typo in the description
AMD64 and x86_64 are the same architecture - ARM64 should be specified instead
2022-12-06 12:06:57 +02:00
Alex Dolzhenkov
4f6a9571f3 #1463 Replaced decimal numbers with hex 2022-12-05 22:04:14 +13:00
Alex Dolzhenkov
a356113d0c #1463 Fixed linker script syntax 2022-12-04 08:14:10 +13:00
Alex Dolzhenkov
fe32af1ce9 #1463 Update mcuboot-app linker file to be more consistent 2022-12-03 20:42:55 +13:00
Alex Dolzhenkov
aac0081929 Fix linker script to prevent using not available flash memory 2022-12-03 10:08:08 +13:00
uli
02116a2fd4 BLE CTS: fixed signedness of timezone 2022-11-25 20:14:26 +01:00
kieranc
f1d2a8ee50
WeatherService daily min/max temperature fixes (#1455)
* Min/Max function fixes
* Faster way to calculate day start
2022-11-25 18:45:33 +01:00
Alex Dolzhenkov
7376c02bbf Add linear approximation and use it for improving battery percentage
Add linear approximation class and use it to better model the non-linear
discharge curve of the battery.

Changed the minimum voltage level to 3.5V and the maximum to 4.18V. For
reference the maximum observed voltage is 4.21V during charging.
2022-11-19 16:34:03 +01:00
hassless
a67f401b30 Update BatteryController.h with non-linear discharge curve 2022-11-19 16:34:03 +01:00
Elements6007
559b555d47 Fix
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2022-11-19 10:39:02 +01:00
Elements6007
80369f7e4b Clang format 2022-11-19 10:39:02 +01:00
Elements6007
e6cf685eb8 Update SettingChimes.h 2022-11-19 10:39:02 +01:00
minacode
e0969c4ed6 removed line 2022-11-19 10:37:48 +01:00
uli
38092fcb40 add CTS local time characteristic and use it to provide UTC in DateTimeController 2022-11-11 21:44:00 +01:00
Jean-François Milants
840aab7f90 Add a note in README.md regarding NRFConnect (not supported anymore). 2022-11-06 15:50:37 +01:00
Jean-François Milants
b56c5f25f0 Set version to 1.11. 2022-10-16 14:18:14 +02:00
Riku Isokoski
9b2221173c Use PageIndicator in CheckboxList 2022-10-16 10:31:41 +02:00
Jean-François Milants
d3ba184f30 Merge branch 'develop' of github.com:JF002/Pinetime into develop 2022-10-15 16:59:18 +02:00
Jean-François Milants
c9e836a02e G7710 and Infineat : close the files after having verified that they exist. 2022-10-15 16:52:55 +02:00
NeroBurner
4ab99d0d4b
CI: disable BUILD_RESOURCES for InfiniSim as already done in firmware (#1366) 2022-10-11 22:30:51 +02:00
Jean-François Milants
eb0af22ecf Watch face settings : disable watch faces that are not available (external resources are not installed). 2022-10-11 21:36:31 +02:00
Jean-François Milants
8c7be1fbb1 CheckboxList : fix formatting. 2022-10-11 21:16:33 +02:00
Jean-François Milants
4ec49bde8a CheckBoxList : rename newValue -> value. 2022-10-11 21:16:33 +02:00
Jean-François Milants
cf8b422899 Checkbox list now receives a function pointer to call when the setting has changed. This allow to remove the dependency between CheckBoxList (UI component) with SettingController. 2022-10-11 21:16:33 +02:00
Jean-François Milants
6dd67eb5a2 CI worklow "build-firmware" : add the infinitime-resources packages to the build artifacts. 2022-10-11 17:25:40 +02:00
Riku Isokoski
964f065de4 Fix clang-tidy warnings 2022-10-10 17:52:36 +02:00
Riku Isokoski
318a97c218 Fix docker issue 2022-10-10 17:52:36 +02:00
Riku Isokoski
73918ce8af Add clang-tidy check to display warnings on GitHub 2022-10-10 17:52:36 +02:00
mashuptwice
957f7d2ec3 fixed filename 2022-10-10 12:43:11 +02:00
mashuptwice
668820ef5a Edit all occurences of "watchface" to "watch face" 2022-10-10 12:43:11 +02:00
kieranc
0f1d0bbd1d
Fix button labels (#1361) 2022-10-06 16:00:35 +03:00
kieranc
a0089e4fd0
Fix steps style button label (#1358) 2022-10-06 08:24:03 +03:00
Jean-François Milants
81ad89d6bc Add missing screenshot about the external resources support in Amazfish. 2022-10-05 21:07:11 +02:00
Jean-François Milants
37155ecf65 Merge branch 'kieranc-pts-options' into develop 2022-10-02 18:30:54 +02:00
Jean-François Milants
738c012a73 Merge branch 'pts-options' of github.com:kieranc/InfiniTime into kieranc-pts-options
# Conflicts:
#	src/components/settings/Settings.h
2022-10-02 18:30:41 +02:00
Jean-François Milants
7b115fe42c Merge branch 'develop' of github.com:JF002/Pinetime into develop 2022-10-02 18:06:16 +02:00
Jean-François Milants
c9b1fb8244 Brightness management in DisplayApp : do not allow the brightness level OFF when loading app and going to running mode. Such issue could occur in case of inconsistent or corrupted settings. 2022-10-02 18:04:09 +02:00
Galdor Takacs
1439dfd912 motorController: Fix infinite vibration on RunForDuration(0) 2022-10-02 15:58:17 +02:00
Jean-François Milants
60abbf0639 Add doc about external resources. 2022-10-02 12:27:10 +02:00
Jean-François Milants
8f5df5385c Fix typo in Clock.cpp. 2022-10-01 21:11:58 +02:00
Jean-François Milants
f9f8d7eead Merge branch 'ITCactus-watchface-casio-digital-G7710' into develop 2022-10-01 21:11:05 +02:00
Jean-François Milants
d6b4ef38f6 Infineat & G7710 : always close files when they are not needed anymore. 2022-10-01 21:03:28 +02:00
Jean-François Milants
9bf43c380e Fix typo in Clock.cpp. 2022-10-01 19:49:41 +02:00
Jean-François Milants
d3363baf69 Do not save settings in CheckboxList. This will be done by the caller. 2022-09-28 21:45:52 +02:00
Jean-François Milants
26af507e16 G7710 : free fonts in dtor(). 2022-09-28 21:09:00 +02:00
minacode
79728730d7 fix typo 2022-09-28 20:53:02 +02:00
Jean-François Milants
fbe964ff44 Merge branch 'watchface-casio-digital-G7710' of github.com:ITCactus/InfiniTime into ITCactus-watchface-casio-digital-G7710
# Conflicts:
#	src/components/settings/Settings.h
#	src/displayapp/screens/CheckboxList.cpp
#	src/displayapp/screens/CheckboxList.h
#	src/displayapp/screens/Clock.cpp
#	src/displayapp/screens/Clock.h
#	src/displayapp/screens/settings/SettingWatchFace.cpp
2022-09-27 21:59:22 +02:00
JF
63932810d2
Merge pull request #1024 from dmlls/infineat-pr
Infineat Watchface + support for external resources.
2022-09-27 21:27:36 +02:00
Jean-François Milants
58586d0ad1 Fix formatting in CheckBoxList.cpp. 2022-09-27 21:10:01 +02:00
Jean-François Milants
2400110900 CheckBoxList : remove unused constant MAXLISTITEMS (replaced by MaxItems). 2022-09-27 21:04:40 +02:00
Reinhold Gschweicher
f699261ca3 AlarmController: add const to SecondsToAlarm() function
The function `SecondsToAlarm()` doesn't change anything in the
`AlarmController` object. Mark the function `const` to show this
property.
2022-09-27 20:32:13 +02:00
Jean-François Milants
56f315b94a A few minors changes following the code review : rename fs -> filesystem, use std::array instead of raw array,... 2022-09-27 18:06:15 +02:00
JF
30e8353a4f
Merge pull request #1272 from mashuptwice/workflow-ignore-md
Workflow ignore *.md files
2022-09-17 21:33:43 +02:00
Akseli
b546facaf1 Update src/displayapp/screens/WatchFacePineTimeStyle.cpp
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2022-09-17 21:32:43 +02:00
Akseli
90278b54d1 Update src/displayapp/Colors.cpp
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2022-09-17 21:32:43 +02:00
Akseli
d55ba9a3d8 Update src/components/settings/Settings.h
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2022-09-17 21:32:43 +02:00
Akseli Lahtinen
8c35c3c3d4 add pink color 2022-09-17 21:32:43 +02:00
mashuptwice
809323df3a Applist is in ApplicationList.h 2022-09-17 21:29:48 +02:00
Riku Isokoski
b9224c1ace Disable value_str
value_str is a way to add text on a button without a separate label.
This saves having an extra label object, but uses more memory and is
removed in LVGL8
2022-09-17 21:27:32 +02:00
Riku Isokoski
bf90e07a28 Improve status icon visibility 2022-09-17 21:26:51 +02:00
Jean-François Milants
6ed8e983e9 Remove CMake targets and corresponding CLI arguments that are specific to the debugging environment (USE_JLINK, USE_OPENOCD and USE_GDB_CLIENT). 2022-09-17 21:25:54 +02:00
Riku Isokoski
c853681d75
Reduce duplication in Twos (#1274) 2022-09-11 20:57:49 +02:00
Jean-François Milants
58bb0e77db Fix formatting 2022-09-11 20:18:01 +02:00
Jean-François Milants
970d5b368d Fix submodule for date library 2022-09-11 20:11:21 +02:00
Jean-François Milants
0cd1d6f8cf Fix recovery firmware : add FS in parameters of DisplayAppRecovery ctor. 2022-09-11 18:21:29 +02:00
Jean-François Milants
4cf73fc169 Infineat : Add support for external resources, and read the images and fonts from the ilesystem 2022-09-11 16:22:28 +02:00
Jean-François Milants
ada2c09581 Merge branch 'develop' into infineat-external-resources
# Conflicts:
#	src/displayapp/screens/Symbols.h
#	src/displayapp/screens/settings/SettingWatchFace.cpp
#	src/displayapp/screens/settings/SettingWatchFace.h
2022-09-11 14:59:49 +02:00
Jean-François Milants
c9a5c3fa5c Fix formatting. 2022-09-11 14:44:36 +02:00
Jean-François Milants
cac9b3cc8e Add doc about the new parameter -DBUILD_RESOURCES. 2022-09-11 14:44:36 +02:00
Jean-François Milants
e2a3d9f0c7 Small improvement in generate-fonts.py following code review.
Add lv_img_conf in Docker image to build resources at build time.
2022-09-11 14:44:36 +02:00
Jean-François Milants
cbe2f08cf7 Fix missing '/' in the path of a font (external resource) 2022-09-11 14:44:36 +02:00
Jean-François Milants
cfc055c978 Package resources + a metadata file into a single .zip file. 2022-09-11 14:44:36 +02:00
Kieran Cawthray
4fe834efda Cleanup 2022-09-06 12:58:46 +02:00
Kieran Cawthray
fbc9f63308 Relabel button 2022-09-06 12:07:58 +02:00
Kieran Cawthray
b49fddd555 Implement persistent settings 2022-09-06 11:37:12 +02:00
Kieran Cawthray
2933405158 Merge remote-tracking branch 'upstream/develop' into pts-options 2022-09-05 22:03:56 +02:00
mashuptwice
4fdb06acd9 Merge remote-tracking branch 'upstream/develop' into workflow-ignore-md 2022-08-25 11:34:12 +02:00
mashuptwice
4940cbda7a removed lv_sim.yml 2022-08-25 11:30:11 +02:00
mashuptwice
5c253c10a8 Merge remote-tracking branch 'upstream/develop' into workflow-ignore-md 2022-08-25 10:56:09 +02:00
Riku Isokoski
f53e75063b
Merge CI to deduplicate events (#1279) 2022-08-25 08:32:46 +03:00
Riku Isokoski
69563ed031
Add sleep mode which disables notifications, touch- and motion wakeup (#1261) 2022-08-21 14:52:38 +03:00
Riku Isokoski
62c4ff9c2d
Determine the number of digits from the max value. (#1271) 2022-08-21 14:52:14 +03:00
Riku Isokoski
c2b6a8de3e
Fix markdown format with autoformatter (#1284) 2022-08-21 14:50:09 +03:00
Riku Isokoski
c495db8a71
Simplify coding style (#1280) 2022-08-21 14:44:05 +03:00
Riku Isokoski
093a66c8f8
Simplify contribute.md (#1281) 2022-08-21 14:43:56 +03:00
Riku Isokoski
e02b58bf1b
Move all images to doc. Remove old images. (#1282) 2022-08-21 14:42:53 +03:00
Kieran Cawthray
593ca2028d Add half gauge/seconds option 2022-08-16 23:38:07 +02:00
Riku Isokoski
ef6ed5d26e
Improve checkbox visibility (#1266) 2022-08-16 08:29:26 +03:00
Riku Isokoski
78fc1682da
Centralize most color definitions (#1258) 2022-08-16 08:21:23 +03:00
izzeho
d6aa767bda Add P8B mirrored version definition. 2022-08-15 13:18:23 +02:00
mashuptwice
a86668b6b7
Merge branch 'InfiniTimeOrg:develop' into workflow-ignore-md 2022-08-11 01:43:19 +02:00
mashuptwice
d00a5d1e37 workflow: ignore changes in *.md files 2022-08-11 01:42:17 +02:00
Riku Isokoski
eb487c71be Use Counter in SettingsSetDate 2022-08-10 08:37:52 +03:00
Riku Isokoski
3eebe02448 Add support for months and variable digit count to Counter 2022-08-10 08:37:52 +03:00
Riku Isokoski
8e72cf380f
Notification swap text colors for visibility and reduce duplication (#1252) 2022-08-08 18:01:40 +03:00
ialokim
a7c86786c3
Apply suggestions from code review
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2022-08-07 20:40:45 +02:00
ialokim
97140652d6
PTS: add seconds display 2022-08-07 18:43:22 +02:00
Kieran Cawthray
a0ba80882c Initial mockup 2022-08-05 00:33:24 +02:00
Aidan Epstein
e13172384b Wrap PineTimeStyle step counter
This changes the PineTimeStyle step counter gauge continues counting
with wraparound after you achieve your step goal.
2022-08-04 22:52:45 +02:00
Riku Isokoski
b768829c63 More timeout options and improved checkbox alignment 2022-08-02 22:53:10 +02:00
Riku Isokoski
67e0cad573 Simplified stopwatch lap buffer
Overriding the earlier laps doesn't seem like a good idea.
2022-08-02 22:51:59 +02:00
Riku Isokoski
1467324c50 Bring back separate info button, move color to a variable. 2022-08-02 22:51:04 +02:00
Riku Isokoski
7a6ede112e Remove clockType variable by checking for nullptr instead.
Saves a few bytes
2022-08-02 22:51:04 +02:00
Riku Isokoski
97048121b0 Use Counter widget in Alarm 2022-08-02 22:51:04 +02:00
Riku Isokoski
9f851f6321 Automatic alignment with containers 2022-08-02 22:49:12 +02:00
Riku Isokoski
28a528761f Remove leftover change 2022-08-02 22:49:12 +02:00
Riku Isokoski
edba1d9ccf Add status icons widget 2022-08-02 22:49:12 +02:00
Riku Isokoski
77d3239866 Use submodule for date lib
A directory has been renamed
2022-08-02 22:43:22 +02:00
Riku Isokoski
e75b89bbc6 Remove copy of date lib 2022-08-02 22:43:22 +02:00
Riku Isokoski
80c1a5a0a4
Theme cleanup (#1256)
Remove unnecessary comments, styles, colors, overrides. Fix arc colors
2022-07-31 08:19:20 +03:00
Zach DeCook
4450c58216
Date formats: Use ISO 8601 (#1040)
* System Info: Use YYYY-MM-DD

The date format with the slashes has different meaning in different regions

* Terminal Watchface: Use dashes as date separator

Using the popular ISO 8601 format instead

Co-authored-by: Riku Isokoski <riksu9000@gmail.com>
2022-07-25 09:26:09 +03:00
Riku Isokoski
93477e25cf
Docs reorganization (#1236)
* Docs reorganization

Removed broken link

* README.md relative link consistency
2022-07-21 23:02:33 +03:00
Riku Isokoski
d6165e72b7
Replace icomoon system font with material design icons (#1228) 2022-07-21 22:56:34 +03:00
Riku Isokoski
9ee1160578
Reset timer by long pressing on the button (#1214)
* Reset timer by long pressing on the button

* Consider press_lost as released

Otherwise the bar would keep increasing if the finger slid off the
button
2022-07-21 22:53:36 +03:00
Riku Isokoski
411f2d19e1 Use Counter widget in SettingSetTime plus optimizations 2022-07-21 22:23:15 +03:00
Riku Isokoski
df6557dd31 Extend Counter functionality
Custom fonts, twelve hour mode and Value changed callback.
2022-07-21 22:23:15 +03:00
Riku Isokoski
0f4233003e
Limit backlight when flashlight is off (#1212) 2022-07-21 22:22:14 +03:00
Riku Isokoski
cea81fea9c
Always restore brightness on app switch (#1213) 2022-07-21 22:16:55 +03:00
Finlay Davidson
fdad3fc985 Fix Docker workflow not pushing on manual trigger
Also fix issue where workflow fails on pull requests when the
user who made the pull request doesn't have the secrets set.
Also allow other workflows to be triggered manually.
Also don't trigger any workflows on pull requests to master, as
there shouldn't be any pull requests against master.
2022-07-19 11:53:56 +02:00
Jean-François Milants
2497749715 Merge branch 'develop' of github.com:JF002/Pinetime into develop 2022-07-09 12:19:54 +02:00
Jean-François Milants
fa17ae2098 Add 'workflow_dispatch' in the workflow file for Docker image generation to allow manually starting the workflow. 2022-07-09 12:19:38 +02:00
Finlay Davidson
358690d08b Docker workflow use separate username for login 2022-07-09 12:05:46 +02:00
Jean-François Milants
a9986e5351 Fix filename of the MCUBoot image and recovery MCUBoot image in CMake files. This will fix the generation of output files at the end of the build process. 2022-07-08 17:59:51 +02:00
Finlay Davidson
4482078d84 Downgrade GNU Arm Toolchain to 10.3-2021.10
This is because of this bug:
https://community.arm.com/support-forums/f/compilers-and-libraries-forum/52623/gcc-11-2-arm-none-eabi-internal-compiler-error-illegal-instruction
It is causing some of the GitHub Actions builds to fail.
2022-07-08 17:18:21 +02:00
Finlay Davidson
27b73470f2 Only build Docker Images on develop, not master 2022-07-08 17:13:47 +02:00
Finlay Davidson
c3bd04f497 Make Docker workflow push to latest and commit sha 2022-07-08 17:13:47 +02:00
Finlay Davidson
1b971eebae Don't try to cache to Docker Hub on pull request 2022-07-08 17:13:47 +02:00
Finlay Davidson
6a0aec0850 Use either a secret or infinitime as username
Uses either the DOCKER_HUB_USERNAME secret or just infinitime as
the username for pushing to and pulling from Docker Hub.
2022-07-08 17:13:47 +02:00
Finlay Davidson
4ee3e51605 Require event_name to be push for Docker Hub
Instead of just checking if it's not pull_request
2022-07-08 17:13:47 +02:00
Finlay Davidson
b089fc2c61 Hardcode the Docker Hub username as infinitime
This is so that pull requests that modify the docker image but
don't have the DOCKER_HUB_USERNAME secret set won't fail.
2022-07-08 17:13:47 +02:00
FintasticMan
6c23aa5626 Create GH Actions workflow to build Docker image 2022-07-08 17:13:47 +02:00
Christoph Honal
463355281a Display target build variant in system info screen 2022-07-07 11:23:05 +02:00
Christoph Honal
0f1e510574 Nimble: Compatibility with LFRC calibration
Nimble has to be aware of the low frequency clock
calibration procedure, in order to not interfere with
the usage of the HFCLK. For more info, see
https://github.com/apache/mynewt-nimble/issues/1207
2022-07-07 11:20:56 +02:00
Christoph Honal
33a7a6a095 Nimble: Enable optional debug output via RTT
This allows better debugging of the bluetooth stack.
2022-07-07 11:20:56 +02:00
Christoph Honal
118adb96cf Nimble: Reduce BLE power usage
This configures Nimble to enable the HFCLOCK and other
Bluetooth peripherals only when needed, but 1500 us in advance.
This time is recommended by the Mynewt docs.
2022-07-07 11:20:56 +02:00
Riku Isokoski
9b92861753
Twos code cleanup (#1220) 2022-07-06 11:29:23 +03:00
Riku Isokoski
b9f5a0745d
Don't build the firmware when only docs were modified (#1198) 2022-07-05 09:22:29 +03:00
Riku Isokoski
ec8a845052
Add PageIndicator widget to reduce code duplication (#1218)
* Move PageIndicator widget to its own files to reduce code duplication
* Use uint8_t in PageIndicator
2022-07-05 07:41:09 +02:00
ITCactus
50b98798b9 cleanup after migration to the font-generator 2022-06-30 16:19:51 +02:00
Autoformatter
0300a8fa80 Apply clang-format to Settings.h 2022-06-30 15:15:33 +02:00
Autoformatter
b4f4e2f3fe Apply clang-format to Clock.cpp 2022-06-30 15:15:32 +02:00
ITCactus
cfaafc1fe2 fix for week number and days till the end of the year
+ formating (clang)
2022-06-30 15:15:32 +02:00
ITCactus
e7c0b2c5c2 fix memory leak + refactoring 2022-06-30 15:15:32 +02:00
ITCactus
917e46c684 post rebase fixes 2022-06-30 15:15:32 +02:00
ITCactus
319dfd23e7 [new watchface] watchface inspired by G7710, with day of year and week number info 2022-06-30 15:14:23 +02:00
Riku Isokoski
c0770cde8a
Add InfiniTime Vision document (#1196) 2022-06-29 22:31:35 +03:00
Jean-François Milants
8a14038324 Set version to 1.10 2022-06-29 18:05:06 +02:00
Reinhold Gschweicher
12fad7411d Notifications: no inTransition screen, simple blackbox is enough 2022-06-28 18:50:10 +02:00
Simon Willshire
2c75e7aad8 Dismiss notifications by swiping right
Add a new interface `NotificationManager::Dismiss(id)` to delete a
notification with the specified `id`.

The animate the notification dismiss the `RightAnim` transition to a
black screen is used. After the dismiss the new message is swiped in
from below or above.

If we dismiss the oldest message (when we are at 5/5, or 3/3), then the
new message after a dismiss should appear to come from below.

Otherwise (when we are at 2/3) the new message after a dismiss should
appear to come from above.

Rework the index code to show the index of the currently viewed
notification. Instead of calculating the index relative to the oldest
`id` introduce a new interface `NotificationManager::IndexOf(id)`. This
is done because the `id` of the notifications in the buffer aren't
continuous anymore (as some messages could have been dismissed).

Rework notification ring buffer to have a beginIdx and a size
internally to make the dismissal of notifications easier.

Fixes: https://github.com/InfiniTimeOrg/InfiniTime/issues/176

Co-authored-by: Simon Willshire <me@simonwillshire.com>
Co-authored-by: Reinhold Gschweicher <pyro4hell@gmail.com>
2022-06-28 18:50:10 +02:00
Christoph Honal
e77d47e35c LFCLK: Add compatibility to wasp-os reloader-factory 2022-06-27 08:28:48 +03:00
Christoph Honal
8b0559c481 Add basic hardware configuration options for P8
This enables the configuration of the LFCLK source,
as well as the target hardware board pin configuration.
2022-06-27 08:28:48 +03:00
Christoph Honal
bab86633a0 Font generation: Fix patch binary path 2022-06-25 16:29:39 +02:00
Christoph Honal
91c69d3c5b CMake: Fix indentation 2022-06-19 21:23:59 +02:00
Christoph Honal
e247afaa81 CMake: Extend debug configuration
Enable debug output for InfiniTime, Nimble and the NRF SDK
via SEGGER RTT on debug builds.
2022-06-19 21:23:59 +02:00
Riku Isokoski
61c2d8dbc7 Flashlight default to max brightness and code cleanup 2022-06-19 18:24:36 +02:00
Riku Isokoski
2b2aefcf6a Fix InfiniTime compiler warnings 2022-06-19 13:41:33 +03:00
Riku Isokoski
95ff285991
Remove backup brightness feature (#1180)
This feature is not needed and is probably more likely to cause issues. It's better to just use brightnessController.Set(settingsController.GetBrightness());
2022-06-18 12:54:41 +03:00
Riku Isokoski
9b775c6a91
Automatically create screens for applist and settings (#1153)
Apps and settings are now stored in a single array (two arrays in total).
Replace magic values with appsPerScreen and entriesPerScreen.
2022-06-16 21:41:54 +02:00
Riku Isokoski
10ca036ffb
Patch hole in the letter M in jetbrains_mono_bold_20 (#1175) 2022-06-16 17:05:55 +02:00
Finlay Davidson
373289c072 Be more specific about the compiler version 2022-06-11 22:59:38 +03:00
Finlay Davidson
350bca3965 Replace more instances of old gcc ver 2022-06-11 22:59:38 +03:00
Finlay Davidson
94cd2ba563 Update arm gcc toolchain to 11.2-2022.02
Updates the buildAndProgram doc and the docker
image, which means GitHub Actions will also use
the new toolchain.
2022-06-11 22:59:38 +03:00
Reinhold Gschweicher
ecb3cd3e31 SettingChimes: private Option struct, use std::array for cbOption 2022-06-11 22:46:38 +03:00
Riku Isokoski
d55ec42b17 Simplify SettingChimes code 2022-06-11 22:46:38 +03:00
FintasticMan
a1385cb481
Minor changes to clang-format workflow (#1177) 2022-06-11 22:45:11 +03:00
Diego Miguel
18cff286c7 Make notification color white when side cover off 2022-06-11 16:57:24 +02:00
Diego Miguel
2ad51e6a98 Fix date alignment 2022-06-11 16:57:24 +02:00
Diego Miguel
4e9fe3f36d Simplify code 2022-06-11 16:57:24 +02:00
Diego Miguel
20b31fdbe5 Show battery indicator when side cover hidden 2022-06-11 16:57:24 +02:00
Diego Miguel
603af7c372 Better alignment of the date label 2022-06-11 16:57:24 +02:00
Diego Miguel
cb2131ec2c Implement charging battery animation 2022-06-11 16:57:24 +02:00
Diego Miguel
b5bf6c51a4 Implement battery indicator 2022-06-11 16:57:24 +02:00
Diego Miguel
9122547657 Make Pine64 logo darker 2022-06-11 16:57:24 +02:00
Diego Miguel
f6f6f9507f Use existing fonts in Infineat watchface 2022-06-11 16:57:24 +02:00
Diego Miguel
a4c3558ed7 Fix bleIcon in Infineat watchface after upstream rebase 2022-06-11 16:57:24 +02:00
Diego Miguel
dd0d2a4102 Make Pine64 logo background transparent 2022-06-11 16:57:24 +02:00
Diego Miguel
f5e9055e09 Make function DayOfWeekShortToStringLow const 2022-06-11 16:57:24 +02:00
Diego Miguel
b15f90aa1d Bump settings version (#1) 2022-06-11 16:57:24 +02:00
Diego Miguel
8942791f57 All ready for PR 2022-06-11 16:57:21 +02:00
Diego Miguel
a3bfbb5e08 Implement SettingWatchFace list 2022-06-11 16:56:35 +02:00
Diego Miguel
b561e7f3d0 Implement CheckboxList screen 2022-06-11 16:56:35 +02:00
Diego Miguel
f9d2b78c8d Small color adjustments 2022-06-11 16:56:35 +02:00
Diego Miguel
fcdf6dea4d Change Pine64 logo to grayscale 2022-06-11 16:56:35 +02:00
Diego Miguel
6eb5b99aa6 Fix aligment of time labels 2022-06-11 16:56:35 +02:00
Diego Miguel
f1f7fb7f49 Add whitespace char to Teko font 2022-06-11 16:56:35 +02:00
Diego Miguel
a890f8568a Fixes in side cover toggling 2022-06-11 16:56:35 +02:00
Diego Miguel
03790d4e63 Build on push to 'colors-rebase' branch 2022-06-11 16:56:35 +02:00
Diego Miguel
be16ef0d56 Update BLE controller in Infineat watchface 2022-06-11 16:56:35 +02:00
Diego Miguel
8f54332e5d Fix typo 2022-06-11 16:56:35 +02:00
Diego Miguel
b5fbcf0eee Add lowercase days of the week 2022-06-11 16:56:35 +02:00
Diego Miguel
da2cf8e913 Add 'Bebas Neue' and 'Teko' fonts 2022-06-11 16:56:35 +02:00
Diego Miguel
c2ecd4c731 Add Infineat settings to settings controller 2022-06-11 16:56:35 +02:00
Diego Miguel
a89fca7f86 Add 'circle' symbol & Pine64 logo 2022-06-11 16:56:35 +02:00
Diego Miguel
17d37d5ca5 Add Infineat watchface to settings 2022-06-11 16:56:35 +02:00
Diego Miguel
ae705f23a5 Implement watchface Infineat 2022-06-11 16:56:35 +02:00
Diego Miguel Lozano
de62620de1
Remove duplicated value in fonts.json (#1179) 2022-06-11 17:00:26 +03:00
kieranc
7e169ee4aa
Fix typo in gettingStarted guide (#1178) 2022-06-07 21:44:40 +03:00
Riku Isokoski
955dda60c5 Use lambda to reduce code duplication 2022-06-06 21:28:03 +02:00
Riku Isokoski
6cfb45e280 Move event handlers to unnamed namespace 2022-06-06 21:28:03 +02:00
Riku Isokoski
c6026aa617 Use static constexpr to force compile time initialization 2022-06-06 21:28:03 +02:00
Riku Isokoski
254c85246e Timer: Replace time label with Counter control hiding functionality 2022-06-06 21:28:03 +02:00
Riku Isokoski
4a40d29279 Counter: add show and hide controls functions 2022-06-06 21:28:03 +02:00
Riku Isokoski
41c461d1f6 Move linePoints to a member variable 2022-06-06 21:28:03 +02:00
Riku Isokoski
17cedd6629 Move bg color to a constexpr variable 2022-06-06 21:28:03 +02:00
Riku Isokoski
1d34e83c97 Use Counter widget in Timer 2022-06-06 21:28:03 +02:00
Riku Isokoski
9e18c23aac Lighten the large font for a more balanced look
Add Jetbrains Mono Light font
2022-06-06 21:28:03 +02:00
Riku Isokoski
12d4bc4139 Add initial counter widget 2022-06-06 21:28:03 +02:00
Seth Itow
17079fb114 doc: Fix imageFile.png path in SWD.md 2022-06-06 21:20:13 +02:00
Riku Isokoski
c2b15b1446 Move basic apps to the top of the app list 2022-06-06 20:47:34 +02:00
Ildar Mulyukov
7bc692eea4 src/CMakeLists.txt: use iHEX format for mcuboot image creation
for better control of addresses used by img/fw
+ fix typo (RECOVERYY)
2022-06-06 19:41:57 +02:00
Ildar Mulyukov
36740498db CMakeLists.txt: add double quotes in STRIP command
fixes cases when git is missing in the build system
2022-06-06 19:41:57 +02:00
Ildar Mulyukov
5f28f89df2 fix wrong linker script
introduced in 58a2d000c4
2022-06-06 19:41:57 +02:00
Michele Bini
35dcf8c860
Switch to freertos timers (#1095)
* Use FreeRTOS timer for AlarmController
* Use FreeRTOS timer for MotorController
* Remove app_timer component from compilation as we now solely use
  FreeROTS timer
* Simplify variable and text names for AlarmController and MotorController timers
* Call ScheduleAlarm directly from StopAlerting, for recurring timers

Co-authored-by: Riku Isokoski <riksu9000@gmail.com>
Co-authored-by: NeroBurner <pyro4hell@gmail.com>
2022-06-06 17:47:43 +02:00
mabuch
f95147cf0e
remove unused symbols, free a little bit of space (#1167) 2022-06-05 19:43:49 +02:00
mabuch
91a3e98276
remove unused Meter.cpp and Meter.h (#1171) 2022-06-05 19:35:33 +02:00
mabuch
8a71f2b9e0
remove unused Brightness App (#1170) 2022-06-05 19:34:37 +02:00
mabuch
8999158528
remove old unused bluetooth icons (#1172) 2022-06-05 18:50:36 +02:00
Christoph Honal
977936e8e2 System: Refactor pin and interrupt setup
This should ensure better readability of the pin setup procedure,
as well as allow the configuration of the hardware button enable pin
and the accelerometer interrupt pin via the pin mapping header.
2022-06-05 09:53:22 +03:00
Christoph Honal
03a2059e87 SystemTask: Use "&&" instead of "and" for operators
As per the coding style, only primary spelling should be used for operators.
2022-06-05 09:53:22 +03:00
Christoph Honal
702f65d3ee Bootloader: Ignore __pycache__ in Git 2022-06-05 09:53:22 +03:00
luz paz
20ac1cd374 revert portion of previous commit 2022-06-05 09:31:23 +03:00
luz paz
03a510bd18 Fix various typos
Found via `codespell -q 3 -S ./src/libs -L ans,doubleclick,trough`
2022-06-05 09:31:23 +03:00
Finlay Davidson
7f45538eb5 Apply clang-format to all C++ files 2022-06-05 09:15:46 +03:00
Finlay Davidson
718fbdab98 Replace C-style casts with static_cast 2022-06-05 09:15:46 +03:00
Finlay Davidson
0ce4183640 Rename lvgl image files to .c 2022-06-05 09:15:46 +03:00
Ludovic J
87a69fe52d Fix assertion failure in TimerController
0 is not valid for xTimerPeriodInTicks, changing it to 1 to pass the assertion
2022-05-27 22:14:28 +03:00
Riku Isokoski
0fabba1c9a Remove extra linebreaks 2022-05-27 17:52:26 +02:00
Riku Isokoski
a2218dd4ad Unzip DFU, so the artifact doesn't need to be unzipped by the user. 2022-05-27 17:52:26 +02:00
Riku Isokoski
619477cbd1 Rename uploaded files with source branch in workflows 2022-05-27 17:52:26 +02:00
Riku Isokoski
cc2d5c39ce Cleanup workflows 2022-05-27 17:52:26 +02:00
Jean-François Milants
dd313eb419 Docker container documentation : Fix typos, 1 line per sentence, remove obsolete paragraph, remove redundant 'image' parameter in the command to build the docker image, use ${PWD} instead of $(pwd). 2022-05-26 11:35:25 +02:00
Jean-François Milants
9b216bb16f Docker container documentation : Adapt the --user documentation according to the new behavior. 2022-05-26 11:35:25 +02:00
Jean-François Milants
1ffca52715 Edit workflow to use the new docker image : infinitime/infinitime-build. 2022-05-26 11:35:25 +02:00
Jean-François Milants
c77f923a33 Update links to the docker image with the new account : infinitime/infinitime-build. 2022-05-26 11:35:25 +02:00
Jean-François Milants
83b3a2a469 Small modernization with --platform parameter in docker readme 2022-05-26 11:35:25 +02:00
Jean-François Milants
123c801f17 Add comment about the workaround that was needed in the github workflow. 2022-05-26 11:35:25 +02:00
Jean-François Milants
831f93cd92 The main build workflow for GitHub Actions now uses the infinitime-build docker image to build the firmware. This allows to avoid the duplication of the build logic in Docker and Github workflow format.
The Dockerfile has been slightly adapted (remove the USER instructions). Docker images are now published in DockerHub (jf002/infinitime-build).
2022-05-26 11:35:25 +02:00
Yehoshua Pesach Wallach
34506be06e
comment about common error "glyphs.map" in old nodejs (#1142) 2022-05-18 16:14:58 +02:00
Riku Isokoski
6171c9d45d Only test format when it is wanted 2022-05-16 23:25:47 +02:00
Riku Isokoski
a6fcdec0f8 Don't allow test-format.sh to be run locally 2022-05-16 23:25:47 +02:00
Reinhold Gschweicher
443408312a fonts: gen.py: clearify missing exe message 2022-05-16 11:59:44 +03:00
Reinhold Gschweicher
324927f2b7 update build stop, lv_font_conv not required globally installed 2022-05-16 11:59:44 +03:00
Reinhold Gschweicher
db0f909b46 generalize lv-font creation
In https://github.com/InfiniTimeOrg/InfiniTime/pull/1097 new font
generation capabilites were added. Generalize the font creation to
make it possible to reuse the `displayapp/fonts/CMakeLists.txt` file
for `InfiniSim` and just add the new cmake file to the project and
link against the new `infinitime_fonts` target.

In the following a list of changes.

Allow non-global installed `lv_font_conv` executable installed with

```sh
npm install lv_font_conv@1.5.2
```

In CMake we search for `lv_font_conv` executable. Add the found
executable to the python script `generate.py`, to remove the need for
`lv_font_conv` to be in the path.

Search for `python3` executable, if CMake version 3.12 is available.
Otherwise use `python` as hard coded executable.

Instead of adding the generated fonts to `SOURCE_FILES` variable, create
a static library `infinitime_fonts`. Link this library to the
executables instead.

Use `add_custom_target()` together with `add_custom_command()` to
generate the font.c files once (like the original PR does).
2022-05-16 11:59:44 +03:00
FintasticMan
8485cdb54d Only run lv_sim GH Actions on push to develop and master 2022-05-14 12:21:35 +02:00
Yehoshua Pesach Wallach
4cb07bac53 fontgen: update README.md to remove patch advanced options 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
c9f23c11b3 update docker to 22, and use python3 by default 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
f56788465d docker: bump ubuntu to 20.04 and node to 18 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
78267eec40 fongen: don't pre-build fonts 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
a2057ebc6f fontgen: changes to allow CMake to work from other project 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
b6b322efdd fontgen: remove advanced (format string, process as list) from patching 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
f7e8caa04a fontgen: verify lv_font_conv at cmake 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
4fba1ac5ce fontgen: remove double-asterisk in readme 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
27e598f3fa fontgen: assume plain .patch for single string patch 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
8b2e1c69f2 fotngen: check for lv_font_conv 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
95a970a75d fontgen: install npm, lv_font_conv in Dockerfile 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
2ccf88c03c fontgen: lock version at current 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
331de8ce8e fontgen: remove "feature" feature 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
4e2b0b1f10 fontgen: remove "generating the fonts" section 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
d967ed7d90 fontgen: move lv_font_conv doc 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
ef17f2f981 fontgen: generate font .c files in build dir 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
e39f183efe fontgen: make simulator build fonts too 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
b9fbee1007 Added lv_font_conv to workflow main 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
43443eda74 fontgen: generate fonts at runtime with CMake 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
1c0d9ef383 fonts: update README.md to match new method 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
c006f05c99 fontgen: simplfy json after removed external features key 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
9d3671561f fontgen: minor changes 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
a75912dd97 fontgen: remove .c from requested font if there 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
1d4fd9c27f fontgen: simplify enabled fonts 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
77645b20b2 fontgen: use patch file for jetbrains 0 fix 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
451d755e3d fontgen: removed ability of removing .c ext 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
9535c1e651 fontgen: move features into fonts
Also, removed feature existance cheking (since it now depends on a font,
so may end up being inside (only) a font not being used currently -
which is an allowed usage)
2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
ac0dc5ff47 fontgen: added missing requested font check 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
875b9c4bc5 fontgen: Added ability to choose fonts with .c 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
3005fe8710 Added FontAwesome5-Solid+Brands+Regular.woff to git 2022-05-10 22:20:02 +02:00
Yehoshua Pesach Wallach
4116baf72e Added font auto-generate script 2022-05-10 22:20:02 +02:00
Riku Isokoski
09b852d8f0 Fix and test workflow 2022-05-08 22:27:42 +03:00
Riku Isokoski
c94e0d53bb Ignore deleted files in format test
Otherwise clang-format would fail with an error and exit the script
prematurely.
2022-05-08 13:31:00 +02:00
Riku Isokoski
015f17cd25 Add formatting test workflow 2022-05-08 13:31:00 +02:00
Jean-François Milants
dedb397ae0 Systemtask : replace enum SystemTaskState by an enum class. 2022-05-08 13:29:02 +02:00
Riku Isokoski
ae2b9d30d6 Simplify systemtask states 2022-05-08 13:24:15 +02:00
Riku Isokoski
beddfc346d Disable clip_corner, because it is slow. 2022-05-08 13:21:46 +02:00
Riku Isokoski
2b9418c7f8 Fix dropdown graphical issues.
The scrollbar would go out of bounds if DROPDOWN_PART_LIST had uneven
padding. Also enable clip_corner feature to stop the selected item from
overflowing.
2022-05-08 13:21:46 +02:00
Riku Isokoski
8160748733 Force full screen refresh with a rounder function
When the screen switches, the full screen needs to be refreshed for the
hardware scrolling to work. This was enforced with backgroundLabels, but
is simpler to do with a rounder function.
2022-05-08 13:21:27 +02:00
Riku Isokoski
6dac0a62f4 Remove lcd from DisplayApp 2022-05-08 13:12:37 +02:00
Reinhold Gschweicher
4229386501 List: add missing array include
List.h uses `std::array` as container, but is missing the `<array>`
include. Add it to make the header self contained.

The `memory` include is unused and can be removed.
2022-05-04 22:24:53 +02:00
FintasticMan
09a50dcc15 Mention that InfiniLink is searching for devs 2022-04-30 22:16:00 +02:00
FintasticMan
8b470d33a1 Update link to InfiniLink and mention that it is unmaintained 2022-04-30 22:16:00 +02:00
Riku Isokoski
8061822f0c Fix large blacklevel step. Lower 25% of shades are now accessible.
There is a large step in brightness from level zero to level one.
After experimenting with various ST7789 options, I found that
decreasing VDV to 0x10 (-0.4V) fixes this issue.

The gamma change reduced the average error in brightness, but with the
underlying issue fixed, the gamma change has been reverted.
2022-04-29 11:35:22 +03:00
Riku Isokoski
b31fbb4adb New sharper batteryicon. Remove old unused batteryicons 2022-04-25 17:03:08 +03:00
Riku Isokoski
54df828665 Fix warnings 2022-04-25 15:59:43 +03:00
Riku Isokoski
b7b1af1c4c Replace app_timer with FreeRTOS timers 2022-04-25 15:52:39 +03:00
Reinhold Gschweicher
2e42b90009 Keep the paddle on screen in whole
As suggested in https://github.com/InfiniTimeOrg/InfiniTime/issues/1062
in point 3. The paddle should be kept on screen and not travel out of
the screen boundaries.

Co-authored-by: Riku Isokoski <riksu9000@gmail.com>
2022-04-25 15:51:51 +03:00
Riku Isokoski
b6807ee3ca Make functions const again 2022-04-25 15:51:12 +03:00
Riku Isokoski
36cb7c82f3 Remove now unused position override
It gets overridden later anyway
2022-04-25 15:51:12 +03:00
Riku Isokoski
34858d0a6c Update track progress in MusicService. Fix #127 2022-04-25 15:51:12 +03:00
Riku Isokoski
f82aa71eb0 Improve PTS color matching after gamma change 2022-04-25 15:50:26 +03:00
Riku Isokoski
aa32159c00 Tweak gamma on ST7789 and match UI colors
This change will increase the color accuracy of the PineTime and make UI
development with the simulator easier.
2022-04-25 15:50:26 +03:00
Riku Isokoski
5e83a862db Use centiseconds 2022-04-25 15:49:29 +03:00
Riku Isokoski
28ccf15e13 Stopwatch fixes 2022-04-25 15:49:29 +03:00
Riku Isokoski
3bf6b1cb16 Fix timer layout 2022-04-25 15:48:44 +03:00
Riku Isokoski
d7441d18be Firmware update screen fixes 2022-04-25 15:47:53 +03:00
Reinhold Gschweicher
129dd97b51 SpiNorFlash: use C++ style struct in C++ only header
`SpiNorFlash.h` is a C++ header, but the `Identification` struct is
created in a C style using `typedef struct`. Clang issues a warining
about this discrepancy:

```
In file included from /home/nero/repos/pinetime/InfiniSim/InfiniTime/src/systemtask/SystemTask.cpp:13:
/home/nero/repos/pinetime/InfiniSim/sim/drivers/SpiNorFlash.h:16:21: warning: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Wnon-c-typedef-for-linkage]
      typedef struct __attribute__((packed)) {
                    ^
                     Identification
/home/nero/repos/pinetime/InfiniSim/sim/drivers/SpiNorFlash.h:17:9: note: type is not C-compatible due to this default member initializer
        uint8_t manufacturer = 0;
        ^~~~~~~~~~~~~~~~~~~~
/home/nero/repos/pinetime/InfiniSim/sim/drivers/SpiNorFlash.h:20:9: note: type is given name 'Identification' for linkage purposes by this typedef declaration
      } Identification;
        ^
1 warning generated.
```

The easy fix is to use a C++ style struct.

Also includes code style fix from Riksu9000

Co-authored-by: Riku Isokoski <riksu9000@gmail.com>
2022-04-24 19:07:46 +03:00
Riku Isokoski
5a13c5215c
Merge pull request #997 from minacode/remove-nm-reference
Remove unused reference
2022-04-19 16:27:47 +03:00
Max Friedrich
f84a0a3897
Merge branch 'develop' into remove-nm-reference 2022-04-19 00:40:29 +02:00
Riku Isokoski
ed91b5a998
Merge pull request #1044 from Riksu9000/replace-lv_set_text
Replace lv_label_set_text where possible
2022-04-18 19:57:40 +03:00
Riku Isokoski
68a7016080 Replace lv_label_set_text where possible 2022-04-18 19:47:42 +03:00
Riku Isokoski
ff73f67d6f
Merge pull request #1009 from NeroBurner/AlarmController_allow_less_precice_system_time
AlarmController: allow loss of precision for alarmTime cast
2022-04-18 19:42:09 +03:00
Riku Isokoski
943a48f189
Merge pull request #1031 from mabuch/rename-PineTimeStyle-to-WatchFacePineTimeStyle
Rename PineTimeStyle to WatchFacePineTimeStyle
2022-04-18 19:40:54 +03:00
mabuch
82a4f9aa68 resolved merge conflict after renaming PineTimeStyle to WatchFacePineTimeStyle 2022-04-18 14:35:31 +02:00
Reinhold Gschweicher
2607c3d799 Let TouchHandler return TouchEvents instead of driver specific enum
Let the TouchHandler::GestureGet() function return a TouchEvent instead
of the touchpanel-driver specific enum.

This helps to move the driver specific helper function `ConvertGesture`
from `DisplayApp` into `TouchHandler`.
2022-04-13 21:33:58 +02:00
Jean-François Milants
b498e1d633 Set version to 1.9.0 2022-04-02 16:31:39 +02:00
Riku Isokoski
78365548f7 Replace airplane mode with a bluetooth toggle 2022-04-02 16:16:47 +02:00
Reinhold Gschweicher
78cab3604d AlarmController: allow loss of precision for alarmTime cast
Allow a loss of precision if the system clock has a lower resolution
than nanoseconds. This is the case for web assembly.
2022-03-29 21:25:22 +02:00
Jean-François Milants
8f436e1d74 Timer App : add background label to ensure that the app will be displayed correctly after a full refresh (HW scrolling transition).
Code cleaning and rename methods.
2022-03-28 21:12:46 +02:00
Jean-François Milants
4761fcb63a DisplayApp : Call the event handler of the current app before loading the new one. This way, we ensure that lv_task_handler() is called before sending event to the newly loaded app. 2022-03-28 21:12:25 +02:00
Jean-François Milants
a8b7fbe48b New changes according to the review : Priority 0 for display, 1 for system, timer and ble host, and 2 for ble LL 2022-03-21 20:53:46 +01:00
Jean-François Milants
cd1f218dd8 Fix priorities of BLE tasks 2022-03-21 20:53:46 +01:00
Jean-François Milants
f1194a5f74 In current configuration, the timer task (the one from FreeRTOS) has the lowest priority (0). Both display and system tasks are also set on priority 0.
In cases where any other task takes too much time to execute (it can happen in Display Task, see https://github.com/InfiniTimeOrg/InfiniTime/issues/825), the timer task does not have the opportunity to run fast enough to detect and debounce presses on the button.

This commit sets the following priorities:
 - [0] : Display  Task
 - [1] : Timer and System tasks
 - [2] : BLE Host
 - [3] : BLE LL

This way, we ensure that button presses will always be detected, even if the rendering of the display takes a huge amount of time.
2022-03-21 20:53:46 +01:00
Jean-François Milants
88197b6632 Music app : when title/track name are truncated, add an ellipsis at the end of the strings. 2022-03-21 20:53:15 +01:00
Jean-François Milants
f973f1c12c Add missing space in if expression. 2022-03-21 20:53:15 +01:00
Jean-François Milants
df61907073 Limit the size of the track and album name received by MusicService. This should work around this bug : https://github.com/InfiniTimeOrg/InfiniTime/issues/825 and prevent heap over-allocation. 2022-03-21 20:53:15 +01:00
JF
1c4a56b05b
Merge pull request #1038 from NeroBurner/analog_local_variables
WatchFaceAnalog: local date/time variables
2022-03-14 21:25:46 +01:00
JF
5f2ce53877
Merge pull request #1033 from NeroBurner/music_override_warning
Music: fix warning about overridden function
2022-03-14 21:21:33 +01:00
JF
fc374562dd
Merge pull request #1034 from NeroBurner/twos_comparison_warning
Twos: fix warning about extra paranthesis
2022-03-14 21:21:11 +01:00
JF
76b7436dfb
Merge pull request #1039 from NeroBurner/datetime_const_and_analog_const_ref
Datetime const and analog const ref
2022-03-14 21:13:56 +01:00
Reinhold Gschweicher
1379b7902f WatchFaceAnalog: local date/time variables
Use local date and time variables. No need to store them in the object.
2022-03-14 21:00:07 +01:00
Reinhold Gschweicher
bebc072e78 WatchFaceAnalog: const ref to dateTimeController
The clock app only reads from the dateTimeController, never modifies it.
2022-03-14 20:59:44 +01:00
Reinhold Gschweicher
db41d9081a DateTimeController: make possible functions const
MonthShortToString and DayOfWeekShortToString don't change the
underlying object. Those are just getters and can be declared `const`.
2022-03-14 20:59:44 +01:00
Reinhold Gschweicher
51716898aa Twos: fix warning about extra paranthesis
We have a comparison like `if (( a == b ))`, which is a parenthesis too
much, which generates the following warning

```
InfiniTime/src/displayapp/screens/Twos.cpp:133:35: warning: equality comparison with extraneous parentheses [-Wparentheses-equality]
  if ((grid[newRow][newCol].value == grid[oldRow][oldCol].value)) {
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
InfiniTime/src/displayapp/screens/Twos.cpp:133:35: note: remove extraneous parentheses around the comparison to silence this warning
  if ((grid[newRow][newCol].value == grid[oldRow][oldCol].value)) {
      ~                           ^                            ~
```
2022-03-13 22:05:25 +01:00
Reinhold Gschweicher
0933d60b16 Music: fix warning about overridden function
Clang warns on `OnTouchEvent()` function, which is overridden, but is
missing the `override` keyword

```
In file included from InfiniTime/src/displayapp/screens/Music.cpp:18:
InfiniTime/src/displayapp/screens/Music.h:43:14: warning: 'OnTouchEvent' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
        bool OnTouchEvent(TouchEvents event);
             ^
```
2022-03-13 21:58:53 +01:00
mabuch
ea14c580ca Rename PineTimeStyle to WatchFacePineTimeStyle 2022-03-12 18:16:09 +01:00
JF
21da5869c5
Merge pull request #1026 from NeroBurner/fix_settings_chimes
Fix SettingChimes cbOption array size
2022-03-09 21:59:30 +01:00
JF
dbfcb455fe
Merge pull request #1005 from aveeryy/notifications-as-text
Terminal watchface: replace notifications icon with a text entry
2022-03-09 21:33:46 +01:00
Reinhold Gschweicher
f47b04ffd0 Fix SettingChimes cbOption array size
There are 3 options, but the array-size is set to 2. This leads to
memory corruption in the initialization of the SettingChimes screen when
assigning the third option object pointer.

Found in https://github.com/InfiniTimeOrg/InfiniSim/issues/11
2022-03-08 23:12:34 +01:00
Reinhold Gschweicher
7e0b053b38 CI: lv_sim: initialize libpng submodule for WITH_PNG=ON screenshot
InfiniSim PR https://github.com/InfiniTimeOrg/InfiniSim/pull/10 adds
support for screenshots in png/bmp format using `libpng` submodule.
This new submodule must be added to the lv_sim workflow as well.
2022-03-08 21:57:20 +01:00
Riku Isokoski
61a9a97e26 Update navigation font readme section 2022-03-08 21:34:20 +01:00
Riku Isokoski
04d21dcd93 Add ExtraBold font ttf 2022-03-08 21:34:20 +01:00
Riku Isokoski
13c66dd54b Further updates to font readme. 2022-03-08 21:34:20 +01:00
Riku Isokoski
204ad7ca2a Update font readme, update fonts, add missing files 2022-03-08 21:34:20 +01:00
Reinhold Gschweicher
4c92ed410f CI: add lv_sim workflow and upload 'infinisim' executable
use InfiniSim repo to build simulator in CI
2022-03-08 21:21:41 +01:00
Reinhold Gschweicher
187d99c0f7 SystemMonitor: implement FreeRtosMonitor only if trace facility is set
Split SystemMonitor into h and cpp file and move the logging code of the
`Process` function into the cpp file.

Depending of the `configUSE_TRACE_FACILITY` define from
`src/FreeRTOSConfig.h` create either a "FreeRtosMonitor" or a
"DummyMonitor".

Make the `Process()` function non-const, as the FreeRtosMonitor changes
the member variable `lastTick`.

In `SystemTask.h` we then only need to use `SystemMonitor`, without
knowledge of the `configUSE_TRACE_FACILITY` define.
2022-03-08 20:28:54 +01:00
Reinhold Gschweicher
5fe5cee9ef Add missing nrf_log.h includes shadowed by SystemMonitor.h
Some components were missing a `nrf_log.h` include. This missing
include was accidentally provided by the SystemMonitor.h header, which
was included by Systemtask.h
2022-03-08 20:28:54 +01:00
avery
8844ea60b1
Remove unnecessary line 2022-03-06 14:01:20 +01:00
avery
452dd12eff
Merge branch 'develop' into notifications-as-text 2022-03-06 13:11:26 +01:00
avery
5d974434ef
Replace notif entry with "You have mail." text 2022-03-05 13:01:50 +01:00
Yehoshua Pesach Wallach
30797b37bc removed SetClockFace from watchface Constructors 2022-03-03 21:20:22 +01:00
Reinhold Gschweicher
5613449bfb Settings: more specific read and write mode
For each filesystem interaction be more specific if we want to read from
the file or write to it.

Doing a non-creating read on the loading of the settings file, otherwise
an empty file could be created, and when reading that empty file for the
initial settings I would expect an error (or random data) when reading.
2022-03-03 21:15:57 +01:00
medeyko
dd47ba9782 Update README.md
More imperative tone
2022-03-03 21:13:54 +01:00
medeyko
dd28359571 Update README.md
remove unnecessary )
2022-03-03 21:13:54 +01:00
medeyko
43399b3832 Update README.md 2022-03-03 21:13:54 +01:00
medeyko
1eaf258a63 Update jetbrains_mono_bold_20.c
Fix 0 (zero) symbol. For more details, #988
2022-03-03 21:13:54 +01:00
Riku Isokoski
f1c91e1ce0 terminal watchface: remove icons and other fixes 2022-03-03 21:10:39 +01:00
avery
1bfee61ef9 Replace Airplane mode icon 2022-03-03 21:09:05 +01:00
Reinhold Gschweicher
a29e30c187 Notifications: replace newlines in label-copy because of const char* title
The variable `title` is defined as `const char*`, which means, that
`strchr()` returns a `const char*` as well according to
https://www.cplusplus.com/reference/cstring/strchr/

But in the same line the return value is assigned to a non-const
`char*`, which shouldn't be allowed (error with `-pedantic`).

Because the `lv_label` creates an internal copy of the title sting, just
modify that one instead and replace newline in the copied string.
2022-03-03 21:08:45 +01:00
Reinhold Gschweicher
29f0bce46b Remove unused includes in HearRate and Motion.h
The include `bits/unique_ptr.h` isn't used, so remove it.
2022-03-03 21:07:11 +01:00
Arsen6331
51640c7248 Add ITD as a companion app 2022-03-03 21:04:38 +01:00
avery
8dae4c8299
terminal: Replace notification icon with a text entry 2022-02-22 18:42:54 +01:00
avery
2803dd667f
Use Bluetooth brand color for status text 2022-02-22 18:23:26 +01:00
Jean-François Milants
0e2b27d792 Merge branch 'evergreen22-airplane-mode' into develop 2022-02-20 15:41:06 +01:00
Jean-François Milants
ef44b763d9 Merge branch 'airplane-mode' of https://github.com/evergreen22/InfiniTime into evergreen22-airplane-mode
Apply a few changes that were requested in the PR during the review.

# Conflicts:
#	src/CMakeLists.txt
#	src/displayapp/Apps.h
#	src/displayapp/DisplayApp.cpp
#	src/displayapp/Messages.h
#	src/displayapp/screens/settings/Settings.cpp
2022-02-20 15:40:49 +01:00
Jean-François Milants
40cdb54772 Merge branch 'airplane-mode' of https://github.com/evergreen22/InfiniTime into evergreen22-airplane-mode
# Conflicts:
#	src/CMakeLists.txt
#	src/displayapp/Apps.h
#	src/displayapp/DisplayApp.cpp
#	src/displayapp/Messages.h
#	src/displayapp/screens/settings/Settings.cpp
2022-02-20 15:25:24 +01:00
Jean-François Milants
69e4ab6be1 Manual squash merge of PR #932 (https://github.com/InfiniTimeOrg/InfiniTime/pull/932) from 13werwolf13 (https://github.com/13werwolf13). This PR adds a new Terminal watchface to InfiniTime!
Squashed commit of the following:

commit 23ea840b059c69667c8711265cecaf992791acb6
Author: Jean-François Milants <jf@codingfield.com>
Date:   Sun Feb 20 13:14:27 2022 +0100

    Terminal watch face : fix includes and a few code cleaning.

commit 3c244def25e3ad8e1f56d708fb0864c122059948
Merge: 40790868 138a6552
Author: Jean-François Milants <jf@codingfield.com>
Date:   Sun Feb 20 12:45:54 2022 +0100

    Merge branch 'develop' of https://github.com/13werwolf13/InfiniTime into 13werwolf13-develop

commit 138a65528a86799fd5c37f065023a92f222fe044
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:13:00 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.h

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 35156166b2f7589bf005ec7c7192a4226578f6d9
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:12:43 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 757ca2dd438f1f314267a8b81a6034c576f1d6be
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:12:30 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 60b6b4e5824d04faa3efa45173358d04fa68a368
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:12:20 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 6959d8c043013550a7a3e4e6588b234d3bb942b5
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:11:46 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 4d850281bedf342d0856da5eafc22e46d0767c56
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:11:17 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit af483bee33c225fcb03432db1eb14c0453df0ae7
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:10:57 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 6bc6c1a637be4e514ecd0097d1dc9e4aacdba1db
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:10:40 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.h

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 25fdafc6aba0d9e0173103501de3802af261e2ae
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:06:10 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 12e1b0f8c0202a7f62e3e1c297af850ce3526d13
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:05:44 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit e6c0f32056e9fea878d270d761607ac5ddc263b0
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:05:22 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.h

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 342ce8cd114f4af265078bc0cfa6b2d8831706d7
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:05:06 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 265fec5eeca27fcc1152a18e4af0273bcf119c46
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:04:06 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit b4669be38be0df2b6a3505d5f7a770c71636be60
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:03:29 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 471a84390957ded2ac23ebfe1cb99408e3783b0f
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:03:10 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit 6853166cf546a4ce561195eba01f1b1fd6d56420
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Wed Feb 2 09:02:51 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit bba34f69bfdd6b44f142c93644f71c9eda007290
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Sat Jan 22 12:32:41 2022 +0500

    some fixes

commit 74eea9f5800f273249846e6e1c887d15ba6eb10b
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Sat Jan 22 12:32:17 2022 +0500

    some fixes

commit 1e4a6763d73c3ba39c680ad25f90813e6a6a36d1
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Fri Jan 21 08:59:44 2022 +0500

    no errors, no warnings, no work..

commit eb8bd4dc4ecbbf61f1e0f725fd2116ee25319fd6
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Thu Jan 20 23:50:04 2022 +0500

    add ble state text output

commit fda1c088becb4a7f9ced451a0291694abe2249dc
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Thu Jan 20 22:25:35 2022 +0500

    add ble state text output

commit 68d3d9b343c0f37830bb640fab10b186faf73067
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Thu Jan 20 22:22:20 2022 +0500

    add ble state text output

commit 0ed45a9916787f68c0aa6bab9c97b090f2eebdd5
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Tue Jan 18 15:48:15 2022 +0500

    typo fix

commit 477a3a7f27c7486be2c8f985afab1f1739608fed
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Tue Jan 18 10:36:19 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit d6849888ea5cc152f04c5bf6fe2631e66296c357
Author: Марков Дмитрий <13werwolf13@mail.ru>
Date:   Tue Jan 18 10:36:09 2022 +0500

    Update src/displayapp/screens/WatchFaceTerminal.cpp

    Co-authored-by: NeroBurner <pyro4hell@gmail.com>

commit e2f7e318298b8a6f4d436cbbb1b92a738dacab7f
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Mon Jan 17 13:34:05 2022 +0500

    typo fix

commit fc246beb01d3feac4fd0b2fc9c45b38847e1d950
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Sat Jan 15 15:26:25 2022 +0500

    typo fix

commit ebbb31abf10ad9f61a8a7ecfdf29c2aaeaf33c19
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Fri Jan 14 10:08:29 2022 +0500

    typo fix

commit 3afedcaa28009f59e6960730e9349097ef455ea8
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Thu Jan 13 12:34:39 2022 +0500

    time format

commit 471a4c942f7e3cfd5c52bd61152ede770da5e026
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Thu Jan 13 12:27:10 2022 +0500

    time format

commit d3fd348de4b4a89c216a717de84fcc923cc099fe
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Thu Jan 13 12:26:49 2022 +0500

    time format

commit e540d103e3204649ff585742f8834d16136372d5
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Thu Jan 13 11:28:31 2022 +0500

    add patch

commit 728830178f31f71785c49cdc6b83daea4e0a7df6
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Wed Jan 12 22:08:07 2022 +0500

    add menue item

commit 4c5847669fa083f15ee3fdb404dadfdaef0f82aa
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Wed Jan 12 21:42:22 2022 +0500

    typo fix

commit 79273fe24f9162aca5508f07b17896149ad19839
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Wed Jan 12 20:48:06 2022 +0500

    typo fix

commit 1808a78ad94d0dfe97b6410a93ba30560de22f4b
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Wed Jan 12 20:17:15 2022 +0500

    typo fix

commit 6dfa141dca176789da4e978f008eb842d9ec515a
Author: Дмитрий Марков <markov@promobit.ru>
Date:   Wed Jan 12 20:12:09 2022 +0500

    typo fix

commit 88f01902325505a9206ced4504aae0762042535d
Author: Дмитрий Марков <13werwolf13@mail.ru>
Date:   Wed Jan 12 14:50:54 2022 +0500

    add terminal watchface
2022-02-20 13:20:43 +01:00
Reinhold Gschweicher
407908686a Provide reference to BrightnessController in DisplayApp
For the simulator I need a way to get to the brightnessController object
and handle the set brightness-levels accoringly.

This is done by the constructor expecting a brightnessController object
instead of initializing one itself
2022-02-19 20:46:45 +01:00
Reinhold Gschweicher
f829427c41 Remove unused and not compiling DropDownDemo
For ease of use the simulator uses a globbing expression to get all
screens source files. This one was picked up as well and lead to a
compilation error.
2022-02-19 13:17:45 +01:00
Reinhold Gschweicher
b857fdb9f4 SystemTask: forward declare BatteryController to fix of cyclic dependency
SystemTask.h included BatteryController.h, and BatteryController.h
included SystemTask.h. If unlucky the class SystemTask isn't created yet
when BatteryController wants to use it.

Fix that cyclic dependency by forward declaring the BatteryController
class and including it in the SystemTask.cpp file, where it is needed.
2022-02-19 13:17:00 +01:00
Reinhold Gschweicher
4aaa3a3b49 SettingShakeThreshold: add missing SystemTask.h, relative include
SettingShakeThreshold.h uses SystemTask, but doesn't include the header.
Fixing that for the simulator.

For consistency make the header include a relative to src include.
2022-02-19 13:16:15 +01:00
Reinhold Gschweicher
a2a70f8eda MotorController: no need to make this function a class function
The `StopRinging()` function was used just in `Notifications.h` screen.
That screen already has access to a `motorController` object.
2022-02-19 13:13:36 +01:00
Reinhold Gschweicher
04eca81a95 Notifications: use motorController object instead of class function
We get the motoroController object, so store and use it.
2022-02-19 13:13:36 +01:00
Reinhold Gschweicher
d5b78ecd66 SystemTask: remove unused ble includes
Remove unused includes. The firmware still compiles fine without the
includes.
2022-02-19 13:00:50 +01:00
minacode
a1db9fca13 remove unused reference 2022-02-16 13:34:14 +01:00
Riku Isokoski
4f649a8544 Improved alarm alert handling 2022-02-13 11:36:51 +01:00
Jean-François Milants
e332be0d7c Merge branch 'mruss77-statusBarTimeFormat' into develop 2022-02-13 11:23:20 +01:00
Jean-François Milants
87d882b151 Merge branch 'statusBarTimeFormat' of https://github.com/mruss77/InfiniTime into mruss77-statusBarTimeFormat
# Conflicts:
#	src/components/datetime/DateTimeController.cpp
2022-02-13 11:23:05 +01:00
Zorvalt
d967efa197 Fix biased BLE pass key generation 2022-02-12 18:44:05 +01:00
Reinhold Gschweicher
5938b4b208 SystemTask: fix static cast missing brackets syntax
The static_cast syntax requires brackets around the input variable. The
implementation worked because the used input are defines, which add the
missing brackets like the following:
```cpp
  #define GPIO_PIN_CNF_SENSE_Low (3UL)
```
2022-02-12 18:38:31 +01:00
Riku Isokoski
32fe7b660c Make switch disabled state slightly dimmer 2022-02-12 18:36:11 +01:00
Riku Isokoski
76f63ed76a Fix switch default state 2022-02-12 18:36:11 +01:00
Riku Isokoski
0930a79041 Alarm: Fix missing stop button. Revert alert layout 2022-02-12 18:36:11 +01:00
Riku Isokoski
a9b77ae0d4 Alarm: Change checkable button for a switch 2022-02-12 18:36:11 +01:00
Riku Isokoski
1ac1d5aa5a Add issue links 2022-02-12 18:21:52 +01:00
Eli Weiss
2daa5dcbee Added alarm 12 hour interface 2022-01-31 20:42:48 +01:00
Eli Weiss
ae0724c28c Corrected capitalization 2022-01-31 20:42:18 +01:00
Eli Weiss
02e94acf18 Corrected code formatting
Corrected formatting and removed unnecessary variable time24H
2022-01-31 20:42:18 +01:00
Eli Weiss
d86f81b9ad Changed setHourLabels function to handle 24H too
Changed setHourLabels function to handle 24 hour time labeling, changed to private
2022-01-31 20:42:18 +01:00
Eli Weiss
c8d998e82c Consolidated label changes, optimizations
Consolidated 12 hour label changes to function. Removed use of strings, struct.
2022-01-31 20:42:18 +01:00
Eli Weiss
5be2f57a78 Consolidated time conversion logic
Consolidated 24 hour to 12 hour time conversion logic into function, addressed formatting issues, cleaned up code.
2022-01-31 20:42:18 +01:00
Eli Weiss
1813399959 Removed redundant brackets
Also corrected orphaned bracket
2022-01-31 20:42:18 +01:00
Eli Weiss
2bc338ceed Cleaned up redundant if statements, spacing
Removed redundant if statements in hour button logic. Spacing is now in line with repo guidelines.
2022-01-31 20:42:18 +01:00
Eli Weiss
698288d822 Added 12 hour set time 2022-01-31 20:42:18 +01:00
JF
e73a92c29b
Merge pull request #949 from Riksu9000/fix_alarm
Fix alarm on time change
2022-01-26 22:03:14 +01:00
JF
f38c559089
Merge pull request #954 from NeroBurner/music_initialize_lastLength
Music: initialize totalLength to have non-random data from the start
2022-01-26 22:01:07 +01:00
JF
b12603448c
Merge pull request #959 from NeroBurner/stopwatch_include_cleanup
StopWatch: cleanup unused includes and use relative to src includes
2022-01-26 22:00:33 +01:00
JF
71c895dc71
Merge pull request #531 from hatmajster/heart-rate-gain-setting
Heart rate sensor - HRS gain changed to x8
2022-01-26 21:44:23 +01:00
JF
9e9010c725
Merge pull request #876 from yehoshuapw/hrs-driver-changes
Hrs driver changes
2022-01-26 21:39:58 +01:00
JF
458f5b8eb8
Merge pull request #903 from Riksu9000/improved_notif_timeout
Improved notification timeout
2022-01-26 21:38:07 +01:00
JF
bbb823b170
Merge pull request #939 from NeroBurner/buttonHandler_relative_include
ButtonHandler: includes relative to src dir
2022-01-26 21:35:03 +01:00
JF
a1880ca3b8
Merge pull request #940 from NeroBurner/systemTask_queue_include
SystemTask: add missing queue.h include for QueueHandle_t
2022-01-26 21:34:25 +01:00
JF
a354650a9c
Merge pull request #944 from NeroBurner/no_generated_files_in_source_dir
Create Version.h in binary dir instead of src dir
2022-01-26 21:33:57 +01:00
JF
cc01d6ca17
Merge pull request #948 from Riksu9000/watchfacecleanup
PTS and digital watchface code cleanups
2022-01-26 21:25:59 +01:00
Reinhold Gschweicher
67f546fa33 StopWatch: cleanup unused includes and use relative to src includes 2022-01-26 08:31:14 +01:00
hatmajster
b4e956227e Hrs3300: changed default gain to x8 2022-01-25 17:44:11 +01:00
Reinhold Gschweicher
314c02194a Music: initialize totalLength to have non-random data from the start
In the first `Music::Refresh` call the lastLength and totalLength are
not initialized. The `lastLength` value is read first from the
musicService. Naturally in the first itereation that is changed and
`UpdateLength()` is called. There the variable `totalLength` is used as
well, but that variable isn't initialed to a sensible value yet. This
leads to sometimes the `Music.h` screen segfaulting (depending on the
random uninitialized data in the `lastLength` variable)
2022-01-23 23:39:38 +01:00
Riku Isokoski
470db4ab99 Fix alarm on time change 2022-01-22 12:47:23 +02:00
Riku Isokoski
6bf6bb7e2a PTS and digital watchface code cleanups 2022-01-20 16:04:26 +02:00
Reinhold Gschweicher
688dc2fed7 Create Version.h in binary dir instead of src dir
Don't use source directory for generated files. Use the binary (build)
directory instead.
2022-01-17 21:26:40 +01:00
Reinhold Gschweicher
bbc5af078d SystemTask: add missing queue.h include for QueueHandle_t 2022-01-16 22:47:16 +01:00
Reinhold Gschweicher
48e9458301 ButtonHandler: includes relative to src dir 2022-01-16 20:59:49 +01:00
Jean-François Milants
26ae828e39 Set version to 1.8.0 2022-01-07 17:27:43 +01:00
JF
f711f0f794
Merge pull request #916 from Riksu9000/shake_menuoption
Update shakewake menu option
2022-01-07 16:53:21 +01:00
Riku Isokoski
97cbe34963 Update shakewake menu option 2022-01-06 15:44:39 +02:00
JF
e8fc46ba20
Merge pull request #912 from SteveAmor/chimesradio
Updates radio button style for Chimes Option
2022-01-05 10:42:25 +01:00
SteveAmor
b1b9937ff7 Updates radio button style 2022-01-04 21:28:37 +00:00
Jean-François Milants
dc8be2244c Merge branch 'geekbozu-ShakeWake' into develop 2022-01-04 21:48:20 +01:00
Jean-François Milants
bef3e708f6 Merge branch 'ShakeWake' of https://github.com/geekbozu/InfiniTime into geekbozu-ShakeWake
# Conflicts:
#	src/CMakeLists.txt
#	src/displayapp/Apps.h
#	src/displayapp/DisplayApp.cpp
#	src/displayapp/screens/settings/Settings.cpp
2022-01-04 21:48:08 +01:00
JF
b8b54f47a2
Merge pull request #813 from SteveAmor/chimes
Chimes option
2022-01-04 21:44:36 +01:00
SteveAmor
15c3807a76 Adds enum class for chimes option 2022-01-04 19:32:29 +00:00
Tim Keller
e82469bffa Fix setting removing it self from wake settings when opening calibration window twice. 2022-01-04 02:06:16 +00:00
Tim Keller
f86c71b2bb Made calibration window enable Accel wakeups for setting and calibration even when wake mode is inactive. 2022-01-04 02:02:01 +00:00
Tim Keller
92b1e83e3e Remove "fancy" settings display and always show ShakeWakeThresholdSetting 2022-01-04 02:01:31 +00:00
Tim Keller
98ac447bdb Fixed button color changing 2022-01-04 02:00:03 +00:00
Tim Keller
b9c40100f6 Added visual aide for shake strength
Added delay to starting calibration
2022-01-04 02:00:03 +00:00
Tim Keller
8f38bd911b Raise calibration timeout to 7.5 seconds
Added button toggle state for cleaner user interaction
2022-01-04 02:00:03 +00:00
Tim Keller
5c13200238 Fix crash upon leaving app.
Code formatting
2022-01-04 02:00:03 +00:00
Tim Keller
d6b22645e3 Make arc moveable, and clear previous setting on calibrate 2022-01-04 02:00:02 +00:00
Tim Keller
f780ac999a Actually save the threshold
Prevent a few crashes due to an LV task being active when it shouldnt be.
2022-01-04 02:00:02 +00:00
Tim Keller
d2510d7926 Better Sensitivity UI, Calibration button added 2022-01-04 02:00:02 +00:00
Tim Keller
6d74820698 Add averaging to wake threshold. Makes it take more then just a "flick" to turn on 2022-01-04 01:59:01 +00:00
Tim Keller
3ebf002f9d Add start of settings app for senstivity.
really just debugging. I want to make it more configurable then high med low.
Position of setting needs a new location...dynamicly adding it currently at the end. Which honestly im fine with.
2022-01-04 01:59:01 +00:00
Tim Keller
ad42cdf120 Cleanup 2022-01-04 01:57:18 +00:00
Tim Keller
d270275bd2 Added Shake to wake 2022-01-04 01:57:18 +00:00
SteveAmor
7a0f72ed8b resolve conflicts 2022-01-02 22:33:23 +00:00
SteveAmor
cc259b6a4a resolves conflicts 2022-01-02 22:27:43 +00:00
SteveAmor
94561b2331 resolves conflicts 2022-01-02 21:49:18 +00:00
Riku Isokoski
5e6868d9eb Improved notification timeout 2022-01-01 16:22:35 +02:00
Stephanie
e0013e7304 Ran clang-format 2021-12-30 21:51:43 +01:00
Stephanie
a65f173e3c Renamed confusing variables and general cleanup 2021-12-30 21:51:43 +01:00
Stephanie
7eff1dbcc6 Changed text to left pad 2021-12-30 21:51:43 +01:00
Stephanie
f7d1b3f368 Moved trip meter update to MotionController and changed trip meter logic 2021-12-30 21:51:43 +01:00
Stephanie
fb87fdb2d9 Changed lap counter to trip meter 2021-12-30 21:51:43 +01:00
Stephanie
d034bd131e Added "lap" button to step counter 2021-12-30 21:51:43 +01:00
Jackson
baa5954724 Use CMake universal build command
Rather than using generator-specific build commands (ex. `make` or `ninja`), the CI build now uses `cmake --build` for a more modern, best practices approach.
2021-12-30 21:43:03 +01:00
Jackson
51d2888b52 Switch CI/CD to build using ninja vs. make
By switching the CI/CD workflow to use CMake's `ninja` backend, the build time goes down considerably (~4.5 minutes to ~2) compared to GNU Make
2021-12-30 21:43:03 +01:00
Riku Isokoski
54f588ce63 Add missing break 2021-12-30 21:41:17 +01:00
Riku Isokoski
86d180a855 Improve gesture consistency across the firmware 2021-12-30 21:41:17 +01:00
JF
395590d2d8
Merge pull request #718 from kieranc/pts-settings
Integrate color picker into PineTimeStyle watchface
2021-12-30 21:36:43 +01:00
Reinhold Gschweicher
5b7915b5c9 InfiniPaint: add missing include algorithm for std::fill 2021-12-30 20:58:00 +01:00
Eli Weiss
fb1946b06e Update .gitignore 2021-12-30 20:57:26 +01:00
Eli Weiss
ab059b9004 Revised documentation 2021-12-30 20:57:26 +01:00
Eli Weiss
97668c775b Improved "Getting Started" readability
Clarified ambiguous references, clarified phrasing
2021-12-30 20:57:26 +01:00
Eli Weiss
90352af626 Improved documentation readability
Improved documentation readability by rephrasing confusing sentences. Added Sitronix ST7789V datasheet link to SPI-LCD-driver.md for easier reference.
2021-12-30 20:57:26 +01:00
Eli Weiss
c8214bc666 Update MemoryAnalysis.md
Cleaned up MemoryAnalysis.md for greater readability
2021-12-30 20:57:26 +01:00
Eli Weiss
f66fcdd3ca Improved documentation readability
Removed extra space in contribute.md and cleaned up MemoryAnalysis.md phrasing and confusing punctuation.
2021-12-30 20:57:26 +01:00
Eli Weiss
1832a6c231 Update buildAndProgram.md
Improved documentation readability.
2021-12-30 20:57:26 +01:00
hubmartin
204fc56672 Use Bluetooth brand color for BLE logo #0082FC 2021-12-30 20:50:05 +01:00
hubmartin
f52d6bfa67 Real white now 2021-12-30 20:50:05 +01:00
hubmartin
86ee7a70b7 WatchFaceDigital - BLE symbol changed to white color 2021-12-30 20:50:05 +01:00
James A. Jerkins
319030d9e1 Add airplane mode feature
Implements 'Airplane mode' feature to disable and enable bluetooth/ble
Adds airplaneMode as a non-persisted setting
Adds a setting menu for switching airplane mode on and off
Displays an airplane symbol on the Digital watch face and the
    PineTimeStyle watch face when airplane mode is enabled
Always enables bluetooth/ble on boot (disable airplane mode)
Alphabetizes the settings menu options
Style cleanups

Closes #632
2021-12-23 20:30:14 -06:00
JF
3b0b48020d
Merge pull request #886 from evergreen22/passkey-option
Optional secure pairing with a passkey
2021-12-22 21:34:20 +01:00
James A. Jerkins
eca0588c23 Optional secure pairing with a passkey
Support passkey pairing when requested by the central
Fix a comment and reorder warning
2021-12-21 16:02:01 -06:00
JF
8ab959b4dc
Merge pull request #839 from Arsen6331/BLE-FS-Docs
Add documentation for BLE FS
2021-12-20 21:06:29 +01:00
Yehoshua Pesach Wallach
464b689a03
changed ReadHrs and ReadAls to uint32, and did static_cast instead of hidden cast when using it 2021-12-13 12:47:52 +02:00
Yehoshua Pesach Wallach
4cc95091ab
order ReadHrs, ReadAls bitwise according to bit ordering 2021-12-13 12:39:34 +02:00
JF
6a5946c4e3
Merge pull request #874 from evergreen22/alarm-break
FIX: AlarmTriggered fall through to ShowPairingKey
2021-12-12 17:40:05 +01:00
James A. Jerkins
645a071b70 FIX: AlarmTriggered fall through to ShowPairingKey 2021-12-11 21:34:51 -06:00
JF
bccd77d5c9
Merge pull request #756 from geekbozu/BLE_FS
BLE FS Using adafruits Simple (not fast) BLE FS  Api
2021-12-11 16:09:56 +01:00
Tim Keller
1470489e7b Fix Failed rebase. 2021-12-10 01:49:03 +00:00
Tim Keller
0a0d1f2703 Fix more initializers 2021-12-10 01:18:57 +00:00
Tim Keller
b9a2db1a49 Fix large file support that broke due to a refactor. 2021-12-10 01:18:57 +00:00
Tim Keller
d1e9aa1076 Force variable cleanup because LFS makes assumptions about variable initialization state 2021-12-10 01:18:57 +00:00
Tim Keller
fdb5e27aea Attempt at a more robust File handler 2021-12-10 01:18:57 +00:00
Tim Keller
b62c62ee1f Change read to return LFS return values when reading a directory or nonexistant file 2021-12-10 01:18:57 +00:00
Tim Keller
09b9130244 Fix string nullterminations,
Expand error codes.
2021-12-10 01:18:57 +00:00
Tim Keller
362a5ef113 Added move function 2021-12-10 01:18:57 +00:00
Tim Keller
8f46908d38 Fix lvgl_open to respect littlefs open errors 2021-12-10 01:18:57 +00:00
Tim Keller
f4322841ff Remove DirDelete, implementation did not work and memory contraints are recursive. Better implemented on client side... 2021-12-10 01:18:57 +00:00
Tim Keller
2e10b0fe64 Remove mount/unmount. No longer needed 2021-12-10 01:18:57 +00:00
Tim Keller
c1aa5a5ea7 Write works 2021-12-10 01:18:57 +00:00
Tim Keller
8fb99471c3 Reading Seems to work? 2021-12-10 01:18:57 +00:00
Tim Keller
faa05eb57b Actually fix memory corruption, seems stable now
ListDir MKDIR delete all seem to work
Co-authored-by: Iambian <Iambian@users.noreply.github.com>
2021-12-10 01:18:57 +00:00
Tim Keller
6393a17d74 List Dir works? 2021-12-10 01:18:57 +00:00
Tim Keller
f841b8c984 Revert "More attempted SPI fixes"
This reverts commit bed7e731b206961117b717adb1031ab3011e7db9.
2021-12-10 01:18:57 +00:00
Tim Keller
a5a64800ed Revert "Workaround for SPI bus being asleep."
This reverts commit 1edeb5cb65489707c26b7a65f3b54520086d363a.
2021-12-10 01:18:57 +00:00
Tim Keller
d89e38d3bf Focus on getting flash access working properly 2021-12-10 01:18:57 +00:00
Tim Keller
8f6a390c36 Start of read command 2021-12-10 01:18:57 +00:00
Tim Keller
1b4b422ab6 More attempted SPI fixes 2021-12-10 01:18:57 +00:00
Tim Keller
3a8e66a52f Added Delete file
Added FS Stat.
2021-12-10 01:18:57 +00:00
Tim Keller
eabbbfa373 Fix folder count in output 2021-12-10 01:18:57 +00:00
Tim Keller
2690c274af Workaround for SPI bus being asleep.
This needs to get cherrypicked to another PR as SPI Sleep needs to use a semaphore or something
2021-12-10 01:18:57 +00:00
Tim Keller
1dd7174480 More reliable FS listing 2021-12-10 01:18:57 +00:00
Tim Keller
91c644b43c direcetory listings maybe?
Added LISTDIR command and notify responses.
2021-12-10 01:18:57 +00:00
Tim Keller
f57f797ff5 Added Blank FSService that exposes only version info 2021-12-10 01:18:57 +00:00
Kieran Cawthray
6cf4a933b6 Merge remote-tracking branch 'upstream/develop' into pts-settings 2021-12-09 22:41:29 +01:00
Avamander
42a5cdb5b7 Added QCBOR to pinetime-mcuboot-recovery 2021-12-09 21:57:32 +01:00
Avamander
6354511c20 Hotfix for other build targets 2021-12-09 21:57:32 +01:00
Riku Isokoski
32ea01b2e9 Organize includes 2021-12-09 21:32:07 +01:00
Riku Isokoski
ec9b5a0bd2 Move radio button styling to a single place 2021-12-09 21:32:07 +01:00
Riku Isokoski
736ae08fcd Optimize arrays 2021-12-09 21:32:07 +01:00
Riku Isokoski
494448b7cc Fix too small array 2021-12-09 21:32:07 +01:00
Riku Isokoski
9ffd28f735 Style checkboxes as radio buttons 2021-12-09 21:32:07 +01:00
Avamander
589733d11e Style improvements 2021-12-09 21:31:13 +01:00
Reinhold Gschweicher
e104f17b1b AlarmController: remove unused app_timer.h include in header 2021-12-09 21:30:33 +01:00
Reinhold Gschweicher
23f318c3d0 TouchHandler: remove unused FreeRTOS.h and task.h includes from header
FreeRTOS and task.h aren't used in the Header file. Furthermore the
SystemTask forward declaration isn't needed as it isn't used in the
header.
2021-12-09 21:30:20 +01:00
Avamander
9db5d64441 Fixed unpopped diagnostic 2021-12-09 21:30:04 +01:00
Avamander
6a442b90a1 Improved format specifiers, bracing, removed C-style casts, whitespace fixes and removed Tiles shadowing 2021-12-09 21:30:04 +01:00
Kieran Cawthray
645f6f43dc Remove commented code 2021-12-09 21:29:31 +01:00
Kieran Cawthray
f4daf63679 Adjust icon alignment only on IsUpdated() 2021-12-09 21:29:31 +01:00
Kieran Cawthray
8539db0884 Alignment fixes 2021-12-09 21:29:31 +01:00
JF
d29a9818af
Merge pull request #353 from Avamander/patch-weather
WeatherService
2021-12-09 21:27:38 +01:00
Avamander
e8c1302cd6
Merge branch 'develop' into patch-weather 2021-12-09 22:20:29 +02:00
James A. Jerkins
b946b8d156 Fix assertion failure in ButtonHandler
FreeRTOS says zero is not a valid value for xTimerPeriodInTicks.
Zero value fires an assertion on line 361 in timers.h
2021-12-09 21:16:57 +01:00
Tim Keller
cd593c3862 Break not return thanks @FintasticMan 2021-12-09 21:15:00 +01:00
Tim Keller
f1fc7ee659 Adjust systemtask to respect doNotGoToSleep. 2021-12-09 21:15:00 +01:00
James A. Jerkins
048ecd41e4 Adjust BLE/LL stacks, style, comments, refactoring
Increase BLE task stack +200 and decrease LL task stack -200
more braces!
2021-12-09 21:14:16 +01:00
James A. Jerkins
150fa3b661 Persist bond between reboots
Save bond information in the FS after a disconnect or encryption change
if the bond is not already stored. The bond is restored on boot enabling
automatic reconnection to a previously bonded central.

Two consecutive watch reboots with the central out of range (or BLE off)
will remove the stored bond from the watch.
2021-12-09 21:14:16 +01:00
James A. Jerkins
1e4130a9cf Fix for passkey screen scramble
When a passkey is displayed, screen on or off, and another
passkey is displayed the screen may become scrambled. Fix
the issue by insuring the whole screen is drawn every time.
2021-12-09 21:14:16 +01:00
James A. Jerkins
62dbcbfc95 Connect and bond with a passkey
This commit adds the following:
    Passkey pairing - passkey is displayed on watch
    Swipe down to clear passkey screen
    Connection encryption
    Connection bonding
    Automatic reconnects to a bonded peripheral
    Trusted device on Android

Note that persisting the bond between reboots is NOT included in
this commit. Therefore, rebooting the watch will cause reconnect failures.
You must delete the bond from the phone to reconnect/pair.
2021-12-09 21:14:16 +01:00
Kieran Cawthray
ae4b9e0f2e Include Colors.h 2021-12-06 10:29:14 +01:00
Kieran Cawthray
c00ad4af35 Merge remote-tracking branch 'upstream/develop' into pts-settings 2021-12-05 20:32:29 +01:00
Avamander
5f50f0e538 Fixed air quality amounts being off by a few orders of magnitude 2021-12-04 22:03:40 +02:00
Avamander
3eebe66d65 Updated docs and renamed functions for consistency 2021-12-04 22:03:40 +02:00
Avamander
f1f2bc119a Added a note about map key capitalization 2021-12-04 22:03:40 +02:00
Avamander
6879147648 Revert wrong change to DisplayApp 2021-12-04 22:03:40 +02:00
Avamander
7b04ce5eba Added a note about the timestamp having a timezone offset 2021-12-04 22:03:40 +02:00
Avamander
0df49bd43d Removed float usage from display 2021-12-04 22:03:40 +02:00
Avamander
62bb6b5163 Better cleanup, bugfixes and improvements in weather parsing. UI improvements 2021-12-04 22:03:40 +02:00
Avamander
58d454b11f Improved Temperature parsing 2021-12-04 22:03:40 +02:00
Avamander
4a8f72bd1e Fixed a bug in DewPoint decoding 2021-12-04 22:03:40 +02:00
Avamander
be7931c4fb Whoops, fixed a wrong type 2021-12-04 22:03:40 +02:00
Avamander
154e3d27ad Added a few helper functions 2021-12-04 22:03:40 +02:00
Avamander
797b60397c Improved documentation 2021-12-04 22:03:40 +02:00
Avamander
e0133cec36 Improved documentation 2021-12-04 22:03:40 +02:00
Avamander
ffd6c3f095 Removed an instance of shadowing 2021-12-04 22:03:40 +02:00
Avamander
b72c6a5bc9 Clarified a few comments 2021-12-04 22:03:40 +02:00
Avamander
9525fc4273 Specified how values should be interpreted better 2021-12-04 22:03:40 +02:00
Avamander
b998d5e2a8 Removed unnecessary change in CMakeLists 2021-12-04 22:03:40 +02:00
Avamander
abbfb92fa2 Added new precipitation and obscuration types 2021-12-04 22:03:40 +02:00
Avamander
75cf5324ba Fixed an incorrect decode in Humidity 2021-12-04 22:03:40 +02:00
Avamander
cccec6e1ab Improved debug UI. 2021-12-04 22:03:40 +02:00
Avamander
9108952e6b Implemented parsing of all defined weather data types 2021-12-04 22:03:40 +02:00
Avamander
06b022fc4d Improved UI and fixed a bug 2021-12-04 22:03:40 +02:00
Avamander
c870f8ed30 Bunch of bugs fixed, improved error handling, debug UI addition 2021-12-04 22:03:40 +02:00
Avamander
48beb7c3b1 Improved error handling and fixed incompatibility with co.nstant.in:cbor library 2021-12-04 22:03:40 +02:00
Avamander
df04763ab4 Fixed recovery build 2021-12-04 22:03:40 +02:00
Avamander
900598a7ee Removed versioning because it's not necessary 2021-12-04 22:03:40 +02:00
Avamander
657dc3a9ba Changed UUID so it wouldn't conflict with Motion 2021-12-04 22:03:40 +02:00
Avamander
ffb17357e7 Fixed a few compilation errors, fixed UUID. 2021-12-04 22:03:40 +02:00
Avamander
ed6f0aade4 Implemented a few functions. 2021-12-04 22:03:40 +02:00
Avamander
0ed256ba15 Few formatting fixes 2021-12-04 22:03:40 +02:00
Avamander
19c9667a3d Started initial work on the UI 2021-12-04 22:03:40 +02:00
Avamander
2736fa57bb Added autodetection for clang-format version 2021-12-04 22:03:40 +02:00
Avamander
3a09b3614c Brace style and whitespace fixes 2021-12-04 22:03:40 +02:00
Avamander
b6e9e4171d Switched to non-deprecated math header 2021-12-04 22:03:40 +02:00
Avamander
4b2dcbb4f0 Fixed a few bugs, enabled UsefulBuf library optimizations 2021-12-04 22:03:40 +02:00
Avamander
4349657f79 Minor style improvement 2021-12-04 22:03:40 +02:00
Avamander
6e16584816 Skeleton of the receiving logic 2021-12-04 22:03:40 +02:00
Avamander
eb27813c18 Removed redundant comments from NrfLogger 2021-12-04 22:03:40 +02:00
Avamander
1d3f0dfa9e Tidied up and added Weather to CMakeLists.txt 2021-12-04 22:03:40 +02:00
Avamander
bda96dc595 Initial Weather service skeleton 2021-12-04 22:03:40 +02:00
Avamander
6ba2878605 Added QCBOR dependency 2021-12-04 22:03:40 +02:00
Reinhold Gschweicher
85a25302bf Clock: add missing Settings include
Add missing include in `Clock.cpp` for `Settings.h`. The Settings class
is forward declared in the header file, but it needs to be included in
the cpp file.
2021-12-02 21:58:31 +01:00
Steveis
b8dfad40bb WatchFaceAnalog : move notification icon
Standardise notification icon to display in top left.
2021-12-02 21:47:08 +01:00
Reinhold Gschweicher
054a99cf6c Paddle: add a little randomization in the dy speed
To make the game a bit more challenging an less predictable add a little
bit of randomness to the `dy` value. When hitting the right wall add a random
number (one of [-1, 0, 1]) to the `dy` value.

To keep the difficulty level managable limit the dy value to be in the
range from -5 to 5.
2021-12-02 21:46:36 +01:00
Jean-François Milants
ada96ccdc8 Merge branch 'clemensvonmolo-paint-colorchange-vibration' into develop 2021-12-02 21:43:17 +01:00
Jean-François Milants
1404d0186c Merge branch 'paint-colorchange-vibration' of git://github.com/clemensvonmolo/InfiniTime into clemensvonmolo-paint-colorchange-vibration
# Conflicts:
#	src/displayapp/screens/InfiniPaint.h
2021-12-02 21:42:56 +01:00
Reinhold Gschweicher
a17d8bd566 Metronome: add missing include for Screen.h 2021-12-02 21:21:05 +01:00
Reinhold Gschweicher
88b017d9b1 Settings: remove unused driver include 2021-12-02 21:20:21 +01:00
Reinhold Gschweicher
fe6e4bea8c WatchFaceDigital: remove unused include for ScreenList.h 2021-12-02 21:18:39 +01:00
Reinhold Gschweicher
0705b74656 WatchFaceDigital: add missing include to Settings.h 2021-12-02 21:18:39 +01:00
Reinhold Gschweicher
e8db73e0e7 WatchFaceAnalog: remove unused ScreenList, add needed includes
Remove unused `ScreenList.h` include.

For `std::abs()` add needed include `<cmath>`.

For the forward declared Settings-Controller add the `Settings.h`
include to the cpp file.
2021-12-02 21:17:53 +01:00
Reinhold Gschweicher
4b7f2546bd PineTimeStyle: remove include and add forward declare
Remove unused `ScreenList.h` include and add a forward declaration for
the `MotionController` class.
2021-12-02 21:16:49 +01:00
Reinhold Gschweicher
ec437b1c66 QuickSettings: remove unused imports 2021-12-02 21:14:47 +01:00
Jean-François Milants
9f0612bce8 Merge branch 'develop' of github.com:JF002/Pinetime into develop 2021-12-02 21:02:51 +01:00
Jean-François Milants
871a673a46 Tentative : fix issue template that redirect to a blank page. 2021-12-02 21:02:21 +01:00
Steveis
34511a66ee About : Remove misleading info
Removed Steps which is hard coded to display 0.
Could be misleading and is using up memory.
2021-11-28 14:05:52 +01:00
JF
2ffbf8b7b3
Merge pull request #798 from NeroBurner/motionservice_fix_typo_in_include
MotionService: fix not needed '/' in include
2021-11-28 14:04:47 +01:00
JF
583c7ee22f
Merge branch 'develop' into motionservice_fix_typo_in_include 2021-11-28 13:59:09 +01:00
Stephanie
4257073a02 Fixed container to use clang-format-12 and format on save 2021-11-28 13:57:02 +01:00
Jean-François Milants
67e077348c Merge branch 'NeroBurner-restructure_includes' into develop 2021-11-28 13:53:22 +01:00
Jean-François Milants
298f0f4335 Merge branch 'restructure_includes' of https://github.com/NeroBurner/InfiniTime into NeroBurner-restructure_includes
# Conflicts:
#	doc/contribute.md
#	src/displayapp/screens/BatteryInfo.h
2021-11-28 13:53:03 +01:00
Riku Isokoski
d5e8e3ca44 Split updating and about software. Remove big Contributing section from README 2021-11-28 13:42:37 +01:00
Riku Isokoski
45a90e4967 Update getting started. New pics. More information. 2021-11-28 13:42:37 +01:00
Riku Isokoski
caec4a560b Replace some "we" 2021-11-28 13:42:37 +01:00
Riku Isokoski
a326e22986 Add line break 2021-11-28 13:42:37 +01:00
Riku Isokoski
3375c4e187 Add missing periods 2021-11-28 13:42:37 +01:00
Riku Isokoski
c12fc5e313 Improvements to Apps.md and Intro.md 2021-11-28 13:42:37 +01:00
Riku Isokoski
d1583035d9 Link to companion apps 2021-11-28 13:42:37 +01:00
Riku Isokoski
5eaae4175c Fix versioning 2021-11-28 13:42:37 +01:00
Riku Isokoski
e53f1bfd66 Summarize updating-softare 2021-11-28 13:42:37 +01:00
Riku Isokoski
88e55b2504 Update updating instructions 2021-11-28 13:42:37 +01:00
Riku Isokoski
a0c7b48b8e Replace companionapp pages with links. Add companion apps 2021-11-28 13:42:37 +01:00
Riku Isokoski
2314c41ad6 Reorganize bootloader readme 2021-11-28 13:42:37 +01:00
Riku Isokoski
52d1906589 Separate and update coding conventions and contributing pages 2021-11-28 13:42:37 +01:00
Riku Isokoski
1d3098baa7 Update ui_guidelines 2021-11-28 13:42:37 +01:00
Riku Isokoski
c3c5ab3473 Reorganization 2021-11-28 13:42:37 +01:00
Riku Isokoski
cf9332f0e5 Crop and shrink photos 2021-11-28 13:42:37 +01:00
Riku Isokoski
4aaf3d06bc Documentation cleanup and reorganization 2021-11-28 13:42:37 +01:00
JF
dc25e7a887
Merge pull request #820 from Riksu9000/fix-anim-dir
Fix animation when long pressing on screens adjacent to watch face
2021-11-28 13:26:36 +01:00
JF
894e3cebc0
Merge pull request #829 from Riksu9000/clang-tidy-update
Remove some clang-tidy checks
2021-11-28 13:21:51 +01:00
JF
e8eee76b48
Merge pull request #832 from mabuch/fix-doc-motionservice-uuid
fix Motion Service UUID in doc and code comments
2021-11-28 13:21:08 +01:00
JF
279e63c97a
Merge pull request #833 from NeroBurner/BatteryInfo_remove_unused_include
BatteryInfo: remove unused FreeRTOS.h and timer.h includes
2021-11-28 13:20:00 +01:00
Arsen6331
47f73269bb
Add BLE FS docs link to BLE docs 2021-11-24 22:22:04 +00:00
Arsen6331
7322f3286b
Add documentation for BLE FS 2021-11-22 00:35:50 +00:00
Kieran Cawthray
1b2a8a5a04 Improve notification icon alignment 2021-11-16 18:18:56 +01:00
Kieran Cawthray
bea5c60a11 Revert "Fix notification icon alignment"
This reverts commit 29bb359e90bff68bdfca67bbd42baeac73dae6ae.
2021-11-16 18:10:34 +01:00
Kieran Cawthray
29bb359e90 Fix notification icon alignment 2021-11-16 00:06:13 +01:00
Kieran Cawthray
50406adc34 Merge remote-tracking branch 'upstream/develop' into pts-settings 2021-11-15 22:21:11 +01:00
Reinhold Gschweicher
3a41bff9ea docs: add non-relative includes to coding standard 2021-11-15 22:02:49 +01:00
Reinhold Gschweicher
241d36471d Move up file header include to top 2021-11-15 22:02:49 +01:00
Reinhold Gschweicher
1b937a77b9 remove unused libs/ prefix from lvgl includes as not needed 2021-11-15 22:02:49 +01:00
Reinhold Gschweicher
f2918709d9 Add missing standard includes 2021-11-15 22:02:49 +01:00
Reinhold Gschweicher
ac7b2da611 Update includes to to be relative to src directory
Don't use relative imports like `../foo.h` as those depend on the
relative position of both files. Rather than that use imports relative
to the `src` directory, which explicitly is part of the include
directories.
2021-11-15 22:02:49 +01:00
Reinhold Gschweicher
c4f2fb2fa4 BatteryInfo: remove unused FreeRTOS.h and timer.h includes 2021-11-15 21:56:02 +01:00
JF
624429b54c
Merge pull request #830 from InfiniTimeOrg/fix-unresponsive-touchpanel
Fix unresponsive touch panel after update to 1.7
2021-11-15 20:44:31 +01:00
mabuch
a631fa3518 fix Motion Service UUID in doc and code comments 2021-11-15 20:41:32 +01:00
Kieran Cawthray
5a0cf8e348 Merge remote-tracking branch 'upstream/develop' into pts-settings 2021-11-15 19:38:29 +01:00
kieranc
2fa63c7f37
Merge pull request #1 from Riksu9000/pts-settings-fix
Close customizer menu with button in PTS
2021-11-15 19:21:35 +01:00
Jean-François Milants
9671a8451f Fix unresponsive touch panel after update to 1.7 : don't care if device ids are not the ones we expected (until we know more about these communication and IDs issues). 2021-11-14 20:32:25 +01:00
Riku Isokoski
71a64974c0 Remove some clang-tidy checks 2021-11-13 13:37:52 +02:00
Riku Isokoski
2e7b51c8e1 clang-format and clang-tidy PineTimeStyle 2021-11-13 13:11:32 +02:00
Riku Isokoski
39157f2f19 Close menu with button 2021-11-13 13:02:00 +02:00
Jean-François Milants
a57fda6ba4 Set version to 1.7.0 2021-11-11 09:54:30 +01:00
JF
72900ca8aa
Merge pull request #816 from Riksu9000/fix_alarm_crash
Fix Alarm app crashing on buttonpress
2021-11-11 09:16:52 +01:00
Mark Russell
947ece0bc9 Status bar displays time in 12 or 24 hour format based on settings 2021-11-10 20:11:09 -05:00
Riku Isokoski
bdf7e5293f Fix animation when long pressing on screens adjacent to watch face 2021-11-10 13:45:49 +02:00
Riku Isokoski
1d6455c289 Fix Alarm app crashing on buttonpress 2021-11-09 11:38:19 +02:00
JF
755ab72495
Merge pull request #811 from InfiniTimeOrg/cst816-add-validity-check
Add data validity check and retries in CST816S driver
2021-11-08 21:59:25 +01:00
Jean-François Milants
76c43ebc82 Fix previous commit, call touchPanel.Init() even if we disabled the touch controller boot error. 2021-11-07 20:13:22 +01:00
Jean-François Milants
e6edf21552 Disable the warning that is displayed when the initialization of the touch controller fails, as some users reported that it was displayed when a valid touch controller was installed. 2021-11-07 18:00:34 +01:00
Kieran Cawthray
18e3cc7038 Merge remote-tracking branch 'upstream/develop' into pts-settings 2021-11-07 17:49:54 +01:00
Jean-François Milants
8d61419836 Fix formatting following the code review. 2021-11-07 16:19:06 +01:00
SteveAmor
c5282f9454 update settings version 2021-11-07 14:15:39 +00:00
SteveAmor
822b6ae6a0 format changes 2021-11-07 13:12:01 +00:00
SteveAmor
37de10f47d applied clang-format 2021-11-07 12:10:23 +00:00
SteveAmor
5932391c8b Chimes option 2021-11-07 10:50:33 +00:00
Jean-François Milants
e9c7ab4cfc Add data validity check and retries in CST816S driver. See https://github.com/InfiniTimeOrg/InfiniTime/issues/763#issuecomment-962436976. 2021-11-06 19:01:19 +01:00
JF
4a5b5f954f
Merge pull request #782 from Riksu9000/newer_buttonhandler
Newer ButtonHandler
2021-11-06 10:55:37 +01:00
JF
cfc11ea83b
Merge pull request #792 from Riksu9000/memory_saving
Memory savings by replacing strings
2021-11-06 10:45:17 +01:00
Clemens von Molo
75f0bbb7ca change paint vibration to 35ms 2021-11-01 12:10:06 +01:00
Clemens von Molo
2d98530976 color rotation using modulo, ran clang-format for InfiniPaint 2021-11-01 11:46:27 +01:00
Clemens von Molo
5e1f4839da InfiniPaint vibrate on colorchange, fix color rotation 2021-10-31 21:23:43 +01:00
JF
0aa73c2279
Merge pull request #791 from evergreen22/recovery-boot
Fix recovery firmware build
2021-10-31 10:00:19 +01:00
Reinhold Gschweicher
f9613d28c0 MotionService: fix not needed '/' in include 2021-10-30 22:51:49 +02:00
JF
d00687ca41
Merge pull request #784 from SteveAmor/patch-2
Correctly Define DFU
2021-10-30 17:23:27 +02:00
JF
4cf746f167
Merge pull request #793 from Riksu9000/tidy_warnings
Exclude some clang-tidy checks
2021-10-30 17:16:50 +02:00
Riku Isokoski
22f167dd0a Ignore some warnings 2021-10-30 11:51:11 +03:00
Riku Isokoski
30520d262b Memory savings by replacing strings 2021-10-29 13:22:14 +03:00
James A. Jerkins
4560844994 Fix recovery firmware build 2021-10-28 20:38:59 -05:00
Jean-François Milants
e051504dea Add doc : how to generate files needed by the factory. 2021-10-28 20:56:17 +02:00
Jean-François Milants
71ce13d309 Motion service : fix step notifications that were sent as a single byte instead of 4 (uint32_t). 2021-10-26 20:31:18 +02:00
Steveis
0fc081fe03
Correctly define DFU 2021-10-26 16:57:20 +01:00
Riku Isokoski
60a717b1a2 Make it so special actions can be input while sleeping, like in #480 2021-10-25 17:45:48 +03:00
Riku Isokoski
887c409b13 Only wake up on press. Fixes issue with longer press and sleep 2021-10-25 17:13:02 +03:00
Riku Isokoski
351c60a131 Return button action instead of pushing messages 2021-10-25 16:57:29 +03:00
Riku Isokoski
b19a2a760b Use enum classes, remove old comment 2021-10-25 13:40:43 +03:00
Riku Isokoski
d5dfa80876 Newer buttonhandler 2021-10-25 12:53:14 +03:00
JF
82ca526ec2
Merge pull request #754 from InfiniTimeOrg/add-motion-service
Add motion service
2021-10-24 20:06:52 +02:00
Kieran Cawthray
85d494a987 Revert "Update GetNext/GetPrevious"
This reverts commit 411c10ec317464a79c353dc5c18b805cf4bdf7d0.
2021-10-23 18:12:41 +02:00
Kieran Cawthray
da97a94a0f Merge remote-tracking branch 'upstream/develop' into pts-settings 2021-10-23 18:00:47 +02:00
JF
9538eb9716
Merge pull request #586 from hubmartin/wake-time
Improve wake-up time
2021-10-23 10:24:27 +02:00
JF
6c3f56bb59
Merge pull request #740 from Riksu9000/flashlight_brightness
Flashlight brightness control
2021-10-23 10:14:14 +02:00
JF
062007a8c0
Merge pull request #773 from Riksu9000/coding_style
Update coding style
2021-10-23 08:56:16 +02:00
Riku Isokoski
f56bd4ce9d Update coding style 2021-10-22 12:42:06 +03:00
JF
89a29e9a0d
Merge pull request #769 from xan-m/develop
Change iOS Companion App Name
2021-10-22 10:19:37 +02:00
JF
9363d4467f
Merge pull request #657 from NeroBurner/patch-1
Add python packages click and cryptography to build instructions
2021-10-22 10:02:56 +02:00
JF
3681d3bbfd
Merge pull request #766 from Riksu9000/develop
Fix issue templates
2021-10-22 09:50:59 +02:00
xan-m
19fdf90cf4
Merge pull request #1 from xan-m/ios-companion-app-edit
Changed name of iOS companion app
2021-10-21 10:32:19 -07:00
xan-m
dcd209a3d1
Changed name of iOS companion app
I had to remove iOS from the app name, so this update changes the name and link here to reflect that change
2021-10-21 10:15:21 -07:00
JF
17c5a03938
Merge pull request #751 from carlosperate/docker-docs
Docs: Clarify Docker image needs to be built 1st, fix URL and typos.
2021-10-20 21:35:28 +02:00
JF
d025fc7c2c
Merge pull request #753 from Arsen6331/improve-ble-docs
Improve BLE documentation
2021-10-20 21:22:50 +02:00
JF
c16f37198b
Merge pull request #767 from InfiniTimeOrg/Avamander-patch-2
Fixed the feature request template
2021-10-20 21:15:44 +02:00
JF
9b46354bef
Merge pull request #757 from stephanie-eng/patch-1
Fixed Apps tutorial to compile properly
2021-10-20 21:14:17 +02:00
JF
ca2c72af0c
Merge pull request #758 from NeroBurner/patch-2
CI: add pintime-recovery to build jobs
2021-10-20 21:08:43 +02:00
Jean-François Milants
b3a8228899 Add mention to Call characteristic (which was missing in the doc) and change the UUID of the new Motion service from 00020000-* to 00030000-*. 2021-10-20 20:52:04 +02:00
Kieran Cawthray
411c10ec31 Update GetNext/GetPrevious 2021-10-20 18:07:08 +02:00
Kieran Cawthray
3ed01b33e7 Improve random color selection, disable longpress when settings are visible 2021-10-20 17:44:10 +02:00
Avamander
76234de7d6
Fixed the feature request template 2021-10-20 16:41:48 +03:00
Kieran Cawthray
32978b6a06 Restore settings order 2021-10-20 15:36:28 +02:00
Riku Isokoski
e2d8397c08 Fix issue templates 2021-10-20 15:37:56 +03:00
Kieran Cawthray
37eed43b68 Merge branch 'pts-settings' of https://github.com/kieranc/InfiniTime into pts-settings 2021-10-20 11:30:42 +02:00
Kieran Cawthray
074d3420c8 Ensure needle color is visible on reset/randomize 2021-10-20 11:30:06 +02:00
Kieran Cawthray
f45e094adf Ensure needle color is visible one reset/randomize 2021-10-20 11:25:06 +02:00
Kieran Cawthray
994f373a14 Change gauge needle color when background is white 2021-10-19 00:22:45 +02:00
Kieran Cawthray
1c3372b319 Fix settings merge error 2021-10-18 23:29:41 +02:00
Kieran Cawthray
ff1fce18d6 Merge remote-tracking branch 'upstream/develop' into pts-settings 2021-10-18 23:14:39 +02:00
Kieran Cawthray
c4ab17f587 Disable DoubleTap when settings buttons are displayed 2021-10-18 23:04:12 +02:00
Kieran Cawthray
1c86796eac More duplicate color dodging 2021-10-18 22:52:53 +02:00
Stephanie
02d52d94d5 Added missing semicolon 2021-10-18 12:18:35 -04:00
NeroBurner
86bcea9e99
CI: add pintime-recovery to build jobs
The recovery image "it is the last chance before a brick",
as described in https://github.com/InfiniTimeOrg/InfiniTime/issues/742#issuecomment-943665960

So just build it to make sure it doesn't silently break, but don't upload it.
2021-10-18 08:08:43 +02:00
stephanie-eng
b0c4ade926
Fixed Apps tutorial to compile properly
Changed case in minimal example to properly reference Pinetime namespace
2021-10-18 00:35:47 -04:00
JF
ab7c6e162f
Merge pull request #752 from carlosperate/mcuboot-url
Update git URLS, MCUboot is now an independent organisation
2021-10-17 21:24:19 +02:00
Jean-François Milants
2c5015add7 Enable/disable notifications for motion service. 2021-10-17 08:42:49 +02:00
Jean-François Milants
31badd2eb3 Add doc about the new motion service. 2021-10-17 08:34:24 +02:00
Jean-François Milants
60a49af886 Add MotionService : expose step count and RAW X/Y/Z values to the host. 2021-10-17 08:23:44 +02:00
Jean-François Milants
d1f50157c7 MotionService : fix typo and characteristic array size + send notification only if the host subscribed to them. 2021-10-17 08:23:01 +02:00
Arsen Musayelyan
95618dd238 Fix error in music status docs 2021-10-16 21:01:12 -07:00
Arsen Musayelyan
75339323d2 Fix grammar mistakes 2021-10-16 20:52:25 -07:00
Arsen Musayelyan
2e7d4763dc Add docs from infinitime Go library's repo and fix typos and grammar 2021-10-16 20:45:08 -07:00
carlosperate
c4b8ff314a Update git URLS, MCUboot is now independent w/ different GitHub org. 2021-10-17 00:31:21 +01:00
carlosperate
ea1bc81925 Docs: Clarify Docker image needs to be built 1st, fix URL and typos. 2021-10-16 23:10:36 +01:00
JF
bf83493c8d
Merge pull request #746 from Quantum-cross/recovery-fix
fix building of Recovery image
2021-10-16 14:11:40 +02:00
JF
8165c8676c
Merge pull request #652 from dyamon/wake-on-notification
Make new notifications refresh idle timer
2021-10-16 14:11:06 +02:00
JF
77e73fea32
Merge pull request #507 from Riksu9000/fit_more_tasks
Fit more tasks in SystemInfo
2021-10-16 14:10:09 +02:00
JF
fafb998b8c
Merge pull request #655 from NeroBurner/paddle_hor_fix
Paddle: compare ballX coordinate with horizontal resolution
2021-10-16 14:09:05 +02:00
JF
c7abb3dd96
Merge pull request #747 from mabuch/rename-JF0002-InfiniTimeOrg
Replaced "JF002" in github URLs with "InfiniTimeOrg"
2021-10-16 14:07:51 +02:00
mabuch
1d76d9170e Replaced "JF002" in github URLs with "InfiniTimeOrg" 2021-10-15 18:03:10 +02:00
JF
69ef5bfc8d
Merge pull request #722 from clemensvonmolo/code-structure-doc
Add docs for app creation and code structure
2021-10-15 17:42:55 +02:00
Quantum-cross
4a59e544ba fix building of Recovery image. 2021-10-14 23:32:58 -04:00
Federico Igne
59ce48a3f3 Make new notifications refresh idle timer 2021-10-14 21:21:01 +01:00
Riku Isokoski
fd4fbfddb9 Flashlight brightness control 2021-10-13 13:04:40 +03:00
Reinhold Gschweicher
7cd4929bfd Paddle: compare ballX coordinate with horizontal resolution
Fix the comment as the comparison checks if the ball is at the right
side of the screen.

Compare the x coordinate of the ball with the horizontal resolution of
the screen, instead of the vertical resolution. On the PinePhone this
does make no difference as we have square 240x240 screen. Change it
anyways to be completely correct.
2021-10-11 21:46:19 +02:00
NeroBurner
55ff9b0c81 Add python packages click and cryptography to build instructions
The script `tools/mcuboot/imgtool/main.py` imports the python packages
`click` and `cryptography` to create the target `pinetime-mcuboot-app`.
Add it tothe build instructions, as it was not installed on my system.

6f9f0e8b0e/tools/mcuboot/imgtool/main.py (L19)
6f9f0e8b0e/tools/mcuboot/imgtool/keys/__init__.py (L19)

Also add the commands to install the python requirements into a python
venv virtual environment.
2021-10-11 21:46:06 +02:00
Jean-François Milants
91b2e50252 Merge branch 'Riksu9000-update_touch_driver' into develop 2021-10-10 16:49:10 +02:00
Jean-François Milants
6d0e68d626 Merge branch 'update_touch_driver' of git://github.com/Riksu9000/InfiniTime into Riksu9000-update_touch_driver
# Conflicts:
#	src/displayapp/Apps.h
2021-10-10 16:48:45 +02:00
Jean-François Milants
92aeae73de Merge branch 'timaios-set-datetime-manually' into develop 2021-10-10 16:23:35 +02:00
Jean-François Milants
f2357b36e5 Setting SetDate/SetTime : replace #defines by constexpr variables, NULL by nullptr and other small cleanings. 2021-10-10 16:18:14 +02:00
Jean-François Milants
7cbd56896a DateTimeController : remove unused methods and variables. 2021-10-10 16:08:19 +02:00
Jean-François Milants
cf9e149b33 Merge with develop and fix conflicts from timaios:set-datetime-manually. 2021-10-10 16:01:43 +02:00
Jean-François Milants
977faebcb8 Remove call to batteryController.Update(); which was replaced by batteryController.MeasureVoltage(). 2021-10-09 21:17:59 +02:00
JF
9a831a6fe4
Merge pull request #715 from hubmartin/gpiote-fix
Fix GPIOTE not calling ISR when button is held during boot
2021-10-09 20:36:49 +02:00
JF
b969272c90
Merge pull request #719 from Riksu9000/improve_battery_reporting
Improve battery percentage calculation and reporting
2021-10-09 20:11:31 +02:00
JF
c99feeea31
Merge pull request #728 from hubmartin/charge-wake
Add wake-up on charge event
2021-10-09 20:04:27 +02:00
JF
1d0943bb30
Merge pull request #729 from InfiniTimeOrg/Avamander-patch-1
Removed the title prefix from issue template
2021-10-09 20:00:52 +02:00
JF
5689898a5a
Merge pull request #730 from coxtor/patch-1
Add configuration instructions for Ubuntu devcontainers
2021-10-09 19:59:29 +02:00
JF
0ca018b309
Merge pull request #522 from jonvmey/fix-nav-uuid-docs
Fix Navigation Service UUID docs
2021-10-09 19:58:24 +02:00
JF
f99f71cc6e
Merge pull request #524 from jonvmey/ble-uuid-c-casts
Remove unnecessary C-style casts with BLE UUIDs
2021-10-09 19:53:41 +02:00
JF
4118f97812
Merge pull request #701 from maksalees/close-info-popup-with-back-button-in-alarm
Alarm: Close the popup with information about the time until alarm with the back button
2021-10-09 19:50:36 +02:00
Riku Isokoski
1777b9dee8 Don't measure and notify percentage on charging event. 2021-10-09 13:39:27 +03:00
coxtor
516f9de3e4
Add configuration instructions for Ubuntu devcontainers 2021-10-08 20:05:39 +02:00
Avamander
4f7c675ae3
Removed the title prefix 2021-10-08 18:38:45 +03:00
hubmartin
98e74a3217 Call also ReloadIdleTimer 2021-10-08 17:01:27 +02:00
hubmartin
fc2241fbf4 Add wake on charge event 2021-10-08 16:53:49 +02:00
Clemens von Molo
c3cc83ae17 More reasonable line lengths in Apps.md and Intro.md 2021-10-08 14:59:45 +02:00
Clemens von Molo
884c89c61c minor corrections and notice about ui guidelines in docs 2021-10-06 18:29:52 +02:00
Clemens von Molo
f1aae6af49 multiple improvements to code docs 2021-10-06 14:30:16 +02:00
Jean-François Milants
90fdea29b8 Fixed feature request template according to https://github.com/InfiniTimeOrg/InfiniTime/pull/705#issuecomment-933820293 2021-10-05 19:58:58 +02:00
Clemens von Molo
b2141a9050 advise against unecessary additional tasks in docs 2021-10-05 18:55:02 +02:00
Clemens von Molo
aa83fa2dcf Add docs for app creation and code structure 2021-10-05 15:19:44 +02:00
Riku Isokoski
f61e88b842 Merge branch 'develop' into update_touch_driver 2021-10-05 12:45:03 +03:00
JF
9e0a7ddf57
Merge pull request #705 from dyamon/issue-templates
Issue templates to tame the wilderness
2021-10-04 21:28:05 +02:00
Riku Isokoski
a9f7153fdf Improve battery percentage calculation and reporting
While charging, percentage should only go up, and while discharging,
percentage should only go down.
2021-10-04 01:41:38 +03:00
Kieran Cawthray
7d1da9f1f9 Remove old PineTimeStyle settings app 2021-10-03 21:49:57 +02:00
Kieran Cawthray
3320eae95c Initial commit 2021-10-03 21:49:57 +02:00
JF
392c7ad2ac
Merge pull request #714 from InfiniTimeOrg/Avamander-patch-1
Removed an unnecessary space and some punctuation
2021-10-03 20:33:56 +02:00
hubmartin
9ef1babb9d Code cleanup 2021-10-03 17:03:08 +02:00
hubmartin
f5725714d1 Call battery controller update 2021-10-03 17:00:38 +02:00
hubmartin
2aebbe3f47 GPIOTE fix of button and power detection experiment 2021-10-03 16:47:01 +02:00
Avamander
6475330048
Removed an unnecessary space and some punctuation
Closes https://github.com/InfiniTimeOrg/InfiniTime/pull/233
2021-10-03 17:26:04 +03:00
JF
b84a546920
Merge pull request #623 from Riksu9000/lvgl_queuetimeout
Let LVGL control queueTimeout
2021-10-03 16:20:20 +02:00
JF
fa6c291d3e
Merge pull request #638 from Riksu9000/detect_full_charge
Detect full charge and improve watchface battery display
2021-10-03 16:13:39 +02:00
JF
3442085a3c
Merge pull request #692 from danielgjackson/fix-fs-size
Fix the size of the filesystem.
2021-10-03 16:06:30 +02:00
JF
6cf5797049
Merge pull request #700 from Sematre/fix-dead-link
Fix dead link in README
2021-10-02 18:01:46 +02:00
JF
1159403aee
Merge pull request #711 from geekbozu/BatteryReadFix
Remove static declaration on batteryValue preventing read attribute from updating.
2021-10-02 18:00:21 +02:00
Tim Keller
dafdf33062 Remove static declartion on batteryValue preventing read attribute from updating. 2021-10-02 03:22:12 +00:00
Federico Igne
de89c86ca9 Add templates for bug reports and feature requests 2021-09-30 14:29:11 +01:00
Maxim Leshchenko
05f8850acf Fixes based on code reviews 2021-09-29 19:15:48 +03:00
Maxim Leshchenko
d86ae69961 Alarm: Close the popup with information about the time until alarm with the back button
Previously, pressing the back button would close the alarm app anyway. Now if you press on it and the popup with information is open, it will first close and the second press will close the application
2021-09-28 22:50:09 +03:00
Sematre
6aa945a4f5
Fix dead link in README 2021-09-28 21:36:24 +02:00
Jean-François Milants
e9bb0b3cdd Set version to 1.6.0 2021-09-28 20:21:50 +02:00
JF002
fc922b607c
Merge pull request #688 from danielgjackson/fix-advertising-18-hours
Fix advertising packets stopping after 18.2 hours
2021-09-28 20:15:39 +02:00
Daniel Jackson
7ba00b0157
Fix the size of the filesystem.
Correct typo: 0x400000 - 0x0B4000 = 0x34C000.
2021-09-27 02:42:53 +01:00
Jean-François Milants
d03db14129 Set version to 1.5.0 2021-09-26 10:57:02 +02:00
Daniel Jackson
d7ca217872
Correctly return the tick at which the RF will be fully enabled.
Always returning 0 (when `MYNEWT_VAL_BLE_LL_RFMGMT_ENABLE_TIME` is not defined), rather than a time near to the current tick, causes an issue in at least one place: `ble_ll_adv_sm_start()`, where the calculation of `delta` overflows when the system timer is at 0x80000000 or above -- causing an incorrect, huge adjustment to be made to the scheduled time, ultimately stopping adverts from being sent.
2021-09-25 23:48:53 +01:00
JF002
8a2b86dc83
Merge pull request #664 from Riksu9000/disable_notif_only
Toggle notifications only, keep vibrations.
2021-09-23 20:13:42 +02:00
Riku Isokoski
980ac17388 Show plug icon while plugged in 2021-09-22 13:58:45 +03:00
Riku Isokoski
b210090837 Merge branch 'develop' into detect_full_charge 2021-09-22 12:03:41 +03:00
Riku Isokoski
d7dfe5d4ed Remove unused variable 2021-09-21 15:36:31 +03:00
Jean-François Milants
1c3c3c8db9 Merge branch 'develop' of github.com:JF002/Pinetime into develop 2021-09-19 17:43:28 +02:00
Jean-François Milants
f3b5da0049 Fix the display of the date after a reset : when the date/time was restored from the noinit area, the date was displayed as "--" instead of the actual date.
This issue was caused by DateTime::SetCurrentTime() that would not update the internal state of the class : dayOfWeek, Month, Year were not properly updated according to the current time.
2021-09-19 17:42:50 +02:00
JF002
52eb94cfc4
Merge pull request #669 from NeroBurner/fix_unsigned_comparison_warning_metronome
Fix unsigned/signed comparison warning in Metronome.cpp
2021-09-18 20:33:45 +02:00
Riku Isokoski
e468acc99e
Merge branch 'develop' into update_touch_driver 2021-09-18 19:22:59 +03:00
Jean-François Milants
5855906e49 Merge branch 'geekbozu-PersistantStorage' into develop 2021-09-18 17:37:48 +02:00
Jean-François Milants
f556003de3 Merge branch 'PersistantStorage' of git://github.com/geekbozu/InfiniTime into geekbozu-PersistantStorage
# Conflicts:
#	src/systemtask/SystemTask.cpp
2021-09-18 17:37:37 +02:00
Jean-François Milants
7af7db74cd Fix DisplayAppRecovery : add AlarmController to ctor(). 2021-09-18 17:20:33 +02:00
JF002
9cd0def361
Merge pull request #662 from mruss77/basic-alarm-app
Basic alarm app
2021-09-18 17:16:19 +02:00
Mark Russell
b9e56843a2 resolve conflict in src/systemtask/Messages.h 2021-09-16 16:20:39 -04:00
Mark Russell
cdf99b08f4 Revert "Merge upstream"
This reverts commit 1d43adcdfa7bd15ba45c0c9d7c59c0ff99176b9c.
2021-09-16 16:12:20 -04:00
hubmartin
27366bdfdf Merge branch 'develop' into wake-time 2021-09-16 22:04:31 +02:00
Mark Russell
1d43adcdfa Merge upstream 2021-09-16 16:01:25 -04:00
Mark Russell
f857a757a7 Fixes per Riksu9000's feedback 2021-09-16 15:38:31 -04:00
Reinhold Gschweicher
63477fc096 Fix unsigned/signed comparison warning in Metronome.cpp
`xTaskGetTickCount()` returns a `TickType_t`, which is defined as an
`uint32_t`. This is compared to the `bpm` variable, which is a `int16_t`
in the range of 40 to 220 as defined in the constructor.

```cpp
  lv_arc_set_range(bpmArc, 40, 220);
```

Just assume that `bpm` is greater than 0, as this
would result in a divison by zero or negative values, which would
unintentionally underflow to a very large number.
2021-09-16 10:47:09 +02:00
Riku Isokoski
8f0771183c Fix Error screen and optimize GetTouchInfo 2021-09-15 12:25:41 +03:00
Riku Isokoski
93d240a23b
Merge branch 'develop' into disable_notif_only 2021-09-14 23:38:42 +03:00
JF002
3eb73774a3
Merge pull request #658 from NeroBurner/patch-2
Run CI on master and develop branch
2021-09-14 22:06:37 +02:00
JF002
d081c41ae7
Merge pull request #668 from NeroBurner/motorcontroller_remove_unused_include
Remove unused include in MotoController.h
2021-09-14 21:44:50 +02:00
Riku Isokoski
f221f5d744 Merge branch 'develop' into update_touch_driver 2021-09-14 15:34:09 +03:00
Reinhold Gschweicher
f89780f332 Remove unused include in MotoController.h
Remove the unused include `app_timer.h` in `MotorController.h`
2021-09-13 22:40:15 +02:00
Mark Russell
2bf339a3f8 License header fix, add missing braces 2021-09-13 16:05:35 -04:00
Mark Russell
bfe13d9d68 Fixes based on code reviews (formatting, UI code) 2021-09-13 15:26:28 -04:00
Jean-François Milants
6356c7f276 Fix DisplayAppRecovery : fix include error by forward declaring Controllers in header file. 2021-09-13 20:35:51 +02:00
Riku Isokoski
40765f1173
Merge branch 'develop' into disable_notif_only 2021-09-13 21:22:53 +03:00
Jean-François Milants
cf20b02c09 Merge branch 'evergreen22-refactor_adv' into develop 2021-09-13 20:22:44 +02:00
Jean-François Milants
9afa412a2a Merge branch 'refactor_adv' of https://github.com/evergreen22/InfiniTime into evergreen22-refactor_adv
# Conflicts:
#	src/components/ble/NimbleController.cpp
2021-09-13 20:22:27 +02:00
JF002
b0bdd2be1c
Merge pull request #549 from hubmartin/pinmap
Put all duplicated GPIO pin definitions to a single file
2021-09-13 20:05:43 +02:00
Tim Gates
84a93b5441
docs: Fix a few typos (#606)
* docs: Fix a few typos

There are small typos in:
- doc/versioning.md
- src/components/ble/NimbleController.cpp
- src/libs/mynewt-nimble/CODING_STANDARDS.md
- src/libs/mynewt-nimble/docs/btshell/btshell_GAP.rst
- src/systemtask/SystemTask.cpp

Fixes:
- Should read `milliseconds` rather than `miliseconds`.
- Should read `unnecessary` rather than `uncesseray`.
- Should read `target` rather than `tharget`.
- Should read `project` rather than `projct`.
- Should read `preferred` rather than `prefered`.
- Should read `functioning` rather than `functionning`.
- Should read `forever` rather than `forver`.
- Should read `existing` rather than `exisiting`.
2021-09-13 20:02:53 +02:00
hubmartin
e614af1c4a Add WATCH_COLMI_P8 option to cmake & docs 2021-09-13 11:41:51 +02:00
hubmartin
73d3e41cea Merge branch 'develop' into pinmap 2021-09-13 10:19:07 +02:00
JF002
c9aeef94ea
Merge pull request #617 from ColinKinloch/wake_up_mode_setting_change
Correct change test for wake up mode setting
2021-09-12 18:41:26 +02:00
JF002
8728ac2f6a
Merge pull request #602 from Riksu9000/del_unused
Remove unused variables
2021-09-12 18:34:11 +02:00
JF002
f0329298ac
Merge pull request #580 from Riksu9000/timer_battery_reading
Make battery reading periodic
2021-09-12 18:22:04 +02:00
JF002
977321cf64
Merge pull request #552 from Riksu9000/new_to_infinitime
Make README more friendly for new users.
2021-09-12 18:00:10 +02:00
JF002
1235c697c4
Merge pull request #551 from hubmartin/patch-3
Add FW validation note after DFU flash
2021-09-12 17:58:11 +02:00
JF002
53d641736f
Merge pull request #550 from hubmartin/patch-2
Add link to WebBLEWatch to sync time
2021-09-12 17:57:36 +02:00
Riku Isokoski
3ee4876214 Toggle notifications only, keep vibrations. 2021-09-12 11:08:25 +03:00
JF002
cdf5801efe
Merge pull request #615 from Utopiah/patch-1
Infini-iOS
2021-09-11 21:13:01 +02:00
JF002
2c83c354cf
Merge pull request #636 from Itai-Nelken/move-about-firmware-settings-down
Move PineTimeStyle settings up
2021-09-11 21:11:30 +02:00
Mark Russell
1fb5757655 Created basic alarm app 2021-09-10 18:40:13 -04:00
NeroBurner
3cc00771fa
Run CI on master and develop branch
The documentation https://github.com/JF002/InfiniTime/blob/develop/doc/contribute.md#how-to-submit-a-pull-request-
tells us to make pull requests against `develop` branch.
Update the CI to run on those pull requests to have a check if the PR breaks something unintentionally.
2021-09-10 23:42:49 +02:00
James A. Jerkins
22571d4b38 Advertise fast for at least 30 secs then slow down
On power up, advertise aggressively for at least 30 seconds then switch
to a longer interval to conserve battery life. This fast/slow pattern
is designed to balance connection response time and battery life.

When a disconnect event is received restart the fast/slow pattern.

When a failed connect event is received, restart the fast/slow pattern.

When the screen is activated and ble is not connected, restart the fast/slow pattern.

This pattern is consistent with Apple's BLE developer standards (QA 1931).
2021-09-05 15:53:20 -05:00
James A. Jerkins
4820b2ffe8 Revert "Linear decrease of advert rate to conserve battery"
This reverts commit c32ba844e04017a3fd31444c384deb3542bd76be.
2021-09-05 15:52:01 -05:00
James A. Jerkins
c32ba844e0 Linear decrease of advert rate to conserve battery
Start advertising aggressively when powered on then
slow down linearly over 75 seconds. This will conserve
battery by not advertising rapidly the whole time we
are seeking a connection. The slowest rate is
approximately once every 4.5 seconds to balance
responsiveness and battery life.

We use a fixed advertising duration of 5 seconds and start
with a 62.5 ms advertising interval. Every 5 seconds
(the advertising duration) we step up to a larger
advertising interval (slower advertising). We continue
to increase the advertising interval linearly for
75 seconds from the start of advertising. At 75 seconds
we have an advertising interval of 4.44 seconds which we
keep until connected. A reboot will restart the sequence.

When we receive a disconnect event we restart the sequence
with fast advertising and then slow down as described above.
Note that we are not using the BLE high duty cycle setting to
change the advertising rate. The rate is managed by repeatedly
setting the minimum and maximum intervals.

The linear rate of decrease and the slowest interval size
were determined experimentally by the author. The 5.3 Core
spec suggests that you not advertise slower than once
every 1.2 seconds to preserve responsiveness but we
ignored that suggestion.
2021-09-04 15:57:07 -05:00
Riku Isokoski
b31b2425f8 Use percentage instead of IsFull 2021-09-03 16:57:00 +03:00
Riku Isokoski
ac2ccaeff6 Auto realign battery icon in Analog watch face 2021-09-03 14:57:07 +03:00
Riku Isokoski
fd52ca8fe6 Detect full charge and improve watchface display 2021-09-03 14:35:38 +03:00
Tim Keller
28fdc376b2 Add some comments 2021-09-02 23:01:12 +00:00
Itai Nelken
bd1a571399
Update Settings.cpp 2021-09-02 23:20:25 +03:00
Jean-François Milants
6f9f0e8b0e Set version to 1.4.0. 2021-09-02 20:32:50 +02:00
James A. Jerkins
3e1fe687b8 Fix styles issues - no change to functionality 2021-09-01 22:50:56 -05:00
James A. Jerkins
d69a8e84fa Fix race condition, connect->disconnect->discovery 2021-09-01 22:48:01 -05:00
JF002
f6248a88ba
Merge pull request #579 from mabuch/fix-github-build
fix Github Action build Firmware
2021-09-01 20:53:28 +02:00
Jean-François Milants
1635bfafb3 Fix notifications that wouldn't auto close when the timeout elapsed (in preview mode). 2021-08-31 21:56:21 +02:00
James A. Jerkins
00a3f84ea7 Completely reset connection state on fail 2021-08-30 23:17:16 -05:00
Riku Isokoski
21d37d1e23 Merge remote-tracking branch 'upstream/develop' into timer_battery_reading 2021-08-30 10:15:19 +03:00
James A. Jerkins
be31f417db WIP Refactor ble advertising
Refactor ble advertising based on ble standards and conventions.
Changes are based on the bleprph example code, bluetooth docs, and nimble docs.
2021-08-29 15:50:04 -05:00
hubmartin
8390d0ef72 Merge branch 'develop' into pinmap 2021-08-29 11:43:50 +02:00
Riku Isokoski
e57ff28231 Let lvgl control queueTimeout 2021-08-29 12:40:48 +03:00
Jean-François Milants
6c023785e5 Fix wake on tap/double tap. 2021-08-28 21:30:31 +02:00
Jean-François Milants
31bc47d1cb Settings : use enums instead of ints to store colors. Group all PTS settings into a struct.
PTS/SettingsPTS : Convert to/from LVGL color and Settings::Color, add functions to reduce code duplication.
Adapt SettingPineTimeStyle with the last Screen Interface
2021-08-28 21:02:11 +02:00
JF002
ef9f809e14
Merge pull request #458 from kieranc/pinetimestyle-colorpicker
Add color picker for PineTimeStyle watchface
2021-08-28 20:56:34 +02:00
JF002
2870d3ae6c
Merge pull request #497 from Riksu9000/refresh_rework
Rework Refresh
2021-08-28 16:39:48 +02:00
Riku Isokoski
c2fae47391 Merge branch 'develop' into refresh_rework 2021-08-28 17:25:50 +03:00
Riku Isokoski
d2d97319e0 Merge branch 'develop' into update_touch_driver 2021-08-28 17:19:49 +03:00
Riku Isokoski
c78177eedf Merge branch 'develop' into fit_more_tasks 2021-08-28 17:10:01 +03:00
Riku Isokoski
085c9ab2e1 Merge branch 'develop' into timer_battery_reading 2021-08-28 16:54:40 +03:00
Jean-François Milants
fab49f8557 Fix recovery firmware since last changes in DisplayApp. 2021-08-28 15:23:13 +02:00
Jean-François Milants
0313277ae6 Fix touchinfo typo in SystemTask. 2021-08-28 15:10:14 +02:00
Jean-François Milants
f895da8634 Merge branch 'Riksu9000-twimaster_rework' into develop 2021-08-28 15:09:16 +02:00
Jean-François Milants
45e7638fc2 Merge branch 'twimaster_rework' of https://github.com/Riksu9000/InfiniTime into Riksu9000-twimaster_rework
# Conflicts:
#	src/systemtask/SystemTask.cpp
2021-08-28 15:08:50 +02:00
JF002
969de9a8bc
Merge pull request #492 from Riksu9000/new_touch_handler
New touch handler
2021-08-28 15:06:03 +02:00
Colin Kinloch
b45d7c372d Correct change test for wake up mode setting 2021-08-26 19:42:02 +01:00
Fabien Benetou
d7293a44df
Infini-iOS 2021-08-26 15:11:20 +02:00
Tim Keller
110c82c225 Move noinit to after BSS segment,
Now dynamically allocates noinit area size
stores it after the bss before the heap and stack.
2021-08-23 20:13:26 +00:00
hubmartin
db50131ed4 Remove commented commands completely 2021-08-23 15:02:40 +02:00
hubmartin
d832a6c908 Merge branch 'develop' into wake-time 2021-08-23 15:00:56 +02:00
hubmartin
51c5257548 Update startup SCL toggling pinmap definitions 2021-08-22 22:17:57 +02:00
hubmartin
2a299fe275 Merge branch 'develop' into pinmap 2021-08-22 22:11:57 +02:00
Kieran Cawthray
8ac1ae70cc Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-08-19 15:14:04 +02:00
Riku Isokoski
2b30ff4fc6 Remove unused variables 2021-08-19 11:12:34 +03:00
Tim Keller
c9dedfd402 Add some VSCODE stuff to gitignore...
Allow settings to stop naggin me that it has added assosiation types
2021-08-19 00:51:42 +00:00
Tim Keller
4f6d7e2c63 Move Backup to the system task. 2021-08-19 00:51:12 +00:00
Tim Keller
2dd7b8ba2c Add clearing of noinit segment on bad word
Code readability cleanup
2021-08-19 00:44:22 +00:00
Tim Keller
16502b788f Add MCUBOOT linker changes
use better linker constant names
2021-08-19 00:14:42 +00:00
Riku Isokoski
85c99797da Merge branch 'develop' into new_touch_handler 2021-08-18 22:07:02 +03:00
Riku Isokoski
40392d7b91 Use highest frequency and move mutex creation to Init 2021-08-18 21:40:27 +03:00
hubmartin
df8ea7fe52 Add memory print usage 2021-08-18 20:21:10 +02:00
Riku Isokoski
b91100573e Fix music app buttons 2021-08-18 20:19:02 +02:00
Riku Isokoski
780a811f05 Automatic error detection 2021-08-18 15:23:30 +03:00
Tim Keller
55f8908769 Make Clock Persistant. 2021-08-17 23:53:57 +00:00
Riku Isokoski
9c175e2f0c Fix after merge 2021-08-17 16:01:18 +03:00
Riku Isokoski
5b969ccfa9 Merge branch 'develop' into update_touch_driver 2021-08-17 15:35:29 +03:00
Riku Isokoski
81a36dc31e Simplify parameters and cleanup 2021-08-16 18:26:10 +03:00
Kieran Cawthray
30b32e4c8a Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-08-15 17:50:56 +02:00
hubmartin
099364e619 Remove LCD reset and more cmds, save over 200ms 2021-08-15 16:48:41 +02:00
hubmartin
faed0d4900 Remove unnecessary pin_set, save 50ms 2021-08-15 16:47:41 +02:00
Kieran Cawthray
9851ed33d8 Fix potential edge case of sidebar being set black 2021-08-15 15:28:40 +02:00
Kieran Cawthray
639fd3a9bd More tidying following review 2021-08-15 15:00:54 +02:00
Kieran Cawthray
5789f1527c Avoid setting the sidebar black 2021-08-15 14:42:30 +02:00
Kieran Cawthray
16ea069d55 Remove duplicate code, minor fixes 2021-08-15 14:05:21 +02:00
Riku Isokoski
3cef05b745 Merge branch 'develop' into refresh_rework 2021-08-15 13:35:15 +03:00
Kieran Cawthray
c0bb88799c Add check for randomise button in case colors clash 2021-08-15 12:33:32 +02:00
Riku Isokoski
ee44b6ff49 Adjust inner padding in applist 2021-08-15 11:19:47 +02:00
Riku Isokoski
bc82905371 Clean up using variables 2021-08-15 11:19:47 +02:00
Riku Isokoski
637ed8033b Adjust previously missed scrollbar and firmware validation buttons 2021-08-15 11:19:47 +02:00
Riku Isokoski
fc6458a35c Add image with example layouts 2021-08-15 11:19:47 +02:00
Riku Isokoski
e0d01411d7 Ui update 2021-08-15 11:19:47 +02:00
Kieran Cawthray
477ff32edc Add randomise button to color picker 2021-08-15 10:41:00 +02:00
Riku Isokoski
044036e884 Merge branch 'develop' into timer_battery_reading 2021-08-14 23:02:23 +03:00
Jean-François Milants
df8d396472 Merge branch 'Riksu9000-call-improvements' into develop 2021-08-14 21:54:15 +02:00
Jean-François Milants
0eeed5ac33 Merge branch 'call-improvements' of https://github.com/Riksu9000/InfiniTime into Riksu9000-call-improvements
# Conflicts:
#	src/displayapp/screens/Metronome.cpp
2021-08-14 21:54:00 +02:00
Riku Isokoski
c3d8ee14fe Merge branch 'develop' into refresh_rework 2021-08-14 22:53:35 +03:00
Martin Hub
dec4bab334
Add VSCode ST-link debug config (#567) 2021-08-14 21:24:26 +02:00
Riku Isokoski
6192775161 Improve metronome 2021-08-14 21:08:42 +02:00
Riku Isokoski
7c28de0b6f Set pin before loop 2021-08-14 21:00:33 +02:00
Riku Isokoski
10f610b219 Better pin configuration 2021-08-14 21:00:33 +02:00
Riku Isokoski
e51c3eee4e Try to fix bootloop 2021-08-14 21:00:33 +02:00
Riku Isokoski
f0e9d13329
Update contribute.md (#475)
* Update contribute.md
* Add newlines and remove spaces
* Replace CONTRIBUTING.md with doc/contribute.md
2021-08-14 20:58:38 +02:00
mabuch
40afae3833
Github Action - update mcuboot version 2021-08-14 20:46:29 +02:00
Riku Isokoski
23bde0d18e Make battery reading periodic. Add events. Disable pullup 2021-08-14 21:18:11 +03:00
mabuch
fbb4e8c6ae
fix Github Action build Firmware 2021-08-14 14:47:00 +02:00
Kieran Cawthray
6bffc7d528 Tidying 2021-08-12 21:28:41 +02:00
Kieran Cawthray
52ee25e551 Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-08-12 21:26:51 +02:00
Riku Isokoski
1d341a7aeb Don't reconfigure pins 2021-08-12 14:06:58 +03:00
hubmartin
0d083a2bea Merge branch 'develop' into pinmap 2021-08-11 22:00:55 +02:00
Riku Isokoski
fe33c756b7 Fix longpress gesture 2021-08-11 18:31:40 +03:00
Riku Isokoski
cd7ca458fa Remove leftover 2021-08-10 22:37:41 +03:00
Riku Isokoski
6776776421 Make diff smaller and revert some changes in DisplayApp 2021-08-10 22:18:21 +03:00
Riku Isokoski
8a694adb09 Rework TouchHandler into not a task 2021-08-10 22:03:34 +03:00
Riku Isokoski
7e92577c14 Revert "Merge branch 'unblock_i2c' into develop"
This reverts commit 275a84b3238874d213271f4287e6c1c5bfcb4353, reversing
changes made to 9fb37550886f09f6510e99a5b452262c53c3987c.
2021-08-10 21:02:51 +03:00
Riku Isokoski
f1346f098e Merge branch 'develop' into new_touch_handler 2021-08-10 20:58:42 +03:00
JF002
643077341b
Merge pull request #505 from geekbozu/devcon
VSCode Devcontainer
2021-08-10 16:54:13 +02:00
Riku Isokoski
275a84b323 Merge branch 'unblock_i2c' into develop 2021-08-10 14:15:42 +03:00
Riku Isokoski
d307c6bd9e Merge branch 'develop' into refresh_rework 2021-08-10 14:13:58 +03:00
JF002
9fb3755088
Merge pull request #483 from Riksu9000/fix_adc
Fix misconfigured ADC and remove now unnecessary filtering
2021-08-10 12:32:09 +02:00
Jean-François Milants
707446ed52 Merge branch 'hassless-improve-battery-percentage-to-battery-icon-mapping' into develop 2021-08-10 12:31:03 +02:00
Jean-François Milants
81a143173f Merge branch 'improve-battery-percentage-to-battery-icon-mapping' of https://github.com/hassless/InfiniTime into hassless-improve-battery-percentage-to-battery-icon-mapping
# Conflicts:
#	src/displayapp/screens/BatteryIcon.cpp
2021-08-10 12:30:42 +02:00
Jean-François Milants
c086520c97 Code cleaning in Clock, WatchFaceAnalog, WatchFaceDigital and PineTimeStyle, inspired by PR #232 by nscooling. 2021-08-10 11:39:25 +02:00
Riku Isokoski
90ea1071d1 Explicitly disable pullup 2021-08-10 11:52:20 +03:00
Riku Isokoski
2194a339cf Only enable the bus when needed 2021-08-10 11:26:43 +03:00
Riku Isokoski
5eb56d9a06 Set pin before loop 2021-08-09 22:11:35 +03:00
Riku Isokoski
ff81a72533 Better pin configuration 2021-08-09 22:07:06 +03:00
Riku Isokoski
d35a54c060 Try to fix bootloop 2021-08-09 21:49:35 +03:00
Riku Isokoski
baa7e1bf12 Optimize twiMaster 2021-08-09 17:45:24 +03:00
Tim Keller
44889adda0 Setup plugins for Clang-tidy/format 2021-08-09 00:16:17 +00:00
Tim Keller
d2dc719b31 Fix intellisense 2021-08-08 22:51:31 +00:00
Tim
3e9c30a18f
Merge branch 'JF002:develop' into set-datetime-manually 2021-08-08 14:37:48 +02:00
Tim Keller
7f2ee62aed Typos for days 2021-08-07 18:19:11 +00:00
Tim Keller
e9248b225e Updated documentation 2021-08-07 18:19:11 +00:00
Tim Keller
f7643a4d82 Added cmake variants 2021-08-07 18:19:11 +00:00
Niall Cooling
c0b84537b3 added extra .sh build files 2021-08-07 17:18:18 +00:00
Niall Cooling
c50f2b70c2 added clang-tidy/format to container 2021-08-07 17:17:38 +00:00
Niall Cooling
937d3e1933 added dos2unix to docker for Win10 and default to release build 2021-08-07 17:17:38 +00:00
Niall Cooling
382db668ed macOS and Win10 dockerfile 2021-08-07 17:17:38 +00:00
AzureAD\NiallCooling
273a94f298 removed dependency on build.sh 2021-08-07 17:17:38 +00:00
Niall Cooling
65423b3c94 added devcontainer files 2021-08-07 17:17:38 +00:00
hubmartin
abd8f343e4 Rename backlight level pins 2021-08-04 14:43:04 +02:00
hubmartin
b3e6da7514 Cleanup, set Pinetime as default 2021-08-03 20:40:27 +02:00
hubmartin
b7aa04e1f5 PinMap with namespace and constexpr 2021-08-03 20:32:23 +02:00
Riku Isokoski
285ac9e4c8 Move getting started slightly lower 2021-08-03 19:51:58 +03:00
Riku Isokoski
c30e54c7b7 Make it easier for new people to find instructions 2021-08-03 19:49:54 +03:00
Martin Hub
2992f4afd2
Add FW validation note after DFU flash 2021-08-03 17:56:02 +02:00
Martin Hub
f244c960d3
Update ota-gadgetbridge-nrfconnect.md 2021-08-03 17:41:34 +02:00
Riku Isokoski
10b5d30ec3 Merge branch 'develop' into refresh_rework 2021-08-03 12:16:40 +03:00
hubmartin
28abeae21b DRAFT: Put gpio pins to separate file 2021-08-02 21:37:48 +02:00
Riku Isokoski
f9319dfb91 Remove leftover 2021-08-01 21:19:33 +03:00
Riku Isokoski
09aaa58710 Remove floating point calculation 2021-08-01 16:19:09 +03:00
Riku Isokoski
a618f43b4d Fixes 2021-08-01 14:13:32 +03:00
Riku Isokoski
e6dcb3009f Improvements 2021-08-01 13:05:48 +03:00
Riku Isokoski
5bdef365f2 Merge branch 'develop' into HEAD 2021-08-01 11:47:26 +03:00
Kieran Cawthray
12aeb46889 Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-07-28 16:07:43 +02:00
Riku Isokoski
79ee65bfd5 Increase ADC precision 2021-07-27 22:41:48 +03:00
Riku Isokoski
a0a05553cf Merge branch 'develop' into fix_adc 2021-07-27 21:57:21 +03:00
Kieran Cawthray
e6bc485679 Increment settings value, remove old hacky fix 2021-07-25 22:18:39 +02:00
Jean-François Milants
514481ef7f Tile event handler : read the event data only if the event is a "value changed event". LVGL sends many other event and some of them do not set the event data (global static variable) to a valid address, which may cause an invalid read. I noticed that when porting this class on RISC-V platform (BL602). 2021-07-25 19:55:21 +02:00
Riku Isokoski
a1ba187c47 Merge branch 'develop' into new_touch_handler 2021-07-25 20:01:09 +03:00
Riku Isokoski
2e8bc634dc Merge branch 'develop' into fit_more_tasks 2021-07-25 19:30:27 +03:00
Jonathan Vander Mey
7b75ca591d Fix compile warnings 2021-07-25 18:01:13 +02:00
Riku Isokoski
574434550a Fix slow scroll 2021-07-25 17:59:58 +02:00
Grant
6222b7c223
Correct spelling issue in documentation (#509)
* Correct spelling issue
2021-07-25 17:58:55 +02:00
Riku Isokoski
1ae22f45f9 Fix cases where Get() isn't used 2021-07-25 17:56:07 +02:00
Riku Isokoski
f2f22184b0 Add new unique icons for some apps 2021-07-25 17:55:08 +02:00
Riku Isokoski
a69be1520a Add task state info to SystemInfo 2021-07-25 17:52:19 +02:00
Riku Isokoski
7a6ceadb24
Update documentation (#467)
* Fix and update documentation
* Add newlines
2021-07-25 17:50:55 +02:00
Riku Isokoski
ec2469a6c1
Code cleanup (#466)
* Code cleanup
* Remove override again
2021-07-25 16:54:05 +02:00
Riku Isokoski
34949a47c5
Dim screen before sleep (#464)
* Implement dimming
2021-07-24 20:29:10 +02:00
Jean-François Milants
ce26ef8a67 Add PineTimeStyle in the list of watchface in README.md 2021-07-24 20:23:44 +02:00
Riku Isokoski
e4d9636e82 Merge branch 'develop' into new_touch_handler 2021-07-24 20:26:10 +03:00
Jonathan Vander Mey
7cc73b7832 Move callback function into anonymous namespace 2021-07-24 13:02:43 -04:00
Jean-François Milants
a25ce5d8fc Merge branch 'develop' of github.com:JF002/Pinetime into develop 2021-07-24 18:47:54 +02:00
Jean-François Milants
057de4e6b5 Merge branch 'Riksu9000-fix_touchevent_tap' into develop 2021-07-24 18:47:06 +02:00
Jean-François Milants
926553d043 Merge branch 'fix_touchevent_tap' of git://github.com/Riksu9000/InfiniTime into Riksu9000-fix_touchevent_tap
# Conflicts:
#	src/displayapp/DisplayApp.cpp
2021-07-24 18:46:52 +02:00
Jonathan Vander Mey
487ae478ad Remove unnecessary C-style casts with BLE UUIDs
Instead of casting the UUID object to the ble_uuid_t* used throughout
the NimBLE API just pass the address of the ble_uuid_t member that's at
the start of each of the UUID structs.
2021-07-24 11:40:06 -04:00
Jonathan Vander Mey
1bdaf581a3 Update nav service UUID macro to constexpr functions 2021-07-24 11:18:17 -04:00
Jonathan Vander Mey
6b95fd841f Set navigation service id is base UUID macro
Avoids the need to copy the same ID into every characteristic UUID
genereated from it.
2021-07-24 11:09:56 -04:00
Jonathan Vander Mey
54ccd2cc07 Update Navigation UUID documentation
Fixed mismatch between the service and characteristic IDs in the
navigation service comments and documentation. They had old values not
reflecting the current code and changes in doc/ble.md
2021-07-24 11:07:06 -04:00
Avamander
1ba99d2427 Made the pre-commit hook fail explicitly when the executable doesn't exist 2021-07-24 15:55:52 +02:00
Avamander
10ef3a749e Added autodetection for clang-format version 2021-07-24 15:55:52 +02:00
Avamander
a1a6eae43f Added a pre-commit hook that should simplify commiting pre-formatted code 2021-07-24 15:55:52 +02:00
Alexandros Feuerstein
bb26c68f2c
minor changes regarding building (#356)
* don't enforce any flashing through debug ports
2021-07-24 15:39:24 +02:00
Kieran Cawthray
b3e3d75d0f Add extra screen in settings to show scrollbar correctly 2021-07-24 14:25:27 +02:00
Riku Isokoski
fc93bdbbba Merge branch 'develop' into refresh_rework 2021-07-23 22:56:00 +03:00
Riku Isokoski
d666c5004f
Merge branch 'develop' into new_touch_handler 2021-07-23 22:52:08 +03:00
Kieran Cawthray
547b5a8699 Restore .gitignore 2021-07-23 15:06:08 +02:00
Kieran Cawthray
1ddb1f0832 Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-07-23 15:03:28 +02:00
Jean-François Milants
d6cccc2dcd Set version to 1.3.0 2021-07-23 11:46:37 +02:00
Riku Isokoski
0a0f28fff4
Make firmware updating more foolproof (#469)
* Make firmware updating more foolproof and fix bugs
* No need to manually handle overflow
* Make startTime TickType_t
* Don't process TouchEvents::None
* Fix sleep getting re-enabled issue more directly
2021-07-22 21:57:45 +02:00
Kieran Cawthray
5e4d3c87e9 Remove .gitignore 2021-07-22 15:37:34 +02:00
Riku Isokoski
12b14176ec Fix 2021-07-21 14:46:27 +03:00
Riku Isokoski
93893511f1 Fit more tasks in SystemInfo 2021-07-21 14:41:29 +03:00
Kieran Cawthray
db784fc2fb Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-07-20 15:30:07 +02:00
Riku Isokoski
331fc2be69 Set remaining default periods to LV_DISP_DEF_REFR_PERIOD 2021-07-19 17:06:20 +03:00
Riku Isokoski
97c761a5c7 Refresh rework 2021-07-19 16:26:12 +03:00
Riku Isokoski
dc2b5f0c6b Restore Tile.cpp changes 2021-07-19 10:21:42 +03:00
Riku Isokoski
3e42297bd8 Update 2021-07-18 12:32:46 +03:00
Riku Isokoski
329482f873 Fix remaining known issues 2021-07-16 11:55:29 +03:00
Riku Isokoski
baffa1594f Fix gestures 2021-07-16 02:17:17 +03:00
Riku Isokoski
93ccbf38e8 Fix touch wakeup and code cleanup 2021-07-16 01:49:20 +03:00
Riku Isokoski
2a3e126390 Fix most issues 2021-07-16 00:07:55 +03:00
Riku Isokoski
0d24d2b81e Quick fix 2021-07-15 23:18:05 +03:00
Riku Isokoski
fe64176e7b New touch handler, with issues 2021-07-15 14:11:27 +03:00
Riku Isokoski
7ac6bdfe71 Merge branch 'develop' into update_touch_driver 2021-07-15 01:03:44 +03:00
Kozova1
57b3397078
Multiple wakeup sources (#290)
* Allow multiple wakeup modes at the same time.

This commit adds multiple wakeup modes support.
It does so by storing them as a uint8_t bitfield enum.
It changes the following functions:

Since multiple modes can be on now, older version would not cut it:
WakeUpMode getWakeupMode() -> std::bitset<3> getWakeUpModes()
Where each bit corresponds to a WakeUpMode

We still need a way to check whether a specific wakeup mode is on, so:
bool isWakeUpModeOn(const WakeUpMode mode)

This function was changed to work correctly with the new implementation.
setWakeUpMode(WakeupMode mode, bool enable)

Previously, systemtask would exit SystemTask::OnTouchEvent() if the wake
up mode was None or RaiseWrist, to prevent waking up when a touch was
received. However, after enabling using multiple WakeUpModes, this
caused a bug where when RaiseWrist was checked with SingleTap or
DoubleTap, the tap detection wouldn't work.

This commit fixes that bug.

Next commit will update the settings WakeUpMode select UI to reflect these changes.

Signed-off-by: Kozova1 <mug66kk@gmail.com>

* Updated UI to reflect multiple WakeUp sources being available.

Signed-off-by: Kozova1 <mug66kk@gmail.com>
2021-07-14 20:51:51 +02:00
Riku Isokoski
7133287b76
Set correct refresh times for lvgl (#488) 2021-07-14 20:35:21 +02:00
Riku Isokoski
5bc40c9287 Update touchpad driver 2021-07-14 17:11:16 +03:00
Riku Isokoski
95b8a56dd4 Merge branch 'develop' into fix_touchevent_tap 2021-07-14 09:59:56 +03:00
Riku Isokoski
b5eabf6604 Merge branch 'develop' into fix_adc 2021-07-13 22:11:46 +03:00
Jean-François Milants
a07b6382ae Merge branch 'develop' of github.com:JF002/Pinetime into develop 2021-07-13 20:54:49 +02:00
Jean-François Milants
d15509f14e Merge branch 'Riksu9000-lvgl_use_system_tick' into develop 2021-07-13 20:54:01 +02:00
Jean-François Milants
e2efb193c4 Merge branch 'lvgl_use_system_tick' of https://github.com/Riksu9000/InfiniTime into Riksu9000-lvgl_use_system_tick
# Conflicts:
#	src/displayapp/screens/BatteryInfo.cpp
#	src/displayapp/screens/BatteryInfo.h
2021-07-13 20:53:40 +02:00
Riku Isokoski
a5616b0bc8
Adjust displayapp delay to compensate time spent (#482) 2021-07-13 20:42:59 +02:00
Jean-François Milants
af10747c94 Merge branch 'notify-battery-level' into develop 2021-07-13 20:31:44 +02:00
Jean-François Milants
3e70554844 Merge branch 'develop' into notify-battery-level
# Conflicts:
#	src/displayapp/screens/BatteryInfo.cpp
2021-07-13 20:31:26 +02:00
Riku Isokoski
7efe2b7c51 Fix misconfigured ADC and remove now unnecessary filtering 2021-07-12 23:07:05 +03:00
Kieran Cawthray
5c183bef85 Merge branch 'pinetimestyle-colorpicker' of github.com:kieranc/InfiniTime into pinetimestyle-colorpicker 2021-07-12 13:01:48 +02:00
Kieran Cawthray
db99ac88d9 Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-07-12 13:01:11 +02:00
Jonathan Vander Mey
4f378e8726
Refactor trig functions into LUT (#476)
Replaced the use of the standard library trig functions with a LUT-based
implementation instead. The standard library implementations produce
more accurate results but the usage here doesn't need that. This ends up
saving nearly 7kB of binary size.
2021-07-11 20:18:07 +02:00
wilsonjwco
7fee2c2589
Update buildAndProgram.md (#477)
Corrected typo in example usage of cmake BUILD_DFU option. Changed from -BUILD_DFU=1 to -DBUILD_DFU=1
2021-07-11 19:47:24 +02:00
Cameron Radmore
829b16a303
Add "metronome" to apps in readme (#479) 2021-07-11 19:46:15 +02:00
kieranc
748e31421d
Modify status text in BatteryInfo so it fits on screen (#437)
* Modify status text in BatteryInfo so it fits on screen
2021-07-11 17:48:16 +02:00
Jean-François Milants
e21f6a7f41 Notify battery level every 10 minutes when connected to a BLE host.
Refactor battery percent : only use uint8_t to store the battery % remaining.
2021-07-11 16:55:06 +02:00
Kieran Cawthray
f970dc9993 Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-07-11 16:04:50 +02:00
kieranc
6a91b83b12
Change step gauge range to 100 and calculate progress as percantage (#468) 2021-07-11 15:08:23 +02:00
joaquim.org
084123b752
Using littlefs (#438)
* add submodule littlefs
* base fs
* Save settings using littlefs
* Small fixes and suggestions from PR
* More small fixes from PR suggestions
* Code clean up
* Change SpiNorFlash functions to be private in FS
2021-07-11 15:06:06 +02:00
Tim Taenny
ffa51612fc Code optimizations in SettingSetDate and SettingSetTime
Instead of calling lv_obj_align after each button click, the
labels have their auto_realign property set.
2021-07-09 20:35:48 +02:00
Tim Taenny
da36d4a5a1 Code optimizations in SettingSetTime
The positions of the labels are controlled by #define's, just
like in SettingSetDate.
2021-07-09 20:17:47 +02:00
Tim Taenny
0842a13339 Modified Settings menu as per suggestion
Moved "Set date" and "Set time" to the second page of the
Settings menu.
2021-07-09 17:49:35 +02:00
Tim Taenny
3e5ad49e3a Code optimizations in SettingSetDate
Using static method of DateTimeController for retrieving month
texts instead of implementing it in SettingSetDate again.
2021-07-09 17:46:17 +02:00
Tim Taenny
899bee2cf5 Exposed Month and DayOfWeek texts in DateTimeController
Added static methods to return the text of a given month
or dayOfWeek.
2021-07-09 17:32:48 +02:00
Tim Taenny
06dfe14251 Code optimizations in SettingSetTime 2021-07-09 17:13:29 +02:00
Tim Taenny
f78c9bfcab Code optimizations in SettingSetDate 2021-07-09 16:57:59 +02:00
timaios
5ae4192d8d
Added new menu entries to Settings page 2021-07-09 14:22:45 +02:00
timaios
f3f5eb5739
Added new screens to DisplayApp.cpp 2021-07-09 14:19:38 +02:00
timaios
6b3be0f5a1
Added new screens to the list of applications 2021-07-09 14:15:50 +02:00
timaios
07b3a507b4
Include new screens in CMakeLists.txt 2021-07-09 14:14:17 +02:00
timaios
c396925766
Added new screen: SettingSetDate 2021-07-09 14:12:26 +02:00
timaios
c77634ce32
Added new screen: SettingSetTime 2021-07-09 14:11:20 +02:00
Riku Isokoski
99e26bdd4c LVGL use system tick 2021-07-07 15:47:47 +03:00
Kieran Cawthray
f5639db8ed Change step gauge to use percentage of goal for progress 2021-07-06 22:53:00 +02:00
Riku Isokoski
61a4642221
Improve stopwatch (#432)
* Improve stopwatch more

* Make sure sleep gets reenabled

* Cleanup and clang-format
2021-07-04 20:23:03 +02:00
Avamander
ab59b9b830
Whitespace and brace fixes (#456)
* Brace style and whitespace fixes

* Additional whitespace fixes
2021-07-04 20:06:50 +02:00
Riku Isokoski
3b0fcc2a73 clang-format 2021-07-04 20:05:39 +02:00
Riku Isokoski
94aefed98f Condense firmware validation code 2021-07-04 20:05:39 +02:00
Riku Isokoski
217f16d189 Improve paddle game 2021-07-03 10:40:30 +02:00
Jonathan Vander Mey
8031cd1b40 Inititialize members in class declaration
Also added initializers for previously unintialized members.
2021-07-02 17:47:14 +02:00
Jonathan Vander Mey
d13b0a7ec5 Move local-only function into anonymous namespace 2021-07-02 17:47:14 +02:00
Jonathan Vander Mey
4217a8cb65 Make MusicService UUID objects static constexpr 2021-07-02 17:47:14 +02:00
Jonathan Vander Mey
e28516002b Eliminate reinterpret_casting 2021-07-02 17:47:14 +02:00
Bryton Hall
4e435e93e0
and metronome icon (#439)
* add drum icon for metronome app
2021-07-02 17:34:32 +02:00
Riku Isokoski
38f40034b0
Float voltage to int (#444)
* Change voltage float to millivolt integer
* Explain the ADC to milliVolts conversion
2021-07-02 17:30:32 +02:00
Riku Isokoski
7075b7f264 Fix call notification button alignment 2021-07-02 17:20:58 +02:00
Avamander
d1842a3686 Disabled a few more unnecessary warnings, sorted a bit 2021-07-02 16:29:25 +02:00
Avamander
dea4beba13 Disabled new Clang-Tidy checks that are too noisy 2021-07-02 16:29:25 +02:00
Avamander
69894853ac Improved CLion configuration 2021-07-02 16:29:09 +02:00
Avamander
bdb5965f1a static_cast cleanup 2021-07-02 16:27:41 +02:00
Avamander
2f479e5fc7 Fixed a bunch of format specifiers 2021-07-02 16:27:16 +02:00
Kieran Cawthray
2edf41be8e Fix bad merge 2021-06-29 21:15:39 +02:00
Kieran Cawthray
9bd180896e Replace font file 2021-06-29 21:12:39 +02:00
Kieran Cawthray
4f21748aa2 Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-06-29 21:10:36 +02:00
kieranc
f317d54218
Add PineTimeStyle watchface (#334)
* PineTimeStyle
* Move GPL license header
* Add step count gauge - replaces heartrate in sidebar
* Enable 12/24h functionality
* Set step gauge outer to be white when step goal is reached
* Add font source file
* Move static needle_colors array to member variable
* Add documentation on generating a font
* Replace .ttf with Google version, add link to font page

Co-authored-by: JF002 <JF002@users.noreply.github.com>
2021-06-29 20:20:27 +02:00
Kieran Cawthray
660a8597f6 Add reset button, reduce button opacity 2021-06-27 15:24:17 +02:00
Neil O'Fix
0045fb16b6
SPI flash sleep if bootloader >= 1.0.0 (#322)
* Retrieve and display bootloader version
- Display bootloader version on System Info screen
- Enable SPI flash sleep mode if bootloader version >= 1.0.0
* Wait for SPI flash to wakeup before starting OTA DFU
2021-06-26 20:53:32 +02:00
Kieran Cawthray
6889cf1ed8 Fix the fix, whoops 2021-06-25 21:55:51 +02:00
Kieran Cawthray
800daecf90 Add a check to set default colors if all colors are white 2021-06-25 21:36:55 +02:00
Kieran Cawthray
f3b40cb7a6 Make it loop around when you get to the end of the list of colors 2021-06-25 19:04:29 +02:00
Kieran Cawthray
be22a9b1b8 Fix off-by-one error, reduce step gauge needle width 2021-06-25 15:09:18 +02:00
Kieran Cawthray
878dd1a776 Use colors from settings for PineTimeStyle watchface 2021-06-25 14:58:45 +02:00
Kieran Cawthray
50b92e5dd6 Move array to member variable, retrieve colors from settings for display 2021-06-25 14:47:56 +02:00
Kieran Cawthray
d5d8438b60 Merge remote-tracking branch 'upstream/develop' into pinetimestyle-colorpicker 2021-06-25 08:48:16 +02:00
Kieran Cawthray
8f16574992 PineTimeStyle color picker tidying 2021-06-24 21:51:23 +02:00
Kieran Cawthray
7edfc53481 PineTimeStyle color picker add settings integration 2021-06-24 21:49:04 +02:00
Kieran Cawthray
38ab0add48 PineTimeStyle color picker initial commit 2021-06-24 19:15:23 +02:00
Kieran Cawthray
14721e8f1e Move static needle_colors array to member variable 2021-06-23 22:14:34 +02:00
Kieran Cawthray
c3f854ba65 Add font source file 2021-06-22 21:32:27 +02:00
Florian
883700fca1
update main font to keep diffs for future changes small (#420)
* update font with jetbrains mono v2.225 and the current converter
* added the tff file for JetBrains Mono to ensure everybody is using the same version

Co-authored-by: Florian <florian@florian-thinkpad.local>
2021-06-22 20:56:49 +02:00
Jonathan Vander Mey
ef999e8dd3
Fix typo in variable names (#430) 2021-06-22 20:34:46 +02:00
Avamander
572be3e857
Removed an illogical comparison from SystemInfo and St7789 driver (#449)
* Removed an illogical comparison
2021-06-22 20:31:31 +02:00
Kieran Cawthray
be505fc15f Set step gauge outer to be white when step goal is reached 2021-06-21 20:06:47 +02:00
Kieran Cawthray
266573deff Enable 12/24h functionality 2021-06-20 21:57:28 +02:00
Kieran Cawthray
607af27ba8 Add step count gauge - replaces heartrate in sidebar 2021-06-20 21:53:09 +02:00
Kieran Cawthray
b130ffa39c Merge remote-tracking branch 'upstream/develop' into pinetimestyle 2021-06-20 21:46:51 +02:00
Jean-François Milants
20a24f8cf5 Set version to 1.2.0 2021-06-19 20:59:18 +02:00
JF002
c6dca25b9f
Add support for BMA425 acceleration sensor. (#440)
* Add support for BMA425 acceleration sensor.
2021-06-19 20:27:59 +02:00
hassless
84a6c88e98
Merge branch 'JF002:develop' into improve-battery-percentage-to-battery-icon-mapping 2021-06-18 17:17:26 +02:00
Kieran Cawthray
d7b73f1182 Merge branch 'pinetimestyle' of github.com:kieranc/InfiniTime into pinetimestyle 2021-06-16 22:22:27 +02:00
Kieran Cawthray
f5d756928f Merge remote-tracking branch 'upstream/develop' into pinetimestyle 2021-06-16 16:33:34 +02:00
JF002
ab1a3900a3
Merge branch 'develop' into pinetimestyle 2021-06-12 21:01:55 +02:00
Jonathan Vander Mey
e90e8c7426 Fix signed/unsigned comparison warning
Changed type of encodedBufferIndex to size_t to eliminate warning. It is
fine as a size_t as its only ever compared to another size_t and used as
an array index.
2021-06-12 20:04:19 +02:00
Jonathan Vander Mey
006771699f Remove infinitime-nb.c from source list
Was causing compiler warning for unused constant variable when being
compiled. This feel is directly included where it's needed so it doesn't
need to be separately compiled anyways.
2021-06-12 20:04:19 +02:00
Jean-François Milants
dbc2d23405 Add Init() in DummyuLittleVgl to fix recovery firmware 2021-06-12 18:00:42 +02:00
Jean-François Milants
d6fcbe960e Fix build issues since Metronome app has been merged. 2021-06-12 15:14:14 +02:00
Bryton Hall
c575754b42
add basic metronome app (#409)
* add basic metronome app

* add bpb, tap to bpm, update widgets

* use event pressed for bpm tap

* move case statement break to the right place

* narrow bpm selection range, override touch events

* fix arc knob style

* re-enable sleeping in destructor
2021-06-12 15:06:58 +02:00
JF002
58a8507b3d
Merge pull request #405 from Riksu9000/improve_stopwatch
Improve stopwatch
2021-06-12 14:27:51 +02:00
Jean-François Milants
d7962617e4 Clock : initialize the actual clockface in initialization list instead of in the core of the ctro(). 2021-06-12 14:21:29 +02:00
JF002
17c6583937
Merge pull request #425 from Raupinger/remove-watch-tap
Remove tap to switch Watchfaces
2021-06-12 14:15:32 +02:00
JF002
a1b3537e9e
Merge pull request #359 from Avamander/patch-2
Used a macro for UUID generation, switched from C-style casts to reinterpret_cast, renamed callback
2021-06-12 13:18:12 +02:00
Avamander
314a8ebba0
Changed the namespace of SystemInfo::sortById to avoid a name conflict (#360) 2021-06-12 11:18:19 +02:00
Pekka
d4f4ed014c
Update buildWithDocker.md (#416)
Added a link to instructions for cloning the repo. The purpose was mainly to remind of the git submodule update.
2021-06-12 11:16:54 +02:00
Roxxor91
44d7c6d00f
Update Amazfish.md (#386)
Add Navigation feature.
2021-06-12 11:15:39 +02:00
Riku Isokoski
bf906bd573
Fix scrollbar (#382) 2021-06-12 11:12:39 +02:00
Jonathan Vander Mey
772ea0b591
Replace raw new expressions with make_unique (#406)
Using make_unique avoids needing to repeat type information making it
less verbose. Also fixes clang-tidy warning modernize-make-unique.
2021-06-12 11:10:10 +02:00
Jonathan Vander Mey
4d1626e3b6
Fix fallthrough on case statement (#403) 2021-06-12 11:07:23 +02:00
Itai Nelken
2c7ad783fc
Improvements to /doc/filesInReleaseNotes.md (#357)
* Update filesInReleaseNotes.md
2021-06-12 11:06:46 +02:00
Joel Bradshaw
8fb543f4c3
Add note about getting GadgetBridge from F-Droid (#358)
* Add note about getting GadgetBridge from F-Droid

Hopefully this is useful and will save folks some frustration

* Add note that GadgetBridge should be downloaded via F-Droid

There's an "unofficial" version on the Play Store that is outdated and doesn't have PineTime support

* Fix typo

* Add starting version, reword a bit

Initial support version is a little fuzzy, 0.47 states it's "not yet usable" but changelog doesn't specify when we've crossed the "usable" threshold.
2021-06-12 11:05:57 +02:00
JF002
346d20db52
Rewrite MemoryAnalysis.md with up to date information. (#411)
Rewrite MemoryAnalysis.md with up to date information.
2021-06-12 11:02:54 +02:00
JF002
0ce98c7ac7
Merge pull request #415 from JF002/move-heap-to-static
Move dynamically allocated variables to static variables.
2021-06-12 11:02:06 +02:00
Jean-François Milants
6d524ebea2 Move most of the code from the constructor of the objects statically initialized in main() into Start()/Init() functions to avoid Static Initialization Order Fiasco (https://en.cppreference.com/w/cpp/language/siof). See https://github.com/JF002/InfiniTime/pull/415#issuecomment-859004238. 2021-06-12 10:58:28 +02:00
Riku Isokoski
239b5547ea Fix another regression 2021-06-11 14:55:37 +03:00
Riku Isokoski
21b6f85140 Fix regression 2021-06-11 14:46:03 +03:00
Riku Isokoski
123c6f1917 Fix touchevent tap 2021-06-11 13:26:28 +03:00
Florian
049174bd35 replace ScreenList with a single screen in Clock. This removes the tap to switch feature 2021-06-11 01:15:32 +02:00
Jean-François Milants
b1925ff286 Minor improvements: use std::make_unique when creating unique_ptr, check the code is running from an IRQ before calling xQueueSendFromISR or xQueueSend) 2021-06-10 21:20:27 +02:00
Jean-François Milants
caca6a5cff Fix stack corruption when exiting an app (the app was destroyed while it was executing the button handler). 2021-06-10 21:19:11 +02:00
hassless
d0df278b0b
Update BatteryIcon.cpp
Improvement to the mapping of battery percentage to the battery icon to be displayed.
2021-06-09 13:47:22 +02:00
Jean-François Milants
ff00873f97 Fix build for recovery firmware. 2021-06-06 20:20:55 +02:00
Jean-François Milants
7f9cc51b05 Initialize SystemTask, DisplayApp and HeartRateTask as global static variable instead of variables on the heap. We don't need them on the heap as we know their size at build time, it'll reduce memory fragmentation and it'll make memory analysis easier. 2021-06-06 15:56:03 +02:00
Kieran Cawthray
f2d01166c3 Merge remote-tracking branch 'upstream/develop' into pinetimestyle 2021-06-04 08:57:40 +02:00
JF002
79f0fcb07a
Add the maximum memory used by LVGL in SystemInfo app. This will help the developers to size the memory buffer allocated to lvgl. (#408) 2021-06-01 21:03:29 +02:00
JF002
1b6acdedc2
Enable various compilation flags to reduce the binary size (#401)
* Add the following compilation flags:
 * -fno-exceptions and -fno-non-call-exceptions : disable exception handling
 * -fno-rtti : disable run time type information (needed by dynamic_cast, for example)

These flags reduce the binary size by about 100KB!

Also, -fstack-usage generate debug info (not in final binary) to allow tools like Puncover to do a stack analysis.

* Remove unused CMake variables in CMake_nRF5x.cmake (duplicated in src/CMakeLists.txt).
Replace -O0 by -Og in DEBUG builds. This generates a smaller binary (small enough for the internal memory) that is debugger friendly.
2021-06-01 21:03:01 +02:00
JF002
c0b0f8cb73
Remove debug defines (DEBUG & DEBUG_NRF_USER) from the build. These debug can be useful for debugging purposes but not in production (release). (#400)
This reduces the size of the binary by about 6KB!
This also removes filepath that were embedded into the binary (.bin) file.
2021-06-01 21:02:15 +02:00
JF002
287399f993
Navigation app: reduce memory usage (#362)
* Navigation app:
 - Renaming and reformatting according to coding conventions
 - declare iconMap as constexpr and use char* instead of std::string

This reduces the flash usage from 424644B to 419344B (-5300B)!
2021-06-01 21:01:32 +02:00
Riku Isokoski
c6969268fc Keep button visible, but disabled 2021-05-26 16:13:40 +03:00
Riku Isokoski
b393105082 improve ui and optimize code 2021-05-26 15:15:10 +03:00
Kieran Cawthray
565601ef50 Merge remote-tracking branch 'upstream/develop' into pinetimestyle 2021-05-21 14:34:25 +02:00
Jean-François Milants
f88c0f41fa Fix recovery DisplayApp. 2021-05-21 11:56:50 +02:00
Jean-François Milants
7c9513be8a Set version to 1.1.0. 2021-05-21 11:37:32 +02:00
Florian
13e3463276
Timer App (#355)
* built timer app

* Style improvements

* making sure buttons stay hidden when the app is reopened and reappear after the timer runs out

* more sensible calculations of time deltas. eliminated that mysterious scaling factor

* changing the timer icon
2021-05-20 20:43:54 +02:00
Florian
8c3b250dbf
removed an empty assignment that caused a compiler warning (#372) 2021-05-20 20:34:21 +02:00
Kieran Cawthray
5c413016a7 Move GPL license header 2021-05-19 17:27:42 +02:00
Kieran Cawthray
249b6db6f5 Remove newline modifications 2021-05-19 17:05:33 +02:00
Kieran Cawthray
5daaa5cf75 Tidying/formatting fixes 2021-05-19 11:03:33 +02:00
Kieran Cawthray
108bbc3642 Fix it again.. 2021-05-18 18:03:26 +02:00
Kieran Cawthray
6a92529272 Revert "Reset"
This reverts commit 378fa6b4016b65e2d7b128fdc3ce89c4ca779a4d.
2021-05-18 17:45:16 +02:00
Kieran Cawthray
a4968b5029 PineTimeStyle 2021-05-18 15:33:25 +02:00
Kieran Cawthray
378fa6b401 Reset 2021-05-18 15:33:25 +02:00
Jean-François Milants
9ab298c09e Fix wrong initialization of 'pinPowerPresent' pin that would prevent the touchpanel from working correctly when the device boots while connected to the charger. 2021-05-17 09:52:31 +02:00
Avamander
8568b5f31b Updated license header year 2021-05-17 02:16:50 +03:00
Avamander
f6f28a95f6 Used a macro for UUID generation, switched from C-style casts to reinterpret_cast, renamed callback 2021-05-17 02:08:12 +03:00
David Ventura
9342d62a44
Emit event on power-present toggle (#320)
* Emit event on power-present toggle

* clang-format on changes

* also update battery status on any event

* update comments; remove double battery update

* Fix formatting

* Vibrate shortly on charging event

* debounce charge event
2021-05-16 21:13:22 +02:00
JF002
5b2472c4bc
Merge pull request #347 from jedi2light/feature-show-git-commit-hash-short
Feature: Store and show git short ref on PineTime alongside other firmware information
2021-05-16 11:37:39 +02:00
JF002
b588439719
Merge pull request #354 from Raupinger/notification-title-fix
Notification title fix
2021-05-16 11:20:09 +02:00
Florian Kraupa
9e8dd9a1e6 NotificationItem now also redefines the start of the timeout 2021-05-16 00:42:31 +02:00
Florian Kraupa
56af4a0b83 cleaned up the code and reduced the size of the diff by removing things like additional whitespaces 2021-05-16 00:42:31 +02:00
Florian Kraupa
5da65494b3 only activate the timeout on call notification previews after they have been interacted with 2021-05-16 00:42:31 +02:00
Florian Kraupa
d13dd6dee3 implemented continuous vibration pattern for incoming calls 2021-05-16 00:42:31 +02:00
Florian Kraupa
2627ef760e better handling of long notification titles 2021-05-16 00:16:33 +02:00
Jean-François Milants
d7fa000b85 DisplayApp : returnApp was renamed ReturnApp() (manual fix after multiple merges). 2021-05-15 22:38:49 +02:00
JF002
09977c28c0
Merge pull request #298 from joaquimorg/StepsApp
New Steps app
2021-05-15 22:32:40 +02:00
JF002
4e95e4b538
Merge pull request #345 from Itai-Nelken/patch-1
fix a formatting issue and 2 typos in gettingStarted-1.0.md
2021-05-15 09:59:55 +02:00
JF002
783dde948b
Merge pull request #348 from CoderThomasB/fix-typo-doc/contribute.md
Fixed typos in the doc/contribute.md using google docs’s spelling check system
2021-05-15 09:58:38 +02:00
JF002
204d63697c
Merge pull request #349 from Avamander/patch-2
Switched to booleans for infinite while loops
2021-05-15 09:57:22 +02:00
JF002
48018fc1d8
Merge pull request #350 from Avamander/patch-3
Added braces to a few if statements
2021-05-15 09:56:48 +02:00
JF002
a0acc0e8d2
Merge pull request #351 from Avamander/patch-5
Fixed a naming inconsistency of DisplayApp::ReturnApp and a few formatting errors
2021-05-15 09:55:59 +02:00
JF002
0df009ba9f
Merge pull request #352 from Avamander/patch-6
Improved clang-tidy configuration for less noise
2021-05-15 09:55:10 +02:00
Avamander
3214f98ac6 Improved clang-tidy configuration for less noise 2021-05-14 13:01:05 +03:00
Avamander
d29d513244 Fixed a naming inconsistency of DisplayApp::ReturnApp and a few formatting errors 2021-05-14 12:46:51 +03:00
Avamander
e54163b7c2 Added braces to a few if statements 2021-05-14 12:43:29 +03:00
Avamander
33f965f326 Switched to booleans for infinite while loops 2021-05-14 12:40:46 +03:00
CoderThomasB
7571d477f9 Fixed typos in the doc/contribute.md using google docs’s spelling check system 2021-05-14 19:28:54 +12:00
Stoian Minaiev
a4de61e1f5 git: show git short ref hash on SystemInfo(first screen) and FirmwareValidation screen alongside other information 2021-05-14 01:09:40 +03:00
Stoian Minaiev
e04c8ee95e git: store git short ref hash on build stage to Version.h 2021-05-14 01:08:37 +03:00
Stoian Minaiev
d82a1c5225 docker: add git system package to image 2021-05-14 01:07:32 +03:00
Itai Nelken
e05ac21039
Update gettingStarted-1.0.md 2021-05-13 14:52:23 +03:00
Itai Nelken
117da314bc
Update gettingStarted-1.0.md 2021-05-13 14:48:11 +03:00
Jean-François Milants
c82dee2def Add missing pictures. 2021-05-13 13:21:18 +02:00
Jean-François Milants
88e3790fbf Merge branch 'develop' of github.com:JF002/Pinetime into develop 2021-05-13 13:20:19 +02:00
Jean-François Milants
afd5ac0d4a Add quick user guide for InfiniTime 1.0 2021-05-13 13:19:48 +02:00
JF002
456a57215a
Merge pull request #336 from jedi2light/patch-1
SystemInfo app screen
2021-05-10 20:33:25 +02:00
Stoian Minaiev
9a8824c35a
SystemInfo app screen
First screen. Let the build date and build time string be centered as well as the others
2021-05-10 15:13:33 +03:00
JF002
9e1ce2d423
Merge pull request #266 from Caton101/patch-1
Add Python modules to build instructions
2021-05-09 11:21:05 +02:00
JF002
937dc340f1
Merge pull request #324 from MFAshby/fix_stop_crash_315
Fix stopwatch crash after stop pressed
2021-05-09 11:17:05 +02:00
Martin Ashby
3a938236d4
Fix a possible double free in StopWatch::Refresh.
The lv_obj_del is called on btnStopLap  when transitioning to the
initial state, however the variable isn't then set to null. A subsequent
call to Refresh would attempt to delete the already freed object. This
could be triggered by stopping the stop watch, then pressing the
physical button on the watch.

Fixes https://github.com/JF002/InfiniTime/issues/315
2021-05-03 08:11:58 +01:00
JF002
e3ead332b9
Merge pull request #319 from DavidVentura/use-byte-for-ppg
Use int8_t for PPG data array
2021-05-02 14:55:43 +02:00
JF002
65e4fe0310
Merge pull request #314 from eivindm/improved_heartbeat_in_watchface
Improve design of heartbeat data in digital watchface
2021-05-02 14:41:19 +02:00
JF002
242620b73e Improve doc/contribute.md : add more info and TL;DR 2021-05-02 14:11:22 +02:00
JF002
bc9a782f41 Improve contributes.md : give more detailed guideline on how to create a good pull-request 2021-05-02 14:08:09 +02:00
Eivind Mork
3355afbbd1 Show heartbeat icon in watchface in gray if data is missing 2021-05-02 12:30:33 +02:00
JF002
9f15fd1820
Merge pull request #301 from petterhs/vib
Short vibration when enabling it in quick settings menu
2021-05-02 11:58:48 +02:00
petter
6e1726d1d0 short vibration when enabling it 2021-05-02 11:48:05 +02:00
JF002
d141888b82
Merge pull request #275 from panos/navigation-text
Changed text in Navigation
2021-05-02 11:45:08 +02:00
JF002
9af0eb04c2
Merge pull request #318 from Kozova1/TypoFix
Fix typo in src/displayapp/fonts/README.md
2021-05-02 11:43:35 +02:00
JF002
cd902e3670
Merge pull request #308 from joaquimorg/LVGL-Update
Update LVGL
2021-05-02 11:41:45 +02:00
JF002
a5ef1b987f
Merge pull request #281 from panos/develop
bin2c: Don't assume that the default Python version is higher than 2
2021-05-02 10:44:41 +02:00
david
a62b81da3d Fix #209. Use int8_t for PPG data array 2021-05-01 12:10:44 +02:00
Kozova1
d9bbda2010
Fix typo in src/displayapp/fonts/README.md
Signed-off-by: Kozova1 <mug66kk@gmail.com>
2021-04-30 01:02:30 +03:00
Joaquim
cd0d85dff9 Merge branch 'develop' of
https://github.com/JF002/InfiniTime into StepsApp
2021-04-26 21:29:48 +01:00
JF002
eedff2c06c
Merge pull request #291 from Avamander/patch-3
Added Python virtual environment to .gitignore
2021-04-26 21:10:44 +02:00
JF002
4706c99db4
Merge pull request #293 from Avamander/patch-5
Reformatted all the files according to clang-format style
2021-04-26 21:10:11 +02:00
Avamander
6989854519 Changed access modified indentation 2021-04-24 12:00:45 +03:00
Avamander
40d45d923b Reformatted all the files according to clang-format style 2021-04-24 11:39:53 +03:00
Jean-François Milants
e56ebb8bd6 Update README.md and picture. 2021-04-21 21:56:43 +02:00
Joaquim
552f880a23 Update LVGL
fixes from upstream
2021-04-21 15:48:41 +01:00
Jean-François Milants
fefb429fb4 Fix formatting issue on the lap counter in Stopwatch (display lap counter on 2 characters). 2021-04-20 21:01:38 +02:00
Joaquim
5fc07a8df7 Fix button size and default step goal 2021-04-20 16:21:01 +01:00
Jean-François Milants
410cc821f4 Fix formatting issue on the lap counter in Stopwatch. 2021-04-19 20:30:51 +02:00
Joaquim
cd4a3e1dfe New Steps app
Settings to set the steps goal
More detail in Motion app
New 42px Font
2021-04-19 15:28:38 +01:00
Avamander
b4c402d252 Added Python virtual environment to .gitignore 2021-04-18 19:02:38 +03:00
Jean-François Milants
bbc24e88b0 Fix a display glitch when an OTA is initiated while an app (other than Clock) was open and while the device was in sleep mode. 2021-04-18 17:44:40 +02:00
JF002
e96c0422f0
Merge pull request #288 from MysteriousLog6/develop
Fix spelling
2021-04-18 15:34:55 +02:00
MysteriousLog6
cf4c13c282
Fix spelling 2021-04-18 17:30:36 +05:30
Jean-François Milants
a7114f21b7 Fix display consistency with the HR measurement when measurements are already running when the app is open. 2021-04-18 13:50:38 +02:00
JF002
eb1209e638
Merge pull request #286 from pfeerick/patch-1
Gitpod workspace path update due to repo rename
2021-04-18 10:48:24 +02:00
JF002
6eaa395e7d
Merge pull request #285 from Peetz0r/fix-stopwatch-formatting
Fix stopwatch formatting
2021-04-18 10:47:46 +02:00
JF002
4152306bc3
Merge pull request #269 from petterhs/musicBtnTheme
Apply theme to Music buttons
2021-04-18 10:40:15 +02:00
JF002
89aa596dcd
Merge pull request #265 from Panky-codes/add-article-link
Added a link to the stopwatch article.
2021-04-18 10:27:38 +02:00
Peter
f8c502e447
Gitpod workspace path update due to repo rename
Gitpod workspace path is based on repo name... it was `/workspace/Pinetime`, 
but after the repo rename it's now `/workspace/InfiniTime`. 
Also added second pip call as it's in the main dockerfile.
2021-04-18 17:23:28 +10:00
Peetz0r
b221cc1731 Stopwatch: improve variable naming
msec => hundredths
2021-04-17 23:47:53 +02:00
Peetz0r
7caeecc09b Stopwatch: improve number formatting 2021-04-17 23:47:02 +02:00
Panagiotis Vasilopoulos
fd19599f3e
bin2c: Don't assume that the default Python version is higher than 2 2021-04-17 13:16:15 +03:00
Panagiotis Vasilopoulos
a26f64996a
Changed text in Navigation 2021-04-17 05:40:05 +03:00
JF002
77470e73f9 Set version to 1.0.0, wohoo! 2021-04-16 21:34:21 +02:00
Jean-François Milants
63635381b0 Disable the reading of the motion values in sleep mode when the wake up mode is not 'wrist rotation'. 2021-04-16 20:05:46 +02:00
JF002
36e27842e1
Merge pull request #263 from joaquimorg/0.16.0Update
Fix Issue #262 for 0.16.0 version
2021-04-16 19:57:35 +02:00
Joaquim
3c413bdd52 In order to stabilize the battery reading,
I modified the process to make 5 consecutive readings,
as the process is asynchronous,
there is no interference in the main process.
2021-04-16 16:15:38 +01:00
joaquim.org
c0c37877b5
Merge pull request #1 from petterhs/0.16.0UpdateTwosFix
Fix style formatting in 2048 game
2021-04-16 09:26:14 +01:00
petter
2f1ddad403 fix style formatting in 2048 game 2021-04-16 01:18:32 +02:00
Joaquim José Almeida Pereira
969bb8e721 Change animation direction in menus 2021-04-15 15:55:01 +01:00
petter
d2f9ea893a apply button theme to Music UI 2021-04-14 23:43:06 +02:00
Cameron Himes
0cbbd1dfc0
Add Python modules to build instructions
I had issues building InfiniTime for the first time because the instructions never mentioned needing these Python modules. Including them in the build documentation will help people not be confused like I was.

I recommend adding all needed modules to this list. I only added the ones I knew I was missing.
2021-04-13 21:40:42 -04:00
panky-codes
f0b9b982c9 Added a link to the stopwatch article. 2021-04-13 19:15:29 +02:00
Joaquim
f5e43a1668 Move Task info to about menu
fix build error in WatchFaceDigital
2021-04-11 17:20:15 +01:00
Joaquim
012c246e40 0.16.0 TWI problems fix
More memory for freertos heap and timer stack
Fix warning in watchface
Fix number of bytes read by cst816
Debug app to show freertos tasks
Increased the number of bytes of the twi write buffer
2021-04-10 19:09:33 +01:00
Jean-François Milants
eb769fb60e Merge branch 'motion-sensor' into develop 2021-04-09 21:17:03 +02:00
Jean-François Milants
15b3b8e282 Merge branch 'develop' into motion-sensor
# Conflicts:
#	src/CMakeLists.txt
#	src/displayapp/Apps.h
#	src/displayapp/DisplayApp.cpp
#	src/displayapp/DisplayApp.h
#	src/displayapp/lv_pinetime_theme.c
#	src/displayapp/screens/ApplicationList.cpp
#	src/drivers/TwiMaster.cpp
#	src/systemtask/SystemTask.h
2021-04-09 21:16:21 +02:00
Jean-François Milants
57b4c3f0ed Fix display of empty notification. 2021-04-09 20:50:09 +02:00
Jean-François Milants
4560e9ed60 Merge branch 'notification-title' into develop 2021-04-09 20:47:39 +02:00
Jean-François Milants
63584b6561 Merge branch 'develop' into notification-title
# Conflicts:
#	src/displayapp/screens/Notifications.cpp
2021-04-09 20:47:24 +02:00
JF002
9096d1db4c
Merge pull request #259 from JF002/fix-music-app2
Fix music app
2021-04-09 20:44:02 +02:00
JF002
17a37acaa8
Merge pull request #258 from joaquimorg/BigRewrite
New settings menu and more...
2021-04-09 20:43:39 +02:00
Joaquim
3685095da0 add more memory to displayapp task 2021-04-09 09:29:29 +01:00
Jean-François Milants
9ac4be8b75 TwiMaster is now based on the NRFX TWI driver, as it handles more edge cases and workarounds for errors on the bus.
Reset the TWI bus after the soft-reset of the motion sensor to workaround issues on the TWI bus.
2021-04-08 20:07:24 +02:00
Joaquim
3cf4df905a restore battery buffer 2021-04-08 16:15:57 +01:00
Joaquim
365e68e6cc Fix wake up lock in twi
optimize battery code
2021-04-05 15:22:10 +01:00
Joaquim José Almeida Pereira
96961709f3 array in SettingWakeUp wrong size 2021-04-05 11:01:44 +01:00
Joaquim
7e2db806c3 font creation 2021-04-04 22:03:53 +01:00
Jean-François Milants
f8b9a7c060 Fix music app :
- Enable LVGL animation (and disable groups, which were not used), and set the speed.
 - Fix disc animation and progress display by initializing lastIncrement at 0 (a random value will be used otherwise, in release build)
2021-04-04 17:19:41 +02:00
Jean-François Milants
1d7576de64 Reset the step count every day at midnight. 2021-04-04 15:56:40 +02:00
Jean-François Milants
52a90288fd Handle return code from BMA driver, and set a flag is the initialization fails. This allows to boot InfiniTime even if the device cannot initialize. 2021-04-04 15:56:11 +02:00
Jean-François Milants
c7cc47ae30 Code cleaning in BMA421 driver. Do the axis inversion in the driver and not in the application.
NOTE: Axis remapping from the SDK do not apply to the "raw" X/Y/Z values returned to the sensor. According to the doc, the remapping is only applied to features, but I cannot check if it has any effect on step counting (I'm not sure I use it correctly, doc is not complete enough about this feature).
2021-04-04 15:56:11 +02:00
Jean-François Milants
19b53545d4 Add step counting and wake up on wrist rotation in the list of features. 2021-04-04 15:56:11 +02:00
Jean-François Milants
68bdaee1cc First integration of the motion sensor (bma 421) : step counting + wake on wrist rotation + app to see the value of the 3 axis in "real time". 2021-04-04 15:56:04 +02:00
JF002
04fc33e2d4
Merge pull request #239 from muesli/badge-link
Fix README build-badge link
2021-04-04 15:37:56 +02:00
Jean-François Milants
3934e9bef2 Ignore notification with empty message. 2021-04-04 15:19:37 +02:00
Joaquim
bb7531e208 double tap wakeup error fix
battery nonblocking read
2021-04-04 13:51:22 +01:00
Jean-François Milants
1b71a10beb Notification app : disable swipe when the app is in 'preview' mode. In this mode, only the new notification should be displayed, there is no point to allow navigating to past notifications.
Works as a workaround for the crash that occurs when you swipe the notification app in preview mode (https://github.com/JF002/InfiniTime/issues/250).
2021-04-04 13:42:22 +02:00
Jean-François Milants
03de1c6739 Add support for notification title. The notification buffer must contain the title and the message separated by a '\0' character.
If the buffer does not contain any \0, the whole buffer is considered to be the message of the notification. A default title will be displayed in the notification app.
2021-04-04 12:10:47 +02:00
Joaquim
1d3742e14f Big UI and navigation Rewrite
new navigation
add some color to the apps
redesign menus
new settings menu
new quick settings
code clean up
size reduction by converting navigation images to font
and more...
2021-04-04 03:08:51 +01:00
JF002
58a2d000c4
Merge pull request #238 from nscooling/make_unique
Resolved C++14 Cmake build issues so correctly building to C99/C++14
2021-03-31 20:33:37 +02:00
JF002
136d4bb85e
Merge pull request #249 from alexr4535/develop
add siglo as a companion app
2021-03-24 17:51:21 +01:00
Alex Robinson
181fb35b29 add siglo as a companion app 2021-03-23 18:19:56 -05:00
Niall Cooling
8eb947a223 replaced all unique_ptr.reset calls with std::make_unique 2021-03-22 17:56:26 +00:00
Niall Cooling
e5e3fc02b8 Updated to include WatchFaceAnalog and fixed clashes 2021-03-22 17:23:49 +00:00
Jean-François Milants
9f9d0eb5df Set version to 0.15.0 2021-03-21 17:12:29 +01:00
Jean-François Milants
adefa1e660 Update buildAndProgram.md with info about Debug/Release builds. 2021-03-21 17:12:19 +01:00
JF002
0c8b371a4c
Merge pull request #245 from petterhs/fixDisplayErrors
fix display driver issues in recovery
2021-03-21 16:35:21 +01:00
JF002
84798329dc
Merge pull request #244 from joaquimorg/LVGL7.11.0
Update to LVGL 7.11.0 Final
2021-03-21 16:35:00 +01:00
JF002
7b39130f88
Merge pull request #231 from Panky-codes/feature/add-stop-watch
Added stopwatch
2021-03-21 16:33:27 +01:00
panky-codes
49f30189ef Added stopwatch app to readme 2021-03-21 13:59:18 +01:00
petter
3b51b4367d fix display driver issues in recovery 2021-03-21 12:29:57 +01:00
panky-codes
dd9d6cd23e Reverted the paddle app in displayapp.cpp 2021-03-21 11:15:31 +01:00
panky-codes
bb12ae9d65 Updated lvgl submodule to match with develop branch 2021-03-21 10:43:14 +01:00
Christian Muehlhaeuser
161b36ab75
Fix README build-badge link 2021-03-21 03:11:32 +01:00
panky-codes
5345650880 Merged upstream 2021-03-20 22:45:29 +01:00
panky-codes
754ac23304 Reworked based on PR comments. 2021-03-20 22:42:13 +01:00
Joaquim
d257ad21be Update to LVGL 7.11.0 Final 2021-03-20 18:12:44 +00:00
JF002
a3ff2e46ca
Merge pull request #240 from joaquimorg/ScreenCorruptionFIX
FIX screen corruption (Issue #213)
2021-03-20 18:10:13 +01:00
JF002
463e60eb4e
Merge pull request #237 from muesli/systeminfo-url
Update project URL in SystemInfo
2021-03-20 17:55:32 +01:00
JF002
91ddc666e3
Merge pull request #235 from MFAshby/doc_correction
Small correction to git URL in documentation files
2021-03-20 17:54:07 +01:00
Jean-François Milants
405c85c160 Merge branch 'develop' of github.com:JF002/Pinetime into develop
# Conflicts:
#	src/main.cpp
#	src/systemtask/SystemTask.h
2021-03-20 11:41:49 +01:00
JF002
9e9bb2085e
Merge pull request #217 from joaquimorg/MultiFaceClock
Multi face support, analog clock, 12/24 config
2021-03-20 11:27:16 +01:00
Joaquim
dba7e47ac0 FIX screen corruption #213 2021-03-18 19:38:19 +00:00
Niall Cooling
14bd790701 Resolved C++14 Cmake build issues so correctly building to C99/C++14 standards 2021-03-16 12:43:50 +00:00
Christian Muehlhaeuser
509ac066d4
Update project URL in SystemInfo
Pinetime -> InfiniTime
2021-03-16 04:01:22 +01:00
Martin Ashby
bca7ba4eed
Small correction to git URL in documentation files 2021-03-15 23:13:46 +00:00
panky-codes
abc30028a2 Removed unused variables. Tested. 2021-03-15 21:35:36 +01:00
panky-codes
bc6d447a5f Increased the size of the button and realigned the layout a bit. Tested. 2021-03-13 22:29:07 +01:00
panky-codes
d409643b8e Added some comments for clarity. Ready for review. Tested. 2021-03-13 14:53:37 +01:00
panky-codes
02824d0671 Stopwatch completed. Ready for PR 2021-03-13 14:38:18 +01:00
panky-codes
5d57b9054a Adding laps completed. 2021-03-13 13:59:54 +01:00
panky-codes
00f2a053bf Laps introduced. Tested. Need to change the icon. 2021-03-12 20:24:53 +01:00
panky-codes
a090664a4c Added a button for stop lap. Logic works. Need to implement symbol and buffer for lap 2021-03-12 09:43:13 +01:00
panky-codes
70373e7345 Added play/pause button. 2021-03-11 23:41:24 +01:00
panky-codes
ce91e1a7a6 Changed the clock source. Stopwatch works. Need to add butttons. 2021-03-11 11:56:58 +01:00
panky-codes
1f8f527f9f Merge branch 'develop' of github.com:JF002/Pinetime into feature/add-stop-watch 2021-03-11 10:54:58 +01:00
panky-codes
cc58b635a3 Basic logic done. Need to change the timer source to get ms. Also need to replace with paddle app in displayApp.cpp and ApplicationList.cpp later. 2021-03-11 10:54:14 +01:00
Joaquim José Almeida Pereira
282e34dca1 fix AM/PM 2021-03-08 12:23:32 +00:00
Jean-François Milants
e63596b291 Set version to 0.14.1 2021-03-07 21:29:02 +01:00
JF
c5dc4c55a7 Merge branch 'recovery-firmware' of JF/PineTime into develop 2021-03-07 18:45:35 +01:00
Jean-François Milants
5845fd98ba Add submodule again... 2021-03-07 09:15:26 +01:00
Jean-François Milants
c083916f33 Revert "Add submodule again..."
This reverts commit 15484d0b34099b50c300b6f76e23f70f171bb409.
2021-03-07 09:08:45 +01:00
Jean-François Milants
15484d0b34 Add submodule again... 2021-03-07 08:50:35 +01:00
Jean-François Milants
9f67e6f652 Merge branch 'develop' into recovery-firmware
# Conflicts:
#	src/CMakeLists.txt
#	src/displayapp/DisplayApp.h
#	src/systemtask/SystemTask.cpp
#	src/systemtask/SystemTask.h
2021-03-07 08:44:14 +01:00
joaquim.org
524e204ed1
Merge branch 'develop' into MultiFaceClock 2021-03-06 20:08:55 +00:00
Joaquim
adc38d5c93 clean up vsc settings 2021-03-06 19:57:41 +00:00
Joaquim
97deb43fb7 Update from JF comments to PR 2021-03-06 19:55:53 +00:00
Joaquim
3d6e8c3beb Merge from upstream 2021-03-06 19:55:36 +00:00
JF002
ada9425357
Merge pull request #223 from hubmartin/patch-1
Add link to README.md to WebBLEWatch to update time from web browser
2021-03-06 17:36:40 +01:00
JF002
54dcd77c61
Merge pull request #222 from nscooling/refactor-clock-private-statics
Moved private statics into unnamed namespace in cpp file
2021-03-06 17:34:57 +01:00
JF002
d22e8a47e8
Merge pull request #221 from nscooling/C++14
Refactored src/CMakelist to support C++14
2021-03-06 17:33:41 +01:00
Martin Hub
66e2092357
Add WebBLEWatch option to update time 2021-03-04 17:11:06 +01:00
Niall Cooling
d34a510158 Moved private statics into unnamed namespace in cpp file to reduce coupling and uncessar in header 2021-03-03 17:07:05 +00:00
Niall Cooling
35aa4bb8d6 Refactored src/CMakelist to support C++14 and cleanup up redundant/incorrect -std= directives 2021-03-03 15:27:32 +00:00
Jean-François Milants
a44260aab0 Update pictures in the main README.md file. 2021-02-25 21:18:22 +01:00
Joaquim
6a5aea2919 Merge branch 'develop' of https://github.com/JF002/Pinetime into MultiFaceClock 2021-02-25 20:01:30 +00:00
Joaquim
ee6ce64571 Merge branch 'develop' of https://github.com/JF002/Pinetime into MultiFaceClock 2021-02-25 09:28:25 +00:00
Joaquim
8c53d0b70b Multi face support, analog clock, 12/24 config 2021-02-24 19:40:24 +00:00
Jean-François Milants
e8a8a8417f Set version to 0.14.0 2021-02-24 20:28:26 +01:00
JF002
8a48850afd
Merge pull request #211 from roblabla/fix-flashing
Flash correct file name
2021-02-24 20:05:47 +01:00
Jean-François Milants
c18f4e5811 Update doc : init git submodule before build. 2021-02-23 22:37:21 +01:00
Jean-François Milants
094f98743d Fix LVGL submodule (sorry!) 2021-02-23 21:53:50 +01:00
Jean-François Milants
67c545b1fb Merge branch 'joaquimorg-LVGL7' into develop 2021-02-23 21:25:43 +01:00
Jean-François Milants
b11b20b0ac Remove LVGL folder (it's now a submodule) 2021-02-23 21:21:29 +01:00
Jean-François Milants
f864330d35 Merge branch 'LVGL7' of https://github.com/joaquimorg/Pinetime into joaquimorg-LVGL7
# Conflicts:
#	src/CMakeLists.txt
#	src/displayapp/DisplayApp.cpp
#	src/displayapp/screens/Modal.cpp
#	src/displayapp/screens/Modal.h
#	src/displayapp/screens/Notifications.cpp
#	src/displayapp/screens/Tile.h
2021-02-23 21:18:59 +01:00
Joaquim
3fe3f06299 Fix delay in button actions 2021-02-22 21:33:27 +00:00
roblabla
9f6d1c6948 Flash correct file name 2021-02-19 19:44:51 +01:00
Jean-François Milants
324c7dab32 Set version to 0.13.0 2021-02-14 14:46:22 +01:00
Jean-François Milants
f81ff98c30 Merge branch 'develop' of github.com:JF002/Pinetime into develop 2021-02-14 14:42:42 +01:00
Jean-François Milants
01e194426d Fix IRQ management in FreeRTOS to avoid crash and deadlock in BLE stack. 2021-02-14 14:42:30 +01:00
JF002
e62f8734be
Merge pull request #205 from nscooling/dirtyRefactor
refactored class DirtyValue
2021-02-14 14:37:26 +01:00
JF002
57ce58ff0d
Merge pull request #186 from petterhs/musicUI
music: Symbols for the buttons
2021-02-14 14:32:15 +01:00
Jean-François Milants
2922b26121 Remove debug variable. 2021-02-14 14:30:34 +01:00
JF002
3a1ccdb43e
Merge pull request #206 from nscooling/Hrs3300_SetGain_remove_warnings
Eliminated warnings in Hrs3300
2021-02-14 14:27:14 +01:00
JF002
0ad10a3817
Merge branch 'develop' into Hrs3300_SetGain_remove_warnings 2021-02-14 14:26:49 +01:00
JF002
97a1c4b3d7
Merge pull request #182 from petterhs/warnings
Fix build warnings coming from HR implementation
2021-02-14 14:25:38 +01:00
Jean-François Milants
07a0d7cf2d Merge branch 'jlukanc1-upstream-dev' into develop 2021-02-14 14:19:46 +01:00
Jean-François Milants
5fdfb2112e Fix merge conflict. 2021-02-14 14:19:30 +01:00
JF002
4c3803450e
Merge pull request #161 from petterhs/calls
Call functionality with changed UUID for notification event characteristic
2021-02-14 12:03:49 +01:00
Niall Cooling
6c03c97005 eliminated warnings in Hrs3300 2021-02-12 17:36:56 +00:00
Niall Cooling
751ffab497 refactored class DirtyValue 2021-02-12 17:13:02 +00:00
Jean-François Milants
6420885abb Set version to 0.12.1 2021-02-07 18:09:53 +01:00
Jean-François Milants
4918524550 Fix memory leak in timer management in port layer of Nimble. 2021-02-07 18:09:19 +01:00
petter
1e2cc3ce91 add vibration toggle 2021-02-07 13:31:02 +01:00
petter
7ab153cd76 refactor MotorController 2021-02-05 17:12:46 +01:00
petter
1bd5457848 trigger vibration from systemtask 2021-02-05 15:43:20 +01:00
Jean-François Milants
ee430fe5a9 Merge branch 'update-nimble-1_3-master' into develop 2021-02-04 17:55:35 +01:00
JF002
6259b81628
Merge pull request #198 from JF002/update-nimble-1_3-master
Update to nimble 1.3 master branch
2021-02-04 17:34:28 +01:00
Jean-François Milants
16ce5bbb75 Set version to 0.12..0 2021-02-04 17:33:22 +01:00
Jean-François Milants
5016e0143f Increase FreeRTOS heap size and re-enable heart rate task. New Nimble probably uses more memory than before. 2021-02-03 20:28:41 +01:00
Jean-François Milants
d90b7274fa Update to nimble 1.3 master branch commit 82153e744833821e20e9a8b0d61c38b2b0dbcfe1
WARNING : heartbeat task is disabled!
2021-02-02 22:09:00 +01:00
Jean-François Milants
740b3d7b58 Add new cmake option to disable the generation of DFU file (which needs adafruit-nrfutil on the build machine) : BUILD_DFU (disabled by default, enabled in docker build). 2021-02-01 21:07:53 +01:00
Joaquim
a4361de0cf Cleanup 2021-02-01 12:14:49 +00:00
Joaquim
ccd423bcef Merge branch 'develop' of https://github.com/JF002/Pinetime into LVGL7 2021-02-01 10:44:10 +00:00
JF002
9c35b6fe5d
Merge pull request #197 from Avamander/patch-9
Enabled clang-format in Clion
2021-01-31 21:06:06 +01:00
JF002
1ea4c7d744
Merge pull request #196 from Avamander/patch-8
Added clang-tidy configuration
2021-01-31 21:05:50 +01:00
JF002
9810f58a71
Merge pull request #194 from Avamander/patch-6
Added Clang formatting rules
2021-01-31 21:05:25 +01:00
JF002
2b45df3390
Merge pull request #195 from Avamander/patch-7
Improve CLion's formatting rules
2021-01-31 20:52:44 +01:00
JF002
97807edd9d
Merge pull request #193 from Avamander/patch-5
Updated CMakeLists.txt to be more consistent
2021-01-31 20:51:02 +01:00
Jean-François Milants
51ff9d5e7b Normalize all the line endings 2021-01-31 20:50:04 +01:00
JF002
ec0deb66b7
Merge pull request #192 from Avamander/patch-4
Create .gitattributes
2021-01-31 20:32:12 +01:00
JF002
79a33bce63
Merge pull request #191 from Avamander/patch-3
Create .gitconfig
2021-01-31 20:31:53 +01:00
JF002
5010255193
Merge pull request #190 from Avamander/patch-1
Create CONTRIBUTING.md
2021-01-31 20:27:22 +01:00
Jean-François Milants
d2bb209d7f Remove BLE debug code 2021-01-31 19:51:36 +01:00
Avamander
a9e79468d0 Re-enabled use-after-move warning 2021-01-31 00:05:23 +02:00
Avamander
187fe5d7b8 Enabled clang-format in Clion 2021-01-31 00:01:22 +02:00
Avamander
10767d5e0a Added clang-tidy configuration 2021-01-30 23:55:35 +02:00
Avamander
9be9ddca45 Improve CLion's formatting rules 2021-01-30 23:50:40 +02:00
Avamander
f907fcbe61 Added Clang Format rules 2021-01-30 23:46:12 +02:00
Avamander
4371b7fecc
Update CMakeLists.txt 2021-01-30 19:11:07 +02:00
Avamander
f692754841
Create .gitattributes 2021-01-30 18:52:14 +02:00
Avamander
04fd4a7d03
Create .gitconfig 2021-01-30 18:48:06 +02:00
Avamander
d6557c93f2
Create CONTRIBUTING.md 2021-01-30 18:15:38 +02:00
Joaquim
a456887eff LVGL v7.10.0 2021-01-28 17:13:28 +00:00
Joaquim
efa99da44d LVGL V7 Upgrade 2021-01-28 17:07:28 +00:00
petter
d4c31bcbbe add mute button and functionality for call notification + new button icons 2021-01-27 17:07:46 +01:00
petter
700af0b8a1 improve music UI with icons for play/pause/next/prev/ and volume 2021-01-27 13:49:56 +01:00
petter
7ea2cbff67 update font with icons for music, call and qr 2021-01-27 13:48:30 +01:00
petter
523398d24a update font with icons for music, call and qr 2021-01-27 13:42:04 +01:00
Jean-François Milants
25f35c7d0e Generate pinetime-recovery : a light version of InfiniTime design to be used as a recovery firmware : it only provides basic UI and BLE connectivity for OTA.
This new FW is build on the same codebasse than the actual InfiniTime. Only the display task is different (this allows to remove lvgl from the recovery fw, which is very heavy).

CMake builds and docker have been modified accordingly.
Note than the fw is converted into an image and then into a DFU in the cmake build (previously, it was only done in the
2021-01-26 20:31:45 +01:00
jlukanc
da56ca5bfb remove vibtimer from .h to fix nonstop vibration 2021-01-25 13:03:04 -05:00
petter
3dd88339f3 create motorcontroller in main and pass by reference 2021-01-25 12:45:04 -05:00
jlukanc
f27e632906 move app timer def 2021-01-25 12:44:58 -05:00
petter
169b861af1 fix build warnings in HR implementation 2021-01-25 14:53:44 +01:00
The King
8c3df5f021
Merge branch 'develop' into upstream-dev 2021-01-24 16:01:14 -05:00
Jean-François Milants
3d1881c5ab Revert invalid changes in Navigation.h and add missing changes in Notifications.h. 2021-01-24 17:27:48 +01:00
Jean-François Milants
219bafb01a Handle call notification the same way than other notifications.
Display the call notifications in the Notification app, with buttons to accept/reject the call.
2021-01-24 17:22:39 +01:00
jlukanc
51c8cadcb7 fix merge issue 2021-01-23 16:13:58 -05:00
jlukanc
4cbcc99c8d fis merge conflict? 2021-01-23 16:12:06 -05:00
JF002
80838d1e42
Merge pull request #178 from petterhs/docker
check for cmake build-success before running post-build.sh
2021-01-23 21:33:11 +01:00
JF002
0a237a7c3a
Merge pull request #175 from nscooling/fix_octal_error_in_St7789_list
changed command MemoryDataAccessControl from 036 to 0x36 in St7789 class
2021-01-23 21:24:01 +01:00
JF002
d517b1109c
Merge pull request #172 from Avamander/patch-1
Create FUNDING.yml
2021-01-23 21:21:04 +01:00
jlukanc
bf7d77bd34 remove unneeded defines 2021-01-23 15:15:42 -05:00
Jean-François Milants
0a169b15f1 Upgrade feature list in main README.md file. 2021-01-23 21:05:37 +01:00
Jean-François Milants
84b509ed95 Set version to 0.11.0 2021-01-23 17:39:53 +01:00
petter
a028c39ddd check for cmake build-success before running post-build.sh 2021-01-23 11:11:14 +01:00
petter
6d76dbc911 change Notification Event base UUID 2021-01-21 23:36:17 +01:00
petter
2d90571f0d change Notification Event UUID 2021-01-21 23:15:34 +01:00
Rasmus Schenstrom
10ba20876f Add incoming call functionality
Add categories to AlertNotification

Add new alert notification screens bases

Add Incoming Call

Add Modal

Add event to AlertNotification

Co-authored-by: Robin Karlsson <robin.karlsson@protonmail.com>
2021-01-21 23:15:29 +01:00
Niall Cooling
66a296d0f3 changed command MemoryDataAccessControl from 036 to 0x36 in St7789 class 2021-01-21 07:51:43 +00:00
JF002
7e27bc8733
Merge pull request #173 from michaelPotter/patch-1
Fix config file discrepancy
2021-01-20 20:43:42 +00:00
JF002
be48f5275a
Merge pull request #168 from Panky-codes/fix-erratic-battery
Fix erratic battery
2021-01-20 20:41:55 +00:00
Jean-François Milants
6d85139387 Merge branch 'piggz-nav' into develop 2021-01-20 21:34:21 +01:00
Jean-François Milants
522a1eb0be Merge branch piggz/nav into develop:
- fix conflict
 - add a icon for the navigation app.
2021-01-20 21:34:09 +01:00
JF002
a0f2fa8469
Merge pull request #169 from JF002/heartRateSensor
Heart rate sensor
2021-01-20 20:11:56 +00:00
JF002
35d4f6d487
Merge pull request #171 from JF002/fix-lvgl-animation
Fix bug in animation management for lv_label
2021-01-20 20:09:59 +00:00
JF002
0e679a02af
Merge pull request #174 from JF002/fixMusicServiceUUID
Fix music service UUID
2021-01-20 20:07:12 +00:00
Jean-François Milants
ba03372f3b Music UUID must start with 00000000 instead of 00010000 (copy/paste error) 2021-01-19 21:38:53 +01:00
Jean-François Milants
ccbe2e8e1b Adapt the UUID of Music service according to new guidelines. 2021-01-19 21:27:44 +01:00
Jean-François Milants
54d437adb8 Add guideline to chose the UUID of custom BLE services in docs. 2021-01-19 21:25:57 +01:00
Michael Potter
c78291de65
Fix config file discrepancy
Fixes a discrepancy with config file naming. The config files it tells you to create end in ocd, but the example flash command uses a filename ending in cfg
2021-01-19 11:07:47 -08:00
Avamander
74f094d4e9
Create FUNDING.yml
Added a link to the LiberaPay donation page
2021-01-17 20:53:04 +02:00
Jean-François Milants
39d9fc2053 Fix bug in animation management for lv_label 2021-01-17 18:25:22 +01:00
Jean-François Milants
68674cec53 Add heart rate BLE service. 2021-01-17 16:34:14 +01:00
Jean-François Milants
3a3a14115a Add License/copyright info in HR related files. 2021-01-17 16:33:45 +01:00
panky-codes
b31c0e7e45 Added more descriptive comments in doxygen format. 2021-01-17 11:06:24 +01:00
Jean-François Milants
04063cf0af HR Sensor : Add start/stop button to the HeartRate app (the HR sensors stays ON when the app is closed), display the HR value on the Clock app. 2021-01-17 10:39:46 +01:00
panky-codes
952021cdb6 Changed float to int in battery controller file. 2021-01-16 21:31:58 +01:00
panky-codes
8697a06642 Changed std accumulate to use int instead of a float. 2021-01-16 20:46:01 +01:00
panky-codes
271ca78be5 Converted all the other float usage to int. 2021-01-16 20:18:55 +01:00
panky-codes
e2d1f81915 Converted percent remaining calc to int. 2021-01-16 19:51:32 +01:00
panky-codes
11280d5f37 Adjusted the firmware to display percent instead of gfx. 2021-01-16 14:55:13 +01:00
jlukanc
b5992fd7ec add motor to notifs, fix tabs in motorcontroller.h 2021-01-15 22:49:37 -05:00
jlukanc
ce6c5d3bd3 add motorcontroller to cmake 2021-01-15 22:46:03 -05:00
jlukanc
fbb77baa3b add non-blocking motor controller 2021-01-15 22:11:53 -05:00
panky-codes
dece6c6bc8 Adapted the accumulate function to return float. 2021-01-14 22:11:17 +01:00
panky-codes
b8f943e73c Implemented a circular buffer and added an average alg for batter remaining percentage. 2021-01-14 21:22:36 +01:00
JF002
f1e7d0b469
Merge pull request #160 from petterhs/fixMusicUUIDTypo
fix MusicService UUID typo in comment
2021-01-13 20:49:51 +00:00
JF002
5d39cd0a6e
Merge pull request #150 from Nuxij/gitpod-config
Custom Dockerfile for gitpod.io
2021-01-13 20:35:51 +00:00
Jean-François Milants
c82c22650c HR Sensor : do not go to sleep when the HR app is running. 2021-01-10 22:02:21 +01:00
Jean-François Milants
1a582815ba First implementation of the HR sensor using 100% foss code (ported from waspos) 2021-01-10 17:57:26 +01:00
petter
10376cd81c fix MusicService UUID typo in comment 2021-01-08 15:35:43 +01:00
Joe Eaves
cf187d342c Use root for package installation
And forget the chown.
sudo can be used if the dependencies ever need to be updated "live"
2021-01-05 00:34:15 +00:00
Joe Eaves
0880d53a94 Custom Dockerfile for gitpod.io
Little configuration to give https://gitpod.io users an environment with the SDKs pre-installed
2021-01-05 00:34:15 +00:00
Jean-François Milants
50ae0ae5e0 Set version to 0.10.0. 2021-01-04 19:56:01 +01:00
JF002
033a09db6d
Merge pull request #154 from jedmijares/twos-game
Adds 2048 clone game
2021-01-03 13:40:29 +00:00
Jean-François Milants
e0082f0ae3 Rename Pinetime in InfiniTime in sysinfo app. 2021-01-02 21:23:40 +01:00
Jed
12617ed1bf adds 2048 clone game
styles table


reads touch events


allows moving tiles


allows merging tiles


improves tile movement


allows merging tiles


adds score display


implements color


edit comments


adjust game logic


disallows double merges
2021-01-02 14:15:12 -06:00
JF002
1ca0c52983
Merge pull request #151 from nobodywasishere/copying-condition
Add source code license and link to github to system app
2021-01-02 20:14:13 +00:00
Michael
1a6de3326f Add source code license and link to github to system app 2020-12-28 02:45:24 -05:00
JF002
b4fb8897ac
Merge pull request #149 from Nuxij/unified-dockerfile
Unify the Dockerfiles by fleshing out build.sh
2020-12-23 15:20:20 +01:00
Joe Eaves
5cdd3f6e6f Improve the post_build again, again? 2020-12-22 12:40:21 +00:00
Joe Eaves
6c6ffc61ee Make the post_build output a little cleaner 2020-12-22 11:39:21 +00:00
Joe Eaves
1f243aeedb Make TOOLS_DIR if needed
Added some extra dir names to gitignore
2020-12-22 11:38:57 +00:00
Joe Eaves
186fee9337 Generate post_build.sh into CMAKE_CURRENT_BINARY_DIR 2020-12-22 11:38:17 +00:00
Joe Eaves
60ef9b54fb Integrate improvements from #137
Also fixed a bug with empty quoted strings
2020-12-21 03:10:42 +00:00
Joe Eaves
a7df0a0279 Unify the Dockerfiles by fleshing out build.sh
Script is written to handle it's own dependencies so it can be used within Docker or on the host system
2020-12-21 01:42:41 +00:00
JF002
276c8aa308
Merge pull request #147 from ZephyrLabs/Paddle-app
Paddle-app (updated)
2020-12-20 11:19:23 +01:00
ZephyrLabs
cc04c2c1f8 Update Paddle.cpp
blankline removal
2020-12-20 11:53:39 +05:30
ZephyrLabs
61e78d338b Update Paddle.cpp
fix uppercase
2020-12-20 09:32:00 +05:30
ZephyrLabs
020840e04f Update Paddle.h
fix uppercase
2020-12-20 09:28:51 +05:30
ZephyrLabs
b098d27d08 Update Paddle.cpp
tranparent paddle bug fix.
2020-12-20 09:23:31 +05:30
JF002
7c8fb9a468
Merge pull request #137 from pfeerick/docker
Add docker hub image, and other tweaks to docker image and documentation
2020-12-19 20:30:04 +01:00
Peter Feerick
aa45f25174 Missed username for some Docker Hub commands 2020-12-15 20:17:24 +10:00
Peter Feerick
72960ef880 Minor changes to docker doc wording 2020-12-13 10:02:08 +10:00
Peter Feerick
edc88b6042 Add Docker Hub info to docs and tweak instructions 2020-12-13 09:50:20 +10:00
Peter Feerick
3eab95ea4e Add cleanup and make download stages more readable 2020-12-12 13:02:55 +10:00
Peter Feerick
1aaa906a78 Expand update block for readability and add cleanup 2020-12-12 12:58:14 +10:00
Peter Feerick
8a6b828ab7 Move user block to reduce layer change breakage + tweaks 2020-12-12 12:56:21 +10:00
Peter Feerick
d50912a837 Reference specific architectures 2020-12-12 12:33:38 +10:00
ZephyrLabs
ea4d2560cf Update Paddle.cpp
added changes from PR
2020-12-08 10:06:30 +05:30
ZephyrLabs
6b2dbafd6c Update Paddle.h
add changes from PR
2020-12-08 09:50:44 +05:30
ZephyrLabs
a701ef23d8 Update Symbols.h
change symbol to correct vale
2020-12-04 14:09:12 +05:30
ZephyrLabs
418d857308 Update Paddle.cpp
bugfix: add missing class
2020-12-03 20:59:22 +05:30
ZephyrLabs
ad1a99acac Update Paddle.h
bugfix: add missing class
2020-12-03 20:57:54 +05:30
ZephyrLabs
09a94ee2b8 Update DisplayApp.cpp
fixed file typo
2020-12-03 20:17:22 +05:30
ZephyrLabs
91b37f8de0 Update DisplayApp.cpp
added Paddle header and paddle app screen
2020-12-03 20:04:37 +05:30
ZephyrLabs
253a86bb8c Update Apps.h
added Paddle app
2020-12-03 20:03:45 +05:30
ZephyrLabs
4f41d4d854 Update Paddle.cpp
create Paddle.cpp
2020-12-03 20:03:11 +05:30
ZephyrLabs
ed34096320 Update Paddle.h
created Paddle.h
2020-12-03 20:02:58 +05:30
ZephyrLabs
96346b9884 Update jetbrains_mono_bold_20.c
added paddle symbol in font
2020-12-03 20:02:35 +05:30
ZephyrLabs
29989b323e Update Readme.md
added range of paddle symbol
2020-12-03 20:02:08 +05:30
ZephyrLabs
251dddb0bf Update Symbols.h
added paddle symbol
2020-12-03 20:01:44 +05:30
ZephyrLabs
adfec51230 Update ApplicationList.cpp
added paddle app
2020-12-03 20:01:03 +05:30
ZephyrLabs
1d69c79942 Addition of new files in MakeList
added Paddle.cpp and Paddle.h
2020-12-03 19:46:36 +05:30
JF002
b404ac50db
Merge pull request #139 from pfeerick/rename-dockerfiles
Rename dockerfile folders to correct architectures
2020-12-01 21:47:46 +01:00
JF002
c6556bcdea
Merge pull request #136 from okaestne/include-cleanup
Includes cleanup
2020-12-01 21:44:44 +01:00
JF002
c87de415b2
Merge pull request #128 from AirHamster/cyrillic-font
Add Cyrillic symbols into jetbrains font
2020-12-01 21:39:44 +01:00
JF002
737a7e57ca
Merge pull request #124 from IoTPanic/patch-waketime-iotpanic
Reduced interval where the display shows the previous time on wake
2020-12-01 21:20:02 +01:00
JF
83d1bdd03c Merge branch 'develop' of https://github.com/JF002/Pinetime into develop 2020-11-20 18:37:36 +01:00
JF
a205509cbe Add new Getting started doc. 2020-11-20 18:36:39 +01:00
Peter Feerick
8f69a45fd9 Rename dockerfile folders to correct architectures 2020-11-20 10:07:17 +10:00
Samuel Archibald
e180ec5f3a Jeez this is what I get for rushing 😬 2020-11-19 15:50:39 -05:00
Samuel Archibald
e18485c92b Whoops! Don't look at this XD 2020-11-19 15:47:27 -05:00
Samuel Archibald
681182d16a Readability and fix 2020-11-19 15:44:57 -05:00
JF002
fa4c0d5e3e
Merge pull request #125 from IoTPanic/patch-menubattery-iotpanic
Fixed battery percentage readout in the menu display
2020-11-19 19:49:05 +01:00
JF002
f96e0b53d0
Merge pull request #49 from incyi/patch-1
Update README.md
2020-11-18 20:57:46 +01:00
incyi
9d96b09048
Update README.md 2020-11-18 08:49:27 +01:00
Samuel Archibald
3703611a60 Fixes #119! Improved based off suggested changes 2020-11-18 00:00:33 -05:00
okaestne
6e22509b5f
Delete Tab.cpp and Tab.h
as discussed with JF
2020-11-17 20:51:27 +01:00
JF002
b50e222e2e
Merge pull request #120 from ryanplusplus/transfert-typo
Fixed typo (Transfert -> Transfer)
2020-11-17 19:43:45 +01:00
JF002
eb3a22554c
Merge pull request #131 from pfeerick/doc-fix
Fix companion app documentation links broken during #68
2020-11-17 19:14:44 +01:00
JF002
fc3f8f0f78
Merge pull request #134 from miguemoya/fix-gh-actions-deprecation
Fix error install Cmake  main.yml
2020-11-17 19:14:02 +01:00
JF002
f5aecb3e84
Merge pull request #135 from ryanplusplus/flash-correct-file-with-jlink
Flash the correct file when running FLASH_pinetime-app with JLink
2020-11-17 19:13:29 +01:00
Samuel Archibald
600dbb0280 Fix for comments on issue #125, bounds check removed 2020-11-16 09:43:32 -05:00
okaestne
f42b33ed6d
fix TWI includes 2020-11-16 01:35:51 +01:00
okaestne
cadc0c25d4
Include cleanup: displayapp + screens 2020-11-16 01:35:51 +01:00
okaestne
1516573df4
Include cleanup: components 2020-11-16 01:35:45 +01:00
okaestne
c3475b92fa
Include cleanup: drivers 2020-11-15 05:04:22 +01:00
Ryan Hartlage
a30282bdd5 Flash the correct file when running FLASH_pinetime-app with JLink 2020-11-14 19:23:16 -05:00
Miguel Ángel Ordóñez Moya
3c7258ddb8
Update main.yml
When installing Cmake you get Error: The add-path command is deprecated and will be disabled on November 16th...
And the file pinetime-mcuboot-app-dfu.zip was being generated as pinetime-mcuboot-app-dfu.zip.zip
2020-11-14 23:10:05 +01:00
Peter Feerick
540089954a Fix companion app documentation links broken during #68 2020-11-09 20:01:03 +10:00
JF
f0e1f98823 Increase timeout of DFU characteristic discovery to fix failed attempts to OTA with dfu.py. 2020-11-08 11:35:15 +01:00
Ilia Zarubin
c25fd2e37f fonts: readme: add cyrillic symbols UTF-8 range 2020-11-07 23:44:22 +03:00
Ilia Zarubin
64408803be fonts: add cyrillic symbols in mono bold font
Just converted jetbrains and awesome fonts with additional cyrillic
symbols.
2020-11-07 23:43:20 +03:00
Samuel Archibald
c816d9b88e Fix to #119 2020-11-02 23:29:42 -05:00
Samuel Archibald
37c2768787 This is the actual fix, reducing the time between LCD is turned back on and the next task which will display the time is started. 2020-11-02 23:13:31 -05:00
Samuel Archibald
10c5260187 Fixed displaying last displayed time for ~100ms on wake 2020-11-02 21:14:28 -05:00
Ryan Hartlage
3ccfa1d924 Fixed typo (Transfert -> Transfer) 2020-11-01 15:44:06 -05:00
incyi
aa3735f5c8
Update README.md
Branch set to develop.
2020-10-07 18:02:09 +02:00
incyi
58c0f3ba25
Update README.md 2020-10-07 18:01:01 +02:00
incyi
c63b97c65e
Update README.md
add ci badge.
2020-07-28 22:51:14 +02:00
1204 changed files with 91036 additions and 137651 deletions

141
.clang-format Normal file
View File

@ -0,0 +1,141 @@
---
Language: Cpp
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: true
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: false
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortLambdasOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: true
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 140
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 2
ContinuationIndentWidth: 2
Cpp11BracedListStyle: true
DeriveLineEnding: false
DerivePointerAlignment: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: true
FixNamespaceComments: false
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
- Regex: '.*'
Priority: 1
SortPriority: 0
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: false
IndentCaseLabels: true
IndentGotoLabels: true
IndentPPDirectives: BeforeHash
IndentWidth: 2
IndentWrappedFunctionNames: false
# Requires Clang >= 15, could also cause incorrect code formatting:
# InsertBraces: true
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: All
PackConstructorInitializers: NextLine
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
ReferenceAlignment: Pointer
ReflowComments: true
SeparateDefinitionBlocks: Always
SortIncludes: false
SortUsingDeclarations: true
SpaceAfterCStyleCast: true
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatementsExceptForEachMacros
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
SpaceAroundPointerQualifiers: Default
Standard: Latest
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseCRLF: false
UseTab: Never
...

37
.clang-tidy Normal file
View File

@ -0,0 +1,37 @@
Checks: 'bugprone-*,
cert-*,
cppcoreguidelines-*,
hicpp-*,
misc-*,
modernize-*,
performance-*,
portability-*,
readability-*,
fuchsia-trailing-return,
-cert-err58-cpp,
-cert-err60-cpp,
-cppcoreguidelines-prefer-member-initializer,
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-cppcoreguidelines-pro-bounds-constant-array-index,
-cppcoreguidelines-pro-type-static-cast-downcast,
-cppcoreguidelines-pro-type-union-access,
-cppcoreguidelines-pro-type-cstyle-cast,
-cppcoreguidelines-pro-type-vararg,
-cppcoreguidelines-avoid-magic-numbers,
-cppcoreguidelines-avoid-non-const-global-variables,
-cppcoreguidelines-avoid-c-arrays,
-cppcoreguidelines-special-member-functions,
-hicpp-avoid-c-arrays,
-hicpp-uppercase-literal-suffix,
-hicpp-vararg,
-hicpp-no-assembler,
-hicpp-no-array-decay,
-hicpp-signed-bitwise,
-hicpp-special-member-functions,
-modernize-use-trailing-return-type,
-modernize-avoid-c-arrays,
-readability-magic-numbers,
-readability-uppercase-literal-suffix'
CheckOptions:
- key: readability-function-cognitive-complexity.Threshold
value: 100

32
.devcontainer.json Normal file
View File

@ -0,0 +1,32 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.154.2/containers/cpp
{
"build": {
"dockerfile": "docker/Dockerfile"
},
"customizations": {
"vscode": {
"settings": {
// Set *default* container specific settings.json values on container create.
"terminal.integrated.profiles.linux": {
"bash": {
"path": "/bin/bash"
}
},
"terminal.integrated.defaultProfile.linux": "bash",
"editor.formatOnSave": true,
// FIXME: This and the Dockerfile might get out of sync
"clang-format.executable": "clang-format-14"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"marus25.cortex-debug",
"notskm.clang-tidy",
"mjohns.clang-format"
]
}
},
"remoteUser": "infinitime"
}

19
.gitattributes vendored Normal file
View File

@ -0,0 +1,19 @@
# Set the default behavior, in case people don't have core.autocrlf set.
# Prevent build errors on non lf systems (like Windows), we need files with lf as newlines.
* text=auto eol=lf
# Explicitly declare text files you want to always be normalized and converted
# to lf line endings on checkout.
*.c text
*.cpp text
*.h text
*.hpp text
# Denote all files that are truly binary and should not be modified.
*.png binary
*.bin binary
*.jpg binary
*.jpeg binary
# Declare (Unix-style) files that will always have LF line endings on checkout.
*.sh text eol=lf

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
liberapay: JF002

55
.github/ISSUE_TEMPLATE/bug-report.yaml vendored Normal file
View File

@ -0,0 +1,55 @@
name: Bug Report
description: Something is broken
labels: ["bug"]
body:
- type: checkboxes
attributes:
label: Verification
description: Before submitting a bug report, check if similar issues already exist and use those issues to provide your feedback instead.
options:
- label: I searched for similar bug reports (including closed issues) and found none was relevant.
required: true
- type: input
id: desc-brief
attributes:
label: What happened?
description: A one-line description of the bug.
placeholder: "Ex. I woke up as a Kafkian insect this morning."
validations:
required: true
- type: input
id: desc-expected
attributes:
label: What should happen instead?
description: The behaviour you were expecting to see.
placeholder: "Ex. I was expecting to wake up as a human."
- type: textarea
id: desc-steps
attributes:
label: Reproduction steps
description: "How do you trigger this bug? Please walk us through it step by step."
validations:
required: true
- type: textarea
id: desc-long
attributes:
label: More details?
description: Give us more details about the bug and any personal attempts you made to fix it.
placeholder: Tell us more!
- type: input
id: version
attributes:
label: Version
description: |
What [version of the firmware](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/doc/gettingStarted/updating-software.md#checking-the-version-of-infinitime) are you running?
If you are running an older version, please consider [updating to the latest firmware](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/doc/gettingStarted/updating-software.md#updating-with-companion-apps).
If you are running directly from git, specify the branch or the commit hash directly.
placeholder: "Ex. v1.11.0 or main or fc922b60"
validations:
required: true
- type: input
id: companion-app
attributes:
label: Companion app
description: Which companion app are you using (if relevant)?
placeholder: "Ex. Gadgetbridge v0.60.0, Siglo v0.9.4"

11
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,11 @@
blank_issues_enabled: true
contact_links:
- name: Feature request
url: https://github.com/InfiniTimeOrg/InfiniTime/discussions/categories/ideas
about: Request a feature or share your ideas
- name: PineTime community chat (Matrix)
url: https://app.element.io/#/room/#pinetime:matrix.org
about: Please ask questions about PineTime here.
- name: PineTime developers chat (Matrix)
url: https://app.element.io/#/room/#pinetime-dev:matrix.org
about: Please ask questions about PineTime development here.

View File

@ -0,0 +1,31 @@
name: Issue report
description: Something's not good enough
body:
- type: checkboxes
attributes:
label: Verification
description: Before submitting an issue, check if similar issues already exist and use those issues to provide your feedback instead.
options:
- label: I searched for similar issues (including closed issues) and found none was relevant.
required: true
- type: textarea
attributes:
label: Introduce the issue
description: Explain why it is an issue if necessary.
validations:
required: true
- type: textarea
attributes:
label: Preferred solution
description: You can suggest a solution to the issue here.
placeholder: Optional
- type: input
attributes:
label: Version
description: |
What [version of the firmware](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/doc/gettingStarted/updating-software.md#checking-the-version-of-infinitime) are you running?
If you are running an older version, please consider [updating to the latest firmware](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/doc/gettingStarted/updating-software.md#updating-with-companion-apps).
If you are running directly from git, specify the branch or the commit hash directly.
placeholder: Ex. v1.11.0 or main or fc922b60
validations:
required: false

70
.github/workflows/docker.yml vendored Normal file
View File

@ -0,0 +1,70 @@
name: Build and push Docker image
on:
push:
branches: [ main ]
paths:
- 'docker/**'
pull_request:
branches: [ main ]
paths:
- 'docker/**'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-22.04
env:
USERNAME: infinitime
steps:
- uses: actions/checkout@v3
- name: Log in to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_LOGIN_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set up Docker metadata
id: meta
uses: docker/metadata-action@v4
with:
images: |
${{ secrets.DOCKER_HUB_IMAGE_USERNAME || env.USERNAME }}/infinitime-build
tags: |
type=sha
type=raw,value=latest
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
if: github.event_name != 'pull_request'
uses: docker/build-push-action@v3
with:
context: ./docker/
file: ./docker/Dockerfile
platforms: linux/amd64,linux/arm64
builder: ${{ steps.buildx.outputs.name }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_IMAGE_USERNAME || env.USERNAME }}/infinitime-build:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_HUB_IMAGE_USERNAME || env.USERNAME }}/infinitime-build:buildcache,mode=max
- name: Build
if: github.event_name == 'pull_request'
uses: docker/build-push-action@v3
with:
context: ./docker/
file: ./docker/Dockerfile
platforms: linux/amd64,linux/arm64
builder: ${{ steps.buildx.outputs.name }}
push: false
cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_IMAGE_USERNAME || env.USERNAME }}/infinitime-build:buildcache

70
.github/workflows/format.yml vendored Normal file
View File

@ -0,0 +1,70 @@
name: Code formatting
on:
pull_request:
branches: [ main ]
paths:
- '**.cpp'
- '**.h'
- '!src/libs/**'
- '!src/FreeRTOS/**'
jobs:
test-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1000
- name: Fetch base branch
run: git fetch origin "$GITHUB_BASE_REF":"$GITHUB_BASE_REF"
- name: Install clang-format
run: |
sudo apt-get update
sudo apt-get -y install clang-format-14
- name: Check formatting
run: tests/test-format.sh
- name: Upload patches
uses: actions/upload-artifact@v4
if: failure()
with:
name: Patches
path: ./*.patch
test-clang-tidy:
runs-on: ubuntu-latest
container:
image: infinitime/infinitime-build
steps:
# This workaround fixes the error "unsafe repository (REPO is owned by someone else)".
# See https://github.com/actions/checkout/issues/760 and https://github.com/actions/checkout/issues/766
# The fix in "actions/checkout@v2" was not sufficient as the build process also uses git (to get the current
# commit hash, for example).
- name: Workaround permission issues
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Checkout source files
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 1000
- name: Fetch base branch
run: git fetch origin "$GITHUB_BASE_REF":"$GITHUB_BASE_REF"
- name: Install clang-tidy
run: |
apt-get update
apt-get -y install clang-tidy-14
- name: Prepare environment
shell: bash
env:
SOURCES_DIR: .
run: |
. docker/build.sh
GetGcc
# I guess these already exist inside the docker?
#GetNrfSdk
#GetMcuBoot
CmakeGenerate
- run: tests/test-tidy.sh

19
.github/workflows/getSize.sh vendored Executable file
View File

@ -0,0 +1,19 @@
#!/bin/sh
# Requires environment variables from docker/build.sh
set -e
SIZE_BIN="$TOOLS_DIR/$GCC_ARM_PATH/bin/arm-none-eabi-size"
[ ! -x "$SIZE_BIN" ] && exit 1
[ -z "$1" ] && exit 1
SIZE_OUTPUT=$($SIZE_BIN "$1" | tail -n1)
TEXT_SIZE=$(echo "$SIZE_OUTPUT" | cut -f 1 |tr -d '[:blank:]')
DATA_SIZE=$(echo "$SIZE_OUTPUT" | cut -f 2 |tr -d '[:blank:]')
BSS_SIZE=$(echo "$SIZE_OUTPUT" | cut -f 3 |tr -d '[:blank:]')
echo "text_size=$TEXT_SIZE"
echo "data_size=$DATA_SIZE"
echo "bss_size=$BSS_SIZE"

View File

@ -1,171 +1,224 @@
# GitHub Actions Workflow to build FreeRTOS Firmware for PineTime Smart Watch name: CI
# See https://lupyuen.github.io/pinetime-rust-mynewt/articles/cloud
# Based on https://github.com/JF002/Pinetime/blob/master/doc/buildAndProgram.md
# and https://github.com/JF002/Pinetime/blob/master/bootloader/README.md
# Name of this Workflow # Run this workflow whenever the build may be affected
name: Build PineTime Firmware
# When to run this Workflow...
on: on:
# Run this Workflow when files are updated (Pushed) in the "master" Branch
push: push:
branches: [ master ] branches: [ main ]
paths-ignore:
# Also run this Workflow when a Pull Request is created or updated in the "master" Branch - 'doc/**'
- '**.md'
pull_request: pull_request:
branches: [ master ] branches: [ main ]
paths-ignore:
- 'doc/**'
- '**.md'
# Steps to run for the Workflow
jobs: jobs:
build: build-firmware:
runs-on: ubuntu-22.04
# Run these steps on Ubuntu container:
runs-on: ubuntu-latest image: infinitime/infinitime-build
outputs:
text_size: ${{ steps.output-sizes.outputs.text_size }}
data_size: ${{ steps.output-sizes.outputs.data_size }}
bss_size: ${{ steps.output-sizes.outputs.bss_size }}
firmware_artifact: ${{ steps.upload-firmware.outputs.artifact-id }}
resources_artifact: ${{ steps.upload-resources.outputs.artifact-id }}
env:
# InfiniTime sources are downloaded to the current directory.
# Override SOURCES_DIR in build.sh
SOURCES_DIR: .
steps: steps:
#########################################################################################
# Download and Cache Dependencies
- name: Install cmake
uses: lukka/get-cmake@v3.18.0
- name: Check cache for Embedded Arm Toolchain arm-none-eabi-gcc
id: cache-toolchain
uses: actions/cache@v2
env:
cache-name: cache-toolchain-9-2020-q2
with:
path: ${{ runner.temp }}/arm-none-eabi
key: ${{ runner.os }}-build-${{ env.cache-name }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Install Embedded Arm Toolchain arm-none-eabi-gcc
if: steps.cache-toolchain.outputs.cache-hit != 'true' # Install toolchain if not found in cache
uses: fiam/arm-none-eabi-gcc@v1.0.2
with:
# GNU Embedded Toolchain for Arm release name, in the V-YYYY-qZ format (e.g. "9-2019-q4")
release: 9-2020-q2
# Directory to unpack GCC to. Defaults to a temporary directory.
directory: ${{ runner.temp }}/arm-none-eabi
- name: Check cache for nRF5 SDK
id: cache-nrf5sdk
uses: actions/cache@v2
env:
cache-name: cache-nrf5sdk
with:
path: ${{ runner.temp }}/nrf5_sdk
key: ${{ runner.os }}-build-${{ env.cache-name }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Install nRF5 SDK
if: steps.cache-nrf5sdk.outputs.cache-hit != 'true' # Install SDK if not found in cache
run: |
cd ${{ runner.temp }}
curl https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip -o nrf5_sdk.zip
unzip nrf5_sdk.zip
mv nRF5_SDK_15.3.0_59ac345 nrf5_sdk
- name: Check cache for MCUBoot
id: cache-mcuboot
uses: actions/cache@v2
env:
cache-name: cache-mcuboot
with:
path: ${{ runner.temp }}/mcuboot
key: ${{ runner.os }}-build-${{ env.cache-name }}
restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Install MCUBoot
if: steps.cache-mcuboot.outputs.cache-hit != 'true' # Install MCUBoot if not found in cache
run: |
cd ${{ runner.temp }}
git clone --branch v1.5.0 https://github.com/JuulLabs-OSS/mcuboot
- name: Install imgtool dependencies
run: pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt
- name: Install adafruit-nrfutil
run: |
pip3 install --user wheel
pip3 install --user setuptools
pip3 install --user adafruit-nrfutil
#########################################################################################
# Checkout
- name: Checkout source files - name: Checkout source files
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Show files
run: set ; pwd ; ls -l
#########################################################################################
# CMake
- name: CMake
run: |
mkdir -p build
cd build
cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 ../
#########################################################################################
# Make and Upload DFU Package
# pinetime-mcuboot-app.img must be flashed at address 0x8000 in the internal flash memory with OpenOCD:
# program image.bin 0x8000
# For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details.
# For Faster Builds: Add "make" option "-j"
- name: Make pinetime-mcuboot-app
run: |
cd build
make pinetime-mcuboot-app
- name: Create firmware image
run: |
# The generated firmware binary looks like "pinetime-mcuboot-app-0.8.2.bin"
ls -l build/src/pinetime-mcuboot-app*.bin
${{ runner.temp }}/mcuboot/scripts/imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header build/src/pinetime-mcuboot-app*.bin build/src/pinetime-mcuboot-app-img.bin
${{ runner.temp }}/mcuboot/scripts/imgtool.py verify build/src/pinetime-mcuboot-app-img.bin
- name: Create DFU package
run: |
~/.local/bin/adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application build/src/pinetime-mcuboot-app-img.bin build/src/pinetime-mcuboot-app-dfu.zip
unzip -v build/src/pinetime-mcuboot-app-dfu.zip
# Unzip the package because Upload Artifact will zip up the files
unzip build/src/pinetime-mcuboot-app-dfu.zip -d build/src/pinetime-mcuboot-app-dfu
- name: Upload DFU package
uses: actions/upload-artifact@v2
with: with:
name: pinetime-mcuboot-app-dfu.zip submodules: recursive
path: build/src/pinetime-mcuboot-app-dfu/* - name: Install resource build dependencies
#########################################################################################
# Make and Upload Standalone Firmware
- name: Make pinetime-app
run: | run: |
cd build apt-get update
make pinetime-app apt-get -y install --no-install-recommends python3-pil
- name: Build
- name: Upload standalone firmware shell: bash
uses: actions/upload-artifact@v2 run: |
git config --global --add safe.directory /__w/InfiniTime/InfiniTime
/opt/build.sh all
- name: Output build size
id: output-sizes
shell: bash
run: |
. /opt/build.sh
.github/workflows/getSize.sh "$BUILD_DIR"/src/pinetime-app-*.out >> $GITHUB_OUTPUT
# Unzip the package because Upload Artifact will zip up the files
- name: Unzip DFU package
run: unzip ./build/output/pinetime-mcuboot-app-dfu-*.zip -d ./build/output/pinetime-mcuboot-app-dfu
- name: Set ref_name, but replace slashes with dashes.
shell: bash
env:
ref_name: ${{ github.head_ref || github.ref_name }}
run: echo "REF_NAME=${ref_name//\//-}" >> $GITHUB_ENV
- name: Upload DFU artifacts
uses: actions/upload-artifact@v4
with: with:
name: pinetime-app.out name: InfiniTime DFU ${{ env.REF_NAME }}
path: build/src/pinetime-app*.out path: ./build/output/pinetime-mcuboot-app-dfu/*
- name: Upload MCUBoot image artifacts
uses: actions/upload-artifact@v4
with:
name: InfiniTime MCUBoot image ${{ env.REF_NAME }}
path: ./build/output/pinetime-mcuboot-app-image-*.bin
- name: Upload standalone ELF artifacts
uses: actions/upload-artifact@v4
id: upload-firmware
with:
name: InfiniTime image ${{ env.REF_NAME }}
path: ./build/output/src/pinetime-app-*.out
- name: Upload resources artifacts
uses: actions/upload-artifact@v4
id: upload-resources
with:
name: InfiniTime resources ${{ env.REF_NAME }}
path: ./build/output/infinitime-resources-*.zip
######################################################################################### build-simulator:
# Finish runs-on: ubuntu-22.04
steps:
- name: Install SDL2 and libpng development package
run: |
sudo apt-get update
sudo apt-get -y install libsdl2-dev libpng-dev
- name: Find output - name: Install Ninja
run: | run: |
find . -name "pinetime-app.*" -ls sudo apt-get -y install ninja-build
find . -name "pinetime-mcuboot-app.*" -ls
# Embedded Arm Toolchain and nRF5 SDK will only be cached if the build succeeds. - name: Install lv_font_conv
# So make sure that the first build always succeeds, e.g. comment out the "Make" step. run:
npm i -g lv_font_conv@1.5.2
- name: Checkout source files
uses: actions/checkout@v3
with:
submodules: recursive
- name: Get InfiniSim repo
run: |
git clone https://github.com/InfiniTimeOrg/InfiniSim.git --depth 1 --branch main
git -C InfiniSim submodule update --init lv_drivers
- name: CMake
# disable BUILD_RESOURCES as this is already done when building the firmware
run: |
cmake -G Ninja -S InfiniSim -B build_lv_sim -DInfiniTime_DIR="${PWD}" -DBUILD_RESOURCES=OFF
- name: Build simulator executable
run: |
cmake --build build_lv_sim
- name: Upload simulator executable
uses: actions/upload-artifact@v4
with:
name: infinisim-${{ env.REF_NAME }}
path: build_lv_sim/infinisim
get-base-ref-size:
if: github.event_name == 'pull_request'
runs-on: ubuntu-22.04
container:
image: infinitime/infinitime-build
outputs:
text_size: ${{ steps.output-sizes.outputs.text_size }}
data_size: ${{ steps.output-sizes.outputs.data_size }}
bss_size: ${{ steps.output-sizes.outputs.bss_size }}
env:
# InfiniTime sources are downloaded to the current directory.
# Override SOURCES_DIR in build.sh
SOURCES_DIR: .
steps:
- name: Checkout current base branch files
uses: actions/checkout@v3
with:
ref: ${{ github.base_ref }}
submodules: recursive
- name: Get base branch SHA
id: get-base-sha
run: |
# Fix for "detected dubious ownership in repository at '/__w/InfiniTime/InfiniTime'"
git config --global --add safe.directory /__w/InfiniTime/InfiniTime
echo base_sha=$(git rev-parse HEAD) >> $GITHUB_OUTPUT
- name: Cache build
id: cache-build
uses: actions/cache@v3
with:
path: ./build
key: build-files-${{ steps.get-base-sha.outputs.base_sha }}
- if: ${{ steps.cache-build.outputs.cache-hit != 'true' }}
name: Build
shell: bash
# Only pinetime-app target is needed, but post_build.sh fails
run: /opt/build.sh all
- name: Output build size
id: output-sizes
shell: bash
run: |
. /opt/build.sh
.github/workflows/getSize.sh "$BUILD_DIR"/src/pinetime-app-*.out >> $GITHUB_OUTPUT
compare-build-size:
if: github.event_name == 'pull_request'
name: 'Compare build size'
needs: [build-firmware, get-base-ref-size]
runs-on: ubuntu-latest
steps:
- name: Compare build size
id: output-sizes-diff
run: |
TEXT_SIZE=${{ needs.build-firmware.outputs.text_size }}
DATA_SIZE=${{ needs.build-firmware.outputs.data_size }}
BSS_SIZE=${{ needs.build-firmware.outputs.bss_size }}
echo "text_size=$TEXT_SIZE"
echo "data_size=$DATA_SIZE"
echo "bss_size=$BSS_SIZE"
echo "text_size=$TEXT_SIZE" >> $GITHUB_OUTPUT
echo "data_size=$DATA_SIZE" >> $GITHUB_OUTPUT
echo "bss_size=$BSS_SIZE" >> $GITHUB_OUTPUT
TEXT_SIZE_BASE=${{ needs.get-base-ref-size.outputs.text_size }}
DATA_SIZE_BASE=${{ needs.get-base-ref-size.outputs.data_size }}
BSS_SIZE_BASE=${{ needs.get-base-ref-size.outputs.bss_size }}
TEXT_SIZE_DIFF=$((TEXT_SIZE - TEXT_SIZE_BASE))
DATA_SIZE_DIFF=$((DATA_SIZE - DATA_SIZE_BASE))
BSS_SIZE_DIFF=$((BSS_SIZE - BSS_SIZE_BASE))
echo "text_diff=$TEXT_SIZE_DIFF"
echo "data_diff=$DATA_SIZE_DIFF"
echo "bss_diff=$BSS_SIZE_DIFF"
echo "text_diff=$TEXT_SIZE_DIFF" >> $GITHUB_OUTPUT
echo "data_diff=$DATA_SIZE_DIFF" >> $GITHUB_OUTPUT
echo "bss_diff=$BSS_SIZE_DIFF" >> $GITHUB_OUTPUT
- name: Write comment information to files
run: |
tee comment << EOF
Build size and comparison to ${{ github.base_ref }}:
| Section | Size | Difference |
| ------- | ---- | ---------- |
| text | ${{ needs.build-firmware.outputs.text_size }}B | ${{ steps.output-sizes-diff.outputs.text_diff }}B |
| data | ${{ needs.build-firmware.outputs.data_size }}B | ${{ steps.output-sizes-diff.outputs.data_diff }}B |
| bss | ${{ needs.build-firmware.outputs.bss_size }}B | ${{ steps.output-sizes-diff.outputs.bss_diff }}B |
[Run in InfiniEmu](https://infiniemu.pipe01.net/?firmware=artifact://${{ github.repository }}/${{ needs.build-firmware.outputs.firmware_artifact }}&resources=artifact://${{ github.repository }}/${{ needs.build-firmware.outputs.resources_artifact }})
EOF
- name: Upload comment
uses: actions/upload-artifact@v4
with:
name: comment
path: comment

56
.github/workflows/pr-comment.yml vendored Normal file
View File

@ -0,0 +1,56 @@
# THIS WORKFLOW HAS WRITE PERMISSIONS TO THE REPO.
# MAKE SURE IT NEVER RUNS ANY CODE FROM THE FORK
name: PR comment
on:
pull_request_target:
branches: [ main ]
paths-ignore:
- 'doc/**'
- '**.md'
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Wait for builds to finish
id: wait-for-build
uses: fountainhead/action-wait-for-check@297be350cf8393728ea4d4b39435c7d7ae167c93
with:
checkName: 'Compare build size'
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ github.event.pull_request.head.sha }}
- if: steps.wait-for-build.outputs.conclusion != 'success'
run: |
tee comment << EOF
Build checks have not completed. Possible reasons for this are:
1. The checks need to be approved by a maintainer
2. The branch has conflicts
3. The firmware build has failed
EOF
- if: steps.wait-for-build.outputs.conclusion == 'success'
name: Download artifact
uses: dawidd6/action-download-artifact@bd10f381a96414ce2b13a11bfa89902ba7cea07f
with:
workflow: main.yml
workflow_conclusion:
pr: ${{ github.event.pull_request.number }}
name: comment
- name: Find Comment
id: find-comment
uses: peter-evans/find-comment@81e2da3af01c92f83cb927cf3ace0e085617c556
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
- name: Create or update comment
uses: peter-evans/create-or-update-comment@5adcb0bb0f9fb3f95ef05400558bdb3f329ee808
with:
comment-id: ${{ steps.find-comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body-file: comment
edit-mode: replace

26
.gitignore vendored
View File

@ -1,10 +1,16 @@
.idea/ .idea/
# Python virtual environment for DFU images
.venv/
# CMake # CMake
cmake-build-*/ cmake-build-*
CMakeFiles/ cmake-*/
CMakeFiles
**/CMakeCache.txt **/CMakeCache.txt
cmake_install.cmake cmake_install.cmake
Makefile Makefile
build
tools
# Resulting binary files # Resulting binary files
*.a *.a
@ -33,3 +39,19 @@ Testing/Temporary/
# Windows # Windows
**/thumbs.db **/thumbs.db
#VSCODE
.vscode/.cortex-debug.registers.state.json
.vscode/.cortex-debug.peripherals.state.json
#build files
src/nRF5_SDK_15.3.0_59ac345
src/arm-none-eabi
# clangd
.cache/
# npm files
node_modules
package.json
package-lock.json

9
.gitmodules vendored Normal file
View File

@ -0,0 +1,9 @@
[submodule "src/libs/lvgl"]
path = src/libs/lvgl
url = https://github.com/InfiniTimeOrg/lvgl.git
[submodule "src/libs/littlefs"]
path = src/libs/littlefs
url = https://github.com/littlefs-project/littlefs.git
[submodule "src/libs/arduinoFFT"]
path = src/libs/arduinoFFT
url = https://github.com/kosme/arduinoFFT.git

18
.gitpod.yml Normal file
View File

@ -0,0 +1,18 @@
image:
file: docker/.gitpod.Dockerfile
github:
prebuilds:
# enable for the master/default branch (defaults to true)
master: true
# enable for all branches in this repo (defaults to false)
branches: false
# enable for pull requests coming from this repo (defaults to true)
pullRequests: false
# enable for pull requests coming from forks (defaults to false)
pullRequestsFromForks: false
# add a "Review in Gitpod" button as a comment to pull requests (defaults to true)
addComment: true
# add a "Review in Gitpod" button to pull requests (defaults to false)
addBadge: false
# add a label once the prebuild is ready to pull requests (defaults to false)
addLabel: false #prebuilt-in-gitpod

View File

@ -12,6 +12,29 @@
<option name="SPACE_BEFORE_REFERENCE_IN_DECLARATION" value="false" /> <option name="SPACE_BEFORE_REFERENCE_IN_DECLARATION" value="false" />
<option name="SPACE_AFTER_REFERENCE_IN_DECLARATION" value="true" /> <option name="SPACE_AFTER_REFERENCE_IN_DECLARATION" value="true" />
</Objective-C> </Objective-C>
<Objective-C-extensions>
<rules>
<rule entity="NAMESPACE" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
<rule entity="MACRO" visibility="ANY" specifier="ANY" prefix="" style="SCREAMING_SNAKE_CASE" suffix="" />
<rule entity="CLASS" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
<rule entity="STRUCT" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="ENUM" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="ENUMERATOR" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
<rule entity="TYPEDEF" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="UNION" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="CLASS_MEMBER_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
<rule entity="STRUCT_MEMBER_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="CLASS_MEMBER_FIELD" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="STRUCT_MEMBER_FIELD" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="GLOBAL_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
<rule entity="GLOBAL_VARIABLE" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="PARAMETER" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="LOCAL_VARIABLE" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
</rules>
</Objective-C-extensions>
<clangFormatSettings>
<option name="ENABLED" value="true" />
</clangFormatSettings>
<codeStyleSettings language="ObjectiveC"> <codeStyleSettings language="ObjectiveC">
<option name="RIGHT_MARGIN" value="140" /> <option name="RIGHT_MARGIN" value="140" />
<option name="IF_BRACE_FORCE" value="3" /> <option name="IF_BRACE_FORCE" value="3" />

40
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,40 @@
{
"env": {
// TODO: This is a duplication of the configuration set in /docker/build.sh!
"TOOLS_DIR": "/opt",
"GCC_ARM_PATH": "gcc-arm-none-eabi-10.3-2021.10"
},
"configurations": [
{
"name": "nrfCC",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/src/**",
"${workspaceFolder}/src"
],
"defines": [],
"compilerPath": "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gcc",
"cStandard": "c11",
"cppStandard": "c++20",
"intelliSenseMode": "linux-gcc-arm",
"configurationProvider": "ms-vscode.cpp-tools",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
},
{
"name": "nrfCC Devcontainer",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/src/**",
"${workspaceFolder}/src"
],
"defines": [],
"compilerPath": "${TOOLS_DIR}/${GCC_ARM_PATH}/bin/arm-none-eabi-gcc",
"cStandard": "c99",
"cppStandard": "c++20",
"intelliSenseMode": "linux-gcc-arm",
"configurationProvider": "ms-vscode.cpp-tools",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
}
],
"version": 4
}

6
.vscode/cmake-kits.json vendored Normal file
View File

@ -0,0 +1,6 @@
[
{
"name": "InfiniTime Compiler",
"environmentSetupScript": "${workspaceFolder}/docker/build.sh"
}
]

62
.vscode/cmake-variants.json vendored Normal file
View File

@ -0,0 +1,62 @@
{
"buildType": {
"default": "release",
"choices": {
"debug": {
"short": "Debug",
"long": "Emit debug information without performing optimizations",
"buildType": "Debug"
},
"release": {
"short": "Release",
"long": "Perform optimizations",
"buildType": "Release"
}
}
},
"programmer":{
"default": "OpenOCD",
"choices":{
"OpenOCD":{
"short":"OpenOCD",
"long": "Use OpenOCD",
"settings":{
"USE_OPENOCD":1
}
},
"JLink":{
"short":"JLink",
"long": "Use JLink",
"settings":{
"USE_JLINK":1
}
},
"GDB":{
"short":"GDB",
"long": "Use GDB",
"settings":{
"USE_GDB_CLIENT":1
}
}
}
},
"DFU": {
"default": "no",
"choices": {
"no": {
"short": "No DFU",
"long": "Do not build DFU",
"settings": {
"BUILD_DFU":"0"
}
},
"yes": {
"short": "Build DFU",
"long": "Build DFU",
"settings": {
"BUILD_DFU":"1"
}
}
}
}
}

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["ms-vscode.cpptools","ms-vscode.cmake-tools","marus25.cortex-debug"]
}

83
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,83 @@
{
"version": "0.1.0",
"configurations": [
{
"name": "Debug - Openocd docker Remote",
"type": "cortex-debug",
"cwd": "${workspaceRoot}",
"executable": "${command:cmake.launchTargetPath}",
"request": "launch",
"servertype": "external",
"gdbPath": "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gdb",
// Connect to an already running OpenOCD instance
"gdbTarget": "host.docker.internal:3333",
"svdFile": "${workspaceRoot}/nrf52.svd",
"runToEntryPoint": "main",
// Work around for stopping at main on restart
"postRestartCommands": [
"break main",
"continue"
]
},
{
"name": "Debug - Openocd Local",
"type": "cortex-debug",
"cwd": "${workspaceRoot}",
"executable": "${command:cmake.launchTargetPath}",
"request": "launch",
"servertype": "openocd",
"gdbPath": "${env:ARM_NONE_EABI_TOOLCHAIN_PATH}/bin/arm-none-eabi-gdb",
// Connect to an already running OpenOCD instance
"gdbTarget": "localhost:3333",
"svdFile": "${workspaceRoot}/nrf52.svd",
"runToEntryPoint": "main",
// Work around for stopping at main on restart
"postRestartCommands": [
"break main",
"continue"
]
},
{
"cwd": "${workspaceRoot}",
// TODO: find better way to get latest build filename
"executable": "./build/src/pinetime-app-1.3.0.out",
"name": "Debug OpenOCD ST-LINK pinetime-app-1.3.0.out",
"request": "launch",
"type": "cortex-debug",
"showDevDebugOutput": false,
"servertype": "openocd",
"runToMain": true,
// Work around for stopping at main on restart
"postRestartCommands": [
"break main",
"continue"
],
// Only use armToolchainPath if your arm-none-eabi-gdb is not in your path (some GCC packages does not contain arm-none-eabi-gdb)
"armToolchainPath": "${workspaceRoot}/../gcc-arm-none-eabi-10.3-2021.10/bin",
"svdFile": "${workspaceRoot}/nrf52.svd",
"configFiles": [
"interface/stlink.cfg",
"target/nrf52.cfg"
],
},
{
"name": "Debug - Openocd Devcontainer",
"type": "cortex-debug",
"cwd": "${workspaceRoot}",
"executable": "${command:cmake.launchTargetPath}",
"request": "launch",
"servertype": "external",
// FIXME: This is hardcoded. I have no idea how to use the values set in build.sh here
"gdbPath": "/opt/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb",
// Connect to an already running OpenOCD instance
"gdbTarget": "host.docker.internal:3333",
"svdFile": "${workspaceRoot}/nrf52.svd",
"runToEntryPoint": "main",
// Work around for stopping at main on restart
"postRestartCommands": [
"break main",
"continue"
]
},
]
}

70
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,70 @@
{
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
"cmake.configureArgs": [
"-DARM_NONE_EABI_TOOLCHAIN_PATH=${env:TOOLS_DIR}/${env:GCC_ARM_PATH}",
"-DNRF5_SDK_PATH=${env:TOOLS_DIR}/${env:NRF_SDK_VER}",
],
"cmake.statusbar.advanced": {
"launch": {
"visibility": "hidden"
},
"launchTarget": {
"visibility": "hidden"
},
"debug": {
"visibility": "hidden"
}
},
"cmake.generator": "Unix Makefiles",
"clang-tidy.buildPath": "build/compile_commands.json",
"files.associations": {
"array": "cpp",
"atomic": "cpp",
"bit": "cpp",
"*.tcc": "cpp",
"bitset": "cpp",
"cctype": "cpp",
"chrono": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"random": "cpp",
"ratio": "cpp",
"string": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"fstream": "cpp",
"initializer_list": "cpp",
"iosfwd": "cpp",
"istream": "cpp",
"limits": "cpp",
"new": "cpp",
"ostream": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"cinttypes": "cpp",
"typeinfo": "cpp"
}
}

22
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "update submodules",
"type": "shell",
"command": "git submodule update --init",
"options": {
"cwd": "${workspaceFolder}"
},
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "shared"
},
"problemMatcher": []
}
]
}

View File

@ -1,6 +1,19 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
project(pinetime VERSION 0.9.0 LANGUAGES C CXX ASM)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose Debug or Release")
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
project(pinetime VERSION 1.16.0 LANGUAGES C CXX ASM)
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 20)
# set(CMAKE_GENERATOR "Unix Makefiles")
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(NRF_TARGET "nrf52") set(NRF_TARGET "nrf52")
if (NOT ARM_NONE_EABI_TOOLCHAIN_PATH) if (NOT ARM_NONE_EABI_TOOLCHAIN_PATH)
@ -11,61 +24,50 @@ if (NOT NRF5_SDK_PATH)
message(FATAL_ERROR "The path to the NRF52 SDK must be specified on the command line (add -DNRF5_SDK_PATH=<path>") message(FATAL_ERROR "The path to the NRF52 SDK must be specified on the command line (add -DNRF5_SDK_PATH=<path>")
endif () endif ()
if(NOT USE_JLINK AND NOT USE_GDB_CLIENT AND NOT USE_OPENOCD) if(BUILD_DFU)
set(USE_JLINK true) set(BUILD_DFU true)
endif() endif()
if(USE_JLINK) if(BUILD_RESOURCES)
if (NOT NRFJPROG) set(BUILD_RESOURCES true)
message(FATAL_ERROR "the path to the tool nrfjprog must be specified on the command line (add -DNRFJPROG=<path>")
endif ()
endif() endif()
if(USE_GDB_CLIENT) set(TARGET_DEVICE "PINETIME" CACHE STRING "Target device")
if(NOT GDB_CLIENT_BIN_PATH) set_property(CACHE TARGET_DEVICE PROPERTY STRINGS PINETIME MOY_TFK5 MOY_TIN5 MOY_TON5 MOY_UNK)
set(GDB_CLIENT_BIN_PATH "arm-none-eabi-gdb")
endif()
if(NOT GDB_CLIENT_TARGET_REMOTE) set(PROJECT_GIT_COMMIT_HASH "")
message(FATAL_ERROR "The GDB target must be specified (add -DGDB_CLIENT_TARGET_REMOTE=<target>")
endif()
endif()
if(USE_OPENOCD) execute_process(COMMAND git rev-parse --short HEAD
if(NOT OPENOCD_BIN_PATH) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
set(OPENOCD_BIN_PATH "openocd") OUTPUT_VARIABLE PROJECT_GIT_COMMIT_HASH
endif() RESULT_VARIABLE PROJECT_GIT_COMMIT_HASH_SUCCESS)
endif()
if(DEFINED USE_DEBUG_PINS AND USE_DEBUG_PINS) string(STRIP "${PROJECT_GIT_COMMIT_HASH}" PROJECT_GIT_COMMIT_HASH)
add_definitions(-DUSE_DEBUG_PINS)
endif()
message("PROJECT_GIT_COMMIT_HASH_SUCCESS? " ${PROJECT_GIT_COMMIT_HASH_SUCCESS})
message("")
message("BUILD CONFIGURATION") message("BUILD CONFIGURATION")
message("-------------------") message("-------------------")
message(" * Mode : " ${CMAKE_BUILD_TYPE})
message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH}) message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH})
message(" * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH})
message(" * NRF52 SDK : " ${NRF5_SDK_PATH}) message(" * NRF52 SDK : " ${NRF5_SDK_PATH})
set(PROGRAMMER "???") message(" * Target device : " ${TARGET_DEVICE})
if(USE_JLINK) if(BUILD_DFU)
message(" * Programmer/debugger : JLINK") message(" * Build DFU (using adafruit-nrfutil) : Enabled")
message(" * NrfJprog : " ${NRFJPROG})
elseif(USE_GDB_CLIENT)
message(" * Programmer/debugger : GDB Client")
message(" * GDB Client path : " ${GDB_CLIENT_BIN_PATH})
message(" * GDB Target : " ${GDB_CLIENT_TARGET_REMOTE})
elseif(USE_OPENOCD)
message(" * Programmer/debugger : OpenOCD Client")
endif()
if(USE_DEBUG_PINS)
message(" * Debug pins : Enabled")
else() else()
message(" * Debug pins : Disabled") message(" * Build DFU (using adafruit-nrfutil) : Disabled")
endif()
if(BUILD_RESOURCES)
message(" * Build resources : Enabled")
else()
message(" * Build resources : Disabled")
endif() endif()
set(VERSION_EDIT_WARNING "// Do not edit this file, it is automatically generated by CMAKE!") set(VERSION_EDIT_WARNING "// Do not edit this file, it is automatically generated by CMAKE!")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/Version.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/Version.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docker/post_build.sh.in ${CMAKE_CURRENT_SOURCE_DIR}/docker/post_build.sh) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docker/post_build.sh.in ${CMAKE_CURRENT_BINARY_DIR}/post_build.sh)
add_subdirectory(src) add_subdirectory(src)

61
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,61 @@
# How to contribute?
Here are things you can do to help.
- [Report bugs or issues](https://github.com/InfiniTimeOrg/InfiniTime/issues/new/choose)
- [Write and improve documentation](#documentation)
- [Fix bugs, add functionalities and improve the code](#how-to-create-a-pull-request)
- Participate in the discussions within issues and PRs. Your feedback is appreciated!
- Review pull requests. Follow the instructions [here](doc/maintainer-guide.md#reviewing-prs)
## Documentation
Documentation might be incomplete,
or not clear enough,
and it is always possible to improve it with better wording, pictures, videos,...
As the documentation is part of the source code,
you can submit changes to the documentation by creating a [pull request](#how-to-create-a-pull-request)
## How to create a pull request?
The workflow is based on [GitHub flow](https://docs.github.com/en/get-started/quickstart/github-flow).
To create a pull request,
you need a [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) of the repo.
Create a new [branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches) from main,
make changes in this branch,
[commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) them,
and create a [pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request).
### PR checklist
When making changes to the firmware:
- Consider if your feature aligns with the [InfiniTime vision](doc/InfiniTimeVision.md)
- Test your changes on a PineTime or InfiniSim
- Make sure the code conforms to the [coding conventions](doc/coding-convention.md)
You can also check the [maintainer's guide](doc/maintainer-guide.md)
for what maintainers will look at in PRs.
### Commit conventions
- Every commit must contain a title and description,
that sufficiently explains all the changes in the commit
- Commits that fix mistakes from previous commits must be squashed
- Conflicts must be resolved by rebasing,
instead of merging
### Commit format
The preferred format for commits is the following:
```
module: Short description
A more thorough description of all changes in this commit if necessary.
```
where module can be the name of the file,
with or without extension,
or a single word explaining the scope of the changes.

158
README.md
View File

@ -1,113 +1,111 @@
<div align="center">
# PineTime ![Header Image](doc/logo/watchface_collage.png)
> The PineTime is a free and open source smartwatch capable of running custom-built open operating systems. Some of the notable features include a heart rate monitor, a week-long battery as well as a capacitive touch IPS display that is legible in direct sunlight. It is a fully community driven side-project, which means that it will ultimately be up to the developers and end-users to determine when they deem the PineTime ready to ship.
> We envision the PineTime as a companion for not only your PinePhone but also for your favorite devices — any phone, tablet, or even PC. <br>
*https://www.pine64.org/pinetime/* [![GitHub tag](https://img.shields.io/github/tag/InfiniTimeOrg/InfiniTime?include_prereleases=&sort=semver&color=blue)](https://github.com/InfiniTimeOrg/InfiniTime/releases)
[![GitHub License](https://img.shields.io/github/license/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniLink/blob/main/LICENSE)
The **Pinetime** smartwatch is built around the NRF52832 MCU (512KB Flash, 64KB RAM), a 240*240 LCD display driven by the ST7789 controller, an accelerometer, a heart rate sensor, and a vibration motor. [![Issues - InfiniTime](https://img.shields.io/github/issues/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniTime/issues)
[![Pull Requests - InfiniTime](https://img.shields.io/github/issues-pr/InfiniTimeOrg/InfiniTime)](https://github.com/InfiniTimeOrg/InfiniTime/pulls)
[![Downloads - InfiniTime](https://img.shields.io/github/downloads/InfiniTimeOrg/InfiniTime/total)](https://github.com/InfiniTimeOrg/InfiniTime)
[![Stars - InfiniTime](https://img.shields.io/github/stars/InfiniTimeOrg/InfiniTime?style=social)](https://github.com/InfiniTimeOrg/InfiniTime/stargazers)
[![Forks - InfiniTime](https://img.shields.io/github/forks/InfiniTimeOrg/InfiniTime?style=social)](https://github.com/InfiniTimeOrg/InfiniTime/network/members)
# InfiniTime # InfiniTime
![InfiniTime logo](images/infinitime-logo.jpg "InfiniTime Logo")
The goal of this project is to design an open-source firmware for the Pinetime smartwatch : *Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devices/pinetime/) with many features, written in modern C++.*
- Code written in **modern C++**; <br>
- Build system based on **CMake**;
- Based on **[FreeRTOS 10.0.0](https://freertos.org)** real-time OS.
- Using **[LittleVGL/LVGL 6.1.2](https://lvgl.io/)** as UI library...
- ... and **[NimBLE 1.3.0](https://github.com/apache/mynewt-nimble)** as BLE stack.
## Overview </div>
![Pinetime screens](images/0.7.0/montage.jpg "PinetimeScreens") ## New to InfiniTime?
As of now, here is the list of achievements of this project: - [Getting started with InfiniTime](doc/gettingStarted/gettingStarted-1.0.md)
- [Updating the software](doc/gettingStarted/updating-software.md)
- [About the firmware and bootloader](doc/gettingStarted/about-software.md)
- [Available apps](doc/gettingStarted/Applications.md)
- [Available watch faces](/doc/gettingStarted/Watchfaces.md)
- [PineTimeStyle Watch face](https://pine64.org/documentation/PineTime/Watchfaces/PineTimeStyle)
- [Weather integration](https://pine64.org/documentation/PineTime/Software/InfiniTime_weather/)
- Fast and optimized LCD driver ### Companion apps
- BLE communication
- Rich user interface via display, touchscreen and pushbutton
- Time synchronization via BLE
- Notification via BLE
- Multiple 'apps' :
* Clock (displays the date, time, battery level, BLE connection status, heart rate and step count)
* Heart rate
* Motion
* System info (displays various info : BLE MAC, build date/time, uptime, version, ...)
* Brightness (allows the user to configure the brightness of the display)
- Supported by 2 companion apps (development is in progress):
* [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge/) (on Android)
* [Amazfish](https://openrepos.net/content/piggz/amazfish) (on SailfishOS)
- **[Experimental]** OTA (Over-the-air) update via BLE
- **[Experimental]** Bootloader based on [MCUBoot](https://juullabs-oss.github.io/mcuboot/)
## Documentation - [Gadgetbridge](https://gadgetbridge.org/) (Android)
- [Amazfish](https://github.com/piggz/harbour-amazfish/) ([SailfishOS](https://sailfishos-chum.github.io/apps/harbour-amazfish/), [Ubuntu Touch](https://open-store.io/app/uk.co.piggz.amazfish), [Flatpak](https://flathub.org/apps/uk.co.piggz.amazfish))
- [Siglo](https://github.com/alexr4535/siglo) (Linux)
- [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) (iOS)
- [ITD](https://gitea.elara.ws/Elara6331/itd) (Linux)
- [WatchMate](https://github.com/azymohliad/watchmate) (Linux)
- [InfiniTimeExplorer](https://infinitimeexplorer.netlify.app) (Web)
### Develop <br>
- [Generate the fonts and symbols](src/displayapp/fonts/Readme.md)
> *InfiniTimeExplorer is only compatible with web browsers that support Web BLE. Current fully supported browsers include Chrome and Microsoft Edge.*
>
> *We removed mentions to NRFConnect as this app is closed source and recent versions do not work anymore with InfiniTime (the last version known to work is 4.24.3). If you used NRFConnect in the past, we recommend you switch to [Gadgetbridge](https://gadgetbridge.org/).*
## Development
- [InfiniTime Vision](doc/InfiniTimeVision.md)
- [Rough structure of the code](doc/code/Intro.md)
- [How to implement an application](doc/code/Apps.md)
- [Generate the fonts and symbols](src/displayapp/fonts/README.md)
- [Tips on designing an app UI](doc/ui_guidelines.md)
- [Bootloader, OTA and DFU](bootloader/README.md)
- [External resources](doc/ExternalResources.md)
### Contributing
- [How to contribute](CONTRIBUTING.md)
- [Coding conventions](doc/coding-convention.md)
### Build, flash and debug ### Build, flash and debug
- [Project branches](doc/branches.md)
- [Versioning](doc/versioning.md)
- [Files included in the release notes](doc/filesInReleaseNotes.md)
- [Build the project](doc/buildAndProgram.md)
- [Flash the firmware using OpenOCD and STLinkV2](doc/openOCD.md)
- [Build the project with Docker](doc/buildWithDocker.md)
- [Bootloader, OTA and DFU](./bootloader/README.md)
- [Stub using NRF52-DK](./doc/PinetimeStubWithNrf52DK.md)
- Logging with JLink RTT.
- Using files from the releases
### Contribute - [InfiniTime simulator](https://github.com/InfiniTimeOrg/InfiniSim)
- [How to contribute ?](doc/contribute.md) - [Build the project](doc/buildAndProgram.md)
- [Build the project with Docker](doc/buildWithDocker.md)
- [Build the project with VSCode](doc/buildWithVScode.md)
- [Flash the firmware using OpenOCD and STLinkV2](doc/openOCD.md)
- [Flash the firmware using SWD interface](doc/SWD.md)
- [Flash the firmware using JLink](doc/jlink.md)
- [Flash the firmware using GDB](doc/gdb.md)
- [Stub using NRF52-DK](doc/PinetimeStubWithNrf52DK.md)
### API ### API
- [BLE implementation and API](./doc/ble.md)
- [BLE implementation and API](doc/ble.md)
### Architecture and technical topics ### Architecture and technical topics
- [Memory analysis](./doc/MemoryAnalysis.md)
### Using the firmware - [Memory analysis](doc/MemoryAnalysis.md)
- [Integration with Gadgetbridge](doc/CompanionApps/Gadgetbridge.md)
- [Integration with AmazFish](doc/CompanionApps/Amazfish.md)
- [Firmware update, OTA](doc/CompanionApps/NrfconnectOTA.md)
### Project management
## TODO - contribute - [Maintainer's guide](doc/maintainer-guide.md)
- [Versioning](doc/versioning.md)
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. - [Project branches](doc/branches.md)
- [Files included in the release notes](doc/filesInReleaseNotes.md)
Here a quick list out of my head of things to do for this project: - [Files needed by the factory](doc/files-needed-by-factory.md)
- 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](https://www.pine64.org/pinephone/) and the [Pinebook Pro](https://www.pine64.org/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 ## Licenses
This project is released under the GNU General Public License version 3 or, at your option, any later version. This project is released under the GNU General Public License version 3 or, at your option, any later version.
It integrates the following projects: It integrates the following projects:
- RTOS : **[FreeRTOS](https://freertos.org)** under the MIT license
- UI : **[LittleVGL/LVGL](https://lvgl.io/)** under the MIT license - RTOS: **[FreeRTOS](https://freertos.org)** under the MIT license
- BLE stack : **[NimBLE](https://github.com/apache/mynewt-nimble)** under the Apache 2.0 license - UI: **[LittleVGL/LVGL](https://lvgl.io/)** under the MIT license
- Font : **[Jetbrains Mono](https://www.jetbrains.com/fr-fr/lp/mono/)** under the Apache 2.0 license - BLE stack: **[NimBLE](https://github.com/apache/mynewt-nimble)** under the Apache 2.0 license
- Font: **[Jetbrains Mono](https://www.jetbrains.com/fr-fr/lp/mono/)** under the Apache 2.0 license
## Credits ## Credits
Im 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.
Im not working alone on this project. First, many people create pull requests for this project. 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: Here are some people I would like to highlight:
- [Atc1441](https://github.com/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. - [Atc1441](https://github.com/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](https://github.com/bosmoment) : Hes working on a firmware based on RiotOS. He integrated similar libs as me : NimBLE, LittleVGL,… His help was invaluable too! - [Koen](https://github.com/bosmoment): Hes working on a firmware based on RiotOS. He integrated similar libs as me: NimBLE, LittleVGL,… His help was invaluable too!
- [Lup Yuen Lee](https://github.com/lupyuen) : 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! - [Lup Yuen Lee](https://github.com/lupyuen): 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 :)*

View File

@ -1,5 +1,6 @@
# About this bootloader # About this bootloader
The [bootloader](https://github.com/lupyuen/pinetime-rust-mynewt/tree/master/libs/pinetime_boot/src) is mostly developed by [Lup Yuen](https://github.com/lupyuen). It is based on [MCUBoot](https://juullabs-oss.github.io/mcuboot/) and [Mynewt](https://mynewt.apache.org/).
The [bootloader](https://github.com/lupyuen/pinetime-rust-mynewt/tree/master/libs/pinetime_boot/src) is mostly developed by [Lup Yuen](https://github.com/lupyuen). It is based on [MCUBoot](https://www.mcuboot.com) and [Mynewt](https://mynewt.apache.org/).
The goal of this project is to provide a common bootloader for multiple (all?) Pinetime projects. It allows to upgrade the current bootloader and even replace the current application by another one that supports the same bootloader. The goal of this project is to provide a common bootloader for multiple (all?) Pinetime projects. It allows to upgrade the current bootloader and even replace the current application by another one that supports the same bootloader.
@ -9,18 +10,20 @@ Integrating a BLE stack for the OTA functionality would have used to much memory
When it is run, this bootloader looks in the SPI flash memory if a new firmware is available. It there is one, it *swaps* the current firmware with the new one (the new one is copied in the main flash memory, and the current one is copied in the SPI flash memory) and run the new one. If the new one fails to run properly, the bootloader is able to revert to the old one and mark the new one as not working. When it is run, this bootloader looks in the SPI flash memory if a new firmware is available. It there is one, it *swaps* the current firmware with the new one (the new one is copied in the main flash memory, and the current one is copied in the SPI flash memory) and run the new one. If the new one fails to run properly, the bootloader is able to revert to the old one and mark the new one as not working.
As this bootloader does not provide any OTA capability, it is not able to actually download a new version of the application. Providing OTA functionality is thus the responsability of the application firmware. As this bootloader does not provide any OTA capability, it is not able to actually download a new version of the application. Providing OTA functionality is thus the responsibility of the application firmware.
# About MCUBoot # About MCUBoot
MCUBoot is run at boot time. In normal operation, it just jumps to the reset handler of the application firmware to run it. Once the application firmware is running, MCUBoot does not run at all. MCUBoot is run at boot time. In normal operation, it just jumps to the reset handler of the application firmware to run it. Once the application firmware is running, MCUBoot does not run at all.
![MCUBoot boot sequence diagram](../doc/bootloader/boot.png "MCUBoot boot sequence diagram") ![MCUBoot boot sequence diagram](../doc/bootloader/boot.png "MCUBoot boot sequence diagram")
But MCUBoot does much more than that : it can upgrade the firmware that is currently running by a new one, and it is also able to revert to the previous version of the firmware in case the new one does not run propertly. But MCUBoot does much more than that : it can upgrade the firmware that is currently running by a new one, and it is also able to revert to the previous version of the firmware in case the new one does not run properly.
To do this, it uses 2 memory 'slots' : To do this, it uses 2 memory 'slots' :
- **The primary slot** : it contains the current firmware, the one that will be executed by MCUBoot
- **The secondary slot** : it is used to store the upgraded version of the firmware, when available. - **The primary slot** : it contains the current firmware, the one that will be executed by MCUBoot
- **The secondary slot** : it is used to store the upgraded version of the firmware, when available.
At boot time, MCUBoot detects that a new version of the firmware is available in the secondary slot and swaps them : the current version of the firmware is copied from the primary to the secondary slot and vice-versa. At boot time, MCUBoot detects that a new version of the firmware is available in the secondary slot and swaps them : the current version of the firmware is copied from the primary to the secondary slot and vice-versa.
@ -35,12 +38,13 @@ The next time MCUBoot will be run (after a MCU reset), MCUBoot will check if the
Note than MCUBoot **does not** provide any means to download and store the new version of the firmware into the secondary slot. This must be implemented by the application firmware. Note than MCUBoot **does not** provide any means to download and store the new version of the firmware into the secondary slot. This must be implemented by the application firmware.
# Degraded cases # Degraded cases
This chapter describes degraded cases that are handled by our bootloader and those that are not supported. This chapter describes degraded cases that are handled by our bootloader and those that are not supported.
Case | Current bootloader | Solution Case | Current bootloader | Solution
-----|--------------------|---------------------------------------------- -----|--------------------|----------------------------------------------
Data got corrupted during file transfert | [OK] Application firmware does a CRC check before applying the update, and does not proceed if it fails. | N/A Data got corrupted during file transfer | [OK] Application firmware does a CRC check before applying the update, and does not proceed if it fails. | N/A
New firmware does not run at all (bad file) (1) | [NOK] MCU executes unknown instructions and will most likely end up in an infinite loop or freeze in an error handler. The bootloader does not run, it can do nothing, the MCU is stucked until next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. New firmware does not run at all (bad file) (1) | [NOK] MCU executes unknown instructions and will most likely end up in an infinite loop or freeze in an error handler. The bootloader does not run, it can do nothing, the MCU is stuck until next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset.
New firmware runs, does not set the valid bit and does not refresh the watchdog | [NOK] The new firmware runs until the next reset. The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. New firmware runs, does not set the valid bit and does not refresh the watchdog | [NOK] The new firmware runs until the next reset. The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset.
New firmware does not run properly, does not set the valid bit but refreshes the watchdog | [NOK] The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged and will be able to rollback to the previous version. New firmware does not run properly, does not set the valid bit but refreshes the watchdog | [NOK] The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged and will be able to rollback to the previous version.
New firmware does not run properly but sets the valid bit and refreshes the watchdog | [NOK] The bootloader won't revert to the previous version because the valid flag is set | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged. Then, the bootloader must provide a way for the user to force the rollback to the previous version New firmware does not run properly but sets the valid bit and refreshes the watchdog | [NOK] The bootloader won't revert to the previous version because the valid flag is set | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged. Then, the bootloader must provide a way for the user to force the rollback to the previous version
@ -50,74 +54,73 @@ New firmware does not run properly but sets the valid bit and refreshes the watc
# Using the bootloader # Using the bootloader
## Bootloader graphic ## Bootloader graphic
The bootloader loads a graphic (Pinetime logo) from the SPI Flash memory. If this graphic is not loaded in the memory, the LCD will display garbage (the content of the SPI flash memory). The bootloader loads a graphic (Pinetime logo) from the SPI Flash memory. If this graphic is not loaded in the memory, the LCD will display garbage (the content of the SPI flash memory).
The SPI Flash memory is not accessible via the SWD debugger. Use the firmware 'pinetime-graphics' to load the graphic into memory. All you have to do is build it and program it at address 0x00 : The SPI Flash memory is not accessible via the SWD debugger. Use the firmware 'pinetime-graphics' to load the graphic into memory. All you have to do is build it and program it at address 0x00 :
- Build: - Build:
```
$ make pinetime-graphics ```sh
make pinetime-graphics
``` ```
- Program (using OpenOCD for example) : - Program (using OpenOCD for example) :
``` ```
program pinetime-graphics.bin 0 program pinetime-graphics.bin 0
``` ```
- Let it run for ~10s (it does nothing for 5 seconds, then write the logo into the SPI memory, then (slowly) displays it on the LCD). - Let it run for ~10s (it does nothing for 5 seconds, then write the logo into the SPI memory, then (slowly) displays it on the LCD).
## Bootloader binary ## Bootloader binary
The binary comes from https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4 The binary comes from https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4
It must be flash at address **0x00** in the internal flash memory. It must be flash at address **0x00** in the internal flash memory.
Using OpenOCD: Using OpenOCD:
` `program bootloader-5.0.4.bin 0`
program bootloader-5.0.4.bin 0
`
## Application firmware image ## Application firmware image
Build the binary compatible with the booloader: Build the binary compatible with the booloader:
` `make pinetime-mcuboot-app`
make pinetime-mcuboot-app
`
The binary is located in *<build directory>/src/pinetime-mcuboot-app.bin*. The binary is located in *<build directory>/src/pinetime-mcuboot-app.bin*.
It must me converted into a MCUBoot image using *imgtool.py* from [MCUBoot](https://github.com/JuulLabs-OSS/mcuboot/tree/master/scripts). Simply checkout the project and run the script <mcuboot root>/scripts/imgtool.py with the following command line: It must me converted into a MCUBoot image using *imgtool.py* from [MCUBoot](https://github.com/mcu-tools/mcuboot/tree/master/scripts). Simply checkout the project and run the script <mcuboot root>/scripts/imgtool.py with the following command line:
` ```sh
imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header <build directory>/src/pinetime-mcuboot-app.bin image.bin imgtool.py create --align 4 --version 1.0.0 --header-size 32 --slot-size 475136 --pad-header <build directory>/src/pinetime-mcuboot-app.bin image.bin
` ```
The image must be then flashed at address **0x8000** in the internal flash memory. The image must be then flashed at address **0x8000** in the internal flash memory.
Using OpenOCD: Using OpenOCD:
` `program image.bin 0x8000`
program image.bin 0x8000
`
## OTA and DFU ## OTA and DFU
Pack the image into a .zip file for the NRF DFU protocol: Pack the image into a .zip file for the NRF DFU protocol:
` ```sh
adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application image.bin dfu.zip adafruit-nrfutil dfu genpkg --dev-type 0x0052 --application image.bin dfu.zip
` ```
Use NRFConnect or dfu.py (in <project root>/bootloader/ota-dfu-python) to upload the zip file to the device: Use NRFConnect or dfu.py (in <project root>/bootloader/ota-dfu-python) to upload the zip file to the device:
` ```sh
sudo dfu.py -z /home/jf/nrf52/bootloader/dfu.zip -a <pinetime MAC address> --legacy sudo dfu.py -z /home/jf/nrf52/bootloader/dfu.zip -a <pinetime MAC address> --legacy
` ```
**Note** : dfu.py is a slightly modified version of [this repo](https://github.com/daniel-thompson/ota-dfu-python). **Note** : dfu.py is a slightly modified version of [this repo](https://github.com/daniel-thompson/ota-dfu-python).
See [this page](../doc/CompanionApps/NrfconnectOTA.md) for more info about OTA with NRFConect
### Firmware validation ### Firmware validation
Once the OTA is done, InfiniTime will reset the watch to apply the update. When the watch reboots, the new firmware is running. Once the OTA is done, InfiniTime will reset the watch to apply the update. When the watch reboots, the new firmware is running.
One last step is needed to finalize the upgrade : the new firmware must be manually validated. If the watch resets while the image is not validated, the bootloader will automatically revert to the previous version of the firmware. One last step is needed to finalize the upgrade : the new firmware must be manually validated. If the watch resets while the image is not validated, the bootloader will automatically revert to the previous version of the firmware.
@ -126,12 +129,12 @@ If the new firmware is working correctly, open the application menu and tap on t
Firmware validation application in the menu: Firmware validation application in the menu:
![Firmware Validation App](../doc/CompanionApps/firmwareValidationApp.jpg "Firmware Validation App") ![Firmware Validation App](../doc/bootloader/firmwareValidationApp.jpg "Firmware Validation App")
The firmware is not validated yet. Tap 'Validate' to validate it, or 'Reset' to rollback to the previous version. The firmware is not validated yet. Tap 'Validate' to validate it, or 'Reset' to rollback to the previous version.
![Firmware Not Validated](../doc/CompanionApps/firmwareNoValidated.jpg "Firmware Not Validated") ![Firmware Not Validated](../doc/bootloader/firmwareNoValidated.jpg "Firmware Not Validated")
The firmware is validated! The firmware is validated!
![Firmware Validated](../doc/CompanionApps/firmwareValidated.jpg "Firmware Validated") ![Firmware Validated](../doc/bootloader/firmwareValidated.jpg "Firmware Validated")

1
bootloader/ota-dfu-python/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
__pycache__

View File

@ -7,9 +7,9 @@ My own contribution is little more than a brute force conversion to
python3. It is sparsely tested so there are likely to be a few python3. It is sparsely tested so there are likely to be a few
remaining bytes versus string bugs remaining in the places I didn't test remaining bytes versus string bugs remaining in the places I didn't test
. I used it primarily as part of . I used it primarily as part of
[wasp-os](https://github.com/daniel-thompson/wasp-os) as a way to [wasp-os](https://github.com/wasp-os/wasp-os) as a way to
deliver OTA updates to nRF52-based smart watches, especially the deliver OTA updates to nRF52-based smart watches, especially the
[Pine64 PineTime](https://www.pine64.org/pinetime/). [Pine64 PineTime](https://pine64.org/devices/pinetime/).
## What does it do? ## What does it do?
@ -17,24 +17,24 @@ This is a Python program that uses `gatttool` (provided with the Linux BlueZ dri
### Main features: ### Main features:
* Perform OTA DFU to an nRF5 peripheral without an external USB BLE dongle. - Perform OTA DFU to an nRF5 peripheral without an external USB BLE dongle.
* Ability to detect if the peripheral is running in application mode or bootloader, and automatically switch if needed (buttonless). - Ability to detect if the peripheral is running in application mode or bootloader, and automatically switch if needed (buttonless).
* Support for both Legacy (SDK <= 11) and Secure (SDK >= 12) bootloader. - Support for both Legacy (SDK <= 11) and Secure (SDK >= 12) bootloader.
Before using this utility the nRF5 peripheral device needs to be programmed with a DFU bootloader (see Nordic Semiconductor documentation/examples for instructions on that). Before using this utility the nRF5 peripheral device needs to be programmed with a DFU bootloader (see Nordic Semiconductor documentation/examples for instructions on that).
## Prerequisites ## Prerequisites
* BlueZ 5.4 or above - BlueZ 5.4 or above
* Python 3.6 - Python 3.6
* Python `pexpect` module (available via pip) - Python `pexpect` module (available via pip)
* Python `intelhex` module (available via pip) - Python `intelhex` module (available via pip)
## Firmware Build Requirement ## Firmware Build Requirement
* Your nRF5 peripheral firmware build method will produce a firmware file ending with either `*.hex` or `*.bin`. - Your nRF5 peripheral firmware build method will produce a firmware file ending with either `*.hex` or `*.bin`.
* Your nRF5 firmware build method will produce an Init file ending with `.dat`. - Your nRF5 firmware build method will produce an Init file ending with `.dat`.
* The typical naming convention is `application.bin` and `application.dat`, but this utility will accept other names. - The typical naming convention is `application.bin` and `application.dat`, but this utility will accept other names.
## Generating init files ## Generating init files
@ -75,7 +75,6 @@ You can use the `hcitool lescan` to figure out the address of a DFU target, for
CD:E3:4A:47:1C:E4 <TARGET_NAME> CD:E3:4A:47:1C:E4 <TARGET_NAME>
CD:E3:4A:47:1C:E4 (unknown) CD:E3:4A:47:1C:E4 (unknown)
## Example Output ## Example Output
================================ ================================
@ -105,14 +104,14 @@ You can use the `hcitool lescan` to figure out the address of a DFU target, for
## TODO: ## TODO:
* Implement link-loss procedure for Legacy Controller. - Implement link-loss procedure for Legacy Controller.
* Update example output in readme. - Update example output in readme.
* Add makefile examples. - Add makefile examples.
* More code cleanup. - More code cleanup.
## Info & References ## Info & References
* [Nordic Legacy DFU Service](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v11.0.0/bledfu_transport_bleservice.html?cp=4_0_3_4_3_1_4_1) - [Nordic Legacy DFU Service](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v11.0.0/bledfu_transport_bleservice.html?cp=4_0_3_4_3_1_4_1)
* [Nordic Legacy DFU sequence diagrams](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v11.0.0/bledfu_transport_bleprofile.html?cp=4_0_3_4_3_1_4_0_1_6#ota_profile_pkt_rcpt_notif) - [Nordic Legacy DFU sequence diagrams](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v11.0.0/bledfu_transport_bleprofile.html?cp=4_0_3_4_3_1_4_0_1_6#ota_profile_pkt_rcpt_notif)
* [Nordic Secure DFU bootloader](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v12.2.0/lib_dfu_transport_ble.html?cp=4_0_1_3_5_2_2) - [Nordic Secure DFU bootloader](http://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v12.2.0/lib_dfu_transport_ble.html?cp=4_0_1_3_5_2_2)
* [nrfutil](https://github.com/NordicSemiconductor/pc-nrfutil) - [nrfutil](https://github.com/NordicSemiconductor/pc-nrfutil)

View File

@ -236,7 +236,7 @@ class BleDfuControllerSecure(NrfBleDfuController):
self._dfu_send_command(Procedures.EXECUTE) self._dfu_send_command(Procedures.EXECUTE)
self._wait_and_parse_notify() self._wait_and_parse_notify()
print("Init packet successfully transfered") print("Init packet successfully transferred")
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Send the Firmware image to peripheral device. # Send the Firmware image to peripheral device.
@ -319,5 +319,5 @@ class BleDfuControllerSecure(NrfBleDfuController):
self._dfu_send_command(Procedures.EXECUTE) self._dfu_send_command(Procedures.EXECUTE)
self._wait_and_parse_notify() self._wait_and_parse_notify()
# If everything executed correctly, return amount of bytes transfered # If everything executed correctly, return amount of bytes transferred
return obj_max_size return obj_max_size

View File

@ -162,7 +162,7 @@ class NrfBleDfuController(object, metaclass=ABCMeta):
self.ble_conn.sendline('characteristics') self.ble_conn.sendline('characteristics')
try: try:
self.ble_conn.expect([uuid], timeout=2) self.ble_conn.expect([uuid], timeout=10)
handles = re.findall(b'.*handle: (0x....),.*char value handle: (0x....)', self.ble_conn.before) handles = re.findall(b'.*handle: (0x....),.*char value handle: (0x....)', self.ble_conn.before)
(handle, value_handle) = handles[-1] (handle, value_handle) = handles[-1]
except pexpect.TIMEOUT as e: except pexpect.TIMEOUT as e:

View File

@ -36,9 +36,6 @@ macro(nRF5x_setup)
set(CMAKE_OSX_SYSROOT "/") set(CMAKE_OSX_SYSROOT "/")
set(CMAKE_OSX_DEPLOYMENT_TARGET "") set(CMAKE_OSX_DEPLOYMENT_TARGET "")
# language standard/version settings
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
# CPU specyfic settings # CPU specyfic settings
if (NRF_TARGET MATCHES "nrf51") if (NRF_TARGET MATCHES "nrf51")
@ -77,21 +74,6 @@ macro(nRF5x_setup)
) )
endif () endif ()
set(COMMON_FLAGS "-MP -MD -mthumb -mabi=aapcs -Wall -g3 -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums ${CPU_FLAGS} -Wreturn-type -Werror=return-type")
# compiler/assambler/linker flags
set(CMAKE_C_FLAGS "${COMMON_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g3")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
set(CMAKE_CXX_FLAGS "${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
set(CMAKE_ASM_FLAGS "-MP -MD -std=c99 -x assembler-with-cpp")
set(CMAKE_EXE_LINKER_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} ${CPU_FLAGS} -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm")
# note: we must override the default cmake linker flags so that CMAKE_C_FLAGS are not added implicitly
set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_COMPILER} <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_C_COMPILER} <LINK_FLAGS> <OBJECTS> -lstdc++ -o <TARGET> <LINK_LIBRARIES>")
# basic board definitions and drivers # basic board definitions and drivers
include_directories( include_directories(
"${NRF5_SDK_PATH}/components" "${NRF5_SDK_PATH}/components"
@ -124,7 +106,6 @@ macro(nRF5x_setup)
${NRF5_SDK_PATH}/external/freertos/source/stream_buffer.c ${NRF5_SDK_PATH}/external/freertos/source/stream_buffer.c
${NRF5_SDK_PATH}/external/freertos/source/tasks.c ${NRF5_SDK_PATH}/external/freertos/source/tasks.c
${NRF5_SDK_PATH}/external/freertos/source/timers.c ${NRF5_SDK_PATH}/external/freertos/source/timers.c
${NRF5_SDK_PATH}/components/libraries/timer/app_timer_freertos.c
) )
# freertos include # freertos include
@ -248,24 +229,6 @@ macro(nRF5x_setup)
"${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_twi.c" "${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_twi.c"
) )
# adds target for erasing
if(USE_JLINK)
add_custom_target(FLASH_ERASE
COMMAND ${NRFJPROG} --eraseall -f ${NRF_TARGET}
COMMENT "erasing flashing"
)
elseif(USE_GDB_CLIENT)
add_custom_target(FLASH_ERASE
COMMAND ${GDB_CLIENT_BIN_PATH} -nx --batch -ex 'target extended-remote ${GDB_CLIENT_TARGET_REMOTE}' -ex 'monitor swdp_scan' -ex 'attach 1' -ex 'mon erase_mass'
COMMENT "erasing flashing"
)
elseif(USE_OPENOCD)
add_custom_target(FLASH_ERASE
COMMAND ${OPENOCD_BIN_PATH} -f interface/stlink.cfg -c 'transport select hla_swd' -f target/nrf52.cfg -c init -c halt -c 'nrf5 mass_erase' -c reset -c shutdown
COMMENT "erasing flashing"
)
endif()
if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin")
set(TERMINAL "open") set(TERMINAL "open")
elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
@ -274,16 +237,6 @@ macro(nRF5x_setup)
set(TERMINAL "gnome-terminal") set(TERMINAL "gnome-terminal")
endif() endif()
if(USE_JLINK)
add_custom_target(START_JLINK
COMMAND ${TERMINAL} "${DIR_OF_nRF5x_CMAKE}/runJLinkGDBServer-${NRF_TARGET}"
COMMAND ${TERMINAL} "${DIR_OF_nRF5x_CMAKE}/runJLinkExe-${NRF_TARGET}"
COMMAND sleep 2s
COMMAND ${TERMINAL} "${DIR_OF_nRF5x_CMAKE}/runJLinkRTTClient"
COMMENT "started JLink commands"
)
endif()
endmacro(nRF5x_setup) endmacro(nRF5x_setup)
# adds a target for comiling and flashing an executable # adds a target for comiling and flashing an executable
@ -301,29 +254,6 @@ macro(nRF5x_addExecutable EXECUTABLE_NAME SOURCE_FILES)
COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_NAME}.out "${EXECUTABLE_NAME}.hex" COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_NAME}.out "${EXECUTABLE_NAME}.hex"
COMMENT "post build steps for ${EXECUTABLE_NAME}") COMMENT "post build steps for ${EXECUTABLE_NAME}")
# custom target for flashing the board
if(USE_JLINK)
add_custom_target("FLASH_${EXECUTABLE_NAME}"
DEPENDS ${EXECUTABLE_NAME}
COMMAND ${NRFJPROG} --program ${EXECUTABLE_NAME}.hex -f ${NRF_TARGET} --sectorerase
COMMAND sleep 0.5s
COMMAND ${NRFJPROG} --reset -f ${NRF_TARGET}
COMMENT "flashing ${EXECUTABLE_NAME}.hex"
)
elseif(USE_GDB_CLIENT)
add_custom_target("FLASH_${EXECUTABLE_NAME}"
DEPENDS ${EXECUTABLE_NAME}
COMMAND ${GDB_CLIENT_BIN_PATH} -nx --batch -ex 'target extended-remote ${GDB_CLIENT_TARGET_REMOTE}' -ex 'monitor swdp_scan' -ex 'attach 1' -ex 'load' -ex 'kill' ${EXECUTABLE_NAME}.hex
COMMENT "flashing ${EXECUTABLE_NAME}.hex"
)
elseif(USE_OPENOCD)
add_custom_target("FLASH_${EXECUTABLE_NAME}"
DEPENDS ${EXECUTABLE_NAME}
COMMAND ${OPENOCD_BIN_PATH} -c "tcl_port disabled" -c "gdb_port 3333" -c "telnet_port 4444" -f interface/stlink.cfg -c 'transport select hla_swd' -f target/nrf52.cfg -c "program \"${EXECUTABLE_NAME}.hex\"" -c reset -c shutdown
COMMENT "flashing ${EXECUTABLE_NAME}.hex"
)
endif()
endmacro() endmacro()
# adds app-level scheduler library # adds app-level scheduler library
@ -353,7 +283,6 @@ endmacro(nRF5x_addAppFIFO)
# adds app-level Timer libraries # adds app-level Timer libraries
macro(nRF5x_addAppTimer) macro(nRF5x_addAppTimer)
list(APPEND SDK_SOURCE_FILES list(APPEND SDK_SOURCE_FILES
"${NRF5_SDK_PATH}/components/libraries/timer/app_timer.c"
) )
endmacro(nRF5x_addAppTimer) endmacro(nRF5x_addAppTimer)

View File

@ -7,7 +7,7 @@ Cmake script for projects targeting Nordic Semiconductor nRF5x series devices us
The script makes use of the following tools: The script makes use of the following tools:
- nRF5x SDK by Nordic Semiconductor - SoC specific drivers and libraries (also includes a lot of examples) - nRF5x SDK by Nordic Semiconductor - SoC specific drivers and libraries (also includes a lot of examples)
- JLink by Segger - interface software for the JLink familiy of programmers - JLink by Segger - interface software for the JLink family of programmers
- nrfjprog by Nordic Semiconductor - Wrapper utility around JLink - nrfjprog by Nordic Semiconductor - Wrapper utility around JLink
- arm-non-eabi-gcc by ARM and the GCC Team - compiler toolchain for embedded (= bare metal) ARM chips - arm-non-eabi-gcc by ARM and the GCC Team - compiler toolchain for embedded (= bare metal) ARM chips
@ -15,11 +15,11 @@ The script makes use of the following tools:
1. Download this repo (or add as submodule) to the directory `cmake-nRF5x` in your project 1. Download this repo (or add as submodule) to the directory `cmake-nRF5x` in your project
1. Search the SDK `example` directory for a `sdk_config.h`, `main.c` and a linker script (normally named `<project_name>_gcc_<chip familly>.ld`) that fits your chip and project needs. 1. Search the SDK `example` directory for a `sdk_config.h`, `main.c` and a linker script (normally named `<project_name>_gcc_<chip family>.ld`) that fits your chip and project needs.
1. Copy the `sdk_config.h` and the project `main.c` into a new directory `src`. Modify them as required for your project. 1. Copy the `sdk_config.h` and the project `main.c` into a new directory `src`. Modify them as required for your project.
1. Copy the linker script into the root of your project. Rename it to just `gcc_<chip familly>.ld` For example: 1. Copy the linker script into the root of your project. Rename it to just `gcc_<chip family>.ld` For example:
``` ```
gcc_nrf51.ld gcc_nrf51.ld
@ -98,7 +98,7 @@ The script makes use of the following tools:
After setup you can use cmake as usual: After setup you can use cmake as usual:
1. Generate the actual build files (out-of-source builds are strongly recomended): 1. Generate the actual build files (out-of-source builds are strongly recommended):
```commandline ```commandline
cmake -H. -B"cmake-build" -G "Unix Makefiles" cmake -H. -B"cmake-build" -G "Unix Makefiles"

168
doc/BLEFS.md Normal file
View File

@ -0,0 +1,168 @@
# BLE FS
---
The BLE FS protocol in InfiniTime is mostly Adafruit's BLE file transfer protocol, as described in [adafruit/Adafruit_CircuitPython_BLE_File_Transfer](https://github.com/adafruit/Adafruit_CircuitPython_BLE_File_Transfer). There are some deviations, such as the status codes. These will be described later in the document.
---
## UUIDs
There are two relevant UUIDs in this protocol: the version characteristic, and the raw transfer characteristic.
### Version
UUID: `adaf0100-4669-6c65-5472-616e73666572`
The version characteristic returns the version of the protocol to which the sender adheres. It returns a single unsigned 32-bit integer. The latest version at the time of writing this is 4.
### Transfer
UUID: `adaf0200-4669-6c65-5472-616e73666572`
The transfer characteristic is responsible for all the data transfer between the client and the watch. It supports write and notify. Writing a packet on the characteristic results in a response via notify.
---
## Usage
The separator for paths is `/`, and absolute paths must start with `/`.
All of the following commands and responses are transferred via the transfer characteristic
### Read file
To begin reading a file, a header must first be sent. The header packet should be formatted like so:
- Command (single byte): `0x10`
- 1 byte of padding
- Unsigned 16-bit integer encoding the length of the file path.
- Unsigned 32-bit integer encoding the location at which to start reading the first chunk.
- Unsigned 32-bit integer encoding the amount of bytes to be read.
- File path: UTF-8 encoded string that is _not_ null terminated.
To continue reading the file after this initial packet, the following packet should be sent until all the data has been received. No close command is required after the data has been received.
- Command (single byte): `0x12`
- Status: `0x01`
- 2 bytes of padding
- Unsigned 32-bit integer encoding the location at which to start reading the next chunk.
- Unsigned 32-bit integer encoding the amount of bytes to be read. This may be different from the size in the header.
Both of these commands receive the following response:
- Command (single byte): `0x11`
- Status (signed 8-bit integer)
- 2 bytes of padding
- Unsigned 32-bit integer encoding the offset of this chunk
- Unsigned 32-bit integer encoding the total size of the file
- Unsigned 32-bit integer encoding the amount of data in the current chunk
- Contents of the current chunk
### Write file
To begin writing to a file, a header must first be sent. The header packet should be formatted like so:
- Command (single byte): `0x20`
- 1 byte of padding
- Unsigned 16-bit integer encoding the length of the file path.
- Unsigned 32-bit integer encoding the location at which to start writing to the file.
- Unsigned 64-bit integer encoding the unix timestamp with nanosecond resolution. This will be used as the modification time. At the time of writing, this is not implemented in InfiniTime, but may be in the future.
- Unsigned 32-bit integer encoding the size of the file that will be sent
- File path: UTF-8 encoded string that is _not_ null terminated.
To continue reading the file after this initial packet, the following packet should be sent until all the data has been sent and a response had been received with 0 free space. No close command is required after the data has been received.
- Command (single byte): `0x22`
- Status: `0x01`
- 2 bytes of padding.
- Unsigned 32-bit integer encoding the location at which to write the next chunk.
- Unsigned 32-bit integer encoding the amount of bytes to be written.
- Data
Both of these commands receive the following response:
- Command (single byte): `0x21`
- Status (signed 8-bit integer)
- 2 bytes of padding
- Unsigned 32-bit integer encoding the current offset in the file
- Unsigned 64-bit integer encoding the unix timestamp with nanosecond resolution. This will be used as the modification time. At the time of writing, this is not implemented in InfiniTime, but may be in the future.
- Unsigned 32-bit integer encoding the amount of data the client can send until the file is full.
### Delete file
- Command (single byte): `0x30`
- 1 byte of padding
- Unsigned 16-bit integer encoding the length of the file path.
- File path: UTF-8 encoded string that is _not_ null terminated.
The response to this packet will be as follows:
- Command (single byte): `0x31`
- Status (signed 8-bit integer)
### Make directory
- Command (single byte): `0x40`
- 1 byte of padding
- Unsigned 16-bit integer encoding the length of the file path.
- 4 bytes of padding
- Unsigned 64-bit integer encoding the unix timestamp with nanosecond resolution.
- File path: UTF-8 encoded string that is _not_ null terminated.
The response to this packet will be as follows:
- Command (single byte): `0x41`
- Status (signed 8-bit integer)
- 6 bytes of padding
- Unsigned 64-bit integer encoding the unix timestamp with nanosecond resolution.
### List directory
Paths returned by this command are relative to the path given in the request
- Command (single byte): `0x50`
- 1 byte of padding
- Unsigned 16-bit integer encoding the length of the file path.
- File path: UTF-8 encoded string that is _not_ null terminated.
The response to this packet will be as follows. Responses will be sent until the final entry, which will have entry number == total entries
- Command (single byte): `0x51`
- Status (signed 8-bit integer)
- Unsigned 16-bit integer encoding the length of the file path.
- Unsigned 32-bit integer encoding the entry number
- Unsigned 32-bit integer encoding the total amount of entries
- Flags: unsigned 32-bit integer
- Bit 0: Set when entry is a directory
- Bits 1-7: Reserved
- Unsigned 64-bit integer encoding the unix timestamp of the modification time with nanosecond resolution
- Unsigned 32-bit integer encoding the size of the file
- Path: UTF-8 encoded string that is _not_ null terminated.
### Move file or directory
- Command (single byte): `0x60`
- 1 byte of padding
- Unsigned 16-bit integer encoding the length of the old path
- Unsigned 16-bit integer encoding the length of the new path
- Old path: UTF-8 encoded string that is _not_ null terminated.
- 1 byte of padding
- Newpath: UTF-8 encoded string that is _not_ null terminated.
The response to this packet will be as follows:
- Command (single byte): `0x61`
- Status (signed 8-bit integer)
---
## Deviations
This section describes the differences between Adafruit's spec and InfiniTime's implementation.
### Status codes
The status codes returned by InfiniTime are a signed 8-bit integer, rather than an unsigned one as described in the spec.
InfiniTime uses LittleFS error codes rather than the ones described in the spec. Those codes can be found in [lfs.h](https://github.com/littlefs-project/littlefs/blob/master/lfs.h#L70).

70
doc/ExternalResources.md Normal file
View File

@ -0,0 +1,70 @@
# External resources
Since InfiniTime 1.11 apps and watchfaces can benefit from the external flash memory to store images and fonts.
This external memory is a lot bigger (4MB) than the internal memory that contains the firmware (512KB).
This page describes how the resources are integrated in InfiniTime from a developer perspective. [This page](gettingStarted/updating-software.md) explains how to install and update the external resources using companion apps.
## Resources generation
Resources are generated at build time via the [CMake target `Generate Resources`](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/src/resources/CMakeLists.txt#L19).
It runs 3 Python scripts that respectively convert the fonts to binary format, convert the images to binary format and package everything in a .zip file.
The resulting file `infinitime-resources-x.y.z.zip` contains the images and fonts converted in binary `.bin` files and a JSON file `resources.json`.
Companion apps use this file to upload the files to the watch.
```
{
"resources": [
{
"filename": "lv_font_dots_40.bin",
"path": "/fonts/lv_font_dots_40.bin"
}
],
"obsolete_files": [
{
"path": "/example-of-obsolete-file.bin",
"since": "1.11.0"
}
]
}
```
The resource JSON file describes an array of resources and an array of obsolete files :
- `resources` : a resource is a file that must be flashed to the watch
- `filename`: name of the resources in the zip file.
- `path` : file path and name where the file must be flashed in the watch FS.
- `obsolete_files` : files that are not needed anymore in the memory of the watch that can be deleted during the update procedure.
- `path` : path of the file in the watch FS
- `since` : version of InfiniTime that made this file obsolete.
## Resources update procedure
The update procedure is based on the [BLE FS API](BLEFS.md). The companion app simply write the binary files to the watch FS using information from the file `resources.json`.
## Working with external resources in the code
Load a picture from the external resources:
```
lv_obj_t* logo = lv_img_create(lv_scr_act(), nullptr);
lv_img_set_src(logo, "F:/images/logo.bin");
```
Load a font from the external resources: you first need to check that the file actually exists. LVGL will crash when trying to open a font that doesn't exist.
```
lv_font_t* font_teko = nullptr;
if (filesystem.FileOpen(&f, "/fonts/font.bin", LFS_O_RDONLY) >= 0) {
filesystem.FileClose(&f);
font_teko = lv_font_load("F:/fonts/font.bin");
}
if(font != nullptr) {
lv_obj_set_style_local_text_font(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font);
}
```

33
doc/InfiniTimeVision.md Normal file
View File

@ -0,0 +1,33 @@
# InfiniTime Vision
The purpose of this document is to steer efforts towards a common goal, and as such should be taken into consideration with all developments.
## InfiniTime
InfiniTime is a community-built smartwatch firmware.
It offers freedom and privacy advantages unavailable to users of proprietary wearable technology.
InfiniTime is not to be used for medical or other health tracking purposes.
## Core Principles
- Keep It Simple
- Reliability
- Battery efficiency
- Easy and simple navigation
- Behaviour should be predictable and easy to understand
- Prefer solid default experience over customization
- Personalization is achieved through custom watch faces.
More options may be available through a companion app.
- Use standard protocols and methods
## Long term vision
The perfect version of InfiniTime would include:
- Capability to sideload apps and watch faces
- Only a minimal feature set in the flashed firmware.
Users would add the features they want.
- Ports to other devices
- Translations
- Great user documentation

View File

@ -1,7 +1,296 @@
# Memory analysis # Memory analysis
The PineTime is equipped with the following memories:
- The internal RAM : **64KB**
- The internal Flash : **512KB**
- The external (SPI) Flash : **4MB**
Note that the NRF52832 cannot execute code stored in the external flash : we need to store the whole firmware in the internal flash memory, and use the external one to store graphicals assets, fonts...
This document describes how the RAM and Flash memories are used in InfiniTime and how to analyze and monitor their usage. It was written in the context of [this memory analysis effort](https://github.com/InfiniTimeOrg/InfiniTime/issues/313).
## Code sections
A binary is composed of multiple sections. Most of the time, these sections are : .text, .rodata, .data and .bss but more sections can be defined in the linker script.
Here is a small description of these sections and where they end up in memory:
- **TEXT** = code (FLASH)
- **RODATA** = constants (FLASH)
- **DATA** = initialized variables (FLASH + RAM)
- **BSS** = uninitialized variables (RAM)
## Internal FLASH
The internal flash memory stores the whole firmware: code, variable that are not default-initialized, constants...
The content of the flash memory can be easily analyzed thanks to the MAP file generated by the compiler. This file lists all the symbols from the program along with their size and location (section and addresses) in RAM and FLASH.
![Map file](./memoryAnalysis/mapfile.png)
As you can see on the picture above, this file contains a lot of information and is not easily readable by a human being. Fortunately, you can easily find tools that parse and display the content of the MAP file in a more understandable way.
In this analysis, I used [Linkermapviz](https://github.com/PromyLOPh/linkermapviz).
### Linkermapviz
[Linkermapviz](https://github.com/PromyLOPh/linkermapviz) parses the MAP file and displays its content on an HTML page as a graphic:
![linkermapviz](./memoryAnalysis/linkermapviz.png)
Using this tool, you can compare the relative size of symbols. This can be helpful for checking memory usage at a glance.
Also, as Linkermapviz is written in Python, you can easily modify and adapt it to your firmware or export data in another format. For example, [here it is modified to parse the contents of the MAP file and export it in a CSV file](https://github.com/InfiniTimeOrg/InfiniTime/issues/313#issuecomment-842338620). This file could later be opened in LibreOffice Calc where sort/filter functionality could be used to search for specific symbols in specific files...
### Puncover
[Puncover](https://github.com/HBehrens/puncover) is another useful tools that analyses the binary file generated by the compiler (the .out file that contains all debug information). It provides valuable information about the symbols (data and code): name, position, size, max stack of each functions, callers, callees...
![Puncover](./memoryAnalysis/puncover.png)
Puncover is really easy to install:
- Clone the repo and cd into the cloned directory
- Setup a venv
- `python -m virtualenv venv`
- `source venv/bin/activate`
- Install : `pip install .`
- Run : `puncover --gcc_tools_base=/path/to/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi- --elf_file /path/to/build/directory/src/pinetime-app-1.1.0.out --src_root /path/to/sources --build_dir /path/to/build/directory`
- Replace
- `/path/to/gcc-arm-none-eabi-10.3-2021.10/bin` with the path to your gcc-arm-none-eabi toolchain
- `/path/to/build/directory/src/pinetime-app-1.1.0.out` with the path to the binary generated by GCC (.out file)
- `/path/to/sources` with the path to the root folder of the sources (checkout directory)
- `/path/to/build/directory` with the path to the build directory
- Launch a browser at http://localhost:5000/
### Analysis
Using the MAP file and tools, we can easily see what symbols are using most of the flash memory. In this case, unsurprisingly, fonts and graphics are the largest use of flash memory.
![Puncover](./memoryAnalysis/puncover-all-symbols.png)
This way, you can easily check what needs to be optimized. We should find a way to store big static data (like fonts and graphics) in the external flash memory, for example.
It's always a good idea to check the flash memory space when working on the project. This way, you can easily check that your developments are using a reasonable amount of space.
### Links
- Analysis with linkermapviz : https://github.com/InfiniTimeOrg/InfiniTime/issues/313#issuecomment-842338620
- Analysis with Puncover : https://github.com/InfiniTimeOrg/InfiniTime/issues/313#issuecomment-847311392
## RAM
RAM memory contains all the data that can be modified at run-time: variables, stack, heap...
### Data
RAM memory can be *statically* allocated, meaning that the size and position of the data are known at compile-time:
You can easily analyze the memory used by variables declared in the global scope using the MAP. You'll find them in the .BSS or .DATA sections. Linkermapviz and Puncover can be used to analyze their memory usage.
Variables declared in the scope of a function will be allocated on the stack. It means that the stack usage will vary according to the state of the program, and cannot be easily analyzed at compile time.
```
uint8_t buffer[1024]
int main() {
int a;
}
```
#### Analysis
In Infinitime 1.1, the biggest buffers are the buffers allocated for LVGL (14KB) and the one for FreeRTOS (16KB). Nimble also allocated 9KB of RAM.
### Stack
The stack will be used for everything except tasks, which have their own stack allocated by FreeRTOS. The stack is 8192B and is allocated in the [linker script](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/nrf_common.ld#L148).
An easy way to monitor its usage is by filling the section with a known pattern at boot time, then use the firmware and dump the memory. You can then check the maximum stack usage by checking the address from the beginning of the stack that were overwritten.
#### Fill the stack section by a known pattern:
Edit <NRFSDK>/modules/nrfx/mdk/gcc_startup_nrf52.S and add the following code after the copy of the data from read only memory to RAM at around line 243:
```
/* Loop to copy data from read only memory to RAM.
* The ranges of copy from/to are specified by following symbols:
* __etext: LMA of start of the section to copy from. Usually end of text
* __data_start__: VMA of start of the section to copy to.
* __bss_start__: VMA of end of the section to copy to. Normally __data_end__ is used, but by using __bss_start__
* the user can add their own initialized data section before BSS section with the INTERT AFTER command.
*
* All addresses must be aligned to 4 bytes boundary.
*/
ldr r1, =__etext
ldr r2, =__data_start__
ldr r3, =__bss_start__
subs r3, r3, r2
ble .L_loop1_done
.L_loop1:
subs r3, r3, #4
ldr r0, [r1,r3]
str r0, [r2,r3]
bgt .L_loop1
.L_loop1_done:
/* Add this code to fill the stack section with 0xFFEEDDBB */
ldr r0, =__StackLimit
ldr r1, =8192
ldr r2, =0xFFEEDDBB
.L_fill:
str r2, [r0]
adds r0, 4
subs r1, 4
bne .L_fill
/* -- */
```
#### Dump RAM memory and check usage
Dumping the content of the ram is easy using JLink debugger and `nrfjprog`:
```
nrfjprog --readram ram.bin
```
You can then display the file using objdump:
```
hexdump ram.bin -v | less
```
The stack is positioned at the end of the RAM -> 0xFFFF. Its size is 8192 bytes, so the end of the stack is at 0xE000.
On the following dump, the maximum stack usage is 520 bytes (0xFFFF - 0xFDF8):
```
000fdb0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee
000fdc0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee
000fdd0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee
000fde0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee
000fdf0 ddbb ffee ddbb ffee ffff ffff c24b 0003
000fe00 ffff ffff ffff ffff ffff ffff 0000 0000
000fe10 0018 0000 0000 0000 0000 0000 fe58 2000
000fe20 0000 0000 0000 00ff ddbb 00ff 0018 0000
000fe30 929c 2000 0000 0000 0018 0000 0000 0000
000fe40 92c4 2000 0458 2000 0000 0000 80e7 0003
000fe50 0000 0000 8cd9 0003 ddbb ffee ddbb ffee
000fe60 00dc 2000 92c4 2000 0005 0000 929c 2000
000fe70 007f 0000 feb0 2000 92c4 2000 feb8 2000
000fe80 ddbb ffee 0005 0000 929c 2000 0000 0000
000fe90 aca0 2000 0000 0000 0028 0000 418b 0005
000fea0 02f4 2000 001f 0000 0000 0000 0013 0000
000feb0 b5a8 2000 2199 0005 b5a8 2000 2201 0005
000fec0 b5a8 2000 001e 0000 0000 0000 0013 0000
000fed0 b5b0 2000 0fe0 0006 b5a8 2000 0000 0000
000fee0 0013 0000 2319 0005 0013 0000 0000 0000
000fef0 0000 0000 3b1c 2000 3b1c 2000 d0e3 0000
000ff00 4b70 2000 54ac 2000 4b70 2000 ffff ffff
000ff10 0000 0000 1379 0003 6578 2000 0d75 0003
000ff20 6578 2000 ffff ffff 0000 0000 1379 0003
000ff30 000c 0000 cfeb 0002 39a1 2000 a824 2000
000ff40 0015 0000 cfeb 0002 39a1 2000 a824 2000
000ff50 39a1 2000 0015 0000 001b 0000 b4b9 0002
000ff60 0000 0000 a9f4 2000 4b70 2000 0d75 0003
000ff70 4b70 2000 ffff ffff 0000 0000 1379 0003
000ff80 ed00 e000 a820 2000 1000 4001 7fc0 2000
000ff90 7f64 2000 75a7 0001 a884 2000 7b04 2000
000ffa0 a8c0 2000 0000 0000 0000 0000 0000 0000
000ffb0 7fc0 2000 7f64 2000 8024 2000 a5a5 a5a5
000ffc0 ed00 e000 3fd5 0001 0000 0000 72c0 2000
000ffd0 0000 0000 72e4 2000 3f65 0001 7f64 2000
000ffe0 0000 2001 0000 0000 ef30 e000 0010 0000
000fff0 7fc0 2000 4217 0001 3f0a 0001 0000 6100
```
#### Analysis
According to my experimentations, we don't use the stack that much, and 8192 bytes is probably way too big for InfiniTime!
#### Links
- https://github.com/InfiniTimeOrg/InfiniTime/issues/313#issuecomment-851035070
### Heap
The heap is declared in the [linker script](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/nrf_common.ld#L136) and its current size is 8192 bytes. The heap is used for dynamic memory allocation(`malloc()`, `new`...).
Heap monitoring is not easy, but it seems that we can use the following code to know the current usage of the heap:
```
auto m = mallinfo();
NRF_LOG_INFO("heap : %d", m.uordblks);
```
#### Analysis
According to my experimentation, InfiniTime uses ~6000bytes of heap most of the time. Except when the Navigation app is launched, where the heap usage exceeds 9500 bytes (meaning that the heap overflows and could potentially corrupt the stack). This is a bug that should be fixed in #362.
To know exactly what's consuming heap memory, you can `wrap` functions like `malloc()` into your own functions. In this wrapper, you can add logging code or put breakpoints:
- Add ` -Wl,-wrap,malloc` to the cmake variable `LINK_FLAGS` of the target you want to debug (pinetime-app, most probably)
- Add the following code in `main.cpp`
```
extern "C" {
void *__real_malloc (size_t);
void* __wrap_malloc(size_t size) {
return __real_malloc(size);
}
}
```
Now, your function `__wrap_malloc()` will be called instead of `malloc()`. You can call the actual malloc from the stdlib by calling `__real_malloc()`.
Using this technique, I was able to trace all malloc calls at boot (boot -> digital watch face):
- system task = 3464 bytes (SystemTask could potentially be declared as a global variable to avoid heap allocation here)
- string music = 31 (maybe we should not use std::string when not needed, as it does heap allocation)
- ble_att_svr_start = 1720
- ble gatts start = 40 + 88
- ble ll task = 24
- display app = 104
- digital clock = 96 + 152
- hr task = 304
#### Links
- https://github.com/InfiniTimeOrg/InfiniTime/issues/313#issuecomment-851035625
- https://www.embedded.com/mastering-stack-and-heap-for-system-reliability-part-1-calculating-stack-size/
- https://www.embedded.com/mastering-stack-and-heap-for-system-reliability-part-2-properly-allocating-stacks/
- https://www.embedded.com/mastering-stack-and-heap-for-system-reliability-part-3-avoiding-heap-errors/
## LVGL
I did a deep analysis of the usage of the buffer dedicated to lvgl (managed by lv_mem).
This buffer is used by lvgl to allocated memory for drivers (display/touch), screens, themes, and all widgets created by the apps.
The usage of this buffer can be monitored using this code :
```
lv_mem_monitor_t mon;
lv_mem_monitor(&mon);
NRF_LOG_INFO("\t Free %d / %d -- max %d", mon.free_size, mon.total_size, mon.max_used);
```
The most interesting metric is `mon.max_used` which specifies the maximum number of bytes used from this buffer since the initialization of lvgl.
According to my measurements, initializing the theme, display/touch driver and screens cost **4752** bytes!
Then, initializing the digital clock face costs **1541 bytes**.
For example a simple lv_label needs **~140 bytes** of memory.
I tried to monitor this max value while going through all the apps of InfiniTime 1.1 : the max value I've seen is **5660 bytes**. It means that we could probably **reduce the size of the buffer from 14KB to 6 - 10 KB** (we have to take the fragmentation of the memory into account).
### Links
- https://github.com/InfiniTimeOrg/InfiniTime/issues/313#issuecomment-850890064
## FreeRTOS heap and task stack ## FreeRTOS heap and task stack
FreeRTOS statically allocate its own heap buffer in a global variable named `ucHeap`. This is an array of *uint8_t*. Its size is specified by the definition `configTOTAL_HEAP_SIZE` in *FreeRTOSConfig.h* FreeRTOS statically allocate its own heap buffer in a global variable named `ucHeap`. This is an array of *uint8_t*. Its size is specified by the definition `configTOTAL_HEAP_SIZE` in *FreeRTOSConfig.h*
FreeRTOS uses this buffer to allocate memory for tasks stack and all the RTOS object created during runtime (timers, mutexes,...). FreeRTOS uses this buffer to allocate memory for tasks stack and all the RTOS object created during runtime (timers, mutexes...).
The function `xPortGetFreeHeapSize()` returns the amount of memory available in this *ucHeap* buffer. If this value reaches 0, FreeRTOS runs out of memory. The function `xPortGetFreeHeapSize()` returns the amount of memory available in this *ucHeap* buffer. If this value reaches 0, FreeRTOS runs out of memory.
@ -9,7 +298,6 @@ The function `xPortGetFreeHeapSize()` returns the amount of memory available in
NRF_LOG_INFO("Free heap : %d", xPortGetFreeHeapSize()); NRF_LOG_INFO("Free heap : %d", xPortGetFreeHeapSize());
``` ```
The function `uxTaskGetSystemState()` fetches some information about the running tasks like its name and the minimum amount of stack space that has remained for the task since the task was created: The function `uxTaskGetSystemState()` fetches some information about the running tasks like its name and the minimum amount of stack space that has remained for the task since the task was created:
``` ```
@ -18,61 +306,3 @@ auto nb = uxTaskGetSystemState(tasksStatus, 10, NULL);
for (int i = 0; i < nb; i++) { for (int i = 0; i < nb; i++) {
NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark); NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark);
``` ```
## Global heap
Heap is used for **dynamic memory allocation (malloc() / new)**. NRF SDK defaults the heap size to 8KB. The size of the heap can be specified by defining `__HEAP_SIZE=8192` in *src/CMakeLists.txt*:
```
add_definitions(-D__HEAP_SIZE=8192)
```
You can trace the dynamic memory allocation by using the flag `--wrap` of the linker. When this flag is enabled, the linker will replace the calls to a specific function by a call to __wrap_the_function(). For example, if you specify `-Wl,-wrap,malloc` in the linker flags, the linker will replace all calls to `void* malloc(size_t)` by calls to `void* __wrap_malloc(size_t)`. This is a function you'll have to define in your code. In this function, you can call `__real_malloc()` to call the actual `malloc()' function.
This technic allows you to wrap all calls to malloc() with you own code.
In *src/CMakeLists.txt*:
```
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
...
LINK_FLAGS "-Wl,-wrap,malloc ..."
...
)
```
In *main.cpp*:
```
uint32_t totalMalloc = 0;
extern "C" {
extern void* __real_malloc(size_t s);
void *__wrap_malloc(size_t s) {
totalMalloc += s;
return __real_malloc(s);
}
}
```
This function sums all the memory that is allocated during the runtime. You can monitor or log this value. You can also place breakpoints in this function to determine where the dynamic memory allocation occurs in your code.
# Global stack
The stack is used to allocate memory used by functions : **parameters and local variables**. NRF SDK defaults the heap size to 8KB. The size of the heap can be specified by defining `__STACK_SIZE=8192` in *src/CMakeLists.txt*:
```
add_definitions(-D__STACK_SIZE=8192)
```
*NOTE*: FreeRTOS uses its own stack buffer. Thus, the global stack is only used for main() and IRQ handlers. It should be possible to reduce its size to a much lower value.
**NOTE**: [?] How to track the global stack usage?
#LittleVGL buffer
*TODO*
#NimBLE buffers
*TODO*
#Tools
- https://github.com/eliotstock/memory : display the memory usage (FLASH/RAM) using the .map file from GCC.

25
doc/MotionService.md Normal file
View File

@ -0,0 +1,25 @@
# Motion Service
## Introduction
The motion service exposes step count and raw X/Y/Z motion value as READ and NOTIFY characteristics.
## Service
The service UUID is **00030000-78fc-48fe-8e23-433b3a1942d0**
## Characteristics
### Step count (UUID 00030001-78fc-48fe-8e23-433b3a1942d0)
The current number of steps represented as a single `uint32_t` (4 bytes) value.
### Raw motion values (UUID 00030002-78fc-48fe-8e23-433b3a1942d0)
The current raw motion values. This is a 3 `int16_t` array:
- [0] : X
- [1] : Y
- [2] : Z
The three motion values are in units of "binary milli-g", where 1g is represented by a value of 1024.

127
doc/NavigationService.md Normal file
View File

@ -0,0 +1,127 @@
# Navigation Service
## Introduction
The navigation ble service provides 4 characteristics to allow the watch to display navigation instructions from a companion application. This service is intended to be used when performing some outdoor activities, for example running or cycling.
The 4 characteristics are:
flag (string) - Upcoming icon name
narrative (string) - Textual description of instruction
manDist (string) - Manouvre Distance, the distance to the upcoming change
progress (uint8) - Percent complete of total route, value 0-100
## Service
The service UUID is 00010000-78fc-48fe-8e23-433b3a1942d0
## Characteristics
## Flags (UUID 00010001-78fc-48fe-8e23-433b3a1942d0)
All included icons are from pure-maps, which provides the actual routing from the client. The icon names ultimately come from the mapbox project "direction-icons", See https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation See the end of this document for the full list of supported icon names.
## Narrative (UUID 00010002-78fc-48fe-8e23-433b3a1942d0)
This is a client supplied string describing the upcoming instruction such as "At the roundabout take the first exit".
## Man Dist (UUID 00010003-78fc-48fe-8e23-433b3a1942d0)
This is a short string describing the distance to the upcoming instruction such as "50 m".
## Progress (UUID 00010004-78fc-48fe-8e23-433b3a1942d0)
The percent complete in a uint8. The watch displays this as an overall progress in a progress bar.
## Full icon list
- arrive
- arrive-left
- arrive-right
- arrive-straight
- close
- continue
- continue-left
- continue-right
- continue-slight-left
- continue-slight-right
- continue-straight
- continue-uturn
- depart
- depart-left
- depart-right
- depart-straight
- end-of-road-left
- end-of-road-right
- ferry
- flag
- fork
- fork-left
- fork-right
- fork-slight-left
- fork-slight-right
- fork-straight
- invalid
- invalid-left
- invalid-right
- invalid-slight-left
- invalid-slight-right
- invalid-straight
- invalid-uturn
- merge-left
- merge-right
- merge-slight-left
- merge-slight-right
- merge-straight
- new-name-left
- new-name-right
- new-name-sharp-left
- new-name-sharp-right
- new-name-slight-left
- new-name-slight-right
- new-name-straight
- notification-left
- notification-right
- notification-sharp-left
- notification-sharp-right
- notification-slight-left
- notification-slight-right
- notification-straight
- off-ramp-left
- off-ramp-right
- off-ramp-sharp-left
- off-ramp-sharp-right
- off-ramp-slight-left
- off-ramp-slight-right
- off-ramp-straight
- on-ramp-left
- on-ramp-right
- on-ramp-sharp-left
- on-ramp-sharp-right
- on-ramp-slight-left
- on-ramp-slight-right
- on-ramp-straight
- rotary
- rotary-left
- rotary-right
- rotary-sharp-left
- rotary-sharp-right
- rotary-slight-left
- rotary-slight-right
- rotary-straight
- roundabout
- roundabout-left
- roundabout-right
- roundabout-sharp-left
- roundabout-sharp-right
- roundabout-slight-left
- roundabout-slight-right
- roundabout-straight
- turn-left
- turn-right
- turn-sharp-left
- turn-sharp-right
- turn-slight-left
- turn-slight-right
- turn-stright
- updown
- uturn

View File

@ -1,33 +1,36 @@
# Build a stub for PineTime using NRF52-DK # Build a stub for PineTime using NRF52-DK
[NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK) is the official developpment kit for NRF52832 SoC from Nordic Semiconductor.
It can be very useful for PineTime developpment: [NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK) is the official development kit for the NRF52832 SoC from Nordic Semiconductor used in the PineTime.
* You can use it embedded JLink SWD programmer/debugger to program and debug you code on the PineTime
* As it's based on the same SoC than the PineTime, you can program it to actually run the same code than the PineTime.
This page is about the 2nd point : we will build a stub that will allow us to run the same code than the one you could run on the PineTime. This will allow you to work more easily if you don't have a PineTime dev kit around, if you don't want to modify your dev kit for SWD programming, or if you want to use some feature from the DK (like power measurement). This development kit can be very useful for PineTime development:
- You can use its embedded JLink SWD programmer/debugger to program and debug your code on the PineTime
- As it's based on the same SoC than the PineTime, you can program it to actually run the same code as the PineTime.
This page is about the 2nd point. We will build a stub that will allow us to run the same code you can run on the PineTime. This will allow you to work more easily if you don't have a PineTime dev kit around, if you don't want to modify your dev kit for SWD programming, or if you want to use some feature from the NRF52-DK (like power measurement).
This stub only implements the display, the button and the BLE radio. The other features from the pintime are missing: This stub only implements the display, the button and the BLE radio. The other features from the pintime are missing:
* heart rate sensor
* SPI flash - heart rate sensor
* touchpad - SPI flash
* accelerometer - touchpad
- accelerometer
These devices could be added on this stub, but I do not have the parts to try them out for now. These devices could be added on this stub, but I do not have the parts to try them out for now.
![Pinetime stub](../images/pinetimestub1.jpg "PinetimeStub") ![Pinetime stub](../images/pinetimestub1.jpg "PinetimeStub")
Here are the parts you need to build this simulator: Here are the parts you need to build this simulator:
* [NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK)
* An ST7889 display (I bought [this one](https://www.aliexpress.com/item/32859772356.html?spm=a2g0s.9042311.0.0.1b774c4dSoc4Xz)) - [NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK)
* A push-button (the one I use comes from a previous project build around ESP8266 board Wemos D1 Mini). - An ST7889 display (I bought [this one](https://www.aliexpress.com/item/32859772356.html?spm=a2g0s.9042311.0.0.1b774c4dSoc4Xz))
* Dupont wires - A push-button (the one I use comes from a previous project build around ESP8266 board Wemos D1 Mini).
- Dupont wires
You just need to make the following connections: You just need to make the following connections:
| NRF52-DK | ST7889 display | | NRF52-DK | ST7889 display |
| ---------|--------------- | | -------- | -------------- |
| VDD | VCC | | VDD | VCC |
| GND | GND | | GND | GND |
| P0.03 | SDA | | P0.03 | SDA |
@ -35,16 +38,15 @@ You just need to make the following connections:
| P0.02 | SCL | | P0.02 | SCL |
| P0.18 | DC | | P0.18 | DC |
| NRF52-DK | Push Button |
| -------- | ------------------------- |
| P0.13 | Button IN (D3 in my case) |
| GND | GND |
| NRF52-DK | Push Button | You also need to enable the I/O expander to disconnect pins from the buttons and LED on the NRF52-DK and leave them available on the pin headers:
| ---------|----------------------- |
| P0.13 | Button IN (D3 in my case) |
| GND | GND |
You also need to enable the I/O expander to disconnect pins from buttons and led on the NRF52-DK and leave them available on the pin headers:
| NRF52 -DK | NRF52- DK | | NRF52 -DK | NRF52- DK |
| --------- | --------- | | --------- | --------- |
| DETECT | GND | | DETECT | GND |
Now, you should be able to program the SoC on the NRF52-DK board, and use it as if it was running on the pintime. Now, you should be able to program the SoC on the NRF52-DK board, and use it as if it was running on the PineTime.

View File

@ -1,6 +1,9 @@
# The SPI LCD driver # The SPI LCD driver
## Introduction ## Introduction
The LCD controller that drive the display of the Pinetime is the Sitronix ST7789V. This controller is easy to integrate with an MCU thanks to its SPI interface, and has some interesting features like:
The LCD controller that drives the display of the Pinetime is the [Sitronix ST7789V](https://wiki.pine64.org/images/5/54/ST7789V_v1.6.pdf). This controller is easy to integrate with an MCU thanks to its SPI interface, and has some interesting features like:
- an on-chip display data RAM that can store the whole framebuffer - an on-chip display data RAM that can store the whole framebuffer
- partial screen update - partial screen update
- hardware assisted vertical scrolling - hardware assisted vertical scrolling
@ -11,6 +14,7 @@ When you want to write a device driver for a specific component, its datasheet i
Luckily for us, the datasheet of the ST7789 is great! It contains everything we need to write a nice driver for our beloved Pinetime. Luckily for us, the datasheet of the ST7789 is great! It contains everything we need to write a nice driver for our beloved Pinetime.
In this document, I'll try to explain the process I've followed to write a device driver for the LCD. There were multiple iterations: In this document, I'll try to explain the process I've followed to write a device driver for the LCD. There were multiple iterations:
- First, I tried to find the correct initialization sequence so that the controller is configured correctly according to the hardware configuration; - First, I tried to find the correct initialization sequence so that the controller is configured correctly according to the hardware configuration;
- Then, I tried to display some pixels on the screen; - Then, I tried to display some pixels on the screen;
- Next, I wanted to display squares, colors and text; - Next, I wanted to display squares, colors and text;
@ -20,12 +24,14 @@ In this document, I'll try to explain the process I've followed to write a devic
I'll describe all these steps in the following chapters. I'll describe all these steps in the following chapters.
## The datasheet ## The datasheet
As I said in the introduction, the datasheet will be your bedside book during your journey as a device driver designer. You'll read it from the beginning to the end once, twice, maybe ten times. Then, each time you'll want to do something new, you'll reopen the file and search for that specific paragraph or diagram than explains how the controller works so that you can figure out how to use it. As I said in the introduction, the datasheet will be your bedside book during your journey as a device driver designer. You'll read it from the beginning to the end once, twice, maybe ten times. Then, each time you'll want to do something new, you'll reopen the file and search for that specific paragraph or diagram than explains how the controller works so that you can figure out how to use it.
The schematic of your board (the Pinetime schematics in this case) will also be very important, as you'll need to know how the LCD controller is physically connected to the MCU. The schematic of your board (the Pinetime schematics in this case) will also be very important, as you'll need to know how the LCD controller is physically connected to the MCU.
How to read the datasheet? I recommend to read it from the beginning to the end (no joke) at least once. You certainly do not need to read everything in details, but it's good to know what information is available and where in the document. It'll be very useful during the development phase. How to read the datasheet? I recommend to read it from the beginning to the end (no joke) at least once. You certainly do not need to read everything in details, but it's good to know what information is available and where in the document. It'll be very useful during the development phase.
You'll want to read some part with more attention : You'll want to read some part with more attention :
- Data color coding in 4-Line Serial Interface : how to send the pixel to be display to the controller - Data color coding in 4-Line Serial Interface : how to send the pixel to be display to the controller
- Display Data Ram : how is the memory organized - Display Data Ram : how is the memory organized
- Power On/Off sequence - Power On/Off sequence
@ -33,7 +39,6 @@ You'll want to read some part with more attention :
## One Pixel at a time ## One Pixel at a time
## Bulk transfers ## Bulk transfers
## DMA ## DMA
@ -41,6 +46,7 @@ You'll want to read some part with more attention :
## IRQ ## IRQ
## Bare metal integration ## Bare metal integration
Integration customisée dans la lib GFX que j'ai écrite Integration customisée dans la lib GFX que j'ai écrite
## Integration with LittleVGL ## Integration with LittleVGL

15
doc/SWD.md Normal file
View File

@ -0,0 +1,15 @@
# How to flash InfiniTime using the SWD interface
Download the files **bootloader.bin**, **image-x.y.z.bin** and **pinetime-graphics-x.y.z.bin** from the release page:
![Image file](gettingStarted/imageFile.png)
The bootloader reads a boot logo from the external SPI flash memory. The first step consists of flashing a tool in the MCU that will flash the boot logo into this SPI flash memory. This first step is optional but recommended (the bootloader will display garbage on screen for a few second if you don't do it).
Using your SWD tool, flash **pinetime-graphics-x.y.z.bin** at offset **0x0000**. Reset the MCU and wait for a few seconds until the logo is completely drawn on the display.
Then, using your SWD tool, flash these file at the following offsets:
- bootloader.bin : **0x0000**
- image-x.y.z.bin : **0x8000**
Reset and voilà, you're running InfiniTime on your PineTime!

View File

@ -0,0 +1,78 @@
# Simple Weather Service
## Introduction
The Simple Weather Service provides a simple and straightforward API to specify the current weather and the forecast for the next 5 days.
It effectively replaces the original Weather Service (from InfiniTime 1.8) since InfiniTime 1.14.
## Service
The service UUID is `00050000-78fc-48fe-8e23-433b3a1942d0`.
## Characteristics
## Weather data (UUID 00050001-78fc-48fe-8e23-433b3a1942d0)
The host uses this characteristic to update the current weather information and the forecast for the next 5 days.
This characteristics accepts a byte array with the following 2-Bytes header:
- [0] Message Type :
- `0` : Current weather
- `1` : Forecast
- [1] Message Version :
- `0` : Currently supported
- `1` : Adds support for sunrise and sunset
### Current Weather
The byte array must contain the following data:
- [0] : Message type = `0`
- [1] : Message version = `1`
- [2][3][4][5][6][7][8][9] : Timestamp (64 bits UNIX timestamp, number of seconds elapsed since 1 JAN 1970) in local time (the same timezone as the one used to set the time)
- [10, 11] : Current temperature (°C * 100)
- [12, 13] : Minimum temperature (°C * 100)
- [14, 15] : Maximum temperature (°C * 100)
- [16]..[47] : location (string, unused characters should be set to `0`)
- [48] : icon ID
- 0 = Sun, clear sky
- 1 = Few clouds
- 2 = Clouds
- 3 = Heavy clouds
- 4 = Clouds & rain
- 5 = Rain
- 6 = Thunderstorm
- 7 = Snow
- 8 = Mist, smog
- [49, 50] : Sunrise (number of minutes elapsed since midnight)
- `0` sun already up when day starts
- `-1` unknown
- `-2` no sunrise (e.g. polar night)
- [51, 52] : Sunset (number of minutes elapsed since midnight)
- `-1` unknown
- `-2` no sunset (e.g. polar day)
### Forecast
The byte array must contain the following data:
- [0] : Message type = `1`
- [1] : Message version = `0`
- [2][3][4][5][6][7][8][9] : Timestamp (64 bits UNIX timestamp, number of seconds elapsed since 1 JAN 1970) in local time (the same timezone as the one used to set the time)
- [10] Number of days (Max 5, fields for unused days should be set to `0`)
- [11,12] Day 0 Minimum temperature (°C * 100)
- [13,14] Day 0 Maximum temperature (°C * 100)
- [15] Day 0 Icon ID
- [16,17] Day 1 Minimum temperature (°C * 100)
- [18,19] Day 1 Maximum temperature (°C * 100)
- [20] Day 1 Icon ID
- [21,22] Day 2 Minimum temperature (°C * 100)
- [23,24] Day 2 Maximum temperature (°C * 100)
- [25] Day 2 Icon ID
- [26,27] Day 3 Minimum temperature (°C * 100)
- [28,29] Day 3 Maximum temperature (°C * 100)
- [30] Day 3 Icon ID
- [31,32] Day 4 Minimum temperature (°C * 100)
- [33,34] Day 4 Maximum temperature (°C * 100)
- [35] Day 4 Icon ID

View File

@ -1,28 +1,309 @@
# Bluetooth Low-Energy : # Bluetooth Low-Energy :
## Introduction ## Introduction
This page describes the BLE implementation and API built in this firmware. This page describes the BLE implementation and API built in this firmware.
**Note** : I'm a beginner in BLE related technologies and the information of this document reflect my current knowledge and understanding of the BLE stack. These informations might be erroneous or incomplete. Feel free to submit a PR if you think you can improve these. ---
### Table of Contents
- [BLE Connection](#ble-connection)
- [BLE FS](#ble-fs)
- [BLE UUIDs](#ble-uuids)
- [BLE Services](#ble-services)
- [CTS](#cts)
- [ANS](#ans)
- [Getting Information](#getting-information)
- [Firmware Version](#firmware-version)
- [Battery Level](#battery-level)
- [Heart Rate](#heart-rate)
- [Notifications](#notifications)
- [New Alert](#new-alert)
- [Notification Event](#notification-event)
- [Firmware Upgrades](#firmware-upgrades)
- [Step one](#step-one)
- [Step two](#step-two)
- [Step three](#step-three)
- [Step four](#step-four)
- [Step five](#step-five)
- [Step six](#step-six)
- [Step seven](#step-seven)
- [Step eight](#step-eight)
- [Step nine](#step-nine)
- [Music Control](#music-control)
- [Events](#events)
- [Status](#status)
- [Artist, Track, and Album](#artist-track-and-album)
- [Time](#time)
---
## BLE Connection ## BLE Connection
When starting the firmware start a BLE advertising : it send small messages that can be received by any *central* device in range. This allows the device to announce its presence to other devices.
A companion application (running on a PC, RasberryPi, smartphone) which received this avertising packet can request a connection to the device. This connection procedure allows the 2 devices to negociate communication parameters, security keys,... When starting, the firmware starts BLE advertising. It sends small messages that can be received by any *central* device in range. This allows the device to announce its presence to other devices.
When the connection is established, the pinetime will try to discover services running on the companion application. For now **CTS** (**C**urrent **T**ime **S**ervice) and **ANS** (**A**lert **N**otification **S**ervice) are supported. A companion application (running on a PC, Raspberry Pi, smartphone, etc.) which receives this advertising packet can request a connection to the device. This connection procedure allows the 2 devices to negotiate communication parameters, security keys, etc.
When the connection is established, the PineTime will try to discover services running on the companion application. For now **CTS** (**C**urrent **T**ime **S**ervice) and **ANS** (**A**lert **N**otification **S**ervice) are supported.
If **CTS** is detected, it'll request the current time to the companion application. If **ANS** is detected, it will listen to new notifications coming from the companion application. If **CTS** is detected, it'll request the current time to the companion application. If **ANS** is detected, it will listen to new notifications coming from the companion application.
![BLE connection sequence diagram](ble/connection_sequence.png "BLE connection sequence diagram") ![BLE connection sequence diagram](ble/connection_sequence.png "BLE connection sequence diagram")
---
## BLE FS
The documentation for BLE FS can be found here:
[BLEFS.md](./BLEFS.md)
---
## BLE UUIDs
When possible, InfiniTime tries to implement BLE services defined by the BLE specification.
When the service does not exist in the BLE specification, InfiniTime implements custom services. Custom services are identified by a UUID, as are all BLE services. Here is how to define the UUID of custom services in InfiniTime:
```
- Base UUID : xxxxxxxx-78fc-48fe-8e23-433b3a1942d0
- Service UUID : SSSS0000-78fc-48fe-8e23-433b3a1942d0 where SSSS is the service ID
- Characteristic UUID : SSSSCCCC-78fc-48fe-8e23-433b3a1942d0 where CCCC is the characteristic ID for the service SSSS and is different than 0
```
The following custom services are implemented in InfiniTime:
- Since InfiniTime 0.8:
- Music Service : `00000000-78fc-48fe-8e23-433b3a1942d0`
- Since InfiniTime 0.11:
- [Navigation Service](NavigationService.md) : `00010000-78fc-48fe-8e23-433b3a1942d0`
- Since InfiniTime 0.13
- Call characteristic (extension to the Alert Notification Service): `00020001-78fc-48fe-8e23-433b3a1942d0`
- Since InfiniTime 1.7:
- [Motion Service](MotionService.md): `00030000-78fc-48fe-8e23-433b3a1942d0`
- Since InfiniTime 1.8:
- ~~Weather Service: `00040000-78fc-48fe-8e23-433b3a1942d0`~~ (replaced by Simple Weather Service in InfiniTime 1.14)
- Since InfiniTime 1.14
- [Simple Weather Service](SimpleWeatherService.md) : `00050000-78fc-48fe-8e23-433b3a1942d0`
---
## BLE services ## BLE services
[List of standard BLE services](https://www.bluetooth.com/specifications/gatt/services/) [List of standard BLE services](https://www.bluetooth.com/specifications/gatt/services/)
### CTS ### CTS
[Current Time Service](https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Services/org.bluetooth.service.current_time.xml) [Current Time Service](https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Services/org.bluetooth.service.current_time.xml)
### ANS ### ANS
[Alert Notification Service](https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Services/org.bluetooth.service.alert_notification.xml) [Alert Notification Service](https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Services/org.bluetooth.service.alert_notification.xml)
![ANS sequence diagram](./ble/ans_sequence.png "ANS sequence diagram") ![ANS sequence diagram](./ble/ans_sequence.png "ANS sequence diagram")
---
### Getting Information
The InfiniTime firmware exposes some information about itself through BLE. The BLE characteristic UUIDs for this information are as follows:
- Firmware Version: `00002a26-0000-1000-8000-00805f9b34fb`
- Battery Level: `00002a19-0000-1000-8000-00805f9b34fb`
- Heart Rate: `00002a37-0000-1000-8000-00805f9b34fb`
#### Firmware Version
Reading a value from the firmware version characteristic will yield a UTF-8 encoded string containing the version of InfiniTime being run on the device. Example: `1.6.0`.
#### Battery Level
Reading from the battery level characteristic yields a single byte of data. This byte can be converted to an unsigned 8-bit integer which will be the battery percentage. This characteristic allows notifications for updates as the value changes.
#### Heart Rate
Reading from the heart rate characteristic yields two bytes of data. I am not sure of the function of the first byte. It appears to always be zero. The second byte can be converted to an unsigned 8-bit integer which is the current heart rate. This characteristic also allows notifications for updates as the value changes.
---
### Notifications
InfiniTime uses the Alert Notification Service (ANS) for notifications. The relevant UUIDs are as follows:
- New Alert: `00002a46-0000-1000-8000-00805f9b34fb`
- Notification Event: `00020001-78fc-48fe-8e23-433b3a1942d0`
#### New Alert
The new alert characteristic allows sending new notifications to InfiniTime. It requires the following format:
```
<category><amount>\x00<\x00-separated data>
```
For example, here is what a normal notification looks like in Golang (language of `itd`):
```go
// \x00 is the category for simple alert, and there is one new notification, hence \x01.
"\x00\x01\x00Test Title\x00Test Body"
```
A call notification looks like so:
```go
// \x03 is the category for calls, and there is one new call notification, hence \x01.
"\x03\x01\x00Mary"
```
The `\x00` stands for hexadecimal `00` which means null.
Here is the list of categories and commands:
- Simple Alert: `0`
- Email: `1`
- News: `2`
- Call Notification: `3`
- Missed Call: `4`
- SMS/MMS: `5`
- Voicemail: `6`
- Schedule: `7`
- High Prioritized Alert: `8`
- Instant Message: `9`
- All Alerts: `0xFF`
These lists and information were retrieved from the following pages in the Nordic docs:
- [Alert Notification Service Client](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v12.2.0%2Fgroup__ble__ans__c.html)
- [Alert Notification Application](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v13.0.0%2Fble_sdk_app_alert_notification.html)
#### Notification Event
A call notification in InfiniTime contains three buttons. Decline, Accept, and Mute. The notification event characteristic contains the button tapped by the user on a call notification. This characteristic only allows notify, **not** read.
Enabling notifications from this characteristic, you get a single byte whenever the user taps a button on the call notification. This byte is an unsigned 8-bit integer that signifies one of the buttons. The numbers are as follows:
- 0: Declined
- 1: Accepted
- 2: Muted
---
### Firmware Upgrades
Firmware upgrades in InfiniTime are probably the most complex of the BLE operations. It is a nine step process requiring multiple commands be sent to multiple characteristics. The relevant UUIDs are as follows:
- Control Point: `00001531-1212-efde-1523-785feabcd123`
- Packet: `00001532-1212-efde-1523-785feabcd123`
A DFU upgrade archive for InfiniTime consists of multiple files. The most important being the .bin and .dat files. The first is the actual firmware, while the second is a packet that initializes DFU. Both are needed for a DFU upgrade.
The first thing to do is to enable notifications on the control point characteristic. This will be needed for verifying that the proper responses are being sent back from InfiniTime.
#### Step one
For the first step, write `0x01`, `0x04` to the control point characteristic. This will signal InfiniTime that a DFU upgrade is to be started.
#### Step two
In step two, send the total size in bytes of the firmware file to the packet characteristic. This value should be an unsigned 32-bit integer encoded as little-endian. In front of this integer should be 8 null bytes. This is because there are three items that can be updated and each 4 bytes is for one of those. The last four are for the InfiniTime application, so those are the ones that need to be set.
#### Step three
Before running step three, wait for a response from the control point. This response should be `0x10`, `0x01`, `0x01` which indicates a successful DFU start. In step three, send `0x02`, `0x00` to the control point. This will signal InfiniTime to expect the init packet on the packet characteristic.
#### Step four
The previous step prepared InfiniTime for this one. In this step, send the contents of the .dat init packet file to the packet characteristic. After this, send `0x02`, `0x01` indicating that the packet has been sent.
#### Step five
Before running this step, wait to receive `0x10`, `0x02`, `0x01` which indicates that the packet has been received. During this step, send the packet receipt interval to the control point. The firmware file will be sent in segments of 20 bytes each. The packet receipt interval indicates how many segments should be received before sending a receipt containing the amount of bytes received so that it can be confirmed to be the same as the amount sent. This is very useful for detecting packet loss. `itd` uses `0x08`, `0x0A` which indicates 10 segments.
#### Step six
In step six, write `0x03` to the control point, indicating that the firmware will be sent next on the packet characteristic.
#### Step seven
This step is the most difficult. Here, the actual firmware is sent to InfiniTime.
As mentioned before, the firmware file must be split up into segments of 20 bytes each and sent to the packet characteristic one by one. Every 10 segments (or whatever you have set the interval to), check for a response starting with `0x11`. The rest of the response will be the amount of bytes received encoded as a little-endian unsigned 32-bit integer. Confirm that this matches the amount of bytes sent, and then continue sending more segments.
#### Step eight
Before running this step, wait to receive `0x10`, `0x03`, `0x01` which indicates a successful receipt of the firmware image. In this step, write `0x04` to the control point to signal InfiniTime to validate the image it has received.
#### Step nine
Before running this step, wait to receive `0x10`, `0x04`, `0x01` which indicates that the image has been validated. In this step, send `0x05` to the control point as a command with no response. This signals InfiniTime to activate the new firmware and reboot.
Once all of these steps are complete, the DFU is complete. Don't forget to validate the firmware in the settings.
---
### Music Control
InfiniTime contains a music controller app which is meant to control the music playback and volume through the companion.
The following UUIDs are relevant to this:
- Events: `00000001-78fc-48fe-8e23-433b3a1942d0`
- Status: `00000002-78fc-48fe-8e23-433b3a1942d0`
- Artist: `00000003-78fc-48fe-8e23-433b3a1942d0`
- Track: `00000004-78fc-48fe-8e23-433b3a1942d0`
- Album: `00000005-78fc-48fe-8e23-433b3a1942d0`
#### Events
The events characteristic is meant to respond to user input in the music controller app.
Enabling notifications on this characteristic gives you a single byte upon any event. This byte can be converted to an unsigned 8-bit integer which corresponds to each possible event. Here are the events:
- App Opened: `0xe0`
- Play: `0x00`
- Pause: `0x01`
- Next: `0x03`
- Previous: `0x04`
- Volume up: `0x05`
- Volume down: `0x06`
#### Status
The status characteristic allows setting the playing status of music. Send `0x01` to the status characteristic for playing, and `0x00` for paused.
#### Artist, Track, and Album
These characteristics all work the same way. Simply send a UTF-8 encoded string to the relevant characteristic in order to set the value in the app.
---
### Time
InfiniTime allows setting its time via the Current Time Service (CTS)
The UUID for the current time characteristic is: `00002a2b-0000-1000-8000-00805f9b34fb`
This characteristic expects a particular format:
- Year (`uint16`)
- Month (`uint8`)
- Day (`uint8`)
- Hour (`uint8`)
- Minute (`uint8`)
- Second (`uint8`)
- Weekday (`uint8`)
- Microsecond divided by `1e6*256` (`uint8`)
- Binary 0001 (`uint8`)
Write all of these together, encoded as little-endian, to the current time characteristic.

View File

@ -3,7 +3,7 @@ Pinetime --> CompanionApp: Start advertising
group BLE Connection group BLE Connection
CompanionApp -> Pinetime: Connection request CompanionApp -> Pinetime: Connection request
CompanionApp <-> Pinetime: Connection parameters negociation, security procedure,... CompanionApp <-> Pinetime: Connection parameters negotiation, security procedure,...
end end
group Service Discovery group Service Discovery

View File

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 187 KiB

View File

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 208 KiB

View File

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -1,12 +1,12 @@
# Branches # Branches
The branching model of this project is based on the workflow named [Git flow](https://nvie.com/posts/a-successful-git-branching-model/).
It is based on 2 main branches: The project has 1 main branch, aptly called **main**.
- **master** : this branch is always ready to be reployed. It means that at any time, we should be able to build the branch and release a new version of the application. This branch contains the latest development that will be tagged for the next release once it's considered stable.
- **develop** : this branch contains the latest development that will be integrated in the next release once it's considered as stable.
New features should be implemented in **feature branches** created from **develop**. When the feature is ready, a pull-request is created and it'll be merge into **develop** when it is succesfully reviewed and accepted. New features should be implemented in **feature branches** created from **main**.
When the feature is ready, a pull request is created and it'll be merged into **main** when it is successfully reviewed and accepted.
To release a new version of the application, when develop is considered stable, a **release** branch is created from **develop**. This can be considered as a *release candidate* branch. When everything is OK, this release branch is merged into **master** and the release is generated (a tag is applied to git, the release note is finalized, binaries are built,...) from **master**. To release a new version of the application, when main is considered stable, a tag is created on the version bump commit in **main** and the release is generated (a tag is applied to git, the release note is finalized, binaries are built,...).
Git flow also supports the creation of **hotfix** branches when a bug is discovered in a released version. The **hotfix** branch is created from **master** and will be used only to implement a fix to this bug. Multiple hotfix branches can be created for the same release if more than one bugs are discovered. We also supports the creation of **hotfix** branches when a bug is discovered in a released version. The **hotfix** branch is created from the latest tag and will be used only to implement a fix to this bug.
Multiple hotfix branches can be created for the same release if multiple bugs are discovered.

View File

@ -1,209 +1,101 @@
# Build # Build
## Dependencies ## Dependencies
To build this project, you'll need: To build this project, you'll need:
- A cross-compiler : [ARM-GCC (9-2020-q2-update)](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads/9-2020-q2-update)
- The NRF52 SDK 15.3.0 : [nRF-SDK v15.3.0](https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip) - A cross-compiler : [ARM-GCC (10.3-2021.10)](https://developer.arm.com/downloads/-/gnu-rm)
- A reasonably recent version of CMake (I use 3.16.5) - The NRF52 SDK 15.3.0 : [nRF-SDK v15.3.0](https://nsscprodmedia.blob.core.windows.net/prod/software-and-other-downloads/sdks/nrf5/binaries/nrf5sdk153059ac345.zip)
- The Python 3 modules `cbor`, `intelhex`, `click` and `cryptography` modules for the `mcuboot` tool (see [requirements.txt](../tools/mcuboot/requirements.txt))
- To keep the system clean, you can install python modules into a python virtual environment (`venv`)
```sh
python -m venv .venv
source .venv/bin/activate
python -m pip install wheel
python -m pip install -r tools/mcuboot/requirements.txt
```
- A reasonably recent version of CMake (I use 3.16.5)
- lv_font_conv, to generate the font .c files
- see [lv_font_conv](https://github.com/lvgl/lv_font_conv#install-the-script)
- install npm (commonly done via the package manager, ensure node's version is at least 12)
- install lv_font_conv: `npm install lv_font_conv`
## Build steps ## Build steps
### Clone the repo ### Clone the repo
``` ```
git clone https://github.com/JF002/Pinetime.git git clone https://github.com/InfiniTimeOrg/InfiniTime.git
cd Pinetime cd InfiniTime
git submodule update --init
mkdir build mkdir build
cd build cd build
``` ```
### Project generation using CMake ### Project generation using CMake
CMake configures the project according to variables you specify the command line. The variables are: CMake configures the project according to variables you specify the command line. The variables are:
Variable | Description | Example| Variable | Description | Example|
----------|-------------|--------| ----------|-------------|--------|
**ARM_NONE_EABI_TOOLCHAIN_PATH**|path to the toolchain directory|`-DARM_NONE_EABI_TOOLCHAIN_PATH=/home/jf/nrf52/gcc-arm-none-eabi-9-2020-q2-update/`| **ARM_NONE_EABI_TOOLCHAIN_PATH**|path to the toolchain directory|`-DARM_NONE_EABI_TOOLCHAIN_PATH=/home/jf/nrf52/gcc-arm-none-eabi-10.3-2021.10/`|
**NRF5_SDK_PATH**|path to the NRF52 SDK|`-DNRF5_SDK_PATH=/home/jf/nrf52/Pinetime/sdk`| **NRF5_SDK_PATH**|path to the NRF52 SDK|`-DNRF5_SDK_PATH=/home/jf/nrf52/Pinetime/sdk`|
**USE_JLINK, USE_GDB_CLIENT and USE_OPENOCD**|Enable *JLink* mode, *GDB Client* (Black Magic Probe) mode or *OpenOCD* mode (set the one you want to use to `1`)|`-DUSE_JLINK=1` **CMAKE_BUILD_TYPE (\*)**| Build type (Release or Debug). Release is applied by default if this variable is not specified.|`-DCMAKE_BUILD_TYPE=Debug`
**CMAKE_BUILD_TYPE**| Build type (Release or Debug). Release is applied by default if this variable is not specified.|`-DCMAKE_BUILD_TYPE=Debug` **BUILD_DFU (\*\*)**|Build DFU files while building (needs [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil)).|`-DBUILD_DFU=1`
**NRFJPROG**|Path to the NRFJProg executable. Used only if `USE_JLINK` is 1.|`-DNRFJPROG=/opt/nrfjprog/nrfjprog` **BUILD_RESOURCES (\*\*)**| Generate external resource while building (needs [lv_font_conv](https://github.com/lvgl/lv_font_conv) and [python3-pil/pillow](https://pillow.readthedocs.io) module). |`-DBUILD_RESOURCES=1`
**GDB_CLIENT_BIN_PATH**|Path to arm-none-eabi-gdb executable. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_BIN_PATH=/home/jf/nrf52/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-gdb` **TARGET_DEVICE**|Target device, used for hardware configuration. Allowed: `PINETIME, MOY_TFK5, MOY_TIN5, MOY_TON5, MOY_UNK`|`-DTARGET_DEVICE=PINETIME` (Default)
**GDB_CLIENT_TARGET_REMOTE**|Target remote connection string. Used only if `USE_GDB_CLIENT` is 1.|`-DGDB_CLIENT_TARGET_REMOTE=/dev/ttyACM0`
#### (\*) Note about **CMAKE_BUILD_TYPE**
By default, this variable is set to *Release*. It compiles the code with size and speed optimizations. We use this value for all the binaries we publish when we [release](https://github.com/InfiniTimeOrg/InfiniTime/releases) new versions of InfiniTime.
The *Debug* mode disables all optimizations, which makes the code easier to debug. However, the binary size will likely be too big to fit in the internal flash memory. If you want to build and debug a *Debug* binary, you can disable some parts of the code that are not needed for the test you want to achieve. You can also apply the *Debug* mode selectively on parts of the application by applying the `DEBUG_FLAGS` only for the part (CMake target) you want to debug. For example, let's say you want to debug code related to LittleFS, simply set the compilation options for the RELEASE configuration of the target to `DEBUG_FLAGS` (in `src/CMakeLists.txt`). This will force the compilation of that target in *Debug* mode while the rest of the project will be built in *Release* mode. Example:
#### CMake command line for JLink
``` ```
cmake -DCMAKE_BUILD_TYPE=Debug -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_JLINK=1 -DNRFJPROG=... ../ target_compile_options(littlefs PRIVATE
${COMMON_FLAGS}
$<$<CONFIG:DEBUG>: ${DEBUG_FLAGS}>
$<$<CONFIG:RELEASE>: ${DEBUG_FLAGS}> # Change from RELEASE_FLAGS to DEBUG_FLAGS
$<$<COMPILE_LANGUAGE:CXX>: ${CXX_FLAGS}>
$<$<COMPILE_LANGUAGE:ASM>: ${ASM_FLAGS}>
)
``` ```
#### CMake command line for GDB Client (Black Magic Probe) #### (\*\*) Note about **BUILD_DFU**
``` DFU files are the files you'll need to install your build of InfiniTime using OTA (over-the-air) mechanism. To generate the DFU file, the Python tool [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) is needed on your system. Check that this tool is properly installed before enabling this option.
cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_GDB_CLIENT=1 -DGDB_CLIENT_BIN_PATH=... -DGDB_CLIENT_TARGET_REMOTE=... ../
``` #### CMake command
#### CMake command line for OpenOCD
``` ```
cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_OPENOCD=1 -DGDB_CLIENT_BIN_PATH=[optional] ../ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -S ..
``` ```
### Build the project ### Build the project
During the project generation, CMake created the following targets:
- FLASH_ERASE : mass erase the flash memory of the NRF52.
- FLASH_pinetime-app : flash the firmware into the NRF52.
- pinetime-app : build the standalone (without bootloader support) version of the firmware.
- pinetime-mcuboot-app : build the firmware with the support of the bootloader (based on MCUBoot).
- pinetime-graphics : small firmware that writes the boot graphics into the SPI flash.
If you just want to build the project and run it on the Pinetime, using *pinetime-app* is recommanded. See [this page](../bootloader/README.md) for more info about bootloader support. During the project generation, CMake created the following targets:
- **pinetime-app** : build the standalone (without bootloader support) version of the firmware.
- **pinetime-recovery** : build the standalone recovery version of infinitime (light firmware that only supports OTA and basic UI)
- **pinetime-recovery-loader** : build the standalone tool that flashes the recovery firmware into the external SPI flash
- **pinetime-mcuboot-app** : build the firmware with the support of the bootloader (based on MCUBoot).
- **pinetime-mcuboot-recovery** : build pinetime-recovery with bootloader support
- **pinetime-mcuboot-recovery-loader** : build pinetime-recovery-loader with bootloader support
If you just want to build the project and run it on the Pinetime, using *pinetime-app* is recommended. See [this page](../bootloader/README.md) for more info about bootloader support.
Build: Build:
``` ```
make -j pinetime-app make -j4 pinetime-app
``` ```
List of files generated: List of files generated:
Binary files are generated into the folder `src`: Binary files are generated into the folder `src`:
- **pinetime-app.bin, .hex and .out** : standalone firmware in bin, hex and out formats.
- **pinetime-app.map** : map file
- **pinetime-mcuboot-app.bin, .hex and .out** : firmware with bootloader support in bin, hex and out formats.
- **pinetime-mcuboot-app.map** : map file
- **pinetime-graphics.bin, .hex and .out** : firmware for the boot graphic in bin, hex and out formats.
- **pinetime-graphics.map** : map file
### Program and run - **pinetime-app.bin, .hex and .out** : standalone firmware in bin, hex and out formats.
#### Using CMake targets - **pinetime-app.map** : map file
These target have been configured during the project generation by CMake according to the parameters you provided to the command line. - **pinetime-mcuboot-app.bin, .hex and .out** : firmware with bootloader support in bin, hex and out formats.
- **pinetime-mcuboot-app.map** : map file
- **pinetime-mcuboot-app-image** : MCUBoot image of the firmware
- **pinetime-mcuboot-app-dfu** : DFU file of the firmware
Mass erase: The same files are generated for **pinetime-recovery** and **pinetime-recovery-loader**
```
make FLASH_ERASE
```
Flash the application:
```
make FLASH_pinetime-app
```
### Using JLink
Start JLinkExe:
```
$ /opt/SEGGER/JLink/JLinkExe -device nrf52 -if swd -speed 4000 -autoconnect 1
SEGGER J-Link Commander V6.70d (Compiled Apr 16 2020 17:59:37)
DLL version V6.70d, compiled Apr 16 2020 17:59:25
Connecting to J-Link via USB...O.K.
Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Mar 17 2020 14:43:00
Hardware version: V1.00
S/N: 682579153
License(s): RDI, FlashBP, FlashDL, JFlash, GDB
VTref=3.300V
Device "NRF52" selected.
Connecting to target via SWD
InitTarget() start
InitTarget() end
Found SW-DP with ID 0x2BA01477
DPIDR: 0x2BA01477
Scanning AP map to find all available APs
AP[2]: Stopped AP scan as end of AP map has been reached
AP[0]: AHB-AP (IDR: 0x24770011)
AP[1]: JTAG-AP (IDR: 0x02880000)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FF000
CPUID register: 0x410FC241. Implementer code: 0x41 (ARM)
Found Cortex-M4 r0p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS-M7
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU
ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM
Cortex-M4 identified.
J-Link>
```
Use the command loadfile to program the .hex file:
```
J-Link>loadfile pinetime-app.hex
Downloading file [pinetime-app.hex]...
Comparing flash [100%] Done.
Erasing flash [100%] Done.
Programming flash [100%] Done.
Verifying flash [100%] Done.
J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (4096 bytes)
J-Link: Flash download: Total time needed: 0.322s (Prepare: 0.043s, Compare: 0.202s, Erase: 0.003s, Program: 0.064s, Verify: 0.000s, Restore: 0.007s)
O.K.
```
Then reset (r) and start (g) the CPU:
```
J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
J-Link>g
```
#### JLink RTT
RTT is a feature from Segger's JLink devices that allows bidirectionnal communication between the debugger and the target. This feature can be used to get the logs from the embedded software on the development computer.
- Program the MCU with the code (see above)
- Start JLinkExe
```
$ JLinkExe -device nrf52 -if swd -speed 4000 -autoconnect 1
```
Start JLinkRTTClient
```
$ JLinkRTTClient
```
### Using GDB and Black Magic Probe (BMP)
Enter the following command into GDB:
```
target extended-remote /dev/ttyACM0
monitor swdp_scan
attach 1
file ./pinetime-app-full.hex
load
run
```
Example :
```
$ /home/jf/nrf52/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gdb
(gdb) target extended-remote /dev/ttyACM0
Remote debugging using /dev/ttyACM0
(gdb) monitor swdp_scan
Target voltage: ABSENT!
Available Targets:
No. Att Driver
1 Nordic nRF52 M3/M4
2 Nordic nRF52 Access Port
(gdb) attach 1
Attaching to Remote target
warning: No executable has been specified and target does not support
determining executable automatically. Try using the "file" command.
0xfffffffe in ?? ()
(gdb) file ./pinetime-app-full.hex
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from ./pinetime-app-full.hex...
(No debugging symbols found in ./pinetime-app-full.hex)
(gdb) load
Loading section .sec1, size 0xb00 lma 0x0
Loading section .sec2, size 0xf000 lma 0x1000
Loading section .sec3, size 0x10000 lma 0x10000
Loading section .sec4, size 0x5150 lma 0x20000
Loading section .sec5, size 0xa000 lma 0x26000
Loading section .sec6, size 0x10000 lma 0x30000
Loading section .sec7, size 0xdf08 lma 0x40000
Start address 0x0, load size 314200
Transfer rate: 45 KB/sec, 969 bytes/write.
```

View File

@ -1,33 +1,89 @@
# Build the project using Docker # Build the project using Docker
A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and AMD64 architectures. This image makes the build of the firmware and the generation of the DFU file for OTA.
## Build the image A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and ARM64 architectures.
The image is not (yet) available on DockerHub, you need to build it yourself, which is quite easy. The following commands must be run from the root of the project. These images make the build of the firmware and the generation of the DFU file for OTA quite easy, as well as preventing clashes with any other toolchains or development environments you may have installed.
If you are running on a x86_64 computer : Based on Ubuntu 22.04 with the following build dependencies:
```
docker image build -t infinitime-build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) docker/x86_64/ - ARM GCC Toolchain
- nRF SDK
- MCUBoot
- adafruit-nrfutil
- lv_font_conv
## Clone the repository
Before building, local repository must be fully initialized.
```sh
git clone https://github.com/InfiniTimeOrg/InfiniTime.git
cd InfiniTime
git submodule update --init
``` ```
And if your are running on an ARM64 device (tested on RaspberryPi4 and Pine64 PineBookPro): ## Provision the image
```
docker image build -t infinitime-build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) docker/arm64/ Before continuing, the build image needs to be either build locally or pulled
from Docker Hub, as described in the two sections below:
### Build the image
You can build the image yourself if you like!
The following commands must be run from the root of the project. This operation
will take some time but, when done, a new image named `infinitime-build` is
available.
```sh
docker build -t infinitime-build ./docker
``` ```
This operation will take some time. It builds a Docker image based on Ubuntu, install some packages, download the ARM toolchain, the NRF SDK, MCUBoot and adafruit-nrfutil. ### Pull the image from Docker Hub
When this is done, a new image named *infinitime-build* is available. The image is available via Docker Hub for both the amd64 and arm64v8 architectures at
[infinitime/infinitime-build](https://hub.docker.com/repository/docker/infinitime/infinitime-build).
## Run a container to build the project: You can run it using the following command:
``` ```sh
docker run --rm -v <project_root>:/sources infinitime-build docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime/infinitime-build
``` ```
Replace *<project_root>* by the path of the root of the project on your computer. For example: The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually:
``` - For AMD64 (x86_64) systems: `docker pull --platform linux/amd64 infinitime/infinitime-build`
docker run --rm -v /home/jf/git/PineTime:/sources infinitime-build
- For ARM64v8 (ARM64/aarch64) systems: `docker pull --platform linux/arm64 infinitime/infinitime-build`
## Run a container to build the project
The `infinitime-build` image contains all the dependencies you need.
The default `CMD` will compile sources found in `/sources`, so you need only mount your code.
This example will build the firmware, generate the MCUBoot image and generate the DFU file.
Outputs will be written to **<project_root>/build/output**:
```sh
cd <project_root> # e.g. cd ./work/Pinetime
docker run --rm -it -v ${PWD}:/sources infinitime-build
``` ```
This will start a container, build the firmware and generate the MCUBoot image and the DFU file. The output of the build is stored in **<project_root>/built/output**. If the docker service is running as `root`, the build process inside the
container also runs as `root`, which is not convenient as all the files
generated by the build will also belong to `root`. The parameter `--user`
overrides this behaviour. The command below ensures that all files are created
as your current user:
```sh
cd <project_root> # e.g. cd ./work/Pinetime
docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime-build
```
If you only want to build a single CMake target, you can pass it in as the first parameter to the build script.
This means calling the script explicitly as it will override the `CMD`.
Here's an example for `pinetime-app`:
```sh
docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime-build /opt/build.sh pinetime-app
```

47
doc/buildWithVScode.md Normal file
View File

@ -0,0 +1,47 @@
# Build and Develop the project using VS Code
The .VS Code folder contains configuration files for developing InfiniTime with VS Code. Effort was made to have these rely on Environment variables instead of hardcoded paths.
## Environment Setup
To support as many setups as possible the VS Code configuration files expect there to be certain environment variables to be set.
Variable | Description | Example
----------|-------------|--------
**ARM_NONE_EABI_TOOLCHAIN_PATH**|path to the toolchain directory|`export ARM_NONE_EABI_TOOLCHAIN_PATH=/opt/gcc-arm-none-eabi-10.3-2021.10`
**NRF5_SDK_PATH**|path to the NRF52 SDK|`export NRF5_SDK_PATH=/opt/nRF5_SDK_15.3.0_59ac345`
## VS Code Extensions
We leverage a few VS Code extensions for ease of development.
#### Required Extensions
- [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) - C/C++ IntelliSense, debugging, and code browsing.
- [CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) - Extended CMake support in Visual Studio Code
#### Optional Extensions
[Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) - ARM Cortex-M GDB Debugger support for VS Code
Cortex-Debug is only required for interactive debugging using VS Codes built in GDB support.
## VS Code/Docker DevContainer
The .devcontainer folder contains the configuration and scripts for using a Docker dev container for building InfiniTime
Using the [Remote-Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension is recommended. It will handle configuring the Docker virtual machine and setting everything up.
More documentation is available in the [readme in .devcontainer](usingDevcontainers.md)
### DevContainer on Ubuntu
To use the DevContainer configuration on Ubuntu based systems two changes need to be made:
1. Modify the file `.devcontainer/devcontainer.json` and add the argument `"--net=host"` to the `"runArgs"` parameter making the line look like this:
`"runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined", "--net=host"],`
2. Modify the file `.vscode/launch.json` and change the argument of `"gdbTarget"` to `"127.0.0.1:3333"`, making the line look like:
`"gdbTarget": "127.0.0.1:3333",`
3. To start debugging launch openocd on your host system with the appropriate configuration, for example with a stlink-v2 the command is:
`openocd -f interface/stlink.cfg -f target/nrf52.cfg`. This launches openocd with the default ports `3333`, `4444` and `6666`.
4. In VsCode go to the Debug pane on the left of the screen and select the configuration `Debug - Openocd docker Remote` and hit the play button on the left.

214
doc/code/Apps.md Normal file
View File

@ -0,0 +1,214 @@
# Apps
This page will teach you:
- what screens and apps are in InfiniTime
- how to implement your own app
## Theory
The user interface of InfiniTime is made up of **screens**.
Screens that are opened from the app launcher are considered **apps**.
Every app in InfiniTime is its own class.
An instance of the class is created when the app is launched, and destroyed when the user exits the app.
Apps run inside the `DisplayApp` task (briefly discussed [here](./Intro.md)).
Apps are responsible for everything drawn on the screen when they are running.
Apps can be refreshed periodically and reacts to external events (touch or button).
## Interface
Every app class is declared inside the namespace `Pinetime::Applications::Screens`
and inherits
from [`Pinetime::Applications::Screens::Screen`](https://github.com/InfiniTimeOrg/InfiniTime/blob/main/src/displayapp/screens/Screen.h).
Each app defines its own constructor.
The constructors mostly take references to InfiniTime `Controllers` (ex: Alarm, DateTime, BLE services, Settings,...)
the app needs for its operations. The constructor is responsible for initializing the UI of the app.
The **destructor** cleans up LVGL and restores any changes (for example re-enable sleeping).
App classes can override `bool OnButtonPushed()`, `bool OnTouchEvent(TouchEvents event)`
and `bool OnTouchEvent(uint16_t x, uint16_t y)` to implement their own functionality for those events.
Apps that need to be refreshed periodically create an `lv_task` (using `lv_task_create()`)
that will call the method `Refresh()` periodically.
## App types
There are basically 3 types of applications : **system** apps and **user** apps and **watch faces**.
**System** applications are always built into InfiniTime, and InfiniTime cannot work properly without those apps.
Settings, notifications and the application launcher are examples of such system applications.
**User** applications are optionally built into the firmware. They extend the functionalities of the system.
**Watch faces** are very similar to the **user** apps, they are optional, but at least one must be built into the firmware.
The distinction between **system** apps, **user** apps and watch faces allows for more flexibility and customization.
This allows to easily select which user applications and watch faces must be built into the firmware
without overflowing the system memory.
## Apps and watch faces initialization
Apps are created by `DisplayApp` in `DisplayApp::LoadScreen()`.
This method simply call the creates an instance of the class that corresponds to the app specified in parameters.
The constructor of **system** apps is called directly. If the application is a **user** app,
the corresponding `AppDescription` is first retrieved from `userApps`
and then the function `create` is called to create an instance of the app.
Watch faces are handled in a very similar way as the **user** apps : they are created by `DisplayApp` in the method `DisplayApp::LoadScreen()` when the application type is `Apps::Clock`.
## User application selection at build time
The list of user applications is generated at build time by the `consteval` function `CreateAppDescriptions()`
in `UserApps.h`. This method takes the list of applications that must be built into the firmware image.
This list of applications is defined as a list `Apps` enum values named `UserAppTypes` in `Apps.h`.
For each application listed in `UserAppTypes`, an entry of type `AppDescription` is added to the array `userApps`.
This entry is created by using the information provided by a template `AppTraits`
that is customized for every user application.
Here is an example of an AppTraits customized for the Alarm application.
It defines the type of application, its icon and a function that returns an instance of the application.
```c++
template <>
struct AppTraits<Apps::Alarm> {
static constexpr Apps app = Apps::Alarm;
static constexpr const char* icon = Screens::Symbols::clock;
static Screens::Screen* Create(AppControllers& controllers) {
return new Screens::Alarm(controllers.alarmController,
controllers.settingsController.GetClockType(),
*controllers.systemTask,
controllers.motorController);
};
};
```
This array `userApps` is used by `DisplayApp` to create the applications and the `AppLauncher`
to list all available applications.
## Watch face selection at build time
The list of available watch faces is also generated at build time by the `consteval`
function `CreateWatchFaceDescriptions()` in `UserApps.h` in the same way as the **user** apps.
Watch faces must declare a `WatchFaceTraits` so that the corresponding `WatchFaceDescription` can be generated.
Here is an example of `WatchFaceTraits`:
```c++
template <>
struct WatchFaceTraits<WatchFace::Analog> {
static constexpr WatchFace watchFace = WatchFace::Analog;
static constexpr const char* name = "Analog face";
static Screens::Screen* Create(AppControllers& controllers) {
return new Screens::WatchFaceAnalog(controllers.dateTimeController,
controllers.batteryController,
controllers.bleController,
controllers.notificationManager,
controllers.settingsController);
};
static bool IsAvailable(Pinetime::Controllers::FS& /*filesystem*/) {
return true;
}
};
```
## Creating your own app
A minimal user app could look like this:
MyApp.h:
```cpp
#pragma once
#include "displayapp/apps/Apps.h"
#include "displayapp/screens/Screen.h"
#include "displayapp/Controllers.h"
#include "Symbols.h"
namespace Pinetime {
namespace Applications {
namespace Screens {
class MyApp : public Screen {
public:
MyApp();
~MyApp() override;
};
}
template <>
struct AppTraits<Apps::MyApp> {
static constexpr Apps app = Apps::MyApp;
static constexpr const char* icon = Screens::Symbols::myApp;
static Screens::Screen* Create(AppControllers& controllers) {
return new Screens::MyApp();
}
};
}
}
```
MyApp.cpp:
```cpp
#include "displayapp/screens/MyApp.h"
using namespace Pinetime::Applications::Screens;
MyApp::MyApp() {
lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr);
lv_label_set_text_static(title, "My test application");
lv_label_set_align(title, LV_LABEL_ALIGN_CENTER);
lv_obj_align(title, lv_scr_act(), LV_ALIGN_CENTER, 0, 0);
}
MyApp::~MyApp() {
lv_obj_clean(lv_scr_act());
}
```
Both of these files should be in [displayapp/screens/](/src/displayapp/screens/).
Now we have our very own app, but InfiniTime does not know about it yet.
The first step is to include your `MyApp.cpp` (or any new cpp files for that matter)
in the compilation by adding it to [CMakeLists.txt](/CMakeLists.txt).
The next step to making it launch-able is to give your app an id.
To do this, add an entry in the enum class `Pinetime::Applications::Apps` ([displayapp/apps/Apps.h](/src/displayapp/apps/Apps.h.in)).
Name this entry after your app. Add `#include "displayapp/screens/MyApp.h"`
to the file [displayapp/DisplayApp.cpp](/src/displayapp/DisplayApp.cpp).
If your application is a **system** application, go to the function `DisplayApp::LoadScreen`
and add another case to the switch statement.
The case will be the id you gave your app earlier.
If your app needs any additional arguments, this is the place to pass them.
If your application is a **user** application, you don't need to add anything in DisplayApp,
everything will be automatically generated for you.
The user application will also be automatically be added to the app launcher menu.
Since the list of **user** application is generated by CMake, you need to add the variable `ENABLE_USERAPPS` to the command line of CMake.
This variable must be set with a string composed of an ordered list of the **user** applications that must be built into the firmware.
The items of the list are fields from the enumeration `Apps`.
Ex : build the firmware with 3 user application : Alarm, Timer and MyApp (the application will be listed in this specific order in the application menu).
```cmake
$ cmake ... -DENABLE_USERAPPS="Apps::Alarm, Apps::Timer, Apps::MyApp" ...
```
Similarly, the list of watch faces is also generated by CMake, so you need to add the variable `ENABLE_WATCHFACES` to the command line of CMake.
It must be set with the comma separated list of watch faces that will be built into the firmware.
Ex: build the firmware with 3 watch faces : Analog, PineTimeStyle and Infineat:
```cmake
$ cmake ... -DENABLE_WATCHFACES="WatchFace::Analog,WatchFace::PineTimeStyle,WatchFace::Infineat" ...
```
You should now be able to [build](../buildAndProgram.md) the firmware
and flash it to your PineTime. Yay!
Please remember to pay attention to the [UI guidelines](../ui_guidelines.md)
when designing an app that you want to be included in InfiniTime.

49
doc/code/Intro.md Normal file
View File

@ -0,0 +1,49 @@
# Introduction to the code
This page is meant to guide you through the source code, so you can find the relevant files for what you're working on.
## FreeRTOS
Infinitime is based on FreeRTOS, a real-time operating system.
FreeRTOS provides several quality of life abstractions (for example easy software timers)
and most importantly supports multiple tasks.
If you want to read up on real-time operating systems, you can look [here](https://www.freertos.org/implementation/a00002.html) and [here](https://www.freertos.org/features.html).
The main "process" creates at least one task and then starts the FreeRTOS task scheduler.
This main "process" is the standard main() function inside [main.cpp](/src/main.cpp).
The task scheduler is responsible for giving every task enough cpu time.
As there is only one core on the SoC of the PineTime, real concurrency is impossible and the scheduler has to swap tasks in and out to emulate it.
### Tasks
Tasks are created by calling `xTaskCreate` and passing a function with the signature `void functionName(void*)`.
For more info on task creation see the [FreeRTOS Documentation](https://www.freertos.org/a00125.html).
In our case, main calls `systemTask.Start()`, which creates the **"MAIN" task**.
The function running inside that task is `SystemTask::Work()`.
You may also see this task being referred to as the **work task**.
Both functions are located inside [systemtask/SystemTask.cpp](/src/systemtask/SystemTask.cpp). `SystemTask::Work()` initializes all the driver and controller objects.
It also starts the **task "displayapp"**, which is responsible for launching and running apps, controlling the screen and handling touch events (or forwarding them to the active app).
You can find the "displayapp" task inside [displayapp/DisplayApp.cpp](/src/displayapp/DisplayApp.cpp).
There are also other tasks that are responsible for Bluetooth ("ll" and "ble" inside [libs/mynewt-nimble/porting/npl/freertos/src/nimble_port_freertos.c](/src/libs/mynewt-nimble/porting/npl/freertos/src/nimble_port_freertos.c))
and periodic tasks like heartrate measurements ([heartratetask/HeartRateTask.cpp](/src/heartratetask/HeartRateTask.cpp)).
While it is possible for you to create your own task when you need it, it is recommended to just add functionality to `SystemTask::Work()` if possible.
If you absolutely need to create another task, try to estimate how much [stack space](https://www.freertos.org/FAQMem.html#StackSize) (in words/4-byte packets)
it will need instead of just typing in a large-ish number.
You can use `configMINIMAL_STACK_SIZE` which is currently set to 120 words.
## Controllers
Controllers in InfiniTime are singleton objects that can provide access to certain resources to apps.
Some of them interface with drivers, others are the driver for the resource.
The resources provided don't have to be hardware-based.
They are declared in main.cpp and initialized in [systemtask/SystemTask.cpp](/src/systemtask/SystemTask.cpp).
Some controllers can be passed by reference to apps that need access to the resource (for example vibration motor).
They reside in [components/](/src/components/) inside their own subfolder.
## Apps
For more detail see the [Apps page](./Apps.md)
## Bluetooth
Header files with short documentation for the functions are inside [libs/mynewt-nimble/nimble/host/include/host/](/src/libs/mynewt-nimble/nimble/host/include/host/).

29
doc/coding-convention.md Normal file
View File

@ -0,0 +1,29 @@
# Coding style
## Use these tools to find and fix issues.
- Use `clang-format` to format the code.
- Use `clang-tidy` to check the code for other potential issues.
## Follow these guidelines while writing code.
- **Indentation** : 2 spaces, no tabulation
- **Opening brace** at the end of the line
- **Naming** : Choose self-describing variable name
- **class** : PascalCase
- **namespace** : PascalCase
- **variable** : camelCase, **no** prefix/suffix (`_`, `m_`,...) for class members
- **Include guard** : `#pragma once` (no `#ifdef __MODULE__ / #define __MODULE__ / #endif`)
- **Includes** :
- files from the project : `#include "relative/path/to/the/file.h"`
- external files and std : `#include <file.h>`
- use includes relative to included directories like `src`, not relative to the current file. Don't do: `#include "../file.h"`
- Only use [primary spellings for operators and tokens](https://en.cppreference.com/w/cpp/language/operator_alternative)
- Use `auto` sparingly. Don't use `auto` for [fundamental/built-in types](https://en.cppreference.com/w/cpp/language/types) and [fixed width integer types](https://en.cppreference.com/w/cpp/types/integer), except when initializing with a cast to avoid duplicating the type name.
```c++
// Examples:
auto* app = static_cast<DisplayApp*>(instance);
auto number = static_cast<uint8_t>(variable);
uint8_t returnValue = MyFunction();
```
- Use `nullptr` instead of `NULL`

View File

@ -1,15 +0,0 @@
# Amazfish
[Amazfish](https://openrepos.net/content/piggz/amazfish) is a companion app that supports many smartwatches and activity trackers running on [SailfishOS](https://sailfishos.org/).
## Features
The following features are implemented:
- Scanning & detection of Pinetime-JF / InfiniTime
- Connection / disconnection
- Time synchronization
- Notifications
- Music control
## Demo
[This video](https://seafile.codingfield.com/f/21c5d023452740279e36/) shows how to connect to the Pinetime and control the playback of the music on the phone.
Amazfish and Sailfish OS are running on the [Pinephone](https://www.pine64.org/pinephone/), another awesome device from Pine64.

View File

@ -1,13 +0,0 @@
# Integration with Gadgetbridge
[Gadgetbridge](https://gadgetbridge.org/) is an Android application that supports many smartwatches and fitness trackers.
The integration of InfiniTime (previously Pinetime-JF) is now merged into the master branch (https://codeberg.org/Freeyourgadget/Gadgetbridge/).
## Features
The following features are implemented:
- Scanning & detection of Pinetime-JF / InfiniTime
- Connection / disconnection
- Notifications
## Demo
[This video](https://seafile.codingfield.com/f/0a2920b9d765462385e4/) shows how to scan, connect, send notification (using the debug screen) and disconnect from the Pinetime.

View File

@ -1,12 +0,0 @@
# OTA using NRFConnect
[NRFConnect](https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-mobile) is a powerful application (running on Android and iOS) which allows to scan and connect to BLE devices.
## Features
- Scanning, connect, disconnect
- Time synchronization
- OTA
InfiniTime implements the Nordic DFU protocol for the OTA functionality. NRFConnect also supports this protocol.
# Demo
[This video](https://seafile.codingfield.com/f/a52b69683a05472a90c7/) shows how to use NRFConnect to update the firmware running on the Pinetime.

View File

@ -1,44 +0,0 @@
# How to contribute?
## Report bugs
You use your Pinetime and find a bug in the firmware? [Create an issue on Github](https://github.com/JF002/Pinetime/issues) explaining the bug, how to reproduce it, the version of the firmware you use...
## Write and improve documentation
Documentation might be incomplete, or not clear enough, and it is always possible to improve it with better wording, pictures, photo, video,...
As the documentation is part of the source code, you can submit your improvements to the documentation by submitting a pull request (see below).
## Fix bugs, add functionalities and improve the code
You want to fix a bug, add a cool new functionality or improve the code? See *How to submit a pull request below*.
## Spread the word
Pinetime is a cool open source project that deserves to be know. Talk about it around you, on social networks, on your blog,... and let people know that we are working on an open-source firmware for a smartwatch!
# How to submit a pull request ?
Your contribution is more than welcome!
If you want to fix a bug, add a functionality or improve the code, you'll first need to create a branch from the **develop** branch (see [this page about the branching model](./branches.md)). This branch is called a feature branch, and you should choose a name that explains what you are working on (ex: "add-doc-about-contributions"). In this branch, try to focus on only one topic, bug or feature. For example, if you created this branch to work on the UI of a specific application, do not commit modifications about the SPI driver. If you want to work on multiple topics, create one branch per topic.
When your feature branch is ready, make sure it actually works and do not forget to write documentation about it if necessary.
Then, you can submit a pull-request for review. Try to describe your pull request as much as possible: what did you do in this branch, how does it work, how is it designed, are there any limitations,... This will help the contributors to understand and review your code easily.
Other contributors can post comments about the pull request, maybe ask for more info or adjustements in the code.
Once the pull request is reviewed an accepted, it'll be merge in **develop** and will be released in the next release version of the firmware.
# Coding convention
## Language
The language of this project is **C++**, and all new code must be written in C++. (Modern) C++ provides a lot of useful tools and functionalities that are beneficial for embedded software development like `constexpr`, `template` and anything that provides zero-cost abstraction.
It's OK to include C code if this code comes from another library like FreeRTOS, NimBLE, LVGL or the NRF-SDK.
## Coding style
The most important rule to follow is to try to keep the code as easy to read and maintain as possible.
- **Identation** : 2 spaces, no tabulation
- **Opening brace** at the end of the line
- **Naming** : Choose self-describing variable name
- **class** : PascalCase
- **namespace** : PascalCase
- **variable** : camelCase, **no** prefix/suffix ('_', 'm_',...) for class members
- **Include guard** : `#pragma once` (no `#ifdef __MODULE__ / #define __MODULE__ / #endif`)
- **Includes** :
- files from the project : `#include "relative/path/to/the/file.h"`
- external files and std : `#include <file.h>`

View File

@ -0,0 +1,37 @@
# How to generate files needed by the factory
These files are needed by the Pine64 factory to flash InfiniTime as the default firmware on the PineTimes.
Two files are needed: an **HEX (.hex)** file that contains the content of the internal flash memory (bootloader + InfiniTime) and a **binary (.bin)** file that contains the content of the external flash memory (recovery firmware).
## merged-internal.hex
First, convert the bootloader to hex:
```
<ARM TOOLCHAIN>/bin/arm-none-eabi-objcopy -I binary -O ihex ./bootloader.bin ./bootloader.hex
```
where `bootloader.bin` is the [last stable version](https://github.com/JF002/pinetime-mcuboot-bootloader/releases) of the [bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader).
Then, convert the MCUBoot image of InfiniTime:
```
<ARM TOOLCHAIN>/bin/arm-none-eabi-objcopy -I binary -O ihex --change-addresses 0x8000 ./pinetime-mcuboot-app-image-1.6.0.bin ./pinetime-mcuboot-app-image-1.6.0.hex
```
where `pinetime-mcuboot-app-image-1.6.0.bin` is [the bin of the last MCUBoot image](https://github.com/InfiniTimeOrg/InfiniTime/releases) of [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime).
Pay attention to the parameter `--change-addresses 0x8000`. It's needed to ensure the image will be flashed at the offset expected by the bootloader (0x8000).
Finally, merge them together with **mergehex**:
```
/opt/mergehex/mergehex -m ./bootloader.hex ./pinetime-mcuboot-app-image-1.6.0.hex -o merged-internal.hex
```
This file must be flashed at offset **0x00** of the internal memory of the NRF52832.
## spinor.bin
This file is the MCUBoot image of the last stable version of the recovery firmware. It must be flashed at offset **0x00** of the external SPINOR flash memory.

View File

@ -1,56 +1,60 @@
# Using the releases # Using the releases
For each new *stable* version of Pinetime, a [release note](https://github.com/JF002/Pinetime/releases) is created. It contains a description of the main changes in the release and some files you can use to flash the firmware in your Pinetime.
For each new *stable* version of IniniTime, a [release note](https://github.com/InfiniTimeOrg/InfiniTime/releases) is created. It contains a description of the main changes in the release and some files you can use to flash the firmware to your Pinetime.
This page describes the files from the release notes and how to use them. This page describes the files from the release notes and how to use them.
**NOTE :** the files included in different could be different. This page describes the release note of [version 0.7.1](https://github.com/JF002/Pinetime/releases/tag/0.7.1), which is the version that'll probably be pre-programmed at the factory for the next batch of Pinetime devkits. **NOTE :** the files included in different Releases could be different. This page describes the release notes of [version 0.7.1](https://github.com/InfiniTimeOrg/InfiniTime/releases/tag/0.7.1), which is the version that is pre-programmed for the last batches of pinetimes but will be replaced with [1.0.0](https://github.com/jF002/infiniTime/releases/tag/1.0.0) around june 2021.
## Files included in the release note ## Files included in the release notes
### Standalone firmware ### Standalone firmware
This firmware is standalone, meaning that it does not need a bootloader to actually run. It is intended to be flash at offset 0, meaning it will erase any bootloader that might be present in memory.
- **pinetime-app.out** : Output file of GCC containing debug symbols, useful is you want to debug the firmware using GDB. This firmware is standalone, meaning that it does not need a bootloader to actually run. It is intended to be flashed at offset 0, meaning it will erase any bootloader that might be present in memory.
- **pinetime-app.hex** : Firmware in Intel HEX file format. Easier to use because it contains the offset in memory where it must be flashed, you don't need to specify it.
- **pintime-app.bin** : Firmware in binary format. When programming it, you have to specify the offset (0x00) in memory where it must be flashed. - **pinetime-app.out** : Output file of GCC containing debug symbols, useful if you want to debug the firmware using GDB.
- **pinetime-app.map** : Map file containing all the symbols, addresses in memory,... - **pinetime-app.hex** : Firmware in Intel HEX file format. Easier to use because it contains the offset in memory where it must be flashed, you don't need to specify it.
- **pintime-app.bin** : Firmware in binary format. When programming it, you have to specify the offset (0x00) in memory where it must be flashed.
- **pinetime-app.map** : Map file containing all the symbols, addresses in memory,...
**This firmware must be flashed at address 0x00 in the main flash memory** **This firmware must be flashed at address 0x00 in the main flash memory**
### Bootloader ### Bootloader
The bootloader is maintained by [lupyuen](https://github.com/lupyuen) and is a binary version of [this release](https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4).
- **bootloader.hex** : Firmware in Intel HEX file format. The bootloader is maintained by [lupyuen](https://github.com/lupyuen) and is a binary version of [this release](https://github.com/lupyuen/pinetime-rust-mynewt/releases/tag/v5.0.4).
**This firmware must be flashed at address 0x00 in the main flash memory** - **bootloader.hex** : Firmware in Intel HEX file format.
**This firmware must be flashed at address 0x00 in the main flash memory**
### Graphics firmware ### Graphics firmware
This firmware is a small utility firmware that writes the boot graphic in the external SPI flash memory. You need it if you want to use the [bootloader](../bootloader/README.md). This firmware is a small utility firmware that writes the boot graphic in the external SPI flash memory. You need it if you want to use the [bootloader](../bootloader/README.md).
- **pinetime-graphics.out** : Output file of GCC containing debug symbols, useful is you want to debug the firmware using GDB. - **pinetime-graphics.out** : Output file of GCC containing debug symbols, useful is you want to debug the firmware using GDB.
- **pinetime-graphics.hex** : Firmware in Intel HEX file format. Easier to use because it contains the offset in memory where it must be flashed, you don't need to specify it. - **pinetime-graphics.hex** : Firmware in Intel HEX file format. Easier to use because it contains the offset in memory where it must be flashed, you don't need to specify it.
- **pintime-graphics.bin** : Firmware in binary format. When programming it, you have to specify the offset (0x00) in memory where it must be flashed. - **pintime-graphics.bin** : Firmware in binary format. When programming it, you have to specify the offset (0x00) in memory where it must be flashed.
- **pinetime-graphics.map** : Map file containing all the symbols, addresses in memory,... - **pinetime-graphics.map** : Map file containing all the symbols, addresses in memory,...
**This firmware must be flashed at address 0x00 in the main flash memory** **This firmware must be flashed at address 0x00 in the main flash memory**
### Firmware with bootloader ### Firmware with bootloader
This firmware is intended to be used with our [MCUBoot-based bootloader](../bootloader/README.md). This firmware is intended to be used with our [MCUBoot-based bootloader](../bootloader/README.md).
- **pinetime-mcuboot-app-image.hex** : Firmware wrapped into an MCUBoot image. This is **the** file that must be flashed **@ 0x8000** into flash memory. If the [bootloader](../bootloader/README.md) has been successfully programmed, it should run this firmware after the next reset. - **pinetime-mcuboot-app-image.hex**: Firmware wrapped into an MCUBoot image. This is **the** file that must be flashed at **0x8000** into the flash memory. If the [bootloader](../bootloader/README.md) has been successfully programmed, it should run this firmware after the next reset.
The following files are not directly usable by the bootloader: The following files are not directly usable by the bootloader:
- **pinetime-mcuboot-app.out** : Output file of GCC containing debug symbols, useful is you want to debug the firmware using GDB. - **pinetime-mcuboot-app.out** : Output file of GCC containing debug symbols, useful is you want to debug the firmware using GDB.
- **pinetime-mcuboot-app.hex** : Firmware in Intel HEX file format. - **pinetime-mcuboot-app.hex** : Firmware in Intel HEX file format.
- **pinetime-mcuboot-app.bin** : Firmware in binary format. - **pinetime-mcuboot-app.bin** : Firmware in binary format.
- **pinetime-mcuboot-app.map** : Map file containing all the symbols, addresses in memory,... - **pinetime-mcuboot-app.map** : Map file containing all the symbols, addresses in memory,...
### OTA (Update the firmware Over-The-Air) ### OTA (Update the firmware Over-The-Air)
Once the bootloader and application firmware are running, it is possible to update the current firmware or even replace it with another firmware **that uses the same bootloader based on MCUBoot**. Once the bootloader and application firmware are running, it is possible to update the current firmware or even replace it with another firmware **that uses the same bootloader based on MCUBoot**.
**NOTE :** Use this file **only** if you programmed our [MCUBoot-based bootloader](../bootloader/README.md). This file is not compatible with other bootloaders like the one that is based on the closed source NRF SoftDevice ! **NOTE :** Use this file **only** if you programmed our [MCUBoot-based bootloader](../bootloader/README.md). This file is not compatible with other bootloaders like the one that is based on the closed source NRF SoftDevice !
- **pinetime-app-dfu.zip** : This is the file you must provide toNRFConnect to update the firmware over BLE. - **pinetime-app-dfu.zip** : This is the file you must provide toNRFConnect to update the firmware over BLE.

48
doc/gdb.md Normal file
View File

@ -0,0 +1,48 @@
# Flashing the firmware with GDB and Black Magic Probe (BMP)
Enter the following command into GDB:
```
target extended-remote /dev/ttyACM0
monitor swdp_scan
attach 1
file ./pinetime-app-full.hex
load
run
```
Example :
```
$ /home/jf/nrf52/gcc-arm-none-eabi-8-2019-q3-update/bin/arm-none-eabi-gdb
(gdb) target extended-remote /dev/ttyACM0
Remote debugging using /dev/ttyACM0
(gdb) monitor swdp_scan
Target voltage: ABSENT!
Available Targets:
No. Att Driver
1 Nordic nRF52 M3/M4
2 Nordic nRF52 Access Port
(gdb) attach 1
Attaching to Remote target
warning: No executable has been specified and target does not support
determining executable automatically. Try using the "file" command.
0xfffffffe in ?? ()
(gdb) file ./pinetime-app-full.hex
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from ./pinetime-app-full.hex...
(No debugging symbols found in ./pinetime-app-full.hex)
(gdb) load
Loading section .sec1, size 0xb00 lma 0x0
Loading section .sec2, size 0xf000 lma 0x1000
Loading section .sec3, size 0x10000 lma 0x10000
Loading section .sec4, size 0x5150 lma 0x20000
Loading section .sec5, size 0xa000 lma 0x26000
Loading section .sec6, size 0x10000 lma 0x30000
Loading section .sec7, size 0xdf08 lma 0x40000
Start address 0x0, load size 314200
Transfer rate: 45 KB/sec, 969 bytes/write.
```

View File

@ -0,0 +1,99 @@
# Applications
InfiniTime has 13 apps on the `main` branch at the time of writing.
## List of apps
- Stopwatch
- Alarm
- Timer
- Steps
- Heartrate
- Music
- InfiniPaint
- Paddle
- 2
- InfiniDice
- Metronome
- Maps
- Weather
### Stopwatch
![Stopwatch UI](/doc/gettingStarted/AppsScreenshots/stopwatch.png)
- Press the Start button (bottom right) to start or stop the timer.
- You can also press the side button while the timer is running to pause the timer.
- Press the Flag button (bottom left) to add a lap.
- The stopwatch will not yet continue counting time while the app is closed.
### Alarm
![Alarm UI](/doc/gettingStarted/AppsScreenshots/alarm.png)
- Ajust the time with the time picker.
- Press the Info button in the top middle to see time remaning.
- Use the toggle in the bottom left to turn the alarm on/off.
- Use the button in the bottom right to change the alarm frequency.
- You can choose between once, daily, or Monday - Friday.
### Timer
![Timer UI](/doc/gettingStarted/AppsScreenshots/timer.png)
- Ajust how long the timer should go for with the time picker.
- Press the Start button at the bottom to start/stop the timer.
### Steps
![Steps UI](/doc/gettingStarted/AppsScreenshots/steps.png)
- The total count of steps for the current display will show in the middle of the screen.
- The Reset button in the bottom middle resets the Trip counter. (Total of all steps taken.)
- The progress circle shows the percentage of your daily goal completed.
### Heartrate
![Heartrate UI](/doc/gettingStarted/AppsScreenshots/Heartrate.png)
- Press Start to start measuring your heartrate.
- It may take a bit to get the first measurement.
### Music
![Music UI](/doc/gettingStarted/AppsScreenshots/Music.png)
- This app shows currently playing music.
- Please note that this app is not very useful without a device connected.
- Press the button in the center to play/pause, and the buttons on the left and right to go to the previous and next tracks, respectively.
- Swipe up to get to volume controls.
### InfiniPaint
![InfiniPaint UI](/doc/gettingStarted/AppsScreenshots/Paint.png)
- This app does not allow you to swipe from the top to exit, use the side button instead.
- Draw on the screen to add lines.
- Hold down in one spot to change paint colors.
### Paddle
![Paddle UI](/doc/gettingStarted/AppsScreenshots/Pong.png)
- This app does not allow you to swipe from the top to exit, use the side button instead.
- Drag your finger to move the paddle.
- Goal: Don't let the ball go off the left side of the screen.
### 2
![2 UI](/doc/gettingStarted/AppsScreenshots/2048.png)
- This app does not allow you to swipe from the top to exit, use the side button instead.
- Play a game of 2048.
- Swipe up, down, left, or right tomove the tiles.
- When two tiles with the same number run into each other, they will add together.
- Goal: Don't let the screen fill up with tiles, and get to the 2048 tile to win.
### InfiniDice
![InfiniDice UI](/doc/gettingStarted/AppsScreenshots/Dice.png)
- Ajust the count to change the number of dice.
- Ajust the sides to change the number of sides.
- Press the button at the bottom to roll.
- The result will be on the right side of the screen.
### Metronome
![Metronome UI](/doc/gettingStarted/AppsScreenshots/Metronome.png)
- Ajust the BPM with the circular slider.
- A bug currently makes it always snap to 98 BPM.
- Use the button in the bottom left to start the metronome.
### Maps
![Maps UI](/doc/gettingStarted/AppsScreenshots/Maps.png)
- This app shows info from a navigation app.
- Please note that this app is not very useful without a device connected.
### Weather
![Weather UI](/doc/gettingStarted/AppsScreenshots/Weather.png)
- This app shows weather info.
- Please note that this app is not very useful without a device connected.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,31 @@
# Watchfaces
InfiniTime has 6 apps on the `main` branch at the time of writing.
## List of apps
- Digital
- Analog
- PineTimeStyle
- Terminal
- Infinineat
- Casio G7710
### Digital
![Digital face](/doc/gettingStarted/Watchfaces/Digital.png)
### Analog
![Analog face](/doc/gettingStarted/Watchfaces/Analog.png)
### PineTimeStyle
![PineTimeStyle face](/doc/gettingStarted/Watchfaces/PineTimeStyle.png)
- You can long-press on the display to change colors, step style, and weather.
### Terminal
![Terminal face](/doc/gettingStarted/Watchfaces/Terminal.png)
### Infinineat
![Infinineat face](/doc/gettingStarted/Watchfaces/Infinineat.png)
- You can long-press on the display to change colors.
### Casio G7710
![Casio G7710 face](/doc/gettingStarted/Watchfaces/CasioG7710.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -0,0 +1,26 @@
# Firmware, InfiniTime, Bootloader, Recovery firmware, OTA, DFU... What is it?
You may have already encountered these words by reading the announcement, release notes, or [the wiki guide](https://wiki.pine64.org/wiki/Upgrade_PineTime_to_InfiniTime_1.0.0) and you may find them confusing if you're not familiar with the project.
A **firmware** is software running on the embedded hardware of a device.
InfiniTime has three distinct firmwares:
- **[InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime)** is the operating system.
- **[The bootloader](https://github.com/JF002/pinetime-mcuboot-bootloader)** is responsible for safely applying firmware updates and runs before booting into InfiniTime.
- **The recovery firmware** is a special *application firmware* than can be loaded by the bootloader on user request. This firmware can be useful in case of serious issue, when the main application firmware cannot perform an OTA update correctly.
**OTA** (**O**ver **T**he **A**ir) refers to updating of the firmware over BLE (**B**luetooth **L**ow **E**nergy). This is a functionality that allows the user to update the firmware on their device wirelessly.
**DFU** (**D**evice **F**irmware **U**pdate) is the file format and protocol used to send the update of the firmware to the watch over-the-air. InfiniTime implements the (legacy) DFU protocol from Nordic Semiconductor (NRF).
## Bootloader
Most of the time, the bootloader just runs without your intervention (updating and loading the firmware).
However, you can use the bootloader to rollback to the previous firmware, or load the recovery firmware using the push button:
- Press and hold the button until the pine cone is drawn in **blue** to force the rollback of the previous version of the firmware, even if you've already validated the current one.
- Press and hold the button until the pine cone is drawn in **red** to load the recovery firmware. This recovery firmware only provides BLE connectivity and OTA functionality.
More info about the bootloader in [its project page](https://github.com/JF002/pinetime-mcuboot-bootloader/blob/master/README.md).

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

View File

@ -0,0 +1,57 @@
# Getting started with InfiniTime
On April 22, 2021, InfiniTime and Pine64 [announced the release of InfiniTime 1.0.0](https://www.pine64.org/2021/04/22/its-time-infinitime-1-0/) and the availability of PineTime smartwatches as an *enthusiast grade end-user product*. This page aims to guide you with your first step with your new PineTime.
It is highly recommended to update the firmware to the latest version when you receive your watch and when a new InfiniTime version is released. More information on updating the firmware [here](/doc/gettingStarted/updating-software.md).
## InfiniTime quick user guide
### Setting the time
By default, InfiniTime starts on the digital watch face. It'll probably display the epoch time (1 Jan 1970, 00:00).
You can sync the time using companion apps.
- Gadgetbridge automatically synchronizes the time when you connect it to your watch. More information on Gadgetbridge [here](/doc/gettingStarted/ota-gadgetbridge.md)
- [Sync the time with NRFConnect](/doc/gettingStarted/time-nrfconnect.md)
- [Sync the time with your browser](https://hubmartin.github.io/WebBLEWatch/)
You can also set the time in the settings without a companion app. (version >1.7.0)
InfiniTime doesn't handle daylight savings automatically, so make sure to set the correct time or sync it with a companion app.
### Digital watch face
![Digital watch face](ui/watchface.jpg)
This is what the default digital watch face looks like. You can change watch faces in the settings.
The indicator on the top left is visible if you have unread notifications
On the top right, there are status icons
- The battery icon shows roughly how much charge is remaining
- The Bluetooth icon is visible when the watch is connected to a companion app
- A plug icon is shown when the watch is plugged into a charger.
On the bottom left, you can see your heart rate if you have the measurement enabled in the heart rate app.
On the bottom right, you can see how many steps you have taken today.
### Navigation in the menu
![Application menu](ui/applist.jpg)
![Notifications](ui/notifications.jpg)
![Quick actions](ui/quicksettings.jpg)
![Settings](ui/settings.jpg)
- Swipe **up** to display the application menus. Apps (stopwatch, music, step, games,...) can be started from this menu.
- Swipe **down** to display the notification panel. Notifications sent by your companion app will be displayed here.
- Swipe **right** to display the Quick Actions menu. This menu allows you to
- Set the brightness of the display
- Start the **flashlight** app
- Enable/disable notifications (Do Not Disturb mode)
- Enter the **settings** menu
- Swipe up and down to see all options
- Click the button to go back a screen.
- You can hold the button for a short time to return to the watch face. (version >1.7.0)

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Some files were not shown because too many files have changed in this diff Show More