Merge branch 'develop' of https://github.com/JF002/Pinetime into music
This commit is contained in:
46
src/SystemTask/SystemMonitor.h
Normal file
46
src/SystemTask/SystemMonitor.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
#include <FreeRTOS.h>
|
||||
#include <task.h>
|
||||
#include <nrf_log.h>
|
||||
|
||||
|
||||
namespace Pinetime {
|
||||
namespace System {
|
||||
struct DummyMonitor {};
|
||||
struct FreeRtosMonitor {};
|
||||
|
||||
template<class T>
|
||||
class SystemMonitor {
|
||||
public:
|
||||
SystemMonitor() = delete;
|
||||
};
|
||||
|
||||
template<>
|
||||
class SystemMonitor<DummyMonitor> {
|
||||
public:
|
||||
void Process() const {}
|
||||
};
|
||||
|
||||
template<>
|
||||
class SystemMonitor<FreeRtosMonitor> {
|
||||
public:
|
||||
void Process() const {
|
||||
if(xTaskGetTickCount() - lastTick > 10000) {
|
||||
NRF_LOG_INFO("---------------------------------------\nFree heap : %d", xPortGetFreeHeapSize());
|
||||
auto nb = uxTaskGetSystemState(tasksStatus, 10, NULL);
|
||||
for (int i = 0; i < nb; i++) {
|
||||
NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark);
|
||||
if (tasksStatus[i].usStackHighWaterMark < 20)
|
||||
NRF_LOG_INFO("WARNING!!! Task %s task is nearly full, only %dB available", tasksStatus[i].pcTaskName,
|
||||
tasksStatus[i].usStackHighWaterMark * 4);
|
||||
}
|
||||
lastTick = xTaskGetTickCount();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
mutable TickType_t lastTick = 0;
|
||||
mutable TaskStatus_t tasksStatus[10];
|
||||
};
|
||||
}
|
||||
}
|
@@ -120,15 +120,15 @@ void SystemTask::Work() {
|
||||
isSleeping = true;
|
||||
break;
|
||||
case Messages::OnNewTime:
|
||||
xTimerReset(idleTimer, 0);
|
||||
ReloadIdleTimer();
|
||||
displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::UpdateDateTime);
|
||||
break;
|
||||
case Messages::OnNewNotification:
|
||||
xTimerReset(idleTimer, 0);
|
||||
if(isSleeping) GoToRunning();
|
||||
displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::NewNotification);
|
||||
break;
|
||||
case Messages::BleConnected:
|
||||
xTimerReset(idleTimer, 0);
|
||||
ReloadIdleTimer();
|
||||
isBleDiscoveryTimerRunning = true;
|
||||
bleDiscoveryTimer = 5;
|
||||
break;
|
||||
@@ -145,10 +145,10 @@ void SystemTask::Work() {
|
||||
NVIC_SystemReset();
|
||||
break;
|
||||
case Messages::OnTouchEvent:
|
||||
xTimerReset(idleTimer, 0);
|
||||
ReloadIdleTimer();
|
||||
break;
|
||||
case Messages::OnButtonEvent:
|
||||
xTimerReset(idleTimer, 0);
|
||||
ReloadIdleTimer();
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
@@ -169,6 +169,8 @@ void SystemTask::Work() {
|
||||
dateTimeController.UpdateTime(systick_counter);
|
||||
batteryController.Update();
|
||||
|
||||
monitor.Process();
|
||||
|
||||
if(!nrf_gpio_pin_read(pinButton))
|
||||
watchdog.Kick();
|
||||
}
|
||||
@@ -215,3 +217,8 @@ void SystemTask::OnIdle() {
|
||||
NRF_LOG_INFO("Idle timeout -> Going to sleep")
|
||||
PushMessage(Messages::GoToSleep);
|
||||
}
|
||||
|
||||
void SystemTask::ReloadIdleTimer() const {
|
||||
if(isSleeping) return;
|
||||
xTimerReset(idleTimer, 0);
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@
|
||||
#include <drivers/Watchdog.h>
|
||||
#include <Components/Ble/NimbleController.h>
|
||||
#include <drivers/SpiNorFlash.h>
|
||||
#include "SystemMonitor.h"
|
||||
|
||||
namespace Pinetime {
|
||||
namespace System {
|
||||
@@ -67,6 +68,7 @@ namespace Pinetime {
|
||||
|
||||
static void Process(void* instance);
|
||||
void Work();
|
||||
void ReloadIdleTimer() const;
|
||||
bool isBleDiscoveryTimerRunning = false;
|
||||
uint8_t bleDiscoveryTimer = 0;
|
||||
static constexpr uint32_t idleTime = 15000;
|
||||
@@ -74,6 +76,12 @@ namespace Pinetime {
|
||||
bool doNotGoToSleep = false;
|
||||
|
||||
void GoToRunning();
|
||||
|
||||
#if configUSE_TRACE_FACILITY == 1
|
||||
SystemMonitor<FreeRtosMonitor> monitor;
|
||||
#else
|
||||
SystemMonitor<DummyMonitor> monitor;
|
||||
#endif
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user