1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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;
}
|