Compare commits
112 commits
65d2da7918
...
5c94702160
Author | SHA1 | Date | |
---|---|---|---|
5c94702160 | |||
de119b569e | |||
c71d64393b | |||
6f9df084d9 | |||
cdf86dab6a | |||
e16c8f8bab | |||
8598142c27 | |||
39241889be | |||
e2ca5393a6 | |||
a18190e37f | |||
9ff835bb89 | |||
b7b68f6362 | |||
66278426e7 | |||
e940593803 | |||
b7263ed795 | |||
5e19e042c0 | |||
6ce316dc06 | |||
59f9a5eaff | |||
2a762f62ad | |||
e4d6014d88 | |||
164a21218f | |||
8ed1d22a48 | |||
f42ef49a40 | |||
d78e60329e | |||
3133adaba9 | |||
3f214a2f84 | |||
6602a1d7c0 | |||
acbcd531b5 | |||
e2056f6420 | |||
5d261f579d | |||
f7333c66bd | |||
9437a8d125 | |||
5dfdec4ee2 | |||
7bab4a66aa | |||
055b9a93c4 | |||
e8b1b94507 | |||
dbc1dcfbdf | |||
d1c00370d1 | |||
99d223b4d1 | |||
ad19b9e798 | |||
bbbc9d9910 | |||
6cb3b6060e | |||
ee99e554f0 | |||
ad5a472b4b | |||
8929563950 | |||
d6a6bda6ba | |||
ecea195533 | |||
55866d4470 | |||
91fb716ea3 | |||
6494faa249 | |||
5cd1bcf460 | |||
b588241207 | |||
e8a1b12e17 | |||
194b061e19 | |||
8ca3888540 | |||
f366354e28 | |||
feb7631f45 | |||
b55c9d256c | |||
1246d77781 | |||
5c93cbd552 | |||
b8fe20b71a | |||
32dfaa82d6 | |||
cad3de46b0 | |||
7c8e5c2144 | |||
7e8a4d32ee | |||
1a379c80bf | |||
0d77cf9189 | |||
7739ecf900 | |||
e579b83201 | |||
2c9444d67a | |||
80b4da8197 | |||
c7a74adb13 | |||
db947fa97c | |||
cbc16cd683 | |||
a0c9b4d5fc | |||
8657f71d48 | |||
d81356c8f7 | |||
13773a9b25 | |||
961c51083e | |||
48f182c25f | |||
10c470ef71 | |||
25e81b159b | |||
896f2011b2 | |||
3cfe46ec8f | |||
a6b932e608 | |||
a250fa45ec | |||
6475d6e624 | |||
ce13c721be | |||
5ac1e90040 | |||
9a377f6baf | |||
0ecfbee4b7 | |||
055b75d55d | |||
b8f7b65d84 | |||
b7a353cfb6 | |||
a4389f63fa | |||
ef59bed954 | |||
d2fab8d99a | |||
82e96cf8d7 | |||
1ec43e27de | |||
d7de641b8d | |||
b16e13f471 | |||
a5246941b0 | |||
edb61e7658 | |||
48cfd48e39 | |||
735083a042 | |||
1af813a2ef | |||
ab901b890b | |||
1162fdbf14 | |||
577dfd5b87 | |||
0535e93848 | |||
780e68f456 | |||
d0f776b44c |
13
.gitconfig
|
@ -3,3 +3,16 @@
|
|||
autocrlf = input
|
||||
[apply]
|
||||
whitespace = fix
|
||||
|
||||
[diff]
|
||||
tool = meld
|
||||
[difftool]
|
||||
prompt = false
|
||||
[difftool "meld"]
|
||||
cmd = meld "$LOCAL" "$REMOTE"
|
||||
[merge]
|
||||
tool = meld
|
||||
[mergetool "meld"]
|
||||
# Choose one of these two lines (not both!) explained below.
|
||||
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
|
||||
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
|
||||
|
|
1
.gitignore
vendored
|
@ -12,6 +12,7 @@ Makefile
|
|||
build
|
||||
tools
|
||||
|
||||
|
||||
# Resulting binary files
|
||||
*.a
|
||||
*.so
|
||||
|
|
3
.gitmodules
vendored
|
@ -4,9 +4,6 @@
|
|||
[submodule "src/libs/littlefs"]
|
||||
path = src/libs/littlefs
|
||||
url = https://github.com/littlefs-project/littlefs.git
|
||||
[submodule "src/libs/QCBOR"]
|
||||
path = src/libs/QCBOR
|
||||
url = https://github.com/laurencelundblade/QCBOR.git
|
||||
[submodule "src/libs/arduinoFFT"]
|
||||
path = src/libs/arduinoFFT
|
||||
url = https://github.com/kosme/arduinoFFT.git
|
||||
|
|
35
README.md
|
@ -1,9 +1,41 @@
|
|||
# [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime)
|
||||
# [InfiniTime](https://github.com/Eve1374/InfiniTime)
|
||||
|
||||
![InfiniTime logo](doc/logo/infinitime-logo-small.jpg "InfiniTime Logo")
|
||||
|
||||
Fast open-source firmware for the [PineTime smartwatch](https://pine64.org/devices/pinetime/) with many features, written in modern C++.
|
||||
|
||||
## Quick notes on this InfiniTime version
|
||||
|
||||
- I copied the source code from this git repo : [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime)
|
||||
- I added a watch face "WatchFaceMeow" whose main features are to be pink and have info about the alarm status
|
||||
- I stored the compile commands in scripts compile.sh to run from InfiniTime/ folder, and make_pine_mcu.sh to build the image must be run from InfiniTime/build/ (compile.sh copies make_pine_mcu.sh to build/
|
||||
- The file to flash to the pinetime is InfiniTime/build/pinetime-mcuboot-app-dfu-1.14.0.zip : I didn't change the version compared to the one I downloaded from [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime) so make sure not to keep keep a copy of it
|
||||
|
||||
Here are pictures with and without alarm set :
|
||||
|
||||
|
||||
Original repo : [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime)
|
||||
|
||||
- [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/)
|
||||
|
||||
## Welcome to my InfiniTime fork ?!
|
||||
|
||||
Branches :
|
||||
|
||||
- main : shows this doc
|
||||
- alarm-status-on-infineat : shows the alarm status on infineat, can be enabled or disabled from the settigns menu that is updated accordingly :
|
||||
|
||||
![Infineat settings](doc/ui/infineat_settings.png "Infineat settings")
|
||||
|
||||
- my-custom-infinitime : branch were I put things that I want for myself, like a watchface with paw instead of shoe icon for steps counter :
|
||||
|
||||
|
||||
## New to InfiniTime?
|
||||
|
||||
- [Getting started with InfiniTime](doc/gettingStarted/gettingStarted-1.0.md)
|
||||
|
@ -88,3 +120,4 @@ 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.
|
||||
- [Koen](https://github.com/bosmoment): He’s working on a firmware based on RiotOS. He integrated similar libs as me: NimBLE, LittleVGL,… His help was invaluable too!
|
||||
- [Lup Yuen Lee](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!
|
||||
>>>>>>>>> Temporary merge branch 2
|
||||
|
|
8
compile.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
rm -r build
|
||||
|
||||
cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=/home/eve/Work/gcc-arm-none-eabi-10.3-2021.10 -DNRF5_SDK_PATH=/home/eve/Work/nRF5_SDK_17.1.0_ddde560 -DTARGET_DEVICE=PINETIME -DBUILD_DFU=1 -DBUILD_RESOURCES=1 -B build -DCMAKE_BUILD_TYPE=Release
|
||||
|
||||
cp make_pine_mcu.sh build/
|
||||
|
22
doc/alarmStatusOnInfineat/alarmStatusOnInfineat.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
# [InfiniTime : show alarm status on infineat watchface](https://github.com/Eve1374/InfiniTime/tree/alarm-status-on-infineat)
|
||||
- I forked from [InfiniTime](https://github.com/InfiniTimeOrg/InfiniTime) and added a branch alarm-status-on-infineat
|
||||
- I modified the watchface settings to have the possibility to show alarm status on watchface
|
||||
|
||||
Here are pictures with alarm set in 12 and 24hrs format :
|
||||
|
||||
![alarm set and shown, 12hrs format](infineat_alarm_set_12hrs.png "alarm set and shown, 12hrs format")
|
||||
![alarm set and shown, 24hrs format](infineat_alarm_set_24hrs.png "alarm set and shown, 24hrs format")
|
||||
|
||||
Alarm not set :
|
||||
|
||||
![alarm shown and not set](infineat_alarm_notset.png "alarm shown and not set")
|
||||
|
||||
Settings view :
|
||||
|
||||
![settings](infineat_settings.png "settings modified with a button to turn on or off alarm display")
|
||||
|
||||
|
||||
## Possible further development :
|
||||
- Move this setting to the Alarm app and include alarm display in all watchfaces ?
|
||||
|
||||
|
BIN
doc/alarmStatusOnInfineat/infineat_alarm_notset.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
doc/alarmStatusOnInfineat/infineat_alarm_set_12hrs.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
doc/alarmStatusOnInfineat/infineat_alarm_set_24hrs.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
doc/alarmStatusOnInfineat/infineat_settings.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
doc/lvgl_align.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
doc/palettes.xcf
Normal file
BIN
doc/ui/infineat_settings.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
doc/ui/meow_alarmnotset.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
doc/ui/meow_alarmset.png
Normal file
After Width: | Height: | Size: 6 KiB |
BIN
draft_pictures/cat.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
draft_pictures/cat.xcf
Normal file
BIN
draft_pictures/cat_clean.xcf
Normal file
BIN
draft_pictures/cat_small.xcf
Normal file
BIN
draft_pictures/coordinates.xcf
Normal file
6
make_pine.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
#cp ./displayapp/apps/Apps.h ../src/displayapp/apps/Apps.h
|
||||
|
||||
make -j4 pinetime-app
|
||||
|
6
make_pine_mcu.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
#cp ./displayapp/apps/Apps.h ../src/displayapp/apps/Apps.h
|
||||
|
||||
make clean -j4 pinetime-mcuboot-app
|
||||
|
|
@ -371,6 +371,7 @@ list(APPEND SOURCE_FILES
|
|||
displayapp/screens/StopWatch.cpp
|
||||
displayapp/screens/BatteryIcon.cpp
|
||||
displayapp/screens/BleIcon.cpp
|
||||
displayapp/screens/AlarmIcon.cpp
|
||||
displayapp/screens/NotificationIcon.cpp
|
||||
displayapp/screens/SystemInfo.cpp
|
||||
displayapp/screens/Label.cpp
|
||||
|
|
|
@ -47,7 +47,8 @@ namespace Pinetime {
|
|||
|
||||
struct WatchFaceInfineat {
|
||||
bool showSideCover = true;
|
||||
int colorIndex = 0;
|
||||
bool showAlarmStatus = true;
|
||||
int colorIndex = 0;
|
||||
};
|
||||
|
||||
Settings(Pinetime::Controllers::FS& fs);
|
||||
|
@ -123,6 +124,18 @@ namespace Pinetime {
|
|||
return settings.watchFaceInfineat.showSideCover;
|
||||
};
|
||||
|
||||
void SetInfineatShowAlarmStatus(bool show) {
|
||||
if (show != settings.watchFaceInfineat.showAlarmStatus) {
|
||||
settings.watchFaceInfineat.showAlarmStatus = show;
|
||||
settingsChanged = true;
|
||||
}
|
||||
};
|
||||
|
||||
bool GetInfineatShowAlarmStatus() const {
|
||||
return settings.watchFaceInfineat.showAlarmStatus;
|
||||
};
|
||||
|
||||
|
||||
void SetInfineatColorIndex(int index) {
|
||||
if (index != settings.watchFaceInfineat.colorIndex) {
|
||||
settings.watchFaceInfineat.colorIndex = index;
|
||||
|
|
|
@ -8,6 +8,7 @@ namespace Colors {
|
|||
static constexpr lv_color_t green = LV_COLOR_MAKE(0x0, 0xb0, 0x0);
|
||||
static constexpr lv_color_t blue = LV_COLOR_MAKE(0x0, 0x50, 0xff);
|
||||
static constexpr lv_color_t lightGray = LV_COLOR_MAKE(0xb0, 0xb0, 0xb0);
|
||||
static constexpr lv_color_t gray = LV_COLOR_MAKE(0x50, 0x50, 0x50);
|
||||
|
||||
static constexpr lv_color_t bg = LV_COLOR_MAKE(0x5d, 0x69, 0x7e);
|
||||
static constexpr lv_color_t bgAlt = LV_COLOR_MAKE(0x38, 0x38, 0x38);
|
||||
|
|
|
@ -23,6 +23,7 @@ namespace Pinetime {
|
|||
Twos,
|
||||
HeartRate,
|
||||
Navigation,
|
||||
Calendar,
|
||||
StopWatch,
|
||||
Metronome,
|
||||
Motion,
|
||||
|
@ -51,6 +52,7 @@ namespace Pinetime {
|
|||
PineTimeStyle,
|
||||
Terminal,
|
||||
Infineat,
|
||||
Meow,
|
||||
CasioStyleG7710,
|
||||
};
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
},
|
||||
{
|
||||
"file": "FontAwesome5-Solid+Brands+Regular.woff",
|
||||
"range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743"
|
||||
"range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf06e, 0xf015, 0xf00c, 0xf0f3, 0xf522, 0xf743, 0xf0f3, 0xf1f6"
|
||||
}
|
||||
],
|
||||
"bpp": 1,
|
||||
|
|
11
src/displayapp/screens/AlarmIcon.cpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#include "displayapp/screens/AlarmIcon.h"
|
||||
#include "displayapp/screens/Symbols.h"
|
||||
using namespace Pinetime::Applications::Screens;
|
||||
|
||||
const char* AlarmIcon::GetIcon(bool isSet) {
|
||||
if (isSet) {
|
||||
return Symbols::bell;
|
||||
}
|
||||
|
||||
return Symbols::notbell;
|
||||
}
|
14
src/displayapp/screens/AlarmIcon.h
Normal file
|
@ -0,0 +1,14 @@
|
|||
#pragma once
|
||||
|
||||
#include "components/alarm/AlarmController.h"
|
||||
|
||||
namespace Pinetime {
|
||||
namespace Applications {
|
||||
namespace Screens {
|
||||
class AlarmIcon {
|
||||
public:
|
||||
static const char* GetIcon(bool isSet);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
10
src/displayapp/screens/README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Add a new watchface :
|
||||
## Modify the following files with the names of your source files :
|
||||
|
||||
- /src/displayapp/apps/Apps.h.in
|
||||
- /src/components/settings/Settings.h
|
||||
- /src/displayapp/UserApps.h
|
||||
- /src/displayapp/apps/CMakeLists.txt
|
||||
- CMakelists.txt
|
||||
|
||||
|
|
@ -12,6 +12,7 @@ namespace Pinetime {
|
|||
static constexpr const char* shoe = "\xEF\x95\x8B";
|
||||
static constexpr const char* clock = "\xEF\x80\x97";
|
||||
static constexpr const char* bell = "\xEF\x83\xB3";
|
||||
static constexpr const char* notbell = "\xEF\x87\xB6";
|
||||
static constexpr const char* info = "\xEF\x84\xA9";
|
||||
static constexpr const char* list = "\xEF\x80\xBA";
|
||||
static constexpr const char* sun = "\xEF\x86\x85";
|
||||
|
|
|
@ -4,10 +4,12 @@
|
|||
#include <cstdio>
|
||||
#include "displayapp/screens/BatteryIcon.h"
|
||||
#include "displayapp/screens/BleIcon.h"
|
||||
#include "displayapp/screens/AlarmIcon.h"
|
||||
#include "displayapp/screens/NotificationIcon.h"
|
||||
#include "displayapp/screens/Symbols.h"
|
||||
#include "components/battery/BatteryController.h"
|
||||
#include "components/ble/BleController.h"
|
||||
#include "components/alarm/AlarmController.h"
|
||||
#include "components/ble/NotificationManager.h"
|
||||
#include "components/heartrate/HeartRateController.h"
|
||||
#include "components/motion/MotionController.h"
|
||||
|
@ -17,6 +19,7 @@ using namespace Pinetime::Applications::Screens;
|
|||
WatchFaceCasioStyleG7710::WatchFaceCasioStyleG7710(Controllers::DateTime& dateTimeController,
|
||||
const Controllers::Battery& batteryController,
|
||||
const Controllers::Ble& bleController,
|
||||
Controllers::AlarmController& alarmController,
|
||||
Controllers::NotificationManager& notificatioManager,
|
||||
Controllers::Settings& settingsController,
|
||||
Controllers::HeartRateController& heartRateController,
|
||||
|
@ -27,6 +30,7 @@ WatchFaceCasioStyleG7710::WatchFaceCasioStyleG7710(Controllers::DateTime& dateTi
|
|||
dateTimeController {dateTimeController},
|
||||
batteryController {batteryController},
|
||||
bleController {bleController},
|
||||
alarmController {alarmController},
|
||||
notificatioManager {notificatioManager},
|
||||
settingsController {settingsController},
|
||||
heartRateController {heartRateController},
|
||||
|
@ -168,6 +172,23 @@ WatchFaceCasioStyleG7710::WatchFaceCasioStyleG7710(Controllers::DateTime& dateTi
|
|||
lv_label_set_text_static(stepIcon, Symbols::shoe);
|
||||
lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0);
|
||||
|
||||
alarmIcon = lv_label_create(lv_scr_act(), nullptr);
|
||||
lv_obj_set_style_local_text_color(alarmIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, color_text);
|
||||
lv_label_set_text_static(alarmIcon, Symbols::notbell);
|
||||
lv_obj_align(alarmIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 5, -2);
|
||||
|
||||
labelAlarm = lv_label_create(lv_scr_act(), nullptr);
|
||||
lv_obj_set_style_local_text_color(labelAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, color_text);
|
||||
// lv_obj_set_style_local_text_font(labelAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko);
|
||||
lv_obj_align(labelAlarm, alarmIcon, LV_ALIGN_OUT_RIGHT_MID, 3, 0);
|
||||
lv_label_set_text_static(labelAlarm, "00:00");
|
||||
|
||||
labelTimeAmPmAlarm = lv_label_create(lv_scr_act(), nullptr);
|
||||
// lv_obj_set_style_local_text_font(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko);
|
||||
lv_label_set_text_static(labelTimeAmPmAlarm, "");
|
||||
lv_obj_set_style_local_text_color(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, color_text);
|
||||
lv_obj_align(labelTimeAmPmAlarm, labelAlarm, LV_ALIGN_OUT_RIGHT_MID, 3, 0);
|
||||
|
||||
taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this);
|
||||
Refresh();
|
||||
}
|
||||
|
@ -310,8 +331,6 @@ void WatchFaceCasioStyleG7710::Refresh() {
|
|||
lv_obj_realign(stepValue);
|
||||
lv_obj_realign(stepIcon);
|
||||
}
|
||||
}
|
||||
|
||||
bool WatchFaceCasioStyleG7710::IsAvailable(Pinetime::Controllers::FS& filesystem) {
|
||||
lfs_file file = {};
|
||||
|
||||
|
|
|
@ -4,9 +4,11 @@
|
|||
#include <cstdio>
|
||||
#include "displayapp/screens/Symbols.h"
|
||||
#include "displayapp/screens/BleIcon.h"
|
||||
#include "displayapp/screens/AlarmIcon.h"
|
||||
#include "components/settings/Settings.h"
|
||||
#include "components/battery/BatteryController.h"
|
||||
#include "components/ble/BleController.h"
|
||||
#include "components/alarm/AlarmController.h"
|
||||
#include "components/ble/NotificationManager.h"
|
||||
#include "components/motion/MotionController.h"
|
||||
|
||||
|
@ -122,6 +124,7 @@ namespace {
|
|||
WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController,
|
||||
const Controllers::Battery& batteryController,
|
||||
const Controllers::Ble& bleController,
|
||||
Controllers::AlarmController& alarmController,
|
||||
Controllers::NotificationManager& notificationManager,
|
||||
Controllers::Settings& settingsController,
|
||||
Controllers::MotionController& motionController,
|
||||
|
@ -130,6 +133,7 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController,
|
|||
dateTimeController {dateTimeController},
|
||||
batteryController {batteryController},
|
||||
bleController {bleController},
|
||||
alarmController {alarmController},
|
||||
notificationManager {notificationManager},
|
||||
settingsController {settingsController},
|
||||
motionController {motionController} {
|
||||
|
@ -144,6 +148,7 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController,
|
|||
font_bebas = lv_font_load("F:/fonts/bebas.bin");
|
||||
}
|
||||
|
||||
|
||||
// Side Cover
|
||||
static constexpr lv_point_t linePoints[nLines][2] = {{{30, 25}, {68, -8}},
|
||||
{{26, 167}, {43, 216}},
|
||||
|
@ -230,6 +235,31 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController,
|
|||
lv_label_set_text_static(bleIcon, Symbols::bluetooth);
|
||||
lv_obj_align(bleIcon, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
|
||||
|
||||
labelAlarm = lv_label_create(lv_scr_act(), nullptr);
|
||||
lv_obj_set_style_local_text_color(labelAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor);
|
||||
lv_obj_set_style_local_text_font(labelAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko);
|
||||
lv_obj_align(labelAlarm, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, -10, 0);
|
||||
lv_obj_align(labelAlarm, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0);
|
||||
lv_label_set_text_static(labelAlarm, "00:00");
|
||||
|
||||
labelTimeAmPmAlarm = lv_label_create(lv_scr_act(), nullptr);
|
||||
lv_obj_set_style_local_text_font(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko);
|
||||
lv_label_set_text_static(labelTimeAmPmAlarm, "");
|
||||
lv_obj_set_style_local_text_color(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor);
|
||||
lv_obj_align(labelTimeAmPmAlarm, labelAlarm, LV_ALIGN_OUT_TOP_RIGHT, 0, 0);
|
||||
|
||||
alarmIcon = lv_label_create(lv_scr_act(), nullptr);
|
||||
lv_obj_set_style_local_text_color(alarmIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor);
|
||||
lv_label_set_text_static(alarmIcon, Symbols::notbell);
|
||||
lv_obj_align(alarmIcon, labelAlarm, LV_ALIGN_OUT_LEFT_MID, -3, 0);
|
||||
|
||||
// don't show the icons just set if we don't show alarm status
|
||||
if (!settingsController.GetInfineatShowAlarmStatus()) {
|
||||
lv_obj_set_hidden(labelAlarm, true);
|
||||
lv_obj_set_hidden(alarmIcon, true);
|
||||
lv_obj_set_hidden(labelTimeAmPmAlarm, true);
|
||||
}
|
||||
|
||||
stepValue = lv_label_create(lv_scr_act(), nullptr);
|
||||
lv_obj_set_style_local_text_color(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, grayColor);
|
||||
lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko);
|
||||
|
@ -275,7 +305,7 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController,
|
|||
btnToggleCover = lv_btn_create(lv_scr_act(), nullptr);
|
||||
btnToggleCover->user_data = this;
|
||||
lv_obj_set_size(btnToggleCover, 60, 60);
|
||||
lv_obj_align(btnToggleCover, lv_scr_act(), LV_ALIGN_CENTER, 0, 80);
|
||||
lv_obj_align(btnToggleCover, lv_scr_act(), LV_ALIGN_CENTER, 0,0);
|
||||
lv_obj_set_style_local_bg_opa(btnToggleCover, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_70);
|
||||
const char* labelToggle = settingsController.GetInfineatShowSideCover() ? "ON" : "OFF";
|
||||
lblToggle = lv_label_create(btnToggleCover, nullptr);
|
||||
|
@ -283,6 +313,17 @@ WatchFaceInfineat::WatchFaceInfineat(Controllers::DateTime& dateTimeController,
|
|||
lv_obj_set_event_cb(btnToggleCover, event_handler);
|
||||
lv_obj_set_hidden(btnToggleCover, true);
|
||||
|
||||
btnToggleAlarm = lv_btn_create(lv_scr_act(), nullptr);
|
||||
btnToggleAlarm->user_data = this;
|
||||
lv_obj_set_size(btnToggleAlarm, 60, 60);
|
||||
lv_obj_align(btnToggleAlarm, lv_scr_act(), LV_ALIGN_CENTER, 0, 80);
|
||||
lv_obj_set_style_local_bg_opa(btnToggleAlarm, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_70);
|
||||
const char* labelToggleAlarm = settingsController.GetInfineatShowAlarmStatus() ? Symbols::bell : Symbols::notbell;
|
||||
lblAlarm = lv_label_create(btnToggleAlarm, nullptr);
|
||||
lv_label_set_text_static(lblAlarm, labelToggleAlarm);
|
||||
lv_obj_set_event_cb(btnToggleAlarm, event_handler);
|
||||
lv_obj_set_hidden(btnToggleAlarm, true);
|
||||
|
||||
// Button to access the settings
|
||||
btnSettings = lv_btn_create(lv_scr_act(), nullptr);
|
||||
btnSettings->user_data = this;
|
||||
|
@ -332,6 +373,7 @@ void WatchFaceInfineat::CloseMenu() {
|
|||
lv_obj_set_hidden(btnNextColor, true);
|
||||
lv_obj_set_hidden(btnPrevColor, true);
|
||||
lv_obj_set_hidden(btnToggleCover, true);
|
||||
lv_obj_set_hidden(btnToggleAlarm, true);
|
||||
}
|
||||
|
||||
bool WatchFaceInfineat::OnButtonPushed() {
|
||||
|
@ -346,6 +388,7 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
|||
if (event == LV_EVENT_CLICKED) {
|
||||
bool showSideCover = settingsController.GetInfineatShowSideCover();
|
||||
int colorIndex = settingsController.GetInfineatColorIndex();
|
||||
bool showAlarmStatus = settingsController.GetInfineatShowAlarmStatus();
|
||||
|
||||
if (object == btnSettings) {
|
||||
lv_obj_set_hidden(btnSettings, true);
|
||||
|
@ -353,6 +396,7 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
|||
lv_obj_set_hidden(btnNextColor, !showSideCover);
|
||||
lv_obj_set_hidden(btnPrevColor, !showSideCover);
|
||||
lv_obj_set_hidden(btnToggleCover, false);
|
||||
lv_obj_set_hidden(btnToggleAlarm, false);
|
||||
}
|
||||
if (object == btnClose) {
|
||||
CloseMenu();
|
||||
|
@ -368,6 +412,18 @@ void WatchFaceInfineat::UpdateSelected(lv_obj_t* object, lv_event_t event) {
|
|||
const char* labelToggle = showSideCover ? "OFF" : "ON";
|
||||
lv_label_set_text_static(lblToggle, labelToggle);
|
||||
}
|
||||
|
||||
if (object == btnToggleAlarm) {
|
||||
settingsController.SetInfineatShowAlarmStatus(!showAlarmStatus);
|
||||
bool newShowAlarmStatus = settingsController.GetInfineatShowAlarmStatus();
|
||||
lv_obj_set_hidden(labelAlarm, !newShowAlarmStatus);
|
||||
lv_obj_set_hidden(alarmIcon, !newShowAlarmStatus);
|
||||
lv_obj_set_hidden(labelTimeAmPmAlarm, !newShowAlarmStatus);
|
||||
const char* labelToggleAlarm = newShowAlarmStatus ? Symbols::bell : Symbols::notbell;
|
||||
lv_label_set_text_static(lblAlarm, labelToggleAlarm);
|
||||
}
|
||||
|
||||
|
||||
if (object == btnNextColor) {
|
||||
colorIndex = (colorIndex + 1) % nColors;
|
||||
settingsController.SetInfineatColorIndex(colorIndex);
|
||||
|
@ -452,6 +508,43 @@ void WatchFaceInfineat::Refresh() {
|
|||
lv_obj_align(bleIcon, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, 0, 3);
|
||||
}
|
||||
|
||||
if (settingsController.GetInfineatShowAlarmStatus()) {
|
||||
isAlarmSet = alarmController.IsEnabled()==true;
|
||||
// sets the icon as bell or barred bell
|
||||
lv_label_set_text_static(alarmIcon, AlarmIcon::GetIcon(isAlarmSet.Get()));
|
||||
//displays the time of the alarm or nothing if the alarm is not set
|
||||
if (isAlarmSet.Get()) {
|
||||
uint8_t alarmHours = alarmController.Hours();
|
||||
uint8_t alarmMinutes = alarmController.Minutes();
|
||||
//handles the am pm format.
|
||||
if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) {
|
||||
char ampmChar[3] = "AM";
|
||||
if (alarmHours == 0) {
|
||||
alarmHours = 12;
|
||||
} else if (alarmHours == 12) {
|
||||
ampmChar[0]='P';
|
||||
} else if (alarmHours > 12) {
|
||||
alarmHours = alarmHours - 12;
|
||||
ampmChar[0]='P';
|
||||
}
|
||||
lv_label_set_text(labelTimeAmPmAlarm, ampmChar);
|
||||
lv_obj_set_style_local_text_font(labelTimeAmPmAlarm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font_teko);
|
||||
lv_obj_align(labelTimeAmPmAlarm, labelAlarm, LV_ALIGN_OUT_TOP_RIGHT, 0, 0);
|
||||
}
|
||||
|
||||
lv_label_set_text_fmt(labelAlarm, "%02d:%02d", alarmHours, alarmMinutes);
|
||||
|
||||
lv_obj_align(alarmIcon, labelAlarm, LV_ALIGN_OUT_LEFT_MID, -3, 0);
|
||||
lv_obj_align(labelAlarm, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, -10, 0);
|
||||
lv_obj_align(labelAlarm, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0);
|
||||
|
||||
}
|
||||
else {
|
||||
lv_label_set_text_static(labelAlarm, Symbols::none);
|
||||
lv_obj_align(alarmIcon, dateContainer, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
|
||||
lv_obj_align(alarmIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -3, 0);
|
||||
}
|
||||
}
|
||||
stepCount = motionController.NbSteps();
|
||||
if (stepCount.IsUpdated()) {
|
||||
lv_label_set_text_fmt(stepValue, "%lu", stepCount.Get());
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace Pinetime {
|
|||
WatchFaceInfineat(Controllers::DateTime& dateTimeController,
|
||||
const Controllers::Battery& batteryController,
|
||||
const Controllers::Ble& bleController,
|
||||
Controllers::AlarmController& alarmController,
|
||||
Controllers::NotificationManager& notificationManager,
|
||||
Controllers::Settings& settingsController,
|
||||
Controllers::MotionController& motionController,
|
||||
|
@ -52,6 +53,7 @@ namespace Pinetime {
|
|||
Utility::DirtyValue<bool> isCharging {};
|
||||
Utility::DirtyValue<bool> bleState {};
|
||||
Utility::DirtyValue<bool> bleRadioEnabled {};
|
||||
Utility::DirtyValue<bool> isAlarmSet{};
|
||||
Utility::DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::minutes>> currentDateTime {};
|
||||
Utility::DirtyValue<uint32_t> stepCount {};
|
||||
Utility::DirtyValue<bool> notificationState {};
|
||||
|
@ -71,22 +73,28 @@ namespace Pinetime {
|
|||
lv_obj_t* dateContainer;
|
||||
lv_obj_t* labelDate;
|
||||
lv_obj_t* bleIcon;
|
||||
lv_obj_t* labelAlarm;
|
||||
lv_obj_t* labelTimeAmPmAlarm;
|
||||
lv_obj_t* alarmIcon;
|
||||
lv_obj_t* stepIcon;
|
||||
lv_obj_t* stepValue;
|
||||
lv_obj_t* notificationIcon;
|
||||
lv_obj_t* btnClose;
|
||||
lv_obj_t* btnNextColor;
|
||||
lv_obj_t* btnToggleCover;
|
||||
lv_obj_t* btnToggleAlarm;
|
||||
lv_obj_t* btnPrevColor;
|
||||
lv_obj_t* btnSettings;
|
||||
lv_obj_t* labelBtnSettings;
|
||||
lv_obj_t* lblToggle;
|
||||
lv_obj_t* lblAlarm;
|
||||
|
||||
lv_obj_t* lines[nLines];
|
||||
|
||||
Controllers::DateTime& dateTimeController;
|
||||
const Controllers::Battery& batteryController;
|
||||
const Controllers::Ble& bleController;
|
||||
Controllers::AlarmController& alarmController;
|
||||
Controllers::NotificationManager& notificationManager;
|
||||
Controllers::Settings& settingsController;
|
||||
Controllers::MotionController& motionController;
|
||||
|
@ -109,6 +117,7 @@ namespace Pinetime {
|
|||
return new Screens::WatchFaceInfineat(controllers.dateTimeController,
|
||||
controllers.batteryController,
|
||||
controllers.bleController,
|
||||
controllers.alarmController,
|
||||
controllers.notificationManager,
|
||||
controllers.settingsController,
|
||||
controllers.motionController,
|
||||
|
|
11
src/displayapp/screens/addWatchface.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Add a new watchface :
|
||||
## Modify the following files with the names of your source files :
|
||||
|
||||
- /src/displayapp/apps/Apps.h.in
|
||||
- /src/components/settings/Settings.h
|
||||
- /src/displayapp/screens/settings/SettingWatchFace.h
|
||||
- /src/displayapp/UserApps.h
|
||||
- /src/displayapp/apps/CMakeLists.txt
|
||||
- CMakelists.txt
|
||||
|
||||
|
|
@ -12,6 +12,8 @@
|
|||
#include "displayapp/screens/WatchFaceInfineat.h"
|
||||
#include "displayapp/screens/WatchFaceCasioStyleG7710.h"
|
||||
|
||||
|
||||
|
||||
namespace Pinetime {
|
||||
|
||||
namespace Applications {
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 56b17bf9f74096774944bcac0829adcd887d391e
|
|
@ -589,7 +589,7 @@ typedef void* lv_obj_user_data_t;
|
|||
/*Calendar (dependencies: -)*/
|
||||
#define LV_USE_CALENDAR 1
|
||||
#if LV_USE_CALENDAR
|
||||
#define LV_CALENDAR_WEEK_STARTS_MONDAY 0
|
||||
#define LV_CALENDAR_WEEK_STARTS_MONDAY 1
|
||||
#endif
|
||||
|
||||
/*Canvas (dependencies: lv_img)*/
|
||||
|
|
|
@ -1,11 +1,18 @@
|
|||
{
|
||||
"pine_small" : {
|
||||
"pine_small" : {
|
||||
"sources": "images/pine_logo.png",
|
||||
"color_format": "CF_TRUE_COLOR_ALPHA",
|
||||
"output_format": "bin",
|
||||
"binary_format": "ARGB8565_RBSWAP",
|
||||
"target_path": "/images/"
|
||||
},
|
||||
"cat_small" : {
|
||||
"sources": "images/cat_clean.png",
|
||||
"color_format": "CF_TRUE_COLOR_ALPHA",
|
||||
"output_format": "bin",
|
||||
"binary_format": "ARGB8565_RBSWAP",
|
||||
"target_path": "/images/"
|
||||
},
|
||||
"navigation0" : {
|
||||
"sources": "images/navigation0.png",
|
||||
"color_format": "CF_INDEXED_1_BIT",
|
||||
|
|
BIN
src/resources/images/cat_clean.png
Normal file
After Width: | Height: | Size: 1.7 KiB |