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>
This commit is contained in:
Jean-François Milants 2024-01-06 11:28:48 +01:00 committed by JF
parent 72c992c84e
commit 25b3e2461d
2 changed files with 20 additions and 13 deletions

View file

@ -35,20 +35,20 @@ that will call the method `Refresh()` periodically.
## App types ## 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. **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. **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. 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 watchfaces must be built into the firmware This allows to easily select which user applications and watch faces must be built into the firmware
without overflowing the system memory. without overflowing the system memory.
## Apps and watchfaces initialization ## Apps and watch faces initialization
Apps are created by `DisplayApp` in `DisplayApp::LoadScreen()`. 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. 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` the corresponding `AppDescription` is first retrieved from `userApps`
and then the function `create` is called to create an instance of the app. 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 ## User application selection at build time
@ -89,11 +89,11 @@ struct AppTraits<Apps::Alarm> {
This array `userApps` is used by `DisplayApp` to create the applications and the `AppLauncher` This array `userApps` is used by `DisplayApp` to create the applications and the `AppLauncher`
to list all available applications. 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. 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`: Here is an example of `WatchFaceTraits`:
```c++ ```c++
template <> 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" ... $ 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
$ cmake ... -DENABLE_WATCHFACES="WatchFace::Analog,WatchFace::PineTimeStyle,WatchFace::Infineat" ... $ cmake ... -DENABLE_WATCHFACES="WatchFace::Analog,WatchFace::PineTimeStyle,WatchFace::Infineat" ...

View file

@ -20,7 +20,13 @@ endif ()
if(DEFINED ENABLE_WATCHFACES) if(DEFINED ENABLE_WATCHFACES)
set(WATCHFACE_TYPES ${ENABLE_WATCHFACES} CACHE STRING "List of watch faces to build into the firmware") set(WATCHFACE_TYPES ${ENABLE_WATCHFACES} CACHE STRING "List of watch faces to build into the firmware")
else() 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() endif()
add_library(infinitime_apps INTERFACE) add_library(infinitime_apps INTERFACE)