|
|
|
@@ -132,7 +132,9 @@ static void scroll_timer_cb(lv_timer_t *timer)
|
|
|
|
|
cur_y = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lv_obj_scroll_to_y(tbl_services, cur_y + s_row_h, LV_ANIM_OFF);
|
|
|
|
|
// lv_obj_scroll_to_y(tbl_services, cur_y + s_row_h, LV_ANIM_OFF);
|
|
|
|
|
const int delta_y = s_row_h / 8;
|
|
|
|
|
lv_obj_scroll_to_y(tbl_services, cur_y + delta_y, LV_ANIM_ON);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Measure row height, compute visible rows, append duplicates for seamless loop */
|
|
|
|
@@ -213,7 +215,7 @@ static void create_top_bar(lv_obj_t *parent)
|
|
|
|
|
/* Battery positive terminal nub */
|
|
|
|
|
lv_obj_t *batt_nub = lv_obj_create(bar_cont);
|
|
|
|
|
lv_obj_set_size(batt_nub, 2, 4);
|
|
|
|
|
lv_obj_align(batt_nub, LV_ALIGN_RIGHT_MID, -37, 0);
|
|
|
|
|
lv_obj_align(batt_nub, LV_ALIGN_RIGHT_MID, -38, 0);
|
|
|
|
|
lv_obj_set_style_bg_color(batt_nub, lv_color_white(), 0);
|
|
|
|
|
lv_obj_set_style_bg_opa(batt_nub, LV_OPA_COVER, 0);
|
|
|
|
|
lv_obj_set_style_border_width(batt_nub, 0, 0);
|
|
|
|
@@ -261,7 +263,7 @@ static void create_time_bar(lv_obj_t *parent)
|
|
|
|
|
static void create_main_section(lv_obj_t *parent)
|
|
|
|
|
{
|
|
|
|
|
/* === Left column: Services + Pi Vitals === */
|
|
|
|
|
create_label(parent, 4, MAIN_Y + 2, &InziuIosevka_Slab_CC_12px, "SERVICES");
|
|
|
|
|
create_label(parent, 4, MAIN_Y + 1, &InziuIosevka_Slab_CC_12px, "SERVICES");
|
|
|
|
|
|
|
|
|
|
tbl_services = lv_table_create(parent);
|
|
|
|
|
lv_obj_set_pos(tbl_services, 4, MAIN_Y + 16);
|
|
|
|
@@ -281,8 +283,8 @@ static void create_main_section(lv_obj_t *parent)
|
|
|
|
|
lv_table_set_cell_value(tbl_services, i, 1, "---");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Auto-scroll timer: 1 second period */
|
|
|
|
|
s_scroll_timer = lv_timer_create(scroll_timer_cb, 1000, NULL);
|
|
|
|
|
/* Timer for each shift of 1/8 line's height */
|
|
|
|
|
s_scroll_timer = lv_timer_create(scroll_timer_cb, 120, NULL);
|
|
|
|
|
|
|
|
|
|
/* === Left column: Pi Vitals (below services) === */
|
|
|
|
|
int rx = 0;
|
|
|
|
@@ -294,7 +296,7 @@ static void create_main_section(lv_obj_t *parent)
|
|
|
|
|
int temp_x = rx + 155; /* TEMP column, right of value labels */
|
|
|
|
|
|
|
|
|
|
/* Pi Vitals header */
|
|
|
|
|
create_label(parent, rx + 4, 177, &InziuIosevka_Slab_CC_12px, "PI VITALS");
|
|
|
|
|
create_label(parent, rx + 4, 175, &InziuIosevka_Slab_CC_12px, "PI VITALS");
|
|
|
|
|
|
|
|
|
|
int ry = 192;
|
|
|
|
|
|
|
|
|
@@ -336,7 +338,7 @@ static void create_bottom_bar(lv_obj_t *parent)
|
|
|
|
|
lv_obj_t *bot_cont = lv_obj_create(parent);
|
|
|
|
|
lv_obj_set_pos(bot_cont, 0, y0);
|
|
|
|
|
lv_obj_set_size(bot_cont, SCREEN_W, BOT_H);
|
|
|
|
|
lv_obj_set_style_bg_color(bot_cont, lv_color_white(), 0);
|
|
|
|
|
lv_obj_set_style_bg_color(bot_cont, lv_color_black(), 0);
|
|
|
|
|
lv_obj_set_style_bg_opa(bot_cont, LV_OPA_COVER, 0);
|
|
|
|
|
lv_obj_set_style_border_color(bot_cont, lv_color_black(), 0);
|
|
|
|
|
lv_obj_set_style_border_width(bot_cont, 1, 0);
|
|
|
|
@@ -347,14 +349,14 @@ static void create_bottom_bar(lv_obj_t *parent)
|
|
|
|
|
|
|
|
|
|
lbl_net = lv_label_create(bot_cont);
|
|
|
|
|
lv_obj_set_style_text_font(lbl_net, &InziuIosevka_Slab_CC_12px, 0);
|
|
|
|
|
lv_obj_set_style_text_color(lbl_net, lv_color_black(), 0);
|
|
|
|
|
lv_obj_set_style_text_color(lbl_net, lv_color_white(), 0);
|
|
|
|
|
lv_obj_align(lbl_net, LV_ALIGN_LEFT_MID, 0, 0);
|
|
|
|
|
lv_label_set_text(lbl_net, "NETWORK DOWN: ---- kBps / UP: ---- kBps");
|
|
|
|
|
|
|
|
|
|
/* Local sensor readings — right-aligned */
|
|
|
|
|
lbl_local = lv_label_create(bot_cont);
|
|
|
|
|
lv_obj_set_style_text_font(lbl_local, &InziuIosevka_Slab_CC_12px, 0);
|
|
|
|
|
lv_obj_set_style_text_color(lbl_local, lv_color_black(), 0);
|
|
|
|
|
lv_obj_set_style_text_color(lbl_local, lv_color_white(), 0);
|
|
|
|
|
lv_obj_align(lbl_local, LV_ALIGN_RIGHT_MID, 0, 0);
|
|
|
|
|
lv_label_set_text(lbl_local, "T: --.- H: --%");
|
|
|
|
|
}
|
|
|
|
|