@@ -137,10 +137,9 @@ TFTView_320x240 *TFTView_320x240::instance(const DisplayDriverConfig &cfg)
137137
138138TFTView_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
689681void TFTView_320x240::ui_events_init (void )
@@ -1089,13 +1081,8 @@ void TFTView_320x240::ui_event_GroupsButton(lv_event_t *e)
10891081
10901082void 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)
17371718void 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-
58555797void 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)
59475892void 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
71077057bool TFTView_320x240::updateSDCard (void )
71087058{
7059+ bool cardDetected = false ;
71097060 formatSD = false ;
71107061 if (sdCard) {
71117062 delete sdCard;
0 commit comments