From 25b3e2461db0b27de9546452c45921983e4b8d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 6 Jan 2024 11:28:48 +0100 Subject: [PATCH] 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 --- doc/code/Apps.md | 25 +++++++++++++------------ src/displayapp/apps/CMakeLists.txt | 8 +++++++- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/doc/code/Apps.md b/doc/code/Apps.md index ca7d8bc2..d97eff4b 100644 --- a/doc/code/Apps.md +++ b/doc/code/Apps.md @@ -35,20 +35,20 @@ that will call the method `Refresh()` periodically. ## App types -There are basically 3 types of applications : **system** apps and **user** apps and **watchfaces**. +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. -The watchfaces, settings, notifications and the application launcher are examples of such system applications. +The watch faces, 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. -**Watchfaces** are very similar to the **user** apps, they are optional, but at least one must be built into the firmware. +**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 watchfaces allows for more flexibility and customization. -This allows to easily select which user applications and watchfaces 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 watchfaces initialization +## 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. @@ -57,7 +57,7 @@ The constructor of **system** apps is called directly. If the application is a * the corresponding `AppDescription` is first retrieved from `userApps` and then the function `create` is called to create an instance of the app. -Watchfaces are handled in a very similar way than the **user** apps : they are created by `DisplayApp` in the method `DisplayApp::LoadScreen()` when the application type is `Apps::Clock`. +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 @@ -89,11 +89,11 @@ struct AppTraits { This array `userApps` is used by `DisplayApp` to create the applications and the `AppLauncher` to list all available applications. -## Watchface selection at build time +## Watch face selection at build time -The list of available watchface is also generated at build time by the `consteval` +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. -Watchfaces must declare a `WatchFaceTraits` so that the corresponding `WatchFaceDescription` can be generated. +Watch faces must declare a `WatchFaceTraits` so that the corresponding `WatchFaceDescription` can be generated. Here is an example of `WatchFaceTraits`: ```c++ template <> @@ -198,9 +198,10 @@ Ex : build the firmware with 3 user application : Alarm, Timer and MyApp (the ap $ cmake ... -DENABLE_USERAPPS="Apps::Alarm, Apps::Timer, Apps::MyApp" ... ``` -Similarly, the list of watchfaces 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 list of watchfaces that will be built into the firmware. +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 watchfaces : Analog, PineTimeStyle and Infineat: +Ex: build the firmware with 3 watch faces : Analog, PineTimeStyle and Infineat: ```cmake $ cmake ... -DENABLE_WATCHFACES="WatchFace::Analog,WatchFace::PineTimeStyle,WatchFace::Infineat" ... diff --git a/src/displayapp/apps/CMakeLists.txt b/src/displayapp/apps/CMakeLists.txt index 4f0e4c49..a531bdff 100644 --- a/src/displayapp/apps/CMakeLists.txt +++ b/src/displayapp/apps/CMakeLists.txt @@ -20,7 +20,13 @@ endif () if(DEFINED ENABLE_WATCHFACES) set(WATCHFACE_TYPES ${ENABLE_WATCHFACES} CACHE STRING "List of watch faces to build into the firmware") else() - set(WATCHFACE_TYPES "WatchFace::Digital, WatchFace::Analog, WatchFace::PineTimeStyle, WatchFace::Terminal, WatchFace::Infineat, WatchFace::CasioStyleG7710" CACHE STRING "List of watch faces to build into the firmware") + set(DEFAULT_WATCHFACE_TYPES "WatchFace::Digital") + set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Analog") + set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::PineTimeStyle") + set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Terminal") + set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::Infineat") + set(DEFAULT_WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}, WatchFace::CasioStyleG7710") + set(WATCHFACE_TYPES "${DEFAULT_WATCHFACE_TYPES}" CACHE STRING "List of watch faces to build into the firmware") endif() add_library(infinitime_apps INTERFACE)