|
|
@ -115,8 +115,9 @@ 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, 0, &taskHandle)) {
|
|
|
|
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
|
|
|
|
APP_ERROR_HANDLER(NRF_ERROR_NO_MEM);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SystemTask::Process(void* instance) {
|
|
|
|
void SystemTask::Process(void* instance) {
|
|
|
@ -187,20 +188,22 @@ void SystemTask::Work() {
|
|
|
|
pinConfig.skip_gpio_setup = false;
|
|
|
|
pinConfig.skip_gpio_setup = false;
|
|
|
|
pinConfig.hi_accuracy = false;
|
|
|
|
pinConfig.hi_accuracy = false;
|
|
|
|
pinConfig.is_watcher = false;
|
|
|
|
pinConfig.is_watcher = false;
|
|
|
|
pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_TOGGLE;
|
|
|
|
pinConfig.sense = static_cast<nrf_gpiote_polarity_t>(NRF_GPIOTE_POLARITY_TOGGLE);
|
|
|
|
pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown;
|
|
|
|
pinConfig.pull = static_cast<nrf_gpio_pin_pull_t>(GPIO_PIN_CNF_PULL_Pulldown);
|
|
|
|
|
|
|
|
|
|
|
|
nrfx_gpiote_in_init(PinMap::Button, &pinConfig, nrfx_gpiote_evt_handler);
|
|
|
|
nrfx_gpiote_in_init(PinMap::Button, &pinConfig, nrfx_gpiote_evt_handler);
|
|
|
|
nrfx_gpiote_in_event_enable(PinMap::Button, true);
|
|
|
|
nrfx_gpiote_in_event_enable(PinMap::Button, true);
|
|
|
|
|
|
|
|
|
|
|
|
// Touchscreen
|
|
|
|
// Touchscreen
|
|
|
|
nrf_gpio_cfg_sense_input(PinMap::Cst816sIrq, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low);
|
|
|
|
nrf_gpio_cfg_sense_input(PinMap::Cst816sIrq,
|
|
|
|
|
|
|
|
static_cast<nrf_gpio_pin_pull_t>(GPIO_PIN_CNF_PULL_Pullup),
|
|
|
|
|
|
|
|
static_cast<nrf_gpio_pin_sense_t> GPIO_PIN_CNF_SENSE_Low);
|
|
|
|
|
|
|
|
|
|
|
|
pinConfig.skip_gpio_setup = true;
|
|
|
|
pinConfig.skip_gpio_setup = true;
|
|
|
|
pinConfig.hi_accuracy = false;
|
|
|
|
pinConfig.hi_accuracy = false;
|
|
|
|
pinConfig.is_watcher = false;
|
|
|
|
pinConfig.is_watcher = false;
|
|
|
|
pinConfig.sense = (nrf_gpiote_polarity_t) NRF_GPIOTE_POLARITY_HITOLO;
|
|
|
|
pinConfig.sense = static_cast<nrf_gpiote_polarity_t>(NRF_GPIOTE_POLARITY_HITOLO);
|
|
|
|
pinConfig.pull = (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup;
|
|
|
|
pinConfig.pull = static_cast<nrf_gpio_pin_pull_t> GPIO_PIN_CNF_PULL_Pullup;
|
|
|
|
|
|
|
|
|
|
|
|
nrfx_gpiote_in_init(PinMap::Cst816sIrq, &pinConfig, nrfx_gpiote_evt_handler);
|
|
|
|
nrfx_gpiote_in_init(PinMap::Cst816sIrq, &pinConfig, nrfx_gpiote_evt_handler);
|
|
|
|
|
|
|
|
|
|
|
@ -328,8 +331,9 @@ void SystemTask::Work() {
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Messages::BleFirmwareUpdateStarted:
|
|
|
|
case Messages::BleFirmwareUpdateStarted:
|
|
|
|
doNotGoToSleep = true;
|
|
|
|
doNotGoToSleep = true;
|
|
|
|
if (isSleeping && !isWakingUp)
|
|
|
|
if (isSleeping && !isWakingUp) {
|
|
|
|
GoToRunning();
|
|
|
|
GoToRunning();
|
|
|
|
|
|
|
|
}
|
|
|
|
displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted);
|
|
|
|
displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case Messages::BleFirmwareUpdateFinished:
|
|
|
|
case Messages::BleFirmwareUpdateFinished:
|
|
|
@ -429,18 +433,20 @@ void SystemTask::Work() {
|
|
|
|
uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG);
|
|
|
|
uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG);
|
|
|
|
dateTimeController.UpdateTime(systick_counter);
|
|
|
|
dateTimeController.UpdateTime(systick_counter);
|
|
|
|
NoInit_BackUpTime = dateTimeController.CurrentDateTime();
|
|
|
|
NoInit_BackUpTime = dateTimeController.CurrentDateTime();
|
|
|
|
if (!nrf_gpio_pin_read(PinMap::Button))
|
|
|
|
if (!nrf_gpio_pin_read(PinMap::Button)) {
|
|
|
|
watchdog.Kick();
|
|
|
|
watchdog.Kick();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Clear diagnostic suppression
|
|
|
|
|
|
|
|
#pragma clang diagnostic pop
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void SystemTask::UpdateMotion() {
|
|
|
|
|
|
|
|
if (isGoingToSleep or isWakingUp)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isSleeping && !settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist))
|
|
|
|
void SystemTask::UpdateMotion() {
|
|
|
|
|
|
|
|
if (isGoingToSleep or isWakingUp) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isSleeping && !settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist)) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (stepCounterMustBeReset) {
|
|
|
|
if (stepCounterMustBeReset) {
|
|
|
|
motionSensor.ResetStepCounter();
|
|
|
|
motionSensor.ResetStepCounter();
|
|
|
@ -489,15 +495,17 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SystemTask::GoToRunning() {
|
|
|
|
void SystemTask::GoToRunning() {
|
|
|
|
if (isGoingToSleep or (not isSleeping) or isWakingUp)
|
|
|
|
if (isGoingToSleep or (not isSleeping) or isWakingUp) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
isWakingUp = true;
|
|
|
|
isWakingUp = true;
|
|
|
|
PushMessage(Messages::GoToRunning);
|
|
|
|
PushMessage(Messages::GoToRunning);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SystemTask::OnTouchEvent() {
|
|
|
|
void SystemTask::OnTouchEvent() {
|
|
|
|
if (isGoingToSleep)
|
|
|
|
if (isGoingToSleep) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (!isSleeping) {
|
|
|
|
if (!isSleeping) {
|
|
|
|
PushMessage(Messages::OnTouchEvent);
|
|
|
|
PushMessage(Messages::OnTouchEvent);
|
|
|
|
} else if (!isWakingUp) {
|
|
|
|
} else if (!isWakingUp) {
|
|
|
@ -527,8 +535,9 @@ void SystemTask::PushMessage(System::Messages msg) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SystemTask::OnDim() {
|
|
|
|
void SystemTask::OnDim() {
|
|
|
|
if (doNotGoToSleep)
|
|
|
|
if (doNotGoToSleep) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
NRF_LOG_INFO("Dim timeout -> Dim screen")
|
|
|
|
NRF_LOG_INFO("Dim timeout -> Dim screen")
|
|
|
|
displayApp.PushMessage(Pinetime::Applications::Display::Messages::DimScreen);
|
|
|
|
displayApp.PushMessage(Pinetime::Applications::Display::Messages::DimScreen);
|
|
|
|
xTimerStart(idleTimer, 0);
|
|
|
|
xTimerStart(idleTimer, 0);
|
|
|
@ -536,15 +545,17 @@ void SystemTask::OnDim() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SystemTask::OnIdle() {
|
|
|
|
void SystemTask::OnIdle() {
|
|
|
|
if (doNotGoToSleep)
|
|
|
|
if (doNotGoToSleep) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
NRF_LOG_INFO("Idle timeout -> Going to sleep")
|
|
|
|
NRF_LOG_INFO("Idle timeout -> Going to sleep")
|
|
|
|
PushMessage(Messages::GoToSleep);
|
|
|
|
PushMessage(Messages::GoToSleep);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SystemTask::ReloadIdleTimer() {
|
|
|
|
void SystemTask::ReloadIdleTimer() {
|
|
|
|
if (isSleeping || isGoingToSleep)
|
|
|
|
if (isSleeping || isGoingToSleep) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (isDimmed) {
|
|
|
|
if (isDimmed) {
|
|
|
|
displayApp.PushMessage(Pinetime::Applications::Display::Messages::RestoreBrightness);
|
|
|
|
displayApp.PushMessage(Pinetime::Applications::Display::Messages::RestoreBrightness);
|
|
|
|
isDimmed = false;
|
|
|
|
isDimmed = false;
|
|
|
|