0.16.0 TWI problems fix

More memory for freertos heap and timer stack
Fix warning in watchface
Fix number of bytes read by cst816
Debug app to show freertos tasks
Increased the number of bytes of the twi write buffer
This commit is contained in:
Joaquim
2021-04-10 19:09:33 +01:00
parent eb769fb60e
commit 012c246e40
14 changed files with 303 additions and 69 deletions

View File

@@ -49,7 +49,7 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen1() {
{Symbols::map, Apps::Navigation},
{Symbols::shoe, Apps::Motion},
{Symbols::heartBeat, Apps::HeartRate},
{"", Apps::None},
{"Tasks", Apps::Tasks},
}
};

View File

@@ -0,0 +1,77 @@
#include <FreeRTOS.h>
#include <task.h>
#include "Tasks.h"
#include <lvgl/lvgl.h>
#include "../DisplayApp.h"
#include <string>
#include <algorithm>
using namespace Pinetime::Applications::Screens;
static void lv_update_task(struct _lv_task_t *task) {
auto user_data = static_cast<Tasks *>(task->user_data);
user_data->UpdateScreen();
}
Tasks::Tasks(
Pinetime::Applications::DisplayApp *app) :
Screen(app)
{
table = lv_table_create(lv_scr_act(), NULL);
lv_table_set_col_cnt(table, 3);
lv_table_set_row_cnt(table, 8);
//lv_obj_align(table, NULL, LV_ALIGN_CENTER, 0, 0);
lv_obj_set_size(table, 240, 240);
lv_obj_set_pos(table, 0, 0);
/*lv_table_set_cell_type(table, 0, 0, 1);
lv_table_set_cell_type(table, 0, 1, 1);
lv_table_set_cell_type(table, 0, 2, 1);
lv_table_set_cell_type(table, 0, 3, 1);*/
lv_table_set_cell_value(table, 0, 0, "#");
lv_table_set_col_width(table, 0, 50);
lv_table_set_cell_value(table, 0, 1, "Task");
lv_table_set_col_width(table, 1, 80);
lv_table_set_cell_value(table, 0, 2, "Free");
lv_table_set_col_width(table, 2, 80);
lv_obj_t * backgroundLabel = lv_label_create(lv_scr_act(), nullptr);
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_static(backgroundLabel, "");
UpdateScreen();
taskUpdate = lv_task_create(lv_update_task, 100000, LV_TASK_PRIO_LOW, this);
}
Tasks::~Tasks() {
lv_task_del(taskUpdate);
lv_obj_clean(lv_scr_act());
}
bool sortById(const TaskStatus_t &lhs, const TaskStatus_t &rhs) { return lhs.xTaskNumber < rhs.xTaskNumber; }
void Tasks::UpdateScreen() {
auto nb = uxTaskGetSystemState(tasksStatus, 7, nullptr);
std::sort(tasksStatus, tasksStatus + nb, sortById);
for (uint8_t i = 0; i < nb; i++) {
lv_table_set_cell_value(table, i + 1, 0, std::to_string(tasksStatus[i].xTaskNumber).c_str());
lv_table_set_cell_value(table, i + 1, 1, tasksStatus[i].pcTaskName);
if (tasksStatus[i].usStackHighWaterMark < 20) {
std::string str1 = std::to_string(tasksStatus[i].usStackHighWaterMark) + " low";
lv_table_set_cell_value(table, i + 1, 2, str1.c_str());
} else {
lv_table_set_cell_value(table, i + 1, 2, std::to_string(tasksStatus[i].usStackHighWaterMark).c_str());
}
}
}
bool Tasks::Refresh() {
return running;
}

View File

@@ -0,0 +1,31 @@
#pragma once
#include <FreeRTOS.h>
#include <task.h>
#include <cstdint>
#include <lvgl/lvgl.h>
#include <timers.h>
#include "Screen.h"
namespace Pinetime {
namespace Applications {
namespace Screens {
class Tasks : public Screen{
public:
Tasks(DisplayApp* app);
~Tasks() override;
bool Refresh() override;
void UpdateScreen();
private:
mutable TaskStatus_t tasksStatus[7];
lv_task_t* taskUpdate;
lv_obj_t * table;
};
}
}
}

View File

@@ -227,12 +227,10 @@ bool WatchFaceDigital::Refresh() {
heartbeat = heartRateController.HeartRate();
heartbeatRunning = heartRateController.State() != Controllers::HeartRateController::States::Stopped;
if(heartbeat.IsUpdated() || heartbeatRunning.IsUpdated()) {
char heartbeatBuffer[4];
if(heartbeatRunning.Get())
sprintf(heartbeatBuffer, "%d", heartbeat.Get());
lv_label_set_text_fmt(heartbeatValue, "%d", heartbeat.Get());
else
sprintf(heartbeatBuffer, "---");
lv_label_set_text_static(heartbeatValue, "---");
lv_label_set_text(heartbeatValue, heartbeatBuffer);
lv_obj_align(heartbeatIcon, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 5, -2);
lv_obj_align(heartbeatValue, heartbeatIcon, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
@@ -242,11 +240,7 @@ bool WatchFaceDigital::Refresh() {
stepCount = motionController.NbSteps();
motionSensorOk = motionController.IsSensorOk();
if(stepCount.IsUpdated() || motionSensorOk.IsUpdated()) {
char stepBuffer[5];
if(motionSensorOk.Get())
sprintf(stepBuffer, "%lu", stepCount.Get());
else
sprintf(stepBuffer, "---", stepCount.Get());
lv_label_set_text_fmt(stepValue, "%lu", stepCount.Get());
lv_label_set_text(stepValue, stepBuffer);
lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -5, -2);
lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_LEFT_MID, -5, 0);