mirror of
https://github.com/markqvist/RNode_Firmware.git
synced 2026-04-27 14:30:33 +00:00
Add tap-to-toggle LoRa and GPS complications
Tap LoRa complication to toggle radio on/off (startRadio/stopRadio). Tap GPS complication to toggle GPS power (gps_power_on/off). Disabled state shown in dark accent colour (0x302000 for LoRa, 0x003020 for GPS) on both value and label text — visually distinct from the active amber/teal but still readable.
This commit is contained in:
parent
e75eb5a9fa
commit
00c4997b69
1 changed files with 60 additions and 6 deletions
66
Gui.h
66
Gui.h
|
|
@ -194,6 +194,12 @@ void sensor_log_touch(int16_t x, int16_t y, bool pressed);
|
|||
// Forward declarations for filtered accel and noise (defined in .ino)
|
||||
extern volatile float imu_ax_f, imu_ay_f, imu_az_f;
|
||||
extern volatile float imu_noise;
|
||||
// Forward declarations for radio/GPS toggle (defined in .ino / GPS.h)
|
||||
bool startRadio();
|
||||
void stopRadio();
|
||||
void gps_power_on();
|
||||
void gps_power_off();
|
||||
void gps_setup();
|
||||
#ifndef PMU_TEMP_MIN
|
||||
#define PMU_TEMP_MIN -30
|
||||
#endif
|
||||
|
|
@ -352,8 +358,48 @@ static void gui_create_watchface(lv_obj_t *parent) {
|
|||
lv_obj_clear_flag(comp, LV_OBJ_FLAG_SCROLLABLE);
|
||||
|
||||
int cw = (GUI_W - GUI_PAD * 2) / 3;
|
||||
gui_create_complication(comp, GUI_PAD, cw, GUI_COL_AMBER, "LoRa", &gui_lora_value, &gui_lora_label);
|
||||
gui_create_complication(comp, GUI_PAD + cw, cw, GUI_COL_TEAL, "GPS", &gui_gps_value, &gui_gps_label);
|
||||
|
||||
// LoRa complication — tap to toggle radio
|
||||
{
|
||||
lv_obj_t *cell = lv_obj_create(comp);
|
||||
lv_obj_remove_style_all(cell);
|
||||
lv_obj_set_size(cell, cw, GUI_COMP_H);
|
||||
lv_obj_set_pos(cell, GUI_PAD, 0);
|
||||
lv_obj_add_flag(cell, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_add_event_cb(cell, [](lv_event_t *e) {
|
||||
if (radio_online) { stopRadio(); }
|
||||
else { startRadio(); }
|
||||
}, LV_EVENT_CLICKED, NULL);
|
||||
gui_lora_value = gui_label(cell, &font_mid, GUI_COL_AMBER, "--");
|
||||
lv_obj_set_width(gui_lora_value, cw);
|
||||
lv_obj_set_style_text_align(gui_lora_value, LV_TEXT_ALIGN_CENTER, 0);
|
||||
lv_obj_align(gui_lora_value, LV_ALIGN_TOP_MID, 0, 4);
|
||||
gui_lora_label = gui_label(cell, &lv_font_montserrat_14, GUI_COL_DIM, "LoRa");
|
||||
lv_obj_set_width(gui_lora_label, cw);
|
||||
lv_obj_set_style_text_align(gui_lora_label, LV_TEXT_ALIGN_CENTER, 0);
|
||||
lv_obj_align(gui_lora_label, LV_ALIGN_TOP_MID, 0, 46);
|
||||
}
|
||||
|
||||
// GPS complication — tap to toggle GPS
|
||||
{
|
||||
lv_obj_t *cell = lv_obj_create(comp);
|
||||
lv_obj_remove_style_all(cell);
|
||||
lv_obj_set_size(cell, cw, GUI_COMP_H);
|
||||
lv_obj_set_pos(cell, GUI_PAD + cw, 0);
|
||||
lv_obj_add_flag(cell, LV_OBJ_FLAG_CLICKABLE);
|
||||
lv_obj_add_event_cb(cell, [](lv_event_t *e) {
|
||||
if (gps_ready) { gps_power_off(); gps_ready = false; }
|
||||
else { gps_power_on(); gps_setup(); }
|
||||
}, LV_EVENT_CLICKED, NULL);
|
||||
gui_gps_value = gui_label(cell, &font_mid, GUI_COL_TEAL, "--");
|
||||
lv_obj_set_width(gui_gps_value, cw);
|
||||
lv_obj_set_style_text_align(gui_gps_value, LV_TEXT_ALIGN_CENTER, 0);
|
||||
lv_obj_align(gui_gps_value, LV_ALIGN_TOP_MID, 0, 4);
|
||||
gui_gps_label = gui_label(cell, &lv_font_montserrat_14, GUI_COL_DIM, "GPS");
|
||||
lv_obj_set_width(gui_gps_label, cw);
|
||||
lv_obj_set_style_text_align(gui_gps_label, LV_TEXT_ALIGN_CENTER, 0);
|
||||
lv_obj_align(gui_gps_label, LV_ALIGN_TOP_MID, 0, 46);
|
||||
}
|
||||
|
||||
// Battery complication — custom with click-to-cycle and icon bar
|
||||
{
|
||||
|
|
@ -808,7 +854,7 @@ static void gui_update_data() {
|
|||
}
|
||||
lv_obj_align(gui_batt_label, LV_ALIGN_TOP_RIGHT, -GUI_PAD, GUI_STATUS_Y);
|
||||
|
||||
// LoRa complication
|
||||
// LoRa complication — dim when disabled
|
||||
if (radio_online) {
|
||||
if (last_rssi > -292) {
|
||||
lv_label_set_text_fmt(gui_lora_value, "%d", last_rssi);
|
||||
|
|
@ -816,21 +862,29 @@ static void gui_update_data() {
|
|||
lv_label_set_text(gui_lora_value, "---");
|
||||
}
|
||||
lv_obj_set_style_text_color(gui_lora_value, lv_color_hex(GUI_COL_AMBER), 0);
|
||||
lv_obj_set_style_text_color(gui_lora_label, lv_color_hex(GUI_COL_DIM), 0);
|
||||
} else {
|
||||
lv_label_set_text(gui_lora_value, "OFF");
|
||||
lv_obj_set_style_text_color(gui_lora_value, lv_color_hex(GUI_COL_DIM), 0);
|
||||
lv_obj_set_style_text_color(gui_lora_value, lv_color_hex(0x302000), 0);
|
||||
lv_obj_set_style_text_color(gui_lora_label, lv_color_hex(0x302000), 0);
|
||||
}
|
||||
|
||||
// GPS complication — color by fix quality
|
||||
// GPS complication — dim when disabled, color by fix quality
|
||||
#if HAS_GPS == true
|
||||
if (gps_sats > 0) {
|
||||
if (!gps_ready) {
|
||||
lv_label_set_text(gui_gps_value, "OFF");
|
||||
lv_obj_set_style_text_color(gui_gps_value, lv_color_hex(0x003020), 0);
|
||||
lv_obj_set_style_text_color(gui_gps_label, lv_color_hex(0x003020), 0);
|
||||
} else if (gps_sats > 0) {
|
||||
lv_label_set_text_fmt(gui_gps_value, "%d sats", gps_sats);
|
||||
uint32_t gps_col = (gps_hdop < 5.0) ? GUI_COL_TEAL :
|
||||
(gps_hdop < 15.0) ? GUI_COL_AMBER : GUI_COL_MID;
|
||||
lv_obj_set_style_text_color(gui_gps_value, lv_color_hex(gps_col), 0);
|
||||
lv_obj_set_style_text_color(gui_gps_label, lv_color_hex(GUI_COL_DIM), 0);
|
||||
} else {
|
||||
lv_label_set_text(gui_gps_value, "no fix");
|
||||
lv_obj_set_style_text_color(gui_gps_value, lv_color_hex(GUI_COL_DIM), 0);
|
||||
lv_obj_set_style_text_color(gui_gps_label, lv_color_hex(GUI_COL_DIM), 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue