Skip to content

Commit 8390d0e

Browse files
committed
Merge branch 'develop' into pinmap
2 parents 51c5257 + 6c02378 commit 8390d0e

94 files changed

Lines changed: 969 additions & 540 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ list(APPEND SOURCE_FILES
418418
displayapp/screens/BatteryInfo.cpp
419419
displayapp/screens/Steps.cpp
420420
displayapp/screens/Timer.cpp
421+
displayapp/Colors.cpp
421422

422423
## Settings
423424
displayapp/screens/settings/QuickSettings.cpp
@@ -427,6 +428,7 @@ list(APPEND SOURCE_FILES
427428
displayapp/screens/settings/SettingWakeUp.cpp
428429
displayapp/screens/settings/SettingDisplay.cpp
429430
displayapp/screens/settings/SettingSteps.cpp
431+
displayapp/screens/settings/SettingPineTimeStyle.cpp
430432

431433
## Watch faces
432434
displayapp/icons/bg_clock.c
@@ -495,6 +497,8 @@ list(APPEND SOURCE_FILES
495497
components/heartrate/Biquad.cpp
496498
components/heartrate/Ptagc.cpp
497499
components/heartrate/HeartRateController.cpp
500+
501+
touchhandler/TouchHandler.cpp
498502
)
499503

500504
list(APPEND RECOVERY_SOURCE_FILES
@@ -552,6 +556,7 @@ list(APPEND RECOVERY_SOURCE_FILES
552556
components/heartrate/Ptagc.cpp
553557
components/motor/MotorController.cpp
554558
components/fs/FS.cpp
559+
touchhandler/TouchHandler.cpp
555560
)
556561

557562
list(APPEND RECOVERYLOADER_SOURCE_FILES
@@ -607,6 +612,7 @@ set(INCLUDE_FILES
607612
displayapp/screens/Metronome.h
608613
displayapp/screens/Motion.h
609614
displayapp/screens/Timer.h
615+
displayapp/Colors.h
610616
drivers/St7789.h
611617
drivers/SpiNorFlash.h
612618
drivers/SpiMaster.h
@@ -661,6 +667,7 @@ set(INCLUDE_FILES
661667
components/heartrate/Ptagc.h
662668
components/heartrate/HeartRateController.h
663669
components/motor/MotorController.h
670+
touchhandler/TouchHandler.h
664671
)
665672

666673
include_directories(

src/components/settings/Settings.h

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ namespace Pinetime {
1717
DoubleTap = 1,
1818
RaiseWrist = 2,
1919
};
20+
enum class Colors : uint8_t {
21+
White, Silver, Gray, Black, Red, Maroon, Yellow, Olive, Lime, Green, Cyan, Teal, Blue, Navy, Magenta, Purple, Orange
22+
};
23+
struct PineTimeStyle {
24+
Colors ColorTime = Colors::Teal;
25+
Colors ColorBar = Colors::Teal;
26+
Colors ColorBG = Colors::Black;
27+
};
2028

2129
Settings(Pinetime::Controllers::FS& fs);
2230

@@ -33,10 +41,38 @@ namespace Pinetime {
3341
return settings.clockFace;
3442
};
3543

44+
void SetPTSColorTime(Colors colorTime) {
45+
if (colorTime != settings.PTS.ColorTime)
46+
settingsChanged = true;
47+
settings.PTS.ColorTime = colorTime;
48+
};
49+
Colors GetPTSColorTime() const {
50+
return settings.PTS.ColorTime;
51+
};
52+
53+
void SetPTSColorBar(Colors colorBar) {
54+
if (colorBar != settings.PTS.ColorBar)
55+
settingsChanged = true;
56+
settings.PTS.ColorBar = colorBar;
57+
};
58+
Colors GetPTSColorBar() const {
59+
return settings.PTS.ColorBar;
60+
};
61+
62+
void SetPTSColorBG(Colors colorBG) {
63+
if (colorBG != settings.PTS.ColorBG)
64+
settingsChanged = true;
65+
settings.PTS.ColorBG = colorBG;
66+
};
67+
Colors GetPTSColorBG() const {
68+
return settings.PTS.ColorBG;
69+
};
70+
3671
void SetAppMenu(uint8_t menu) {
3772
appMenu = menu;
3873
};
39-
uint8_t GetAppMenu() {
74+
75+
uint8_t GetAppMenu() const {
4076
return appMenu;
4177
};
4278

@@ -127,9 +163,8 @@ namespace Pinetime {
127163
private:
128164
Pinetime::Controllers::FS& fs;
129165

130-
static constexpr uint32_t settingsVersion = 0x0001;
166+
static constexpr uint32_t settingsVersion = 0x0002;
131167
struct SettingsData {
132-
133168
uint32_t version = settingsVersion;
134169
uint32_t stepsGoal = 10000;
135170
uint32_t screenTimeOut = 15000;
@@ -139,6 +174,8 @@ namespace Pinetime {
139174

140175
uint8_t clockFace = 0;
141176

177+
PineTimeStyle PTS;
178+
142179
std::bitset<3> wakeUpMode {0};
143180

144181
Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium;

src/displayapp/Apps.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ namespace Pinetime {
3030
SettingTimeFormat,
3131
SettingDisplay,
3232
SettingWakeUp,
33-
SettingSteps
33+
SettingSteps,
34+
SettingPineTimeStyle
3435
};
3536
}
3637
}

src/displayapp/Colors.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include "Colors.h"
2+
3+
using namespace Pinetime::Applications;
4+
using namespace Pinetime::Controllers;
5+
6+
lv_color_t Pinetime::Applications::Convert(Pinetime::Controllers::Settings::Colors color) {
7+
switch (color) {
8+
case Pinetime::Controllers::Settings::Colors::White: return LV_COLOR_WHITE;
9+
case Pinetime::Controllers::Settings::Colors::Silver: return LV_COLOR_SILVER;
10+
case Pinetime::Controllers::Settings::Colors::Gray: return LV_COLOR_GRAY;
11+
case Pinetime::Controllers::Settings::Colors::Black: return LV_COLOR_BLACK;
12+
case Pinetime::Controllers::Settings::Colors::Red: return LV_COLOR_RED;
13+
case Pinetime::Controllers::Settings::Colors::Maroon: return LV_COLOR_MAROON;
14+
case Pinetime::Controllers::Settings::Colors::Yellow: return LV_COLOR_YELLOW;
15+
case Pinetime::Controllers::Settings::Colors::Olive: return LV_COLOR_OLIVE;
16+
case Pinetime::Controllers::Settings::Colors::Lime: return LV_COLOR_LIME;
17+
case Pinetime::Controllers::Settings::Colors::Green: return LV_COLOR_GREEN;
18+
case Pinetime::Controllers::Settings::Colors::Cyan: return LV_COLOR_CYAN;
19+
case Pinetime::Controllers::Settings::Colors::Teal: return LV_COLOR_TEAL;
20+
case Pinetime::Controllers::Settings::Colors::Blue: return LV_COLOR_BLUE;
21+
case Pinetime::Controllers::Settings::Colors::Navy: return LV_COLOR_NAVY;
22+
case Pinetime::Controllers::Settings::Colors::Magenta: return LV_COLOR_MAGENTA;
23+
case Pinetime::Controllers::Settings::Colors::Purple: return LV_COLOR_PURPLE;
24+
case Pinetime::Controllers::Settings::Colors::Orange: return LV_COLOR_ORANGE;
25+
default: return LV_COLOR_WHITE;
26+
}
27+
}

src/displayapp/Colors.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
#include <lvgl/src/lv_misc/lv_color.h>
4+
#include <components/settings/Settings.h>
5+
6+
namespace Pinetime {
7+
namespace Applications {
8+
lv_color_t Convert(Controllers::Settings::Colors color);
9+
}
10+
}

src/displayapp/DisplayApp.cpp

Lines changed: 35 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include "displayapp/screens/settings/SettingWakeUp.h"
4343
#include "displayapp/screens/settings/SettingDisplay.h"
4444
#include "displayapp/screens/settings/SettingSteps.h"
45+
#include "displayapp/screens/settings/SettingPineTimeStyle.h"
4546

4647
#include "libs/lv_conf.h"
4748

@@ -53,29 +54,26 @@ namespace {
5354
return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0;
5455
}
5556

56-
TouchEvents Convert(Pinetime::Drivers::Cst816S::TouchInfos info) {
57-
if (info.isTouch) {
58-
switch (info.gesture) {
59-
case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
60-
return TouchEvents::Tap;
61-
case Pinetime::Drivers::Cst816S::Gestures::LongPress:
62-
return TouchEvents::LongTap;
63-
case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
64-
return TouchEvents::DoubleTap;
65-
case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
66-
return TouchEvents::SwipeRight;
67-
case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
68-
return TouchEvents::SwipeLeft;
69-
case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
70-
return TouchEvents::SwipeDown;
71-
case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
72-
return TouchEvents::SwipeUp;
73-
case Pinetime::Drivers::Cst816S::Gestures::None:
74-
default:
75-
return TouchEvents::None;
76-
}
57+
TouchEvents ConvertGesture(Pinetime::Drivers::Cst816S::Gestures gesture) {
58+
switch (gesture) {
59+
case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
60+
return TouchEvents::Tap;
61+
case Pinetime::Drivers::Cst816S::Gestures::LongPress:
62+
return TouchEvents::LongTap;
63+
case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
64+
return TouchEvents::DoubleTap;
65+
case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
66+
return TouchEvents::SwipeRight;
67+
case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
68+
return TouchEvents::SwipeLeft;
69+
case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
70+
return TouchEvents::SwipeDown;
71+
case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
72+
return TouchEvents::SwipeUp;
73+
case Pinetime::Drivers::Cst816S::Gestures::None:
74+
default:
75+
return TouchEvents::None;
7776
}
78-
return TouchEvents::None;
7977
}
8078
}
8179

@@ -91,7 +89,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
9189
Controllers::Settings& settingsController,
9290
Pinetime::Controllers::MotorController& motorController,
9391
Pinetime::Controllers::MotionController& motionController,
94-
Pinetime::Controllers::TimerController& timerController)
92+
Pinetime::Controllers::TimerController& timerController,
93+
Pinetime::Controllers::TouchHandler& touchHandler)
9594
: lcd {lcd},
9695
lvgl {lvgl},
9796
touchPanel {touchPanel},
@@ -104,7 +103,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
104103
settingsController {settingsController},
105104
motorController {motorController},
106105
motionController {motionController},
107-
timerController {timerController} {
106+
timerController {timerController},
107+
touchHandler {touchHandler} {
108108
}
109109

110110
void DisplayApp::Start() {
@@ -212,8 +212,7 @@ void DisplayApp::Refresh() {
212212
if (state != States::Running) {
213213
break;
214214
}
215-
auto info = touchPanel.GetTouchInfo();
216-
auto gesture = Convert(info);
215+
auto gesture = ConvertGesture(touchHandler.GestureGet());
217216
if (gesture == TouchEvents::None) {
218217
break;
219218
}
@@ -239,11 +238,9 @@ void DisplayApp::Refresh() {
239238
LoadApp(returnToApp, returnDirection);
240239
brightnessController.Set(settingsController.GetBrightness());
241240
brightnessController.Backup();
242-
} else if (touchMode == TouchModes::Gestures) {
243-
if (gesture == TouchEvents::Tap) {
244-
lvgl.SetNewTapEvent(info.x, info.y);
245-
}
246241
}
242+
} else {
243+
touchHandler.CancelTap();
247244
}
248245
} break;
249246
case Messages::ButtonPushed:
@@ -273,18 +270,13 @@ void DisplayApp::Refresh() {
273270
nextApp = Apps::None;
274271
}
275272

276-
if (state != States::Idle && touchMode == TouchModes::Polling) {
277-
auto info = touchPanel.GetTouchInfo();
278-
if (info.action == 2) { // 2 = contact
279-
if (!currentScreen->OnTouchEvent(info.x, info.y)) {
280-
lvgl.SetNewTapEvent(info.x, info.y);
281-
}
282-
}
273+
if (touchHandler.IsTouching()) {
274+
currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY());
283275
}
284276
}
285277

286278
void DisplayApp::RunningState() {
287-
if (!currentScreen->Refresh()) {
279+
if (!currentScreen->IsRunning()) {
288280
LoadApp(returnToApp, returnDirection);
289281
}
290282
lv_task_handler();
@@ -302,6 +294,7 @@ void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction
302294
}
303295

304296
void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) {
297+
touchHandler.CancelTap();
305298
currentScreen.reset(nullptr);
306299
SetFullRefresh(direction);
307300

@@ -378,6 +371,10 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction)
378371
currentScreen = std::make_unique<Screens::SettingSteps>(this, settingsController);
379372
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
380373
break;
374+
case Apps::SettingPineTimeStyle:
375+
currentScreen = std::make_unique<Screens::SettingPineTimeStyle>(this, settingsController);
376+
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
377+
break;
381378
case Apps::BatteryInfo:
382379
currentScreen = std::make_unique<Screens::BatteryInfo>(this, batteryController);
383380
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
@@ -467,10 +464,6 @@ void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) {
467464
}
468465
}
469466

470-
void DisplayApp::SetTouchMode(DisplayApp::TouchModes mode) {
471-
touchMode = mode;
472-
}
473-
474467
void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) {
475468
if (systemTask != nullptr)
476469
systemTask->PushMessage(message);

src/displayapp/DisplayApp.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "components/settings/Settings.h"
1515
#include "displayapp/screens/Screen.h"
1616
#include "components/timer/TimerController.h"
17+
#include "touchhandler/TouchHandler.h"
1718
#include "Messages.h"
1819

1920
namespace Pinetime {
@@ -31,6 +32,7 @@ namespace Pinetime {
3132
class NotificationManager;
3233
class HeartRateController;
3334
class MotionController;
35+
class TouchHandler;
3436
}
3537

3638
namespace System {
@@ -41,7 +43,6 @@ namespace Pinetime {
4143
public:
4244
enum class States { Idle, Running };
4345
enum class FullRefreshDirections { None, Up, Down, Left, Right, LeftAnim, RightAnim };
44-
enum class TouchModes { Gestures, Polling };
4546

4647
DisplayApp(Drivers::St7789& lcd,
4748
Components::LittleVgl& lvgl,
@@ -55,14 +56,14 @@ namespace Pinetime {
5556
Controllers::Settings& settingsController,
5657
Pinetime::Controllers::MotorController& motorController,
5758
Pinetime::Controllers::MotionController& motionController,
58-
Pinetime::Controllers::TimerController& timerController);
59+
Pinetime::Controllers::TimerController& timerController,
60+
Pinetime::Controllers::TouchHandler& touchHandler);
5961
void Start();
6062
void PushMessage(Display::Messages msg);
6163

6264
void StartApp(Apps app, DisplayApp::FullRefreshDirections direction);
6365

6466
void SetFullRefresh(FullRefreshDirections direction);
65-
void SetTouchMode(TouchModes mode);
6667

6768
void Register(Pinetime::System::SystemTask* systemTask);
6869

@@ -81,6 +82,7 @@ namespace Pinetime {
8182
Pinetime::Controllers::MotorController& motorController;
8283
Pinetime::Controllers::MotionController& motionController;
8384
Pinetime::Controllers::TimerController& timerController;
85+
Pinetime::Controllers::TouchHandler& touchHandler;
8486

8587
Pinetime::Controllers::FirmwareValidator validator;
8688
Controllers::BrightnessController brightnessController;
@@ -100,8 +102,7 @@ namespace Pinetime {
100102
FullRefreshDirections returnDirection = FullRefreshDirections::None;
101103
TouchEvents returnTouchEvent = TouchEvents::None;
102104

103-
TouchModes touchMode = TouchModes::Gestures;
104-
105+
TouchEvents GetGesture();
105106
void RunningState();
106107
void IdleState();
107108
static void Process(void* instance);

0 commit comments

Comments
 (0)