mirror of
https://github.com/InfiniTimeOrg/InfiniTime.git
synced 2024-10-22 15:11:51 +02:00
Merge 5b925375e7
into 8598142c27
This commit is contained in:
commit
1754c8089f
|
@ -314,6 +314,10 @@ void DisplayApp::Refresh() {
|
||||||
} else {
|
} else {
|
||||||
lcd.Sleep();
|
lcd.Sleep();
|
||||||
}
|
}
|
||||||
|
// Clear any ongoing touch pressed events
|
||||||
|
// Without this LVGL gets stuck in the pressed state and will keep refreshing the
|
||||||
|
// display activity timer causing the screen to never sleep after timeout
|
||||||
|
lvgl.ClearTouchState();
|
||||||
PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping);
|
PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping);
|
||||||
state = States::Idle;
|
state = States::Idle;
|
||||||
break;
|
break;
|
||||||
|
@ -459,7 +463,7 @@ void DisplayApp::Refresh() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (touchHandler.IsTouching()) {
|
if (state == States::Running && touchHandler.IsTouching()) {
|
||||||
currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY());
|
currentScreen->OnTouchEvent(touchHandler.GetX(), touchHandler.GetY());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -248,6 +248,8 @@ void LittleVgl::SetNewTouchPoint(int16_t x, int16_t y, bool contact) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cancel an ongoing tap
|
||||||
|
// Signifies that LVGL should not handle the current tap
|
||||||
void LittleVgl::CancelTap() {
|
void LittleVgl::CancelTap() {
|
||||||
if (tapped) {
|
if (tapped) {
|
||||||
isCancelled = true;
|
isCancelled = true;
|
||||||
|
@ -255,6 +257,13 @@ void LittleVgl::CancelTap() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear the current tapped state
|
||||||
|
// Signifies that touch input processing is suspended
|
||||||
|
void LittleVgl::ClearTouchState() {
|
||||||
|
touchPoint = {-1, -1};
|
||||||
|
tapped = false;
|
||||||
|
}
|
||||||
|
|
||||||
bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) {
|
bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) {
|
||||||
ptr->point.x = touchPoint.x;
|
ptr->point.x = touchPoint.x;
|
||||||
ptr->point.y = touchPoint.y;
|
ptr->point.y = touchPoint.y;
|
||||||
|
|
|
@ -26,6 +26,7 @@ namespace Pinetime {
|
||||||
void SetFullRefresh(FullRefreshDirections direction);
|
void SetFullRefresh(FullRefreshDirections direction);
|
||||||
void SetNewTouchPoint(int16_t x, int16_t y, bool contact);
|
void SetNewTouchPoint(int16_t x, int16_t y, bool contact);
|
||||||
void CancelTap();
|
void CancelTap();
|
||||||
|
void ClearTouchState();
|
||||||
|
|
||||||
bool GetFullRefresh() {
|
bool GetFullRefresh() {
|
||||||
bool returnValue = fullRefresh;
|
bool returnValue = fullRefresh;
|
||||||
|
|
|
@ -168,7 +168,7 @@ std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> NoI
|
||||||
|
|
||||||
void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
|
void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
|
||||||
if (pin == Pinetime::PinMap::Cst816sIrq) {
|
if (pin == Pinetime::PinMap::Cst816sIrq) {
|
||||||
systemTask.OnTouchEvent();
|
systemTask.PushMessage(Pinetime::System::Messages::OnTouchEvent);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ namespace Pinetime {
|
||||||
enum class Messages : uint8_t {
|
enum class Messages : uint8_t {
|
||||||
GoToSleep,
|
GoToSleep,
|
||||||
GoToRunning,
|
GoToRunning,
|
||||||
TouchWakeUp,
|
|
||||||
OnNewTime,
|
OnNewTime,
|
||||||
OnNewNotification,
|
OnNewNotification,
|
||||||
OnNewCall,
|
OnNewCall,
|
||||||
|
|
|
@ -198,20 +198,6 @@ void SystemTask::Work() {
|
||||||
case Messages::GoToRunning:
|
case Messages::GoToRunning:
|
||||||
GoToRunning();
|
GoToRunning();
|
||||||
break;
|
break;
|
||||||
case Messages::TouchWakeUp: {
|
|
||||||
if (touchHandler.ProcessTouchInfo(touchPanel.GetTouchInfo())) {
|
|
||||||
auto gesture = touchHandler.GestureGet();
|
|
||||||
if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep &&
|
|
||||||
gesture != Pinetime::Applications::TouchEvents::None &&
|
|
||||||
((gesture == Pinetime::Applications::TouchEvents::DoubleTap &&
|
|
||||||
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) ||
|
|
||||||
(gesture == Pinetime::Applications::TouchEvents::Tap &&
|
|
||||||
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) {
|
|
||||||
GoToRunning();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Messages::GoToSleep:
|
case Messages::GoToSleep:
|
||||||
GoToSleep();
|
GoToSleep();
|
||||||
break;
|
break;
|
||||||
|
@ -260,8 +246,23 @@ void SystemTask::Work() {
|
||||||
// TODO add intent of fs access icon or something
|
// TODO add intent of fs access icon or something
|
||||||
break;
|
break;
|
||||||
case Messages::OnTouchEvent:
|
case Messages::OnTouchEvent:
|
||||||
if (touchHandler.ProcessTouchInfo(touchPanel.GetTouchInfo())) {
|
// Finish immediately if no new events
|
||||||
|
if (!touchHandler.ProcessTouchInfo(touchPanel.GetTouchInfo())) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (state == SystemTaskState::Running) {
|
||||||
displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent);
|
displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent);
|
||||||
|
} else {
|
||||||
|
// If asleep, check for touch panel wake triggers
|
||||||
|
auto gesture = touchHandler.GestureGet();
|
||||||
|
if (settingsController.GetNotificationStatus() != Controllers::Settings::Notification::Sleep &&
|
||||||
|
gesture != Pinetime::Applications::TouchEvents::None &&
|
||||||
|
((gesture == Pinetime::Applications::TouchEvents::DoubleTap &&
|
||||||
|
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) ||
|
||||||
|
(gesture == Pinetime::Applications::TouchEvents::Tap &&
|
||||||
|
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) {
|
||||||
|
GoToRunning();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Messages::HandleButtonEvent: {
|
case Messages::HandleButtonEvent: {
|
||||||
|
@ -479,17 +480,6 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) {
|
||||||
fastWakeUpDone = false;
|
fastWakeUpDone = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemTask::OnTouchEvent() {
|
|
||||||
if (state == SystemTaskState::Running) {
|
|
||||||
PushMessage(Messages::OnTouchEvent);
|
|
||||||
} else {
|
|
||||||
if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or
|
|
||||||
settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) {
|
|
||||||
PushMessage(Messages::TouchWakeUp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemTask::PushMessage(System::Messages msg) {
|
void SystemTask::PushMessage(System::Messages msg) {
|
||||||
if (in_isr()) {
|
if (in_isr()) {
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
|
|
|
@ -77,8 +77,6 @@ namespace Pinetime {
|
||||||
void Start();
|
void Start();
|
||||||
void PushMessage(Messages msg);
|
void PushMessage(Messages msg);
|
||||||
|
|
||||||
void OnTouchEvent();
|
|
||||||
|
|
||||||
bool IsSleepDisabled() {
|
bool IsSleepDisabled() {
|
||||||
return wakeLocksHeld > 0;
|
return wakeLocksHeld > 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue