resolved merge conflict after renaming PineTimeStyle to WatchFacePineTimeStyle
This commit is contained in:
commit
82a4f9aa68
|
@ -1,5 +1,5 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.10)
|
||||||
project(pinetime VERSION 1.8.0 LANGUAGES C CXX ASM)
|
project(pinetime VERSION 1.9.0 LANGUAGES C CXX ASM)
|
||||||
|
|
||||||
set(CMAKE_C_STANDARD 99)
|
set(CMAKE_C_STANDARD 99)
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
|
|
@ -449,7 +449,7 @@ list(APPEND SOURCE_FILES
|
||||||
displayapp/screens/settings/SettingSetTime.cpp
|
displayapp/screens/settings/SettingSetTime.cpp
|
||||||
displayapp/screens/settings/SettingChimes.cpp
|
displayapp/screens/settings/SettingChimes.cpp
|
||||||
displayapp/screens/settings/SettingShakeThreshold.cpp
|
displayapp/screens/settings/SettingShakeThreshold.cpp
|
||||||
displayapp/screens/settings/SettingAirplaneMode.cpp
|
displayapp/screens/settings/SettingBluetooth.cpp
|
||||||
|
|
||||||
## Watch faces
|
## Watch faces
|
||||||
displayapp/icons/bg_clock.c
|
displayapp/icons/bg_clock.c
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
|
|
||||||
/* Software timer definitions. */
|
/* Software timer definitions. */
|
||||||
#define configUSE_TIMERS 1
|
#define configUSE_TIMERS 1
|
||||||
#define configTIMER_TASK_PRIORITY (0)
|
#define configTIMER_TASK_PRIORITY (1)
|
||||||
#define configTIMER_QUEUE_LENGTH 32
|
#define configTIMER_QUEUE_LENGTH 32
|
||||||
#define configTIMER_TASK_STACK_DEPTH (300)
|
#define configTIMER_TASK_STACK_DEPTH (300)
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
#include "components/ble/MusicService.h"
|
#include "components/ble/MusicService.h"
|
||||||
#include "systemtask/SystemTask.h"
|
#include "systemtask/SystemTask.h"
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
// 0000yyxx-78fc-48fe-8e23-433b3a1942d0
|
// 0000yyxx-78fc-48fe-8e23-433b3a1942d0
|
||||||
|
@ -47,6 +48,8 @@ namespace {
|
||||||
constexpr ble_uuid128_t msRepeatCharUuid {CharUuid(0x0b, 0x00)};
|
constexpr ble_uuid128_t msRepeatCharUuid {CharUuid(0x0b, 0x00)};
|
||||||
constexpr ble_uuid128_t msShuffleCharUuid {CharUuid(0x0c, 0x00)};
|
constexpr ble_uuid128_t msShuffleCharUuid {CharUuid(0x0c, 0x00)};
|
||||||
|
|
||||||
|
constexpr uint8_t MaxStringSize {40};
|
||||||
|
|
||||||
int MusicCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
|
int MusicCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
|
||||||
return static_cast<Pinetime::Controllers::MusicService*>(arg)->OnCommand(conn_handle, attr_handle, ctxt);
|
return static_cast<Pinetime::Controllers::MusicService*>(arg)->OnCommand(conn_handle, attr_handle, ctxt);
|
||||||
}
|
}
|
||||||
|
@ -125,9 +128,21 @@ void Pinetime::Controllers::MusicService::Init() {
|
||||||
int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
|
int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
|
||||||
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
|
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
|
||||||
size_t notifSize = OS_MBUF_PKTLEN(ctxt->om);
|
size_t notifSize = OS_MBUF_PKTLEN(ctxt->om);
|
||||||
char data[notifSize + 1];
|
size_t bufferSize = notifSize;
|
||||||
data[notifSize] = '\0';
|
if (notifSize > MaxStringSize) {
|
||||||
os_mbuf_copydata(ctxt->om, 0, notifSize, data);
|
bufferSize = MaxStringSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
char data[bufferSize + 1];
|
||||||
|
os_mbuf_copydata(ctxt->om, 0, bufferSize, data);
|
||||||
|
|
||||||
|
if (notifSize > bufferSize) {
|
||||||
|
data[bufferSize-1] = '.';
|
||||||
|
data[bufferSize-2] = '.';
|
||||||
|
data[bufferSize-3] = '.';
|
||||||
|
}
|
||||||
|
data[bufferSize] = '\0';
|
||||||
|
|
||||||
char* s = &data[0];
|
char* s = &data[0];
|
||||||
if (ble_uuid_cmp(ctxt->chr->uuid, &msArtistCharUuid.u) == 0) {
|
if (ble_uuid_cmp(ctxt->chr->uuid, &msArtistCharUuid.u) == 0) {
|
||||||
artistName = s;
|
artistName = s;
|
||||||
|
|
|
@ -77,6 +77,7 @@ int GAPEventCallback(struct ble_gap_event* event, void* arg) {
|
||||||
|
|
||||||
void NimbleController::Init() {
|
void NimbleController::Init() {
|
||||||
while (!ble_hs_synced()) {
|
while (!ble_hs_synced()) {
|
||||||
|
vTaskDelay(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
nptr = this;
|
nptr = this;
|
||||||
|
|
|
@ -108,11 +108,11 @@ void DateTime::UpdateTime(uint32_t systickCounter) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* DateTime::MonthShortToString() {
|
const char* DateTime::MonthShortToString() const {
|
||||||
return MonthsString[static_cast<uint8_t>(month)];
|
return MonthsString[static_cast<uint8_t>(month)];
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* DateTime::DayOfWeekShortToString() {
|
const char* DateTime::DayOfWeekShortToString() const {
|
||||||
return DaysStringShort[static_cast<uint8_t>(dayOfWeek)];
|
return DaysStringShort[static_cast<uint8_t>(dayOfWeek)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,8 @@ namespace Pinetime {
|
||||||
return second;
|
return second;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* MonthShortToString();
|
const char* MonthShortToString() const;
|
||||||
const char* DayOfWeekShortToString();
|
const char* DayOfWeekShortToString() const;
|
||||||
static const char* MonthShortToStringLow(Months month);
|
static const char* MonthShortToStringLow(Months month);
|
||||||
|
|
||||||
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> CurrentDateTime() const {
|
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> CurrentDateTime() const {
|
||||||
|
|
|
@ -237,7 +237,7 @@ namespace Pinetime {
|
||||||
|
|
||||||
uint8_t appMenu = 0;
|
uint8_t appMenu = 0;
|
||||||
uint8_t settingsMenu = 0;
|
uint8_t settingsMenu = 0;
|
||||||
/* airplaneMode is intentionally not saved with the other watch settings and initialized
|
/* ble state is intentionally not saved with the other watch settings and initialized
|
||||||
* to off (false) on every boot because we always want ble to be enabled on startup
|
* to off (false) on every boot because we always want ble to be enabled on startup
|
||||||
*/
|
*/
|
||||||
bool bleRadioEnabled = true;
|
bool bleRadioEnabled = true;
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace Pinetime {
|
||||||
SettingSetTime,
|
SettingSetTime,
|
||||||
SettingChimes,
|
SettingChimes,
|
||||||
SettingShakeThreshold,
|
SettingShakeThreshold,
|
||||||
SettingAirplaneMode,
|
SettingBluetooth,
|
||||||
Error
|
Error
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
#include "displayapp/screens/settings/SettingSetTime.h"
|
#include "displayapp/screens/settings/SettingSetTime.h"
|
||||||
#include "displayapp/screens/settings/SettingChimes.h"
|
#include "displayapp/screens/settings/SettingChimes.h"
|
||||||
#include "displayapp/screens/settings/SettingShakeThreshold.h"
|
#include "displayapp/screens/settings/SettingShakeThreshold.h"
|
||||||
#include "displayapp/screens/settings/SettingAirplaneMode.h"
|
#include "displayapp/screens/settings/SettingBluetooth.h"
|
||||||
|
|
||||||
#include "libs/lv_conf.h"
|
#include "libs/lv_conf.h"
|
||||||
|
|
||||||
|
@ -60,28 +60,6 @@ namespace {
|
||||||
static inline bool in_isr(void) {
|
static inline bool in_isr(void) {
|
||||||
return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0;
|
return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TouchEvents ConvertGesture(Pinetime::Drivers::Cst816S::Gestures gesture) {
|
|
||||||
switch (gesture) {
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
|
|
||||||
return TouchEvents::Tap;
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::LongPress:
|
|
||||||
return TouchEvents::LongTap;
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
|
|
||||||
return TouchEvents::DoubleTap;
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
|
|
||||||
return TouchEvents::SwipeRight;
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
|
|
||||||
return TouchEvents::SwipeLeft;
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
|
|
||||||
return TouchEvents::SwipeDown;
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
|
|
||||||
return TouchEvents::SwipeUp;
|
|
||||||
case Pinetime::Drivers::Cst816S::Gestures::None:
|
|
||||||
default:
|
|
||||||
return TouchEvents::None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayApp::DisplayApp(Drivers::St7789& lcd,
|
DisplayApp::DisplayApp(Drivers::St7789& lcd,
|
||||||
|
@ -207,7 +185,7 @@ void DisplayApp::Refresh() {
|
||||||
case Messages::TimerDone:
|
case Messages::TimerDone:
|
||||||
if (currentApp == Apps::Timer) {
|
if (currentApp == Apps::Timer) {
|
||||||
auto* timer = static_cast<Screens::Timer*>(currentScreen.get());
|
auto* timer = static_cast<Screens::Timer*>(currentScreen.get());
|
||||||
timer->setDone();
|
timer->SetDone();
|
||||||
} else {
|
} else {
|
||||||
LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down);
|
LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down);
|
||||||
}
|
}
|
||||||
|
@ -227,7 +205,7 @@ void DisplayApp::Refresh() {
|
||||||
if (state != States::Running) {
|
if (state != States::Running) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
auto gesture = ConvertGesture(touchHandler.GestureGet());
|
auto gesture = touchHandler.GestureGet();
|
||||||
if (gesture == TouchEvents::None) {
|
if (gesture == TouchEvents::None) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -306,14 +284,14 @@ void DisplayApp::Refresh() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (touchHandler.IsTouching()) {
|
||||||
|
currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY());
|
||||||
|
}
|
||||||
|
|
||||||
if (nextApp != Apps::None) {
|
if (nextApp != Apps::None) {
|
||||||
LoadApp(nextApp, nextDirection);
|
LoadApp(nextApp, nextDirection);
|
||||||
nextApp = Apps::None;
|
nextApp = Apps::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (touchHandler.IsTouching()) {
|
|
||||||
currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction) {
|
void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction) {
|
||||||
|
@ -434,8 +412,8 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction)
|
||||||
currentScreen = std::make_unique<Screens::SettingShakeThreshold>(this, settingsController, motionController, *systemTask);
|
currentScreen = std::make_unique<Screens::SettingShakeThreshold>(this, settingsController, motionController, *systemTask);
|
||||||
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
|
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
|
||||||
break;
|
break;
|
||||||
case Apps::SettingAirplaneMode:
|
case Apps::SettingBluetooth:
|
||||||
currentScreen = std::make_unique<Screens::SettingAirplaneMode>(this, settingsController);
|
currentScreen = std::make_unique<Screens::SettingBluetooth>(this, settingsController);
|
||||||
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
|
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
|
||||||
break;
|
break;
|
||||||
case Apps::BatteryInfo:
|
case Apps::BatteryInfo:
|
||||||
|
|
|
@ -31,7 +31,7 @@ static constexpr const char* newSymbol = "\xEF\x86\x85";
|
||||||
* Do not enable font compression or horizontal subpixel rendering
|
* Do not enable font compression or horizontal subpixel rendering
|
||||||
* Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x20-0x7e, 0x410-0x44f`
|
* Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x20-0x7e, 0x410-0x44f`
|
||||||
* Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following
|
* 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, 0xf072`
|
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`
|
||||||
* Fix an error in the font conversion.
|
* Fix an error in the font conversion.
|
||||||
|
|
||||||
Replace the following:
|
Replace the following:
|
||||||
|
|
|
@ -840,16 +840,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
|
||||||
0xf8, 0xf, 0x80, 0xf8, 0x3e, 0x0, 0xff, 0xf0,
|
0xf8, 0xf, 0x80, 0xf8, 0x3e, 0x0, 0xff, 0xf0,
|
||||||
0x0, 0x3f, 0x80, 0x0,
|
0x0, 0x3f, 0x80, 0x0,
|
||||||
|
|
||||||
/* U+F072 "" */
|
|
||||||
0x1, 0xc0, 0x0, 0x7, 0xc0, 0x0, 0x7, 0x80,
|
|
||||||
0x0, 0xf, 0x80, 0x0, 0x1f, 0x0, 0x0, 0x1f,
|
|
||||||
0x0, 0x38, 0x3e, 0x0, 0x78, 0x7e, 0x0, 0x7f,
|
|
||||||
0xff, 0xe0, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf3,
|
|
||||||
0xff, 0xff, 0xe7, 0xff, 0xff, 0xdf, 0xff, 0xfc,
|
|
||||||
0x3c, 0x3f, 0x0, 0x70, 0x7c, 0x0, 0x1, 0xf0,
|
|
||||||
0x0, 0x3, 0xe0, 0x0, 0x7, 0x80, 0x0, 0xf,
|
|
||||||
0x0, 0x0, 0x1c, 0x0, 0x0,
|
|
||||||
|
|
||||||
/* U+F095 "" */
|
/* U+F095 "" */
|
||||||
0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7, 0xf0,
|
0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7, 0xf0,
|
||||||
0x0, 0x7f, 0x0, 0x7, 0xf0, 0x0, 0xff, 0x0,
|
0x0, 0x7f, 0x0, 0x7, 0xf0, 0x0, 0xff, 0x0,
|
||||||
|
@ -1230,32 +1220,31 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||||
{.bitmap_index = 3027, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1},
|
{.bitmap_index = 3027, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1},
|
||||||
{.bitmap_index = 3055, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 3055, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3},
|
||||||
{.bitmap_index = 3103, .adv_w = 360, .box_w = 23, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
|
{.bitmap_index = 3103, .adv_w = 360, .box_w = 23, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
|
||||||
{.bitmap_index = 3147, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 3147, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
||||||
{.bitmap_index = 3208, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 3200, .adv_w = 120, .box_w = 8, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 3261, .adv_w = 120, .box_w = 8, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 3219, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3},
|
||||||
{.bitmap_index = 3280, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 3269, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 3330, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 3305, .adv_w = 320, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 3366, .adv_w = 320, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 3353, .adv_w = 320, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
|
||||||
{.bitmap_index = 3414, .adv_w = 320, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
|
{.bitmap_index = 3393, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
|
||||||
{.bitmap_index = 3454, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
|
{.bitmap_index = 3436, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
||||||
{.bitmap_index = 3497, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
{.bitmap_index = 3474, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
||||||
{.bitmap_index = 3535, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
{.bitmap_index = 3512, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
||||||
{.bitmap_index = 3573, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
{.bitmap_index = 3550, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
||||||
{.bitmap_index = 3611, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
{.bitmap_index = 3588, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
||||||
{.bitmap_index = 3649, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1},
|
{.bitmap_index = 3626, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 3687, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 3662, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3},
|
||||||
{.bitmap_index = 3723, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3},
|
{.bitmap_index = 3700, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
||||||
{.bitmap_index = 3761, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 3729, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2},
|
||||||
{.bitmap_index = 3790, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2},
|
{.bitmap_index = 3767, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
||||||
{.bitmap_index = 3828, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 3833, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
|
||||||
{.bitmap_index = 3894, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
|
{.bitmap_index = 3882, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 3943, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 3932, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 3993, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 3992, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
||||||
{.bitmap_index = 4053, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 4045, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
||||||
{.bitmap_index = 4106, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
|
{.bitmap_index = 4106, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 4167, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 4161, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
||||||
{.bitmap_index = 4222, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
|
{.bitmap_index = 4214, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0}
|
||||||
{.bitmap_index = 4275, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*---------------------
|
/*---------------------
|
||||||
|
@ -1264,11 +1253,10 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||||
|
|
||||||
static const uint16_t unicode_list_2[] = {
|
static const uint16_t unicode_list_2[] = {
|
||||||
0x0, 0x14, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39,
|
0x0, 0x14, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39,
|
||||||
0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x6d, 0x71,
|
0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x6d, 0x94,
|
||||||
0x94, 0x128, 0x184, 0x1e5, 0x1fb, 0x200, 0x21d, 0x23f,
|
0x128, 0x184, 0x1e5, 0x1fb, 0x200, 0x21d, 0x23f, 0x240,
|
||||||
0x240, 0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2f1,
|
0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2f1, 0x3dc,
|
||||||
0x3dc, 0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f,
|
0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f, 0x6a8
|
||||||
0x6a8
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*Collect the unicode lists and glyph_id offsets*/
|
/*Collect the unicode lists and glyph_id offsets*/
|
||||||
|
@ -1284,7 +1272,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.range_start = 61441, .range_length = 1705, .glyph_id_start = 160,
|
.range_start = 61441, .range_length = 1705, .glyph_id_start = 160,
|
||||||
.unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 41, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
.unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,7 @@
|
||||||
#include "displayapp/screens/Symbols.h"
|
#include "displayapp/screens/Symbols.h"
|
||||||
using namespace Pinetime::Applications::Screens;
|
using namespace Pinetime::Applications::Screens;
|
||||||
|
|
||||||
const char* BleIcon::GetIcon(bool isRadioEnabled, bool isConnected) {
|
const char* BleIcon::GetIcon(bool isConnected) {
|
||||||
if(!isRadioEnabled) {
|
|
||||||
return Symbols::airplane;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isConnected) {
|
if (isConnected) {
|
||||||
return Symbols::bluetooth;
|
return Symbols::bluetooth;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ namespace Pinetime {
|
||||||
namespace Screens {
|
namespace Screens {
|
||||||
class BleIcon {
|
class BleIcon {
|
||||||
public:
|
public:
|
||||||
static const char* GetIcon(bool isRadioEnabled, bool isConnected);
|
static const char* GetIcon(bool isConnected);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace Pinetime {
|
||||||
void OnObjectEvent(lv_obj_t* obj, lv_event_t event);
|
void OnObjectEvent(lv_obj_t* obj, lv_event_t event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool OnTouchEvent(TouchEvents event);
|
bool OnTouchEvent(TouchEvents event) override;
|
||||||
|
|
||||||
void UpdateLength();
|
void UpdateLength();
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@ namespace Pinetime {
|
||||||
static constexpr const char* chartLine = "\xEF\x88\x81";
|
static constexpr const char* chartLine = "\xEF\x88\x81";
|
||||||
static constexpr const char* eye = "\xEF\x81\xAE";
|
static constexpr const char* eye = "\xEF\x81\xAE";
|
||||||
static constexpr const char* home = "\xEF\x80\x95";
|
static constexpr const char* home = "\xEF\x80\x95";
|
||||||
static constexpr const char* airplane = "\xEF\x81\xB2";
|
|
||||||
|
|
||||||
// lv_font_sys_48.c
|
// lv_font_sys_48.c
|
||||||
static constexpr const char* settings = "\xEE\xA4\x82"; // e902
|
static constexpr const char* settings = "\xEE\xA4\x82"; // e902
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "displayapp/screens/Timer.h"
|
#include "displayapp/screens/Timer.h"
|
||||||
|
|
||||||
#include "displayapp/screens/Screen.h"
|
#include "displayapp/screens/Screen.h"
|
||||||
#include "displayapp/screens/Symbols.h"
|
#include "displayapp/screens/Symbols.h"
|
||||||
#include <lvgl/lvgl.h>
|
#include <lvgl/lvgl.h>
|
||||||
|
@ -7,11 +6,11 @@
|
||||||
using namespace Pinetime::Applications::Screens;
|
using namespace Pinetime::Applications::Screens;
|
||||||
|
|
||||||
static void btnEventHandler(lv_obj_t* obj, lv_event_t event) {
|
static void btnEventHandler(lv_obj_t* obj, lv_event_t event) {
|
||||||
Timer* screen = static_cast<Timer*>(obj->user_data);
|
auto* screen = static_cast<Timer*>(obj->user_data);
|
||||||
screen->OnButtonEvent(obj, event);
|
screen->OnButtonEvent(obj, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timer::createButtons() {
|
void Timer::CreateButtons() {
|
||||||
btnMinutesUp = lv_btn_create(lv_scr_act(), nullptr);
|
btnMinutesUp = lv_btn_create(lv_scr_act(), nullptr);
|
||||||
btnMinutesUp->user_data = this;
|
btnMinutesUp->user_data = this;
|
||||||
lv_obj_set_event_cb(btnMinutesUp, btnEventHandler);
|
lv_obj_set_event_cb(btnMinutesUp, btnEventHandler);
|
||||||
|
@ -51,6 +50,12 @@ void Timer::createButtons() {
|
||||||
|
|
||||||
Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController)
|
Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController)
|
||||||
: Screen(app), running {true}, timerController {timerController} {
|
: Screen(app), running {true}, timerController {timerController} {
|
||||||
|
backgroundLabel = lv_label_create(lv_scr_act(), nullptr);
|
||||||
|
lv_obj_set_click(backgroundLabel, true);
|
||||||
|
lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP);
|
||||||
|
lv_obj_set_size(backgroundLabel, 240, 240);
|
||||||
|
lv_obj_set_pos(backgroundLabel, 0, 0);
|
||||||
|
lv_label_set_text(backgroundLabel, "");
|
||||||
|
|
||||||
time = lv_label_create(lv_scr_act(), nullptr);
|
time = lv_label_create(lv_scr_act(), nullptr);
|
||||||
lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76);
|
lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76);
|
||||||
|
@ -71,7 +76,7 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController)
|
||||||
lv_label_set_text(txtPlayPause, Symbols::pause);
|
lv_label_set_text(txtPlayPause, Symbols::pause);
|
||||||
} else {
|
} else {
|
||||||
lv_label_set_text(txtPlayPause, Symbols::play);
|
lv_label_set_text(txtPlayPause, Symbols::play);
|
||||||
createButtons();
|
CreateButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this);
|
taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this);
|
||||||
|
@ -98,7 +103,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
|
||||||
minutesToSet = seconds / 60;
|
minutesToSet = seconds / 60;
|
||||||
secondsToSet = seconds % 60;
|
secondsToSet = seconds % 60;
|
||||||
timerController.StopTimer();
|
timerController.StopTimer();
|
||||||
createButtons();
|
CreateButtons();
|
||||||
|
|
||||||
} else if (secondsToSet + minutesToSet > 0) {
|
} else if (secondsToSet + minutesToSet > 0) {
|
||||||
lv_label_set_text(txtPlayPause, Symbols::pause);
|
lv_label_set_text(txtPlayPause, Symbols::pause);
|
||||||
|
@ -152,10 +157,10 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timer::setDone() {
|
void Timer::SetDone() {
|
||||||
lv_label_set_text(time, "00:00");
|
lv_label_set_text(time, "00:00");
|
||||||
lv_label_set_text(txtPlayPause, Symbols::play);
|
lv_label_set_text(txtPlayPause, Symbols::play);
|
||||||
secondsToSet = 0;
|
secondsToSet = 0;
|
||||||
minutesToSet = 0;
|
minutesToSet = 0;
|
||||||
createButtons();
|
CreateButtons();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,32 +8,35 @@
|
||||||
#include "components/timer/TimerController.h"
|
#include "components/timer/TimerController.h"
|
||||||
|
|
||||||
namespace Pinetime::Applications::Screens {
|
namespace Pinetime::Applications::Screens {
|
||||||
|
|
||||||
class Timer : public Screen {
|
class Timer : public Screen {
|
||||||
public:
|
public:
|
||||||
enum class Modes { Normal, Done };
|
enum class Modes { Normal, Done };
|
||||||
|
|
||||||
Timer(DisplayApp* app, Controllers::TimerController& timerController);
|
Timer(DisplayApp* app, Controllers::TimerController& timerController);
|
||||||
|
|
||||||
~Timer() override;
|
~Timer() override;
|
||||||
|
|
||||||
void Refresh() override;
|
void Refresh() override;
|
||||||
|
void SetDone();
|
||||||
void setDone();
|
|
||||||
|
|
||||||
void OnButtonEvent(lv_obj_t* obj, lv_event_t event);
|
void OnButtonEvent(lv_obj_t* obj, lv_event_t event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void CreateButtons();
|
||||||
bool running;
|
bool running;
|
||||||
uint8_t secondsToSet = 0;
|
uint8_t secondsToSet = 0;
|
||||||
uint8_t minutesToSet = 0;
|
uint8_t minutesToSet = 0;
|
||||||
Controllers::TimerController& timerController;
|
Controllers::TimerController& timerController;
|
||||||
|
lv_obj_t* backgroundLabel;
|
||||||
void createButtons();
|
lv_obj_t* time;
|
||||||
|
lv_obj_t* msecTime;
|
||||||
lv_obj_t *time, *msecTime, *btnPlayPause, *txtPlayPause, *btnMinutesUp, *btnMinutesDown, *btnSecondsUp, *btnSecondsDown, *txtMUp,
|
lv_obj_t* btnPlayPause;
|
||||||
*txtMDown, *txtSUp, *txtSDown;
|
lv_obj_t* txtPlayPause;
|
||||||
|
lv_obj_t* btnMinutesUp;
|
||||||
|
lv_obj_t* btnMinutesDown;
|
||||||
|
lv_obj_t* btnSecondsUp;
|
||||||
|
lv_obj_t* btnSecondsDown;
|
||||||
|
lv_obj_t* txtMUp;
|
||||||
|
lv_obj_t* txtMDown;
|
||||||
|
lv_obj_t* txtSUp;
|
||||||
|
lv_obj_t* txtSDown;
|
||||||
lv_task_t* taskRefresh;
|
lv_task_t* taskRefresh;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,7 @@ bool Twos::placeNewTile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Twos::tryMerge(TwosTile grid[][4], int& newRow, int& newCol, int oldRow, int oldCol) {
|
bool Twos::tryMerge(TwosTile grid[][4], int& newRow, int& newCol, int oldRow, int oldCol) {
|
||||||
if ((grid[newRow][newCol].value == grid[oldRow][oldCol].value)) {
|
if (grid[newRow][newCol].value == grid[oldRow][oldCol].value) {
|
||||||
if ((newCol != oldCol) || (newRow != oldRow)) {
|
if ((newCol != oldCol) || (newRow != oldRow)) {
|
||||||
if (!grid[newRow][newCol].merged) {
|
if (!grid[newRow][newCol].merged) {
|
||||||
unsigned int newVal = grid[oldRow][oldCol].value *= 2;
|
unsigned int newVal = grid[oldRow][oldCol].value *= 2;
|
||||||
|
|
|
@ -137,9 +137,9 @@ WatchFaceAnalog::~WatchFaceAnalog() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WatchFaceAnalog::UpdateClock() {
|
void WatchFaceAnalog::UpdateClock() {
|
||||||
hour = dateTimeController.Hours();
|
uint8_t hour = dateTimeController.Hours();
|
||||||
minute = dateTimeController.Minutes();
|
uint8_t minute = dateTimeController.Minutes();
|
||||||
second = dateTimeController.Seconds();
|
uint8_t second = dateTimeController.Seconds();
|
||||||
|
|
||||||
if (sMinute != minute) {
|
if (sMinute != minute) {
|
||||||
auto const angle = minute * 6;
|
auto const angle = minute * 6;
|
||||||
|
@ -214,9 +214,9 @@ void WatchFaceAnalog::Refresh() {
|
||||||
currentDateTime = dateTimeController.CurrentDateTime();
|
currentDateTime = dateTimeController.CurrentDateTime();
|
||||||
|
|
||||||
if (currentDateTime.IsUpdated()) {
|
if (currentDateTime.IsUpdated()) {
|
||||||
month = dateTimeController.Month();
|
Pinetime::Controllers::DateTime::Months month = dateTimeController.Month();
|
||||||
day = dateTimeController.Day();
|
uint8_t day = dateTimeController.Day();
|
||||||
dayOfWeek = dateTimeController.DayOfWeek();
|
Pinetime::Controllers::DateTime::Days dayOfWeek = dateTimeController.DayOfWeek();
|
||||||
|
|
||||||
UpdateClock();
|
UpdateClock();
|
||||||
|
|
||||||
|
|
|
@ -35,13 +35,6 @@ namespace Pinetime {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t sHour, sMinute, sSecond;
|
uint8_t sHour, sMinute, sSecond;
|
||||||
uint8_t hour;
|
|
||||||
uint8_t minute;
|
|
||||||
uint8_t second;
|
|
||||||
|
|
||||||
Pinetime::Controllers::DateTime::Months month;
|
|
||||||
uint8_t day;
|
|
||||||
Pinetime::Controllers::DateTime::Days dayOfWeek;
|
|
||||||
|
|
||||||
Pinetime::Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown;
|
Pinetime::Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown;
|
||||||
Pinetime::Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown;
|
Pinetime::Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown;
|
||||||
|
@ -74,7 +67,7 @@ namespace Pinetime {
|
||||||
lv_obj_t* batteryIcon;
|
lv_obj_t* batteryIcon;
|
||||||
lv_obj_t* notificationIcon;
|
lv_obj_t* notificationIcon;
|
||||||
|
|
||||||
Controllers::DateTime& dateTimeController;
|
const Controllers::DateTime& dateTimeController;
|
||||||
Controllers::Battery& batteryController;
|
Controllers::Battery& batteryController;
|
||||||
Controllers::Ble& bleController;
|
Controllers::Ble& bleController;
|
||||||
Controllers::NotificationManager& notificationManager;
|
Controllers::NotificationManager& notificationManager;
|
||||||
|
|
|
@ -121,7 +121,7 @@ void WatchFaceDigital::Refresh() {
|
||||||
bleState = bleController.IsConnected();
|
bleState = bleController.IsConnected();
|
||||||
bleRadioEnabled = bleController.IsRadioEnabled();
|
bleRadioEnabled = bleController.IsRadioEnabled();
|
||||||
if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) {
|
if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) {
|
||||||
lv_label_set_text(bleIcon, BleIcon::GetIcon(bleRadioEnabled.Get(), bleState.Get()));
|
lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get()));
|
||||||
}
|
}
|
||||||
lv_obj_realign(batteryIcon);
|
lv_obj_realign(batteryIcon);
|
||||||
lv_obj_realign(batteryPlug);
|
lv_obj_realign(batteryPlug);
|
||||||
|
|
|
@ -343,13 +343,11 @@ void WatchFacePineTimeStyle::SetBatteryIcon() {
|
||||||
lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent));
|
lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void WatchFacePineTimeStyle::AlignIcons() {
|
void WatchFacePineTimeStyle::AlignIcons() {
|
||||||
bool isBleIconVisible = IsBleIconVisible(bleRadioEnabled.Get(), bleState.Get());
|
if (notificationState.Get() && bleState.Get()) {
|
||||||
if (notificationState.Get() && isBleIconVisible) {
|
|
||||||
lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 8, 25);
|
lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 8, 25);
|
||||||
lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, -8, 25);
|
lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, -8, 25);
|
||||||
} else if (notificationState.Get() && !isBleIconVisible) {
|
} else if (notificationState.Get() && !bleState.Get()) {
|
||||||
lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25);
|
lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25);
|
||||||
} else {
|
} else {
|
||||||
lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25);
|
lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25);
|
||||||
|
@ -375,7 +373,7 @@ void WatchFacePineTimeStyle::Refresh() {
|
||||||
bleState = bleController.IsConnected();
|
bleState = bleController.IsConnected();
|
||||||
bleRadioEnabled = bleController.IsRadioEnabled();
|
bleRadioEnabled = bleController.IsRadioEnabled();
|
||||||
if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) {
|
if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) {
|
||||||
lv_label_set_text(bleIcon, BleIcon::GetIcon(bleRadioEnabled.Get(), bleState.Get()));
|
lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get()));
|
||||||
AlignIcons();
|
AlignIcons();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "displayapp/screens/settings/SettingAirplaneMode.h"
|
#include "displayapp/screens/settings/SettingBluetooth.h"
|
||||||
#include <lvgl/lvgl.h>
|
#include <lvgl/lvgl.h>
|
||||||
#include "displayapp/DisplayApp.h"
|
#include "displayapp/DisplayApp.h"
|
||||||
#include "displayapp/Messages.h"
|
#include "displayapp/Messages.h"
|
||||||
|
@ -9,18 +9,18 @@
|
||||||
using namespace Pinetime::Applications::Screens;
|
using namespace Pinetime::Applications::Screens;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
static void OnAirplaneModeEnabledEvent(lv_obj_t* obj, lv_event_t event) {
|
static void OnBluetoothDisabledEvent(lv_obj_t* obj, lv_event_t event) {
|
||||||
auto* screen = static_cast<SettingAirplaneMode*>(obj->user_data);
|
auto* screen = static_cast<SettingBluetooth*>(obj->user_data);
|
||||||
screen->OnAirplaneModeEnabled(obj, event);
|
screen->OnBluetoothDisabled(obj, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnAirplaneModeDisabledEvent(lv_obj_t* obj, lv_event_t event) {
|
static void OnBluetoothEnabledEvent(lv_obj_t* obj, lv_event_t event) {
|
||||||
auto* screen = static_cast<SettingAirplaneMode*>(obj->user_data);
|
auto* screen = static_cast<SettingBluetooth*>(obj->user_data);
|
||||||
screen->OnAirplaneModeDisabled(obj, event);
|
screen->OnBluetoothEnabled(obj, event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingAirplaneMode::SettingAirplaneMode(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
|
SettingBluetooth::SettingBluetooth(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
|
||||||
: Screen(app), settingsController {settingsController} {
|
: Screen(app), settingsController {settingsController} {
|
||||||
|
|
||||||
lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr);
|
lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr);
|
||||||
|
@ -36,38 +36,38 @@ SettingAirplaneMode::SettingAirplaneMode(Pinetime::Applications::DisplayApp* app
|
||||||
lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT);
|
lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT);
|
||||||
|
|
||||||
lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr);
|
lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr);
|
||||||
lv_label_set_text_static(title, "Airplane mode");
|
lv_label_set_text_static(title, "Bluetooth");
|
||||||
lv_label_set_align(title, LV_LABEL_ALIGN_CENTER);
|
lv_label_set_align(title, LV_LABEL_ALIGN_CENTER);
|
||||||
lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15);
|
lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15);
|
||||||
|
|
||||||
lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr);
|
lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr);
|
||||||
lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE);
|
lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE);
|
||||||
lv_label_set_text_static(icon, Symbols::airplane);
|
lv_label_set_text_static(icon, Symbols::bluetooth);
|
||||||
lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER);
|
lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER);
|
||||||
lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0);
|
lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0);
|
||||||
|
|
||||||
cbEnabled = lv_checkbox_create(container1, nullptr);
|
cbEnabled = lv_checkbox_create(container1, nullptr);
|
||||||
lv_checkbox_set_text(cbEnabled, " Enable");
|
lv_checkbox_set_text(cbEnabled, " Enabled");
|
||||||
cbEnabled->user_data = this;
|
cbEnabled->user_data = this;
|
||||||
lv_obj_set_event_cb(cbEnabled, OnAirplaneModeEnabledEvent);
|
lv_obj_set_event_cb(cbEnabled, OnBluetoothEnabledEvent);
|
||||||
SetRadioButtonStyle(cbEnabled);
|
SetRadioButtonStyle(cbEnabled);
|
||||||
|
|
||||||
cbDisabled = lv_checkbox_create(container1, nullptr);
|
cbDisabled = lv_checkbox_create(container1, nullptr);
|
||||||
lv_checkbox_set_text(cbDisabled, " Disable");
|
lv_checkbox_set_text(cbDisabled, " Disabled");
|
||||||
cbDisabled->user_data = this;
|
cbDisabled->user_data = this;
|
||||||
lv_obj_set_event_cb(cbDisabled, OnAirplaneModeDisabledEvent);
|
lv_obj_set_event_cb(cbDisabled, OnBluetoothDisabledEvent);
|
||||||
SetRadioButtonStyle(cbDisabled);
|
SetRadioButtonStyle(cbDisabled);
|
||||||
|
|
||||||
if (settingsController.GetBleRadioEnabled()) {
|
if (settingsController.GetBleRadioEnabled()) {
|
||||||
lv_checkbox_set_checked(cbDisabled, true);
|
lv_checkbox_set_checked(cbEnabled, true);
|
||||||
priorMode = true;
|
priorMode = true;
|
||||||
} else {
|
} else {
|
||||||
lv_checkbox_set_checked(cbEnabled, true);
|
lv_checkbox_set_checked(cbDisabled, true);
|
||||||
priorMode = false;
|
priorMode = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingAirplaneMode::~SettingAirplaneMode() {
|
SettingBluetooth::~SettingBluetooth() {
|
||||||
lv_obj_clean(lv_scr_act());
|
lv_obj_clean(lv_scr_act());
|
||||||
// Do not call SaveSettings - see src/components/settings/Settings.h
|
// Do not call SaveSettings - see src/components/settings/Settings.h
|
||||||
if (priorMode != settingsController.GetBleRadioEnabled()) {
|
if (priorMode != settingsController.GetBleRadioEnabled()) {
|
||||||
|
@ -75,18 +75,18 @@ SettingAirplaneMode::~SettingAirplaneMode() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingAirplaneMode::OnAirplaneModeEnabled(lv_obj_t* object, lv_event_t event) {
|
void SettingBluetooth::OnBluetoothDisabled(lv_obj_t* object, lv_event_t event) {
|
||||||
if (event == LV_EVENT_VALUE_CHANGED) {
|
if (event == LV_EVENT_VALUE_CHANGED) {
|
||||||
lv_checkbox_set_checked(cbEnabled, true);
|
lv_checkbox_set_checked(cbEnabled, false);
|
||||||
lv_checkbox_set_checked(cbDisabled, false);
|
lv_checkbox_set_checked(cbDisabled, true);
|
||||||
settingsController.SetBleRadioEnabled(false);
|
settingsController.SetBleRadioEnabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingAirplaneMode::OnAirplaneModeDisabled(lv_obj_t* object, lv_event_t event) {
|
void SettingBluetooth::OnBluetoothEnabled(lv_obj_t* object, lv_event_t event) {
|
||||||
if (event == LV_EVENT_VALUE_CHANGED) {
|
if (event == LV_EVENT_VALUE_CHANGED) {
|
||||||
lv_checkbox_set_checked(cbEnabled, false);
|
lv_checkbox_set_checked(cbEnabled, true);
|
||||||
lv_checkbox_set_checked(cbDisabled, true);
|
lv_checkbox_set_checked(cbDisabled, false);
|
||||||
settingsController.SetBleRadioEnabled(true);
|
settingsController.SetBleRadioEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -12,13 +12,13 @@ namespace Pinetime {
|
||||||
namespace Applications {
|
namespace Applications {
|
||||||
namespace Screens {
|
namespace Screens {
|
||||||
|
|
||||||
class SettingAirplaneMode : public Screen {
|
class SettingBluetooth : public Screen {
|
||||||
public:
|
public:
|
||||||
SettingAirplaneMode(DisplayApp* app, Pinetime::Controllers::Settings& settingsController);
|
SettingBluetooth(DisplayApp* app, Pinetime::Controllers::Settings& settingsController);
|
||||||
~SettingAirplaneMode() override;
|
~SettingBluetooth() override;
|
||||||
|
|
||||||
void OnAirplaneModeEnabled(lv_obj_t* object, lv_event_t event);
|
void OnBluetoothEnabled(lv_obj_t* object, lv_event_t event);
|
||||||
void OnAirplaneModeDisabled(lv_obj_t* object, lv_event_t event);
|
void OnBluetoothDisabled(lv_obj_t* object, lv_event_t event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Controllers::Settings& settingsController;
|
Controllers::Settings& settingsController;
|
|
@ -64,7 +64,7 @@ std::unique_ptr<Screen> Settings::CreateScreen3() {
|
||||||
{Symbols::clock, "Chimes", Apps::SettingChimes},
|
{Symbols::clock, "Chimes", Apps::SettingChimes},
|
||||||
{Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold},
|
{Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold},
|
||||||
{Symbols::check, "Firmware", Apps::FirmwareValidation},
|
{Symbols::check, "Firmware", Apps::FirmwareValidation},
|
||||||
{Symbols::airplane, "Airplane mode", Apps::SettingAirplaneMode}
|
{Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}
|
||||||
}};
|
}};
|
||||||
|
|
||||||
return std::make_unique<Screens::List>(2, 4, app, settingsController, applications);
|
return std::make_unique<Screens::List>(2, 4, app, settingsController, applications);
|
||||||
|
|
|
@ -38,7 +38,7 @@ nimble_port_freertos_init(TaskFunction_t host_task_fn)
|
||||||
* since it has compatible prototype.
|
* since it has compatible prototype.
|
||||||
*/
|
*/
|
||||||
xTaskCreate(nimble_port_ll_task_func, "ll", configMINIMAL_STACK_SIZE + 200,
|
xTaskCreate(nimble_port_ll_task_func, "ll", configMINIMAL_STACK_SIZE + 200,
|
||||||
NULL, configMAX_PRIORITIES - 1, &ll_task_h);
|
NULL, 2, &ll_task_h);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -47,5 +47,5 @@ nimble_port_freertos_init(TaskFunction_t host_task_fn)
|
||||||
* default queue it is just easier to make separate task which does this.
|
* default queue it is just easier to make separate task which does this.
|
||||||
*/
|
*/
|
||||||
xTaskCreate(host_task_fn, "ble", configMINIMAL_STACK_SIZE + 600,
|
xTaskCreate(host_task_fn, "ble", configMINIMAL_STACK_SIZE + 600,
|
||||||
NULL, tskIDLE_PRIORITY + 1, &host_task_h);
|
NULL, 1, &host_task_h);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "BootloaderVersion.h"
|
#include "BootloaderVersion.h"
|
||||||
#include "components/battery/BatteryController.h"
|
#include "components/battery/BatteryController.h"
|
||||||
#include "components/ble/BleController.h"
|
#include "components/ble/BleController.h"
|
||||||
|
#include "displayapp/TouchEvents.h"
|
||||||
#include "drivers/Cst816s.h"
|
#include "drivers/Cst816s.h"
|
||||||
#include "drivers/St7789.h"
|
#include "drivers/St7789.h"
|
||||||
#include "drivers/InternalFlash.h"
|
#include "drivers/InternalFlash.h"
|
||||||
|
@ -107,7 +108,7 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi,
|
||||||
|
|
||||||
void SystemTask::Start() {
|
void SystemTask::Start() {
|
||||||
systemTasksMsgQueue = xQueueCreate(10, 1);
|
systemTasksMsgQueue = xQueueCreate(10, 1);
|
||||||
if (pdPASS != xTaskCreate(SystemTask::Process, "MAIN", 350, this, 0, &taskHandle)) {
|
if (pdPASS != xTaskCreate(SystemTask::Process, "MAIN", 350, this, 1, &taskHandle)) {
|
||||||
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
|
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -265,10 +266,10 @@ void SystemTask::Work() {
|
||||||
case Messages::TouchWakeUp: {
|
case Messages::TouchWakeUp: {
|
||||||
if (touchHandler.GetNewTouchInfo()) {
|
if (touchHandler.GetNewTouchInfo()) {
|
||||||
auto gesture = touchHandler.GestureGet();
|
auto gesture = touchHandler.GestureGet();
|
||||||
if (gesture != Pinetime::Drivers::Cst816S::Gestures::None and
|
if (gesture != Pinetime::Applications::TouchEvents::None and
|
||||||
((gesture == Pinetime::Drivers::Cst816S::Gestures::DoubleTap and
|
((gesture == Pinetime::Applications::TouchEvents::DoubleTap and
|
||||||
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or
|
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or
|
||||||
(gesture == Pinetime::Drivers::Cst816S::Gestures::SingleTap and
|
(gesture == Pinetime::Applications::TouchEvents::Tap and
|
||||||
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) {
|
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) {
|
||||||
GoToRunning();
|
GoToRunning();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,36 @@
|
||||||
#include "touchhandler/TouchHandler.h"
|
#include "touchhandler/TouchHandler.h"
|
||||||
|
#ifdef PINETIME_IS_RECOVERY
|
||||||
|
#include "displayapp/DummyLittleVgl.h"
|
||||||
|
#else
|
||||||
|
#include "displayapp/LittleVgl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace Pinetime::Controllers;
|
using namespace Pinetime::Controllers;
|
||||||
|
using namespace Pinetime::Applications;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
TouchEvents ConvertGesture(Pinetime::Drivers::Cst816S::Gestures gesture) {
|
||||||
|
switch (gesture) {
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::SingleTap:
|
||||||
|
return TouchEvents::Tap;
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::LongPress:
|
||||||
|
return TouchEvents::LongTap;
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::DoubleTap:
|
||||||
|
return TouchEvents::DoubleTap;
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::SlideRight:
|
||||||
|
return TouchEvents::SwipeRight;
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::SlideLeft:
|
||||||
|
return TouchEvents::SwipeLeft;
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::SlideDown:
|
||||||
|
return TouchEvents::SwipeDown;
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::SlideUp:
|
||||||
|
return TouchEvents::SwipeUp;
|
||||||
|
case Pinetime::Drivers::Cst816S::Gestures::None:
|
||||||
|
default:
|
||||||
|
return TouchEvents::None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& lvgl) : touchPanel {touchPanel}, lvgl {lvgl} {
|
TouchHandler::TouchHandler(Drivers::Cst816S& touchPanel, Components::LittleVgl& lvgl) : touchPanel {touchPanel}, lvgl {lvgl} {
|
||||||
}
|
}
|
||||||
|
@ -12,9 +42,9 @@ void TouchHandler::CancelTap() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Pinetime::Drivers::Cst816S::Gestures TouchHandler::GestureGet() {
|
Pinetime::Applications::TouchEvents TouchHandler::GestureGet() {
|
||||||
auto returnGesture = gesture;
|
auto returnGesture = gesture;
|
||||||
gesture = Drivers::Cst816S::Gestures::None;
|
gesture = Pinetime::Applications::TouchEvents::None;
|
||||||
return returnGesture;
|
return returnGesture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,11 +63,11 @@ bool TouchHandler::GetNewTouchInfo() {
|
||||||
info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight ||
|
info.gesture == Pinetime::Drivers::Cst816S::Gestures::SlideRight ||
|
||||||
info.gesture == Pinetime::Drivers::Cst816S::Gestures::LongPress) {
|
info.gesture == Pinetime::Drivers::Cst816S::Gestures::LongPress) {
|
||||||
if (info.touching) {
|
if (info.touching) {
|
||||||
gesture = info.gesture;
|
gesture = ConvertGesture(info.gesture);
|
||||||
gestureReleased = false;
|
gestureReleased = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
gesture = info.gesture;
|
gesture = ConvertGesture(info.gesture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "drivers/Cst816s.h"
|
#include "drivers/Cst816s.h"
|
||||||
#include "systemtask/SystemTask.h"
|
#include "displayapp/TouchEvents.h"
|
||||||
|
|
||||||
namespace Pinetime {
|
namespace Pinetime {
|
||||||
namespace Components {
|
namespace Components {
|
||||||
|
@ -26,13 +26,13 @@ namespace Pinetime {
|
||||||
uint8_t GetY() const {
|
uint8_t GetY() const {
|
||||||
return info.y;
|
return info.y;
|
||||||
}
|
}
|
||||||
Drivers::Cst816S::Gestures GestureGet();
|
Pinetime::Applications::TouchEvents GestureGet();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Pinetime::Drivers::Cst816S::TouchInfos info;
|
Pinetime::Drivers::Cst816S::TouchInfos info;
|
||||||
Pinetime::Drivers::Cst816S& touchPanel;
|
Pinetime::Drivers::Cst816S& touchPanel;
|
||||||
Pinetime::Components::LittleVgl& lvgl;
|
Pinetime::Components::LittleVgl& lvgl;
|
||||||
Pinetime::Drivers::Cst816S::Gestures gesture;
|
Pinetime::Applications::TouchEvents gesture;
|
||||||
bool isCancelled = false;
|
bool isCancelled = false;
|
||||||
bool gestureReleased = true;
|
bool gestureReleased = true;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue