Skip to content

Commit d2d4a1d

Browse files
authored
Merge branch 'master' into trunk-io/update-trunk
2 parents de8be27 + bf7668b commit d2d4a1d

File tree

1 file changed

+72
-121
lines changed

1 file changed

+72
-121
lines changed

source/graphics/TFT/TFTView_320x240.cpp

Lines changed: 72 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,9 @@ TFTView_320x240 *TFTView_320x240::instance(const DisplayDriverConfig &cfg)
137137

138138
TFTView_320x240::TFTView_320x240(const DisplayDriverConfig *cfg, DisplayDriver *driver)
139139
: MeshtasticView(cfg, driver, new ViewController), screensInitialised(false), nodesFiltered(0), nodesChanged(true),
140-
processingFilter(false), packetLogEnabled(false), detectorRunning(false), cardDetected(false), formatSD(false),
141-
packetCounter(0), actTime(0), uptime(0), lastHeard(0), hasPosition(false), myLatitude(0), myLongitude(0),
142-
topNodeLL(nullptr), scans(0), selectedHops(0), chooseNodeSignalScanner(false), chooseNodeTraceRoute(false),
143-
qr(nullptr), db{}
140+
processingFilter(false), packetLogEnabled(false), detectorRunning(false), packetCounter(0), actTime(0), uptime(0),
141+
lastHeard(0), hasPosition(false), myLatitude(0), myLongitude(0), topNodeLL(nullptr), scans(0), selectedHops(0),
142+
chooseNodeSignalScanner(false), chooseNodeTraceRoute(false), qr(nullptr), db{}
144143
{
145144
filter.active = false;
146145
highlight.active = false;
@@ -661,15 +660,13 @@ void TFTView_320x240::updateTheme(void)
661660
db.config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED);
662661
Themes::recolorButton(objects.home_wlan_button, db.config.network.wifi_enabled);
663662
Themes::recolorButton(objects.home_mqtt_button, db.module_config.mqtt.enabled);
664-
Themes::recolorButton(objects.home_sd_card_button, cardDetected);
665663
Themes::recolorButton(objects.home_memory_button, (bool)objects.home_memory_button->user_data);
666664
Themes::recolorText(objects.home_lora_label, db.config.lora.tx_enabled);
667665
Themes::recolorText(objects.home_bell_label, db.uiConfig.alert_enabled || !db.silent);
668666
Themes::recolorText(objects.home_location_label,
669667
db.config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_ENABLED);
670668
Themes::recolorText(objects.home_wlan_label, db.config.network.wifi_enabled);
671669
Themes::recolorText(objects.home_mqtt_label, db.module_config.mqtt.enabled);
672-
Themes::recolorText(objects.home_sd_card_label, cardDetected);
673670
Themes::recolorText(objects.home_memory_label, (bool)objects.home_memory_button->user_data);
674671

675672
lv_opa_t opa = (Themes::get() == Themes::eDark) ? 0 : 255;
@@ -679,11 +676,6 @@ void TFTView_320x240::updateTheme(void)
679676
lv_obj_set_style_bg_img_recolor_opa(objects.messages_button, opa, LV_PART_MAIN | LV_STATE_DEFAULT);
680677
lv_obj_set_style_bg_img_recolor_opa(objects.map_button, opa, LV_PART_MAIN | LV_STATE_DEFAULT);
681678
lv_obj_set_style_bg_img_recolor_opa(objects.settings_button, opa, LV_PART_MAIN | LV_STATE_DEFAULT);
682-
683-
for (int i = 0; i < c_max_channels; i++) {
684-
if (db.channel[i].role != meshtastic_Channel_Role_DISABLED)
685-
updateGroupChannel(i);
686-
}
687679
}
688680

689681
void TFTView_320x240::ui_events_init(void)
@@ -1089,13 +1081,8 @@ void TFTView_320x240::ui_event_GroupsButton(lv_event_t *e)
10891081

10901082
void TFTView_320x240::ui_event_ChannelButton(lv_event_t *e)
10911083
{
1092-
static bool ignoreClicked = false;
10931084
lv_event_code_t event_code = lv_event_get_code(e);
10941085
if (event_code == LV_EVENT_CLICKED && THIS->activeSettings == eNone) {
1095-
if (ignoreClicked) { // prevent long press to enter this setting
1096-
ignoreClicked = false;
1097-
return;
1098-
}
10991086
uint8_t ch = (uint8_t)(unsigned long)e->user_data;
11001087
if (THIS->db.channel[ch].role != meshtastic_Channel_Role_DISABLED) {
11011088
if (THIS->messagesRestored) {
@@ -1105,14 +1092,8 @@ void TFTView_320x240::ui_event_ChannelButton(lv_event_t *e)
11051092
lv_group_focus_obj(objects.msg_restore_button);
11061093
}
11071094
}
1108-
} else if (event_code == LV_EVENT_LONG_PRESSED) {
1109-
// toggle mute channel
1110-
uint8_t ch = (uint8_t)(unsigned long)e->user_data;
1111-
bool mute = THIS->db.channel[ch].settings.mute;
1112-
THIS->db.channel[ch].settings.mute = !mute;
1113-
THIS->updateChannelConfig(THIS->db.channel[ch]);
1114-
THIS->controller->sendConfig(THIS->db.channel[ch], THIS->ownNode);
1115-
ignoreClicked = true;
1095+
} else {
1096+
// TODO: click on unset channel should popup config screen
11161097
}
11171098
}
11181099

@@ -1737,7 +1718,7 @@ void TFTView_320x240::ui_event_region_button(lv_event_t *e)
17371718
void TFTView_320x240::ui_event_preset_button(lv_event_t *e)
17381719
{
17391720
lv_event_code_t event_code = lv_event_get_code(e);
1740-
if (event_code == LV_EVENT_CLICKED && THIS->activeSettings == eNone && THIS->db.config.has_lora) {
1721+
if (event_code == LV_EVENT_CLICKED && THIS->activeSettings == eNone && THIS->db.config.lora.use_preset) {
17411722
THIS->activeSettings = eModemPreset;
17421723
lv_dropdown_set_selected(objects.settings_modem_preset_dropdown, THIS->db.config.lora.modem_preset);
17431724

@@ -2518,14 +2499,14 @@ void TFTView_320x240::loadMap(void)
25182499
lv_obj_add_flag(objects.gps_lock_button, LV_OBJ_FLAG_HIDDEN);
25192500
}
25202501
if (hasPosition) {
2502+
map->setGpsPosition(myLatitude * 1e-7, myLongitude * 1e-7);
25212503
if (db.uiConfig.map_data.has_home) {
25222504
map->setHomeLocation(db.uiConfig.map_data.home.latitude * 1e-7, db.uiConfig.map_data.home.longitude * 1e-7);
25232505
map->setZoom(db.uiConfig.map_data.home.zoom);
25242506
} else {
25252507
map->setHomeLocation(myLatitude * 1e-7, myLongitude * 1e-7);
25262508
map->setZoom(13);
25272509
}
2528-
map->setGpsPosition(myLatitude * 1e-7, myLongitude * 1e-7);
25292510
} else if (db.uiConfig.map_data.has_home) {
25302511
map->setHomeLocation(db.uiConfig.map_data.home.latitude * 1e-7, db.uiConfig.map_data.home.longitude * 1e-7);
25312512
map->setZoom(db.uiConfig.map_data.home.zoom);
@@ -3385,47 +3366,45 @@ uint32_t TFTView_320x240::language2val(meshtastic_Language lang)
33853366
case meshtastic_Language_ENGLISH:
33863367
return 0;
33873368
case meshtastic_Language_FRENCH:
3388-
return 7;
3369+
return 6;
33893370
case meshtastic_Language_GERMAN:
3390-
return 4;
3371+
return 3;
33913372
case meshtastic_Language_ITALIAN:
3392-
return 8;
3373+
return 7;
33933374
case meshtastic_Language_PORTUGUESE:
3394-
return 12;
3375+
return 11;
33953376
case meshtastic_Language_SPANISH:
3396-
return 6;
3377+
return 5;
33973378
case meshtastic_Language_SWEDISH:
3398-
return 17;
3399-
case meshtastic_Language_FINNISH:
34003379
return 16;
3380+
case meshtastic_Language_FINNISH:
3381+
return 15;
34013382
case meshtastic_Language_POLISH:
3402-
return 11;
3383+
return 10;
34033384
case meshtastic_Language_TURKISH:
3404-
return 18;
3385+
return 17;
34053386
case meshtastic_Language_SERBIAN:
3406-
return 15;
3387+
return 14;
34073388
case meshtastic_Language_RUSSIAN:
3408-
return 13;
3389+
return 12;
34093390
case meshtastic_Language_DUTCH:
3410-
return 9;
3391+
return 8;
34113392
case meshtastic_Language_GREEK:
3412-
return 5;
3393+
return 4;
34133394
case meshtastic_Language_NORWEGIAN:
3414-
return 10;
3395+
return 9;
34153396
case meshtastic_Language_SLOVENIAN:
3416-
return 14;
3397+
return 13;
34173398
case meshtastic_Language_UKRAINIAN:
3418-
return 19;
3399+
return 18;
34193400
case meshtastic_Language_BULGARIAN:
34203401
return 1;
34213402
case meshtastic_Language_CZECH:
34223403
return 2;
3423-
case meshtastic_Language_DANISH:
3424-
return 3;
34253404
case meshtastic_Language_SIMPLIFIED_CHINESE:
3426-
return 20;
3405+
return 19;
34273406
case meshtastic_Language_TRADITIONAL_CHINESE:
3428-
return 21;
3407+
return 20;
34293408
default:
34303409
ILOG_WARN("unknown language uiconfig: %d", lang);
34313410
}
@@ -3440,47 +3419,45 @@ meshtastic_Language TFTView_320x240::val2language(uint32_t val)
34403419
switch (val) {
34413420
case 0:
34423421
return meshtastic_Language_ENGLISH;
3443-
case 7:
3422+
case 6:
34443423
return meshtastic_Language_FRENCH;
3445-
case 4:
3424+
case 3:
34463425
return meshtastic_Language_GERMAN;
3447-
case 8:
3426+
case 7:
34483427
return meshtastic_Language_ITALIAN;
3449-
case 12:
3428+
case 11:
34503429
return meshtastic_Language_PORTUGUESE;
3451-
case 6:
3430+
case 5:
34523431
return meshtastic_Language_SPANISH;
3453-
case 17:
3454-
return meshtastic_Language_SWEDISH;
34553432
case 16:
3433+
return meshtastic_Language_SWEDISH;
3434+
case 15:
34563435
return meshtastic_Language_FINNISH;
3457-
case 11:
3436+
case 10:
34583437
return meshtastic_Language_POLISH;
3459-
case 18:
3438+
case 17:
34603439
return meshtastic_Language_TURKISH;
3461-
case 15:
3440+
case 14:
34623441
return meshtastic_Language_SERBIAN;
3463-
case 13:
3442+
case 12:
34643443
return meshtastic_Language_RUSSIAN;
3465-
case 9:
3444+
case 8:
34663445
return meshtastic_Language_DUTCH;
3467-
case 5:
3446+
case 4:
34683447
return meshtastic_Language_GREEK;
3469-
case 10:
3448+
case 9:
34703449
return meshtastic_Language_NORWEGIAN;
3471-
case 14:
3450+
case 13:
34723451
return meshtastic_Language_SLOVENIAN;
3473-
case 19:
3452+
case 18:
34743453
return meshtastic_Language_UKRAINIAN;
34753454
case 1:
34763455
return meshtastic_Language_BULGARIAN;
34773456
case 2:
34783457
return meshtastic_Language_CZECH;
3479-
case 3:
3480-
return meshtastic_Language_DANISH;
3481-
case 20:
3458+
case 19:
34823459
return meshtastic_Language_SIMPLIFIED_CHINESE;
3483-
case 21:
3460+
case 20:
34843461
return meshtastic_Language_TRADITIONAL_CHINESE;
34853462
default:
34863463
ILOG_WARN("unknown language val: %d", val);
@@ -3570,10 +3547,6 @@ void TFTView_320x240::setLocale(meshtastic_Language lang)
35703547
lv_i18n_set_locale("cs");
35713548
locale = "cs_CZ.UTF-8";
35723549
break;
3573-
case meshtastic_Language_DANISH:
3574-
lv_i18n_set_locale("da");
3575-
locale = "da_DK.UTF-8";
3576-
break;
35773550
case meshtastic_Language_SIMPLIFIED_CHINESE:
35783551
lv_i18n_set_locale("cn");
35793552
locale = "zh_CN.UTF-8";
@@ -5808,19 +5781,6 @@ void TFTView_320x240::updateChannelConfig(const meshtastic_Channel &ch)
58085781
lv_obj_clear_flag(lockImage, LV_OBJ_FLAG_SCROLLABLE); /// Flags
58095782
lv_obj_set_style_img_recolor(lockImage, lv_color_hex(recolor), LV_PART_MAIN | LV_STATE_DEFAULT);
58105783
lv_obj_set_style_img_recolor_opa(lockImage, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
5811-
5812-
lv_obj_t *bellImage = NULL;
5813-
if (lv_obj_get_child_cnt(btn[ch.index]) < 3)
5814-
bellImage = lv_img_create(btn[ch.index]);
5815-
else
5816-
bellImage = lv_obj_get_child(btn[ch.index], 2);
5817-
lv_obj_set_width(bellImage, LV_SIZE_CONTENT); /// 1
5818-
lv_obj_set_height(bellImage, LV_SIZE_CONTENT); /// 1
5819-
lv_obj_set_align(bellImage, LV_ALIGN_RIGHT_MID);
5820-
lv_obj_add_flag(bellImage, LV_OBJ_FLAG_ADV_HITTEST); /// Flags
5821-
lv_obj_clear_flag(bellImage, LV_OBJ_FLAG_SCROLLABLE); /// Flags
5822-
lv_obj_set_style_img_recolor_opa(bellImage, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
5823-
updateGroupChannel(ch.index);
58245784
} else {
58255785
// display smaller button with just the channel number
58265786
char buf[10];
@@ -5834,24 +5794,6 @@ void TFTView_320x240::updateChannelConfig(const meshtastic_Channel &ch)
58345794
}
58355795
}
58365796

5837-
// redraw bell icons and color
5838-
void TFTView_320x240::updateGroupChannel(uint8_t chId)
5839-
{
5840-
static lv_obj_t *btn[c_max_channels] = {objects.channel_button0, objects.channel_button1, objects.channel_button2,
5841-
objects.channel_button3, objects.channel_button4, objects.channel_button5,
5842-
objects.channel_button6, objects.channel_button7};
5843-
5844-
lv_obj_t *bellImage = lv_obj_get_child(btn[chId], 2);
5845-
if (db.channel[chId].settings.mute) {
5846-
lv_obj_set_style_img_recolor(bellImage, lv_color_hex(0xffab0000), LV_PART_MAIN | LV_STATE_DEFAULT);
5847-
lv_image_set_src(bellImage, &img_groups_bell_slash_image);
5848-
}
5849-
else {
5850-
Themes::recolorImage(bellImage, true);
5851-
lv_image_set_src(bellImage, &img_groups_bell_image);
5852-
}
5853-
}
5854-
58555797
void TFTView_320x240::updateDeviceConfig(const meshtastic_Config_DeviceConfig &cfg)
58565798
{
58575799
db.config.device = cfg;
@@ -5910,27 +5852,30 @@ void TFTView_320x240::updateLoRaConfig(const meshtastic_Config_LoRaConfig &cfg)
59105852
db.config.lora = cfg;
59115853
db.config.has_lora = true;
59125854

5913-
// This must be run before displaying LoRa frequency as channel of 0 ("calculate from hash") leads to an integer underflow
5914-
if (!db.config.lora.channel_num) {
5915-
db.config.lora.channel_num = LoRaPresets::getDefaultSlot(db.config.lora.region, THIS->db.config.lora.modem_preset,
5916-
THIS->db.channel[0].settings.name);
5917-
}
5855+
if (cfg.use_preset) {
5856+
// This must be run before displaying LoRa frequency as channel of 0 ("calculate from hash") leads to an integer underflow
5857+
if (!db.config.lora.channel_num) {
5858+
db.config.lora.channel_num = LoRaPresets::getDefaultSlot(db.config.lora.region, THIS->db.config.lora.modem_preset,
5859+
THIS->db.channel[0].settings.name);
5860+
}
5861+
char buf1[20], buf2[32];
5862+
lv_dropdown_set_selected(objects.settings_modem_preset_dropdown, cfg.modem_preset);
5863+
lv_dropdown_get_selected_str(objects.settings_modem_preset_dropdown, buf1, sizeof(buf1));
5864+
lv_snprintf(buf2, sizeof(buf2), _("Modem Preset: %s"), buf1);
5865+
lv_label_set_text(objects.basic_settings_modem_preset_label, buf2);
59185866

5919-
showLoRaFrequency(db.config.lora);
5867+
uint32_t numChannels = LoRaPresets::getNumChannels(cfg.region, cfg.modem_preset);
5868+
lv_slider_set_range(objects.frequency_slot_slider, 1, numChannels);
5869+
lv_slider_set_value(objects.frequency_slot_slider, db.config.lora.channel_num, LV_ANIM_OFF);
5870+
} else {
5871+
lv_label_set_text(objects.basic_settings_modem_preset_label, _("Modem Preset: custom"));
5872+
}
59205873

59215874
char region[30];
59225875
lv_snprintf(region, sizeof(region), _("Region: %s"), LoRaPresets::loRaRegionToString(cfg.region));
59235876
lv_label_set_text(objects.basic_settings_region_label, region);
59245877

5925-
char buf1[20], buf2[32];
5926-
lv_dropdown_set_selected(objects.settings_modem_preset_dropdown, cfg.modem_preset);
5927-
lv_dropdown_get_selected_str(objects.settings_modem_preset_dropdown, buf1, sizeof(buf1));
5928-
lv_snprintf(buf2, sizeof(buf2), _("Modem Preset: %s"), buf1);
5929-
lv_label_set_text(objects.basic_settings_modem_preset_label, buf2);
5930-
5931-
uint32_t numChannels = LoRaPresets::getNumChannels(cfg.region, cfg.modem_preset);
5932-
lv_slider_set_range(objects.frequency_slot_slider, 1, numChannels);
5933-
lv_slider_set_value(objects.frequency_slot_slider, db.config.lora.channel_num, LV_ANIM_OFF);
5878+
showLoRaFrequency(db.config.lora);
59345879

59355880
if (db.config.lora.region != meshtastic_Config_LoRaConfig_RegionCode_UNSET) {
59365881
// update channel names again now that region is known
@@ -5947,12 +5892,18 @@ void TFTView_320x240::updateLoRaConfig(const meshtastic_Config_LoRaConfig &cfg)
59475892
void TFTView_320x240::showLoRaFrequency(const meshtastic_Config_LoRaConfig &cfg)
59485893
{
59495894
char loraFreq[48];
5950-
float frequency = LoRaPresets::getRadioFreq(cfg.region, cfg.modem_preset, cfg.channel_num) + cfg.frequency_offset;
5951-
if (cfg.region) {
5895+
if (!cfg.region) {
5896+
strcpy(loraFreq, _("region unset"));
5897+
} else if (cfg.use_preset) {
5898+
float frequency = LoRaPresets::getRadioFreq(cfg.region, cfg.modem_preset, cfg.channel_num) + cfg.frequency_offset;
59525899
sprintf(loraFreq, "LoRa %g MHz\n[%s kHz]", frequency, LoRaPresets::getBandwidthString(cfg.modem_preset));
5900+
lv_obj_remove_state(objects.basic_settings_modem_preset_button, LV_STATE_DISABLED);
59535901
} else {
5954-
strcpy(loraFreq, _("region unset"));
5902+
float frequency = cfg.override_frequency + cfg.frequency_offset;
5903+
sprintf(loraFreq, "LoRa %g MHz\n[%d kHz]", frequency, cfg.bandwidth);
5904+
lv_obj_add_state(objects.basic_settings_modem_preset_button, LV_STATE_DISABLED);
59555905
}
5906+
59565907
lv_label_set_text(objects.home_lora_label, loraFreq);
59575908
Themes::recolorButton(objects.home_lora_button, cfg.tx_enabled);
59585909
Themes::recolorText(objects.home_lora_label, cfg.tx_enabled);
@@ -6351,8 +6302,7 @@ void TFTView_320x240::newMessage(uint32_t from, uint32_t to, uint8_t ch, const c
63516302
if (container != activeMsgContainer || activePanel != objects.messages_panel) {
63526303
unreadMessages++;
63536304
updateUnreadMessages();
6354-
if (activePanel != objects.messages_panel && db.uiConfig.alert_enabled &&
6355-
!db.channel[ch].settings.mute) {
6305+
if (activePanel != objects.messages_panel && db.uiConfig.alert_enabled) {
63566306
showMessagePopup(from, to, ch, lv_label_get_text(nodes[from]->LV_OBJ_IDX(node_lbl_idx)));
63576307
}
63586308
lv_obj_add_flag(container, LV_OBJ_FLAG_HIDDEN);
@@ -7106,6 +7056,7 @@ void TFTView_320x240::updateTime(void)
71067056

71077057
bool TFTView_320x240::updateSDCard(void)
71087058
{
7059+
bool cardDetected = false;
71097060
formatSD = false;
71107061
if (sdCard) {
71117062
delete sdCard;

0 commit comments

Comments
 (0)