Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,7 @@ list(APPEND SOURCE_FILES
displayapp/screens/Error.cpp
displayapp/screens/Alarm.cpp
displayapp/screens/Styles.cpp
displayapp/screens/ShowerIcon.cpp
displayapp/Colors.cpp

## Settings
Expand Down Expand Up @@ -498,6 +499,7 @@ list(APPEND SOURCE_FILES
components/timer/TimerController.cpp
components/alarm/AlarmController.cpp
components/fs/FS.cpp
components/shower/ShowerController.cpp
drivers/Cst816s.cpp
FreeRTOS/port.c
FreeRTOS/port_cmsis_systick.c
Expand Down Expand Up @@ -568,6 +570,7 @@ list(APPEND RECOVERY_SOURCE_FILES
components/settings/Settings.cpp
components/timer/TimerController.cpp
components/alarm/AlarmController.cpp
components/shower/ShowerController.cpp
drivers/Cst816s.cpp
FreeRTOS/port.c
FreeRTOS/port_cmsis_systick.c
Expand Down Expand Up @@ -642,6 +645,7 @@ set(INCLUDE_FILES
displayapp/screens/Motion.h
displayapp/screens/Timer.h
displayapp/screens/Alarm.h
displayapp/screens/ShowerIcon.h
displayapp/Colors.h
drivers/St7789.h
drivers/SpiNorFlash.h
Expand Down Expand Up @@ -681,6 +685,7 @@ set(INCLUDE_FILES
components/settings/Settings.h
components/timer/TimerController.h
components/alarm/AlarmController.h
components/shower/ShowerController.h
drivers/Cst816s.h
FreeRTOS/portmacro.h
FreeRTOS/portmacro_cmsis.h
Expand Down
55 changes: 55 additions & 0 deletions src/components/shower/ShowerController.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include "components/shower/ShowerController.h"
#include "systemtask/Messages.h"

using namespace Pinetime::Controllers;

ShowerController* ShowerController::instance = nullptr;

ShowerController::ShowerController() : lastWakeUpMode() {
instance = this;
}

void ShowerController::ToggleShowerMode() {
using WakeOn = Controllers::Settings::WakeUpMode;

this->isShowerModeOn = !this->isShowerModeOn;
bool settingsChanged = false;
if (this->IsShowerModeOn()) {
if (lastScreenTimeout != settingsController->GetScreenTimeOut()) {
lastScreenTimeout = settingsController->GetScreenTimeOut();
settingsController->SetScreenTimeOut(5000);
settingsChanged = true;
}
if (settingsController->isWakeUpModeOn(WakeOn::SingleTap)) {
lastWakeUpMode = WakeOn::SingleTap;
settingsController->setWakeUpMode(WakeOn::SingleTap, false);
settingsChanged = true;
}
else if (settingsController->isWakeUpModeOn(WakeOn::DoubleTap)) {
lastWakeUpMode = WakeOn::DoubleTap;
settingsController->setWakeUpMode(WakeOn::DoubleTap, false);
settingsChanged = true;
}
else if (settingsController->isWakeUpModeOn(WakeOn::RaiseWrist)) {
lastWakeUpMode = WakeOn::RaiseWrist;
settingsController->setWakeUpMode(WakeOn::RaiseWrist, false);
settingsChanged = true;
}
if (settingsChanged) {
settingsController->SaveSettings();
}
} else {
settingsController->SetScreenTimeOut(lastScreenTimeout);
settingsController->setWakeUpMode(lastWakeUpMode, true);
settingsController->SaveSettings();

}
}

void ShowerController::Register(Pinetime::System::SystemTask* systemTask) {
this->systemTask = systemTask;
}

void ShowerController::SetSettingController(Pinetime::Controllers::Settings* settingsController) {
this->settingsController = settingsController;
}
31 changes: 31 additions & 0 deletions src/components/shower/ShowerController.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#pragma once

#include "components/settings/Settings.h"
#include <systemtask/SystemTask.h>

namespace Pinetime {
namespace Controllers {

class ShowerController {
public:
ShowerController();

void Register(System::SystemTask* systemTask);
void SetSettingController(Pinetime::Controllers::Settings* settingsController);
void ToggleShowerMode();
bool IsShowerModeOn() const {
return isShowerModeOn;
}

private:
static ShowerController* instance;

bool isShowerModeOn = false;
uint32_t lastScreenTimeout = 0;
Pinetime::Controllers::Settings::WakeUpMode lastWakeUpMode;

Pinetime::Controllers::Settings* settingsController = nullptr;
Pinetime::System::SystemTask* systemTask = nullptr;
};
}
}
6 changes: 5 additions & 1 deletion src/displayapp/DisplayApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "components/ble/NotificationManager.h"
#include "components/motion/MotionController.h"
#include "components/motor/MotorController.h"
#include "components/shower/ShowerController.h"
#include "displayapp/screens/ApplicationList.h"
#include "displayapp/screens/Brightness.h"
#include "displayapp/screens/Clock.h"
Expand Down Expand Up @@ -96,6 +97,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
Pinetime::Controllers::MotionController& motionController,
Pinetime::Controllers::TimerController& timerController,
Pinetime::Controllers::AlarmController& alarmController,
Pinetime::Controllers::ShowerController& showerController,
Pinetime::Controllers::TouchHandler& touchHandler)
: lcd {lcd},
lvgl {lvgl},
Expand All @@ -111,6 +113,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
motionController {motionController},
timerController {timerController},
alarmController {alarmController},
showerController {showerController},
touchHandler {touchHandler} {
}

Expand Down Expand Up @@ -339,7 +342,8 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction)
notificationManager,
settingsController,
heartRateController,
motionController);
motionController,
showerController);
break;

case Apps::Error:
Expand Down
3 changes: 3 additions & 0 deletions src/displayapp/DisplayApp.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ namespace Pinetime {
class NotificationManager;
class HeartRateController;
class MotionController;
class ShowerController;
class TouchHandler;
}

Expand All @@ -61,6 +62,7 @@ namespace Pinetime {
Pinetime::Controllers::MotionController& motionController,
Pinetime::Controllers::TimerController& timerController,
Pinetime::Controllers::AlarmController& alarmController,
Pinetime::Controllers::ShowerController& showerController,
Pinetime::Controllers::TouchHandler& touchHandler);
void Start(System::BootErrors error);
void PushMessage(Display::Messages msg);
Expand All @@ -87,6 +89,7 @@ namespace Pinetime {
Pinetime::Controllers::MotionController& motionController;
Pinetime::Controllers::TimerController& timerController;
Pinetime::Controllers::AlarmController& alarmController;
Pinetime::Controllers::ShowerController& showerController;
Pinetime::Controllers::TouchHandler& touchHandler;

Pinetime::Controllers::FirmwareValidator validator;
Expand Down
1 change: 1 addition & 0 deletions src/displayapp/DisplayAppRecovery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
Pinetime::Controllers::MotionController& motionController,
Pinetime::Controllers::TimerController& timerController,
Pinetime::Controllers::AlarmController& alarmController,
Pinetime::Controllers::ShowerController& showerController,
Pinetime::Controllers::TouchHandler& touchHandler)
: lcd {lcd}, bleController {bleController} {

Expand Down
2 changes: 2 additions & 0 deletions src/displayapp/DisplayAppRecovery.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ namespace Pinetime {
class MotorController;
class TimerController;
class AlarmController;
class ShowerController;
}

namespace System {
Expand All @@ -57,6 +58,7 @@ namespace Pinetime {
Pinetime::Controllers::MotionController& motionController,
Pinetime::Controllers::TimerController& timerController,
Pinetime::Controllers::AlarmController& alarmController,
Pinetime::Controllers::ShowerController& showerController,
Pinetime::Controllers::TouchHandler& touchHandler);
void Start();
void Start(Pinetime::System::BootErrors){ Start(); };
Expand Down
2 changes: 1 addition & 1 deletion src/displayapp/fonts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* Do not enable font compression and horizontal subpixel hinting
* Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range : `0x20-0x7f, 0x410-0x44f`
* Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following
range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015`
range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015, 0xf2cd`
* Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts`
* Add the font .c file path to src/CMakeLists.txt
* Add an LV_FONT_DECLARE line in src/libs/lv_conf.h
Expand Down
38 changes: 24 additions & 14 deletions src/displayapp/fonts/jetbrains_mono_bold_20.c
Original file line number Diff line number Diff line change
Expand Up @@ -948,6 +948,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
0x81, 0xf8, 0x6d, 0x99, 0x9a, 0x36, 0x7, 0x80,
0xe0, 0x18, 0x2, 0x0, 0x0,

/* U+F2CD "" */
0x1c, 0x0, 0x3, 0xf8, 0x0, 0x67, 0xc0, 0x6,
0x7c, 0x0, 0x67, 0x80, 0x6, 0x70, 0x0, 0x62,
0x0, 0x6, 0x0, 0x0, 0x60, 0x0, 0xf, 0xff,
0xff, 0xff, 0xff, 0xf7, 0xff, 0xfe, 0x7f, 0xff,
0xe7, 0xff, 0xfe, 0x3f, 0xff, 0xc3, 0xff, 0xfc,
0x18, 0x1, 0x80,

/* U+F2F2 "" */
0x7, 0xe0, 0x7, 0xe0, 0x1, 0x80, 0x3, 0xc0,
0xf, 0xf2, 0x1f, 0xff, 0x3e, 0x7e, 0x7e, 0x7e,
Expand Down Expand Up @@ -1235,16 +1243,17 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 3627, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3663, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 3701, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3730, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3768, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3834, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 3883, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3933, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3993, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4046, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4107, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4162, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4215, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0}
{.bitmap_index = 3730, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 3773, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 3811, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3877, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 3926, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3976, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4036, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4089, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4150, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4205, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 4258, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0}
};

/*---------------------
Expand All @@ -1255,8 +1264,9 @@ static const uint16_t unicode_list_2[] = {
0x0, 0x14, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39,
0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x6d, 0x94,
0x128, 0x184, 0x1e5, 0x1fb, 0x200, 0x21d, 0x23f, 0x240,
0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2f1, 0x3dc,
0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f, 0x6a8
0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2cc, 0x2f1,
0x3dc, 0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f,
0x6a8
};

/*Collect the unicode lists and glyph_id offsets*/
Expand All @@ -1272,7 +1282,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
},
{
.range_start = 61441, .range_length = 1705, .glyph_id_start = 160,
.unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
.unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 41, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};

Expand Down Expand Up @@ -1321,7 +1331,7 @@ lv_font_t jetbrains_mono_bold_20 = {
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0)
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -3,
.underline_thickness = 1,
#endif
Expand Down
15 changes: 12 additions & 3 deletions src/displayapp/screens/Clock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "components/ble/BleController.h"
#include "components/ble/NotificationManager.h"
#include "components/settings/Settings.h"
#include "components/shower/ShowerController.h"
#include "displayapp/DisplayApp.h"
#include "displayapp/screens/WatchFaceDigital.h"
#include "displayapp/screens/WatchFaceAnalog.h"
Expand All @@ -21,7 +22,8 @@ Clock::Clock(DisplayApp* app,
Controllers::NotificationManager& notificatioManager,
Controllers::Settings& settingsController,
Controllers::HeartRateController& heartRateController,
Controllers::MotionController& motionController)
Controllers::MotionController& motionController,
Controllers::ShowerController& showerController)
: Screen(app),
dateTimeController {dateTimeController},
batteryController {batteryController},
Expand All @@ -30,6 +32,7 @@ Clock::Clock(DisplayApp* app,
settingsController {settingsController},
heartRateController {heartRateController},
motionController {motionController},
showerController {showerController},
screen {[this, &settingsController]() {
switch (settingsController.GetClockFace()) {
case 0:
Expand Down Expand Up @@ -63,12 +66,18 @@ std::unique_ptr<Screen> Clock::WatchFaceDigitalScreen() {
notificatioManager,
settingsController,
heartRateController,
showerController,
motionController);
}

std::unique_ptr<Screen> Clock::WatchFaceAnalogScreen() {
return std::make_unique<Screens::WatchFaceAnalog>(
app, dateTimeController, batteryController, bleController, notificatioManager, settingsController);
return std::make_unique<Screens::WatchFaceAnalog>(app,
dateTimeController,
batteryController,
bleController,
notificatioManager,
showerController,
settingsController);
}

std::unique_ptr<Screen> Clock::PineTimeStyleScreen() {
Expand Down
5 changes: 4 additions & 1 deletion src/displayapp/screens/Clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ namespace Pinetime {
class Ble;
class NotificationManager;
class MotionController;
class ShowerController;
}

namespace Applications {
Expand All @@ -28,7 +29,8 @@ namespace Pinetime {
Controllers::NotificationManager& notificatioManager,
Controllers::Settings& settingsController,
Controllers::HeartRateController& heartRateController,
Controllers::MotionController& motionController);
Controllers::MotionController& motionController,
Controllers::ShowerController& showerController);
~Clock() override;

bool OnTouchEvent(TouchEvents event) override;
Expand All @@ -41,6 +43,7 @@ namespace Pinetime {
Controllers::Settings& settingsController;
Controllers::HeartRateController& heartRateController;
Controllers::MotionController& motionController;
Controllers::ShowerController& showerController;

std::unique_ptr<Screen> screen;
std::unique_ptr<Screen> WatchFaceDigitalScreen();
Expand Down
12 changes: 12 additions & 0 deletions src/displayapp/screens/ShowerIcon.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include "displayapp/screens/ShowerIcon.h"
#include "displayapp/screens/Symbols.h"

using namespace Pinetime::Applications::Screens;

const char* ShowerIcon::GetShowerIcon(bool isEnabled) {
if (isEnabled)
return Symbols::shower;
else
return Symbols::none;

}
12 changes: 12 additions & 0 deletions src/displayapp/screens/ShowerIcon.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#pragma once

namespace Pinetime {
namespace Applications {
namespace Screens {
class ShowerIcon {
public:
static const char* GetShowerIcon(bool isEnabled);
};
}
}
}
Loading