Skip to content

Commit 9e9bb20

Browse files
authored
Merge pull request #217 from joaquimorg/MultiFaceClock
Multi face support, analog clock, 12/24 config
2 parents ada9425 + 282e34d commit 9e9bb20

25 files changed

Lines changed: 1320 additions & 315 deletions

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"files.associations": {
3+
"chrono": "cpp"
4+
}
5+
}

src/CMakeLists.txt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,15 @@ list(APPEND SOURCE_FILES
499499
displayapp/screens/Notifications.cpp
500500
displayapp/screens/Twos.cpp
501501
displayapp/screens/HeartRate.cpp
502+
503+
## Watch faces
504+
displayapp/icons/bg_clock.c
505+
displayapp/screens/WatchFaceAnalog.cpp
506+
507+
displayapp/screens/WatchFaceDigital.cpp
508+
509+
##
510+
502511
main.cpp
503512
drivers/St7789.cpp
504513
drivers/SpiNorFlash.cpp
@@ -528,6 +537,7 @@ list(APPEND SOURCE_FILES
528537
components/ble/HeartRateService.cpp
529538
components/firmwarevalidator/FirmwareValidator.cpp
530539
components/motor/MotorController.cpp
540+
components/settings/Settings.cpp
531541
drivers/Cst816s.cpp
532542
FreeRTOS/port.c
533543
FreeRTOS/port_cmsis_systick.c
@@ -615,7 +625,8 @@ set(INCLUDE_FILES
615625
components/ble/ImmediateAlertService.h
616626
components/ble/ServiceDiscovery.h
617627
components/ble/BleClient.h
618-
components/ble/HeartRateService.h.h
628+
components/ble/HeartRateService.h
629+
components/settings/Settings.h
619630
drivers/Cst816s.h
620631
FreeRTOS/portmacro.h
621632
FreeRTOS/portmacro_cmsis.h

src/components/datetime/DateTimeController.cpp

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,123 @@ void DateTime::UpdateTime(uint32_t systickCounter) {
6464
second = time.seconds().count();
6565
}
6666

67+
const char *DateTime::MonthShortToString() {
68+
return DateTime::MonthsString[(uint8_t)month];
69+
}
70+
71+
const char *DateTime::MonthShortToStringLow() {
72+
return DateTime::MonthsStringLow[(uint8_t)month];
73+
}
74+
75+
const char *DateTime::MonthsToStringLow() {
76+
return DateTime::MonthsLow[(uint8_t)month];
77+
}
78+
79+
const char *DateTime::DayOfWeekToString() {
80+
return DateTime::DaysString[(uint8_t)dayOfWeek];
81+
}
82+
83+
const char *DateTime::DayOfWeekShortToString() {
84+
return DateTime::DaysStringShort[(uint8_t)dayOfWeek];
85+
}
86+
87+
const char *DateTime::DayOfWeekToStringLow() {
88+
return DateTime::DaysStringLow[(uint8_t)dayOfWeek];
89+
}
90+
91+
const char *DateTime::DayOfWeekShortToStringLow() {
92+
return DateTime::DaysStringShortLow[(uint8_t)dayOfWeek];
93+
}
94+
95+
96+
char const *DateTime::DaysStringLow[] = {
97+
"--",
98+
"Monday",
99+
"Tuesday",
100+
"Wednesday",
101+
"Thursday",
102+
"Friday",
103+
"Saturday",
104+
"Sunday"
105+
};
106+
107+
char const *DateTime::DaysStringShortLow[] = {
108+
"--",
109+
"Mon",
110+
"Tue",
111+
"Wed",
112+
"Thu",
113+
"Fri",
114+
"Sat",
115+
"Sun"
116+
};
117+
118+
char const *DateTime::DaysStringShort[] = {
119+
"--",
120+
"MON",
121+
"TUE",
122+
"WED",
123+
"THU",
124+
"FRI",
125+
"SAT",
126+
"SUN"
127+
};
128+
129+
char const *DateTime::DaysString[] = {
130+
"--",
131+
"MONDAY",
132+
"TUESDAY",
133+
"WEDNESDAY",
134+
"THURSDAY",
135+
"FRIDAY",
136+
"SATURDAY",
137+
"SUNDAY"
138+
};
139+
140+
char const *DateTime::MonthsString[] = {
141+
"--",
142+
"JAN",
143+
"FEB",
144+
"MAR",
145+
"APR",
146+
"MAY",
147+
"JUN",
148+
"JUL",
149+
"AUG",
150+
"SEP",
151+
"OCT",
152+
"NOV",
153+
"DEC"
154+
};
155+
156+
char const *DateTime::MonthsStringLow[] = {
157+
"--",
158+
"Jan",
159+
"Feb",
160+
"Mar",
161+
"Apr",
162+
"May",
163+
"Jun",
164+
"Jul",
165+
"Aug",
166+
"Sep",
167+
"Oct",
168+
"Nov",
169+
"Dec"
170+
};
171+
172+
char const *DateTime::MonthsLow[] = {
173+
"--",
174+
"January",
175+
"February",
176+
"March",
177+
"April",
178+
"May",
179+
"June",
180+
"July",
181+
"August",
182+
"September",
183+
"October",
184+
"November",
185+
"December"
186+
};

src/components/datetime/DateTimeController.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ namespace Pinetime {
2020
uint8_t Minutes() const { return minute; }
2121
uint8_t Seconds() const { return second; }
2222

23+
const char *MonthShortToString();
24+
const char *MonthShortToStringLow();
25+
const char *MonthsToStringLow();
26+
const char *DayOfWeekToString();
27+
const char *DayOfWeekShortToString();
28+
const char *DayOfWeekToStringLow();
29+
const char *DayOfWeekShortToStringLow();
30+
2331
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> CurrentDateTime() const { return currentDateTime; }
2432
std::chrono::seconds Uptime() const { return uptime; }
2533
private:
@@ -34,6 +42,15 @@ namespace Pinetime {
3442
uint32_t previousSystickCounter = 0;
3543
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> currentDateTime;
3644
std::chrono::seconds uptime {0};
45+
46+
static char const *DaysString[];
47+
static char const *DaysStringShort[];
48+
static char const *DaysStringLow[];
49+
static char const *DaysStringShortLow[];
50+
static char const *MonthsString[];
51+
static char const *MonthsStringLow[];
52+
static char const *MonthsLow[];
53+
3754
};
3855
}
3956
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include "Settings.h"
2+
3+
using namespace Pinetime::Controllers;
4+
5+
6+
// TODO (team):
7+
// Read and write the settings to Flash
8+
//
9+
void Settings::Init() {
10+
// default Clock face
11+
clockFace = 0;
12+
13+
clockType = ClockType::H24;
14+
15+
}
16+

src/components/settings/Settings.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#pragma once
2+
#include <cstdint>
3+
4+
namespace Pinetime {
5+
namespace Controllers {
6+
class Settings {
7+
public:
8+
enum class ClockType {H24, H12};
9+
10+
void Init();
11+
12+
void SetClockFace( uint8_t face ) { clockFace = face; };
13+
uint8_t GetClockFace() { return clockFace; };
14+
15+
void SetAppMenu( uint8_t menu ) { appMenu = menu; };
16+
uint8_t GetAppMenu() { return appMenu; };
17+
18+
void SetClockType( ClockType clocktype ) { clockType = clocktype; };
19+
ClockType GetClockType() { return clockType; };
20+
21+
22+
private:
23+
uint8_t clockFace = 0;
24+
uint8_t appMenu = 0;
25+
26+
ClockType clockType = ClockType::H24;
27+
28+
};
29+
}
30+
}

src/displayapp/DisplayApp.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,20 @@ DisplayApp::DisplayApp(Drivers::St7789 &lcd, Components::LittleVgl &lvgl, Driver
3131
Controllers::DateTime &dateTimeController, Drivers::WatchdogView &watchdog,
3232
System::SystemTask &systemTask,
3333
Pinetime::Controllers::NotificationManager& notificationManager,
34-
Pinetime::Controllers::HeartRateController& heartRateController) :
34+
Pinetime::Controllers::HeartRateController& heartRateController,
35+
Controllers::Settings &settingsController) :
3536
lcd{lcd},
3637
lvgl{lvgl},
3738
batteryController{batteryController},
3839
bleController{bleController},
3940
dateTimeController{dateTimeController},
4041
watchdog{watchdog},
4142
touchPanel{touchPanel},
42-
currentScreen{new Screens::Clock(this, dateTimeController, batteryController, bleController, notificationManager, heartRateController) },
43+
currentScreen{new Screens::Clock(this, dateTimeController, batteryController, bleController, notificationManager, settingsController, heartRateController) },
4344
systemTask{systemTask},
4445
notificationManager{notificationManager},
45-
heartRateController{heartRateController} {
46+
heartRateController{heartRateController},
47+
settingsController{settingsController} {
4648
msgQueue = xQueueCreate(queueSize, itemSize);
4749
onClockApp = true;
4850
}
@@ -194,9 +196,9 @@ void DisplayApp::RunningState() {
194196
onClockApp = false;
195197
switch(nextApp) {
196198
case Apps::None:
197-
case Apps::Launcher: currentScreen.reset(new Screens::ApplicationList(this)); break;
199+
case Apps::Launcher: currentScreen.reset(new Screens::ApplicationList(this, settingsController)); break;
198200
case Apps::Clock:
199-
currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController, notificationManager, heartRateController));
201+
currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController, notificationManager, settingsController, heartRateController));
200202
onClockApp = true;
201203
break;
202204
case Apps::SysInfo: currentScreen.reset(new Screens::SystemInfo(this, dateTimeController, batteryController, brightnessController, bleController, watchdog)); break;

src/displayapp/DisplayApp.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
#include "TouchEvents.h"
1010
#include "components/brightness/BrightnessController.h"
1111
#include "components/firmwarevalidator/FirmwareValidator.h"
12+
#include "components/settings/Settings.h"
1213
#include "displayapp/screens/Screen.h"
1314

15+
1416
namespace Pinetime {
1517

1618
namespace Drivers {
@@ -19,6 +21,7 @@ namespace Pinetime {
1921
class WatchdogView;
2022
}
2123
namespace Controllers {
24+
class Settings;
2225
class Battery;
2326
class Ble;
2427
class DateTime;
@@ -44,7 +47,9 @@ namespace Pinetime {
4447
Controllers::DateTime &dateTimeController, Drivers::WatchdogView &watchdog,
4548
System::SystemTask &systemTask,
4649
Pinetime::Controllers::NotificationManager& notificationManager,
47-
Pinetime::Controllers::HeartRateController& heartRateController);
50+
Pinetime::Controllers::HeartRateController& heartRateController,
51+
Controllers::Settings &settingsController
52+
);
4853
void Start();
4954
void PushMessage(Messages msg);
5055

@@ -89,6 +94,7 @@ namespace Pinetime {
8994
Pinetime::Controllers::FirmwareValidator validator;
9095
TouchModes touchMode = TouchModes::Gestures;
9196
Pinetime::Controllers::HeartRateController& heartRateController;
97+
Pinetime::Controllers::Settings& settingsController;
9298
};
9399
}
94100
}

0 commit comments

Comments
 (0)