Commit graph

727 commits

Author SHA1 Message Date
John Crawford 85a2181b64 aod: integrate with display timeout 2024-08-05 20:32:43 +02:00
KaffeinatedKat 20ac7e8df3 feat: always on display 2024-08-05 20:32:43 +02:00
mark9064 a449b272f7 Continuous time updates 2024-06-09 18:34:07 +02:00
John Crawford 6b5235c301
fix: heartrate app displays --- instead of 000 () 2024-04-12 14:50:33 +02: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. ()
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
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
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
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
Yusuf Ebrahim a40168a9d7
New dice-rolling app: InfiniDice! ()
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
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 ()
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
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
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
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
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
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 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 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 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 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 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
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 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
Jean-François Milants 473d9c4fa4 Fix code formatting 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
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
JF 0aead42fdf
navigation: Add is available ()
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 ()
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 () 2023-08-27 18:15:21 +02:00
Max Friedrich 6d0d8c7d63
watchfaceanalog: Background in lvgl ()
* 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