@@ -26,7 +26,8 @@ SystemInfo::SystemInfo(Pinetime::Applications::DisplayApp *app,
2626 [this ]() -> std::unique_ptr<Screen> { return CreateScreen1 (); },
2727 [this ]() -> std::unique_ptr<Screen> { return CreateScreen2 (); },
2828 [this ]() -> std::unique_ptr<Screen> { return CreateScreen3 (); },
29- [this ]() -> std::unique_ptr<Screen> { return CreateScreen4 (); }
29+ [this ]() -> std::unique_ptr<Screen> { return CreateScreen4 (); },
30+ [this ]() -> std::unique_ptr<Screen> { return CreateScreen5 (); }
3031 },
3132 Screens::ScreenListModes::UpDown
3233 } {}
@@ -37,7 +38,9 @@ SystemInfo::~SystemInfo() {
3738}
3839
3940bool SystemInfo::Refresh () {
40- screens.Refresh ();
41+ if (running) {
42+ screens.Refresh ();
43+ }
4144 return running;
4245}
4346
@@ -50,27 +53,8 @@ bool SystemInfo::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
5053 return screens.OnTouchEvent (event);
5154}
5255
53- void SystemInfo::CreateContainer () {
54-
55- if ( container1 ) {
56- container1 = lv_cont_create (lv_scr_act (), nullptr );
57-
58- lv_obj_set_style_local_bg_opa (container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP);
59- lv_obj_set_style_local_pad_all (container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10 );
60- lv_obj_set_style_local_pad_inner (container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5 );
61- lv_obj_set_style_local_border_width (container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0 );
62-
63- lv_obj_set_pos (container1, 0 , 0 );
64- lv_obj_set_width (container1, LV_HOR_RES - 10 );
65- lv_obj_set_height (container1, LV_VER_RES);
66- lv_cont_set_layout (container1, LV_LAYOUT_CENTER);
67- }
68- }
69-
7056std::unique_ptr<Screen> SystemInfo::CreateScreen1 () {
71- CreateContainer ();
72-
73- lv_obj_t * label = lv_label_create (container1, nullptr );
57+ lv_obj_t * label = lv_label_create (lv_scr_act (), nullptr );
7458 lv_label_set_recolor (label, true );
7559 lv_label_set_text_fmt (label,
7660 " #FFFF00 InfiniTime#\n\n "
@@ -81,12 +65,11 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen1() {
8165 Version::Major (), Version::Minor (), Version::Patch (),
8266 __DATE__, __TIME__);
8367 lv_label_set_align (label, LV_LABEL_ALIGN_CENTER);
84- return std::unique_ptr<Screen>(new Screens::Label (0 , 4 , app, label));
68+ lv_obj_align (label, lv_scr_act (), LV_ALIGN_CENTER, 0 , 0 );
69+ return std::unique_ptr<Screen>(new Screens::Label (0 , 5 , app, label));
8570}
8671
8772std::unique_ptr<Screen> SystemInfo::CreateScreen2 () {
88- CreateContainer ();
89-
9073 auto batteryPercent = static_cast <uint8_t >(batteryController.PercentRemaining ());
9174 float batteryVoltage = batteryController.Voltage ();
9275
@@ -126,7 +109,7 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen2() {
126109 batteryVoltageBytes[0 ] = static_cast <uint8_t >((batteryVoltage - batteryVoltageBytes[1 ]) * 100 ); // remove whole part of flt and shift 2 places over
127110 //
128111
129- lv_obj_t * label = lv_label_create (container1 , nullptr );
112+ lv_obj_t * label = lv_label_create (lv_scr_act () , nullptr );
130113 lv_label_set_recolor (label, true );
131114 lv_label_set_text_fmt (label,
132115 " #444444 Date# %02d/%02d/%04d\n "
@@ -140,16 +123,16 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen2() {
140123 uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds,
141124 batteryPercent, batteryVoltageBytes[1 ], batteryVoltageBytes[0 ], brightnessController.ToString (), resetReason
142125 );
126+ lv_obj_align (label, lv_scr_act (), LV_ALIGN_CENTER, 0 , 0 );
143127 return std::unique_ptr<Screen>(new Screens::Label (1 , 4 , app, label));
144128
145129}
146130
147131std::unique_ptr<Screen> SystemInfo::CreateScreen3 () {
148132 lv_mem_monitor_t mon;
149133 lv_mem_monitor (&mon);
150- CreateContainer ();
151-
152- lv_obj_t * label = lv_label_create (container1, nullptr );
134+
135+ lv_obj_t * label = lv_label_create (lv_scr_act (), nullptr );
153136 lv_label_set_recolor (label, true );
154137 auto & bleAddr = bleController.Address ();
155138 lv_label_set_text_fmt (label,
@@ -169,13 +152,46 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen3() {
169152 (int )mon.free_biggest_size ,
170153 0
171154 );
172-
173- return std::unique_ptr<Screen>(new Screens::Label (2 , 4 , app, label));
155+ lv_obj_align (label, lv_scr_act (), LV_ALIGN_CENTER, 0 , 0 );
156+ return std::unique_ptr<Screen>(new Screens::Label (2 , 5 , app, label));
174157}
175158
159+
160+ bool sortById (const TaskStatus_t &lhs, const TaskStatus_t &rhs) { return lhs.xTaskNumber < rhs.xTaskNumber ; }
161+
176162std::unique_ptr<Screen> SystemInfo::CreateScreen4 () {
177- CreateContainer ();
178- lv_obj_t * label = lv_label_create (container1, nullptr );
163+ TaskStatus_t tasksStatus[7 ];
164+ lv_obj_t * infoTask = lv_table_create (lv_scr_act (), NULL );
165+ lv_table_set_col_cnt (infoTask, 3 );
166+ lv_table_set_row_cnt (infoTask, 8 );
167+ lv_obj_set_pos (infoTask, 10 , 10 );
168+
169+ lv_table_set_cell_value (infoTask, 0 , 0 , " #" );
170+ lv_table_set_col_width (infoTask, 0 , 50 );
171+ lv_table_set_cell_value (infoTask, 0 , 1 , " Task" );
172+ lv_table_set_col_width (infoTask, 1 , 80 );
173+ lv_table_set_cell_value (infoTask, 0 , 2 , " Free" );
174+ lv_table_set_col_width (infoTask, 2 , 90 );
175+
176+ auto nb = uxTaskGetSystemState (tasksStatus, 7 , nullptr );
177+ std::sort (tasksStatus, tasksStatus + nb, sortById);
178+ for (uint8_t i = 0 ; i < nb; i++) {
179+
180+ lv_table_set_cell_value (infoTask, i + 1 , 0 , std::to_string (tasksStatus[i].xTaskNumber ).c_str ());
181+ lv_table_set_cell_value (infoTask, i + 1 , 1 , tasksStatus[i].pcTaskName );
182+ if (tasksStatus[i].usStackHighWaterMark < 20 ) {
183+ std::string str1 = std::to_string (tasksStatus[i].usStackHighWaterMark ) + " low" ;
184+ lv_table_set_cell_value (infoTask, i + 1 , 2 , str1.c_str ());
185+ } else {
186+ lv_table_set_cell_value (infoTask, i + 1 , 2 , std::to_string (tasksStatus[i].usStackHighWaterMark ).c_str ());
187+ }
188+
189+ }
190+ return std::unique_ptr<Screen>(new Screens::Label (3 , 5 , app, infoTask));
191+ }
192+
193+ std::unique_ptr<Screen> SystemInfo::CreateScreen5 () {
194+ lv_obj_t * label = lv_label_create (lv_scr_act (), nullptr );
179195 lv_label_set_recolor (label, true );
180196 lv_label_set_text_static (label,
181197 " Software Licensed\n "
@@ -186,5 +202,6 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen4() {
186202 " #FFFF00 https://github.com/#\n "
187203 " #FFFF00 JF002/InfiniTime#" );
188204 lv_label_set_align (label, LV_LABEL_ALIGN_CENTER);
189- return std::unique_ptr<Screen>(new Screens::Label (3 , 4 , app, label));
205+ lv_obj_align (label, lv_scr_act (), LV_ALIGN_CENTER, 0 , 0 );
206+ return std::unique_ptr<Screen>(new Screens::Label (4 , 5 , app, label));
190207}
0 commit comments