1616#include <lvgl/lvgl.h>
1717#include <minIni.h>
1818
19+ #include "core/app_state.h"
1920#include "core/battery.h"
2021#include "core/common.hh"
2122#include "core/dvr.h"
@@ -318,6 +319,114 @@ bool fhd_change() {
318319 return false;
319320}
320321
322+ void osd_show_all_elements () {
323+ if (g_setting .osd .element [OSD_GOGGLE_TOPFAN_SPEED ].show )
324+ lv_obj_clear_flag (g_osd_hdzero .topfan_speed [is_fhd ], LV_OBJ_FLAG_HIDDEN );
325+ else
326+ lv_obj_add_flag (g_osd_hdzero .topfan_speed [is_fhd ], LV_OBJ_FLAG_HIDDEN );
327+
328+ if (g_setting .osd .element [OSD_GOGGLE_BATTERY_LOW ].show )
329+ lv_obj_clear_flag (g_osd_hdzero .battery_low [is_fhd ], LV_OBJ_FLAG_HIDDEN );
330+ else
331+ lv_obj_add_flag (g_osd_hdzero .battery_low [is_fhd ], LV_OBJ_FLAG_HIDDEN );
332+
333+ if (g_setting .osd .element [OSD_GOGGLE_VTX_TEMP ].show )
334+ lv_obj_clear_flag (g_osd_hdzero .vtx_temp [is_fhd ], LV_OBJ_FLAG_HIDDEN );
335+ else
336+ lv_obj_add_flag (g_osd_hdzero .vtx_temp [is_fhd ], LV_OBJ_FLAG_HIDDEN );
337+
338+ if (g_setting .osd .element [OSD_GOGGLE_VRX_TEMP ].show )
339+ lv_obj_clear_flag (g_osd_hdzero .vrx_temp [is_fhd ], LV_OBJ_FLAG_HIDDEN );
340+ else
341+ lv_obj_add_flag (g_osd_hdzero .vrx_temp [is_fhd ], LV_OBJ_FLAG_HIDDEN );
342+
343+ if (g_setting .osd .element [OSD_GOGGLE_LATENCY_LOCK ].show )
344+ lv_obj_clear_flag (g_osd_hdzero .latency_lock [is_fhd ], LV_OBJ_FLAG_HIDDEN );
345+ else
346+ lv_obj_add_flag (g_osd_hdzero .latency_lock [is_fhd ], LV_OBJ_FLAG_HIDDEN );
347+
348+ if (g_setting .osd .element [OSD_GOGGLE_CHANNEL ].show )
349+ lv_obj_clear_flag (g_osd_hdzero .channel [is_fhd ], LV_OBJ_FLAG_HIDDEN );
350+ else
351+ lv_obj_add_flag (g_osd_hdzero .channel [is_fhd ], LV_OBJ_FLAG_HIDDEN );
352+
353+ if (g_setting .osd .element [OSD_GOGGLE_SD_REC ].show )
354+ lv_obj_clear_flag (g_osd_hdzero .sd_rec [is_fhd ], LV_OBJ_FLAG_HIDDEN );
355+ else
356+ lv_obj_add_flag (g_osd_hdzero .sd_rec [is_fhd ], LV_OBJ_FLAG_HIDDEN );
357+
358+ if (g_setting .osd .element [OSD_GOGGLE_VLQ ].show )
359+ lv_obj_clear_flag (g_osd_hdzero .vlq [is_fhd ], LV_OBJ_FLAG_HIDDEN );
360+ else
361+ lv_obj_add_flag (g_osd_hdzero .vlq [is_fhd ], LV_OBJ_FLAG_HIDDEN );
362+
363+ if (g_setting .osd .element [OSD_GOGGLE_ANT0 ].show )
364+ lv_obj_clear_flag (g_osd_hdzero .ant0 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
365+ else
366+ lv_obj_add_flag (g_osd_hdzero .ant0 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
367+
368+ if (g_setting .osd .element [OSD_GOGGLE_ANT1 ].show )
369+ lv_obj_clear_flag (g_osd_hdzero .ant1 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
370+ else
371+ lv_obj_add_flag (g_osd_hdzero .ant1 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
372+
373+ if (g_setting .osd .element [OSD_GOGGLE_ANT2 ].show )
374+ lv_obj_clear_flag (g_osd_hdzero .ant2 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
375+ else
376+ lv_obj_add_flag (g_osd_hdzero .ant2 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
377+
378+ if (g_setting .osd .element [OSD_GOGGLE_ANT3 ].show )
379+ lv_obj_clear_flag (g_osd_hdzero .ant3 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
380+ else
381+ lv_obj_add_flag (g_osd_hdzero .ant3 [is_fhd ], LV_OBJ_FLAG_HIDDEN );
382+
383+ if (!g_test_en )
384+ return ;
385+
386+ if (g_setting .osd .element [OSD_GOGGLE_TEMP_TOP ].show )
387+ lv_obj_clear_flag (g_osd_hdzero .osd_tempe [is_fhd ][0 ], LV_OBJ_FLAG_HIDDEN );
388+ else
389+ lv_obj_add_flag (g_osd_hdzero .osd_tempe [is_fhd ][0 ], LV_OBJ_FLAG_HIDDEN );
390+
391+ if (g_setting .osd .element [OSD_GOGGLE_TEMP_LEFT ].show )
392+ lv_obj_clear_flag (g_osd_hdzero .osd_tempe [is_fhd ][1 ], LV_OBJ_FLAG_HIDDEN );
393+ else
394+ lv_obj_add_flag (g_osd_hdzero .osd_tempe [is_fhd ][1 ], LV_OBJ_FLAG_HIDDEN );
395+
396+ if (g_setting .osd .element [OSD_GOGGLE_TEMP_RIGHT ].show )
397+ lv_obj_clear_flag (g_osd_hdzero .osd_tempe [is_fhd ][2 ], LV_OBJ_FLAG_HIDDEN );
398+ else
399+ lv_obj_add_flag (g_osd_hdzero .osd_tempe [is_fhd ][2 ], LV_OBJ_FLAG_HIDDEN );
400+ }
401+
402+ void osd_elements_set_dummy_sources () {
403+ char buf [128 ];
404+
405+ osd_resource_path (buf , "%s" , is_fhd , VtxTemp1_bmp );
406+ lv_img_set_src (g_osd_hdzero .vtx_temp [is_fhd ], buf );
407+
408+ osd_resource_path (buf , "%s" , is_fhd , ant2_bmp );
409+ lv_img_set_src (g_osd_hdzero .ant0 [is_fhd ], buf );
410+
411+ osd_resource_path (buf , "%s" , is_fhd , ant3_bmp );
412+ lv_img_set_src (g_osd_hdzero .ant1 [is_fhd ], buf );
413+
414+ osd_resource_path (buf , "%s" , is_fhd , ant4_bmp );
415+ lv_img_set_src (g_osd_hdzero .ant2 [is_fhd ], buf );
416+
417+ osd_resource_path (buf , "%s" , is_fhd , ant5_bmp );
418+ lv_img_set_src (g_osd_hdzero .ant3 [is_fhd ], buf );
419+
420+ osd_resource_path (buf , "%s" , is_fhd , recording_bmp );
421+ lv_img_set_src (g_osd_hdzero .sd_rec [is_fhd ], buf );
422+
423+ osd_resource_path (buf , "%s" , is_fhd , VLQ9_bmp );
424+ lv_img_set_src (g_osd_hdzero .vlq [is_fhd ], buf );
425+
426+ osd_resource_path (buf , "%s" , is_fhd , fan5_bmp );
427+ lv_img_set_src (g_osd_hdzero .topfan_speed [is_fhd ], buf );
428+ }
429+
321430#define FC_OSD_CHECK_PERIOD 200 // 25ms
322431void osd_hdzero_update (void ) {
323432 char buf [128 ], i ;
@@ -332,6 +441,14 @@ void osd_hdzero_update(void) {
332441 if (fhd_change ())
333442 return ;
334443
444+ // if the user is in the osd element position settings, show all elements
445+ if (g_app_state == APP_STATE_OSD_ELEMENT_PREV ) {
446+ // some elements might not be visible, set dummy sources to show them
447+ osd_elements_set_dummy_sources ();
448+ osd_show_all_elements ();
449+ return ;
450+ }
451+
335452 bool showRXOSD = g_showRXOSD && (g_source_info .source == SOURCE_HDZERO );
336453
337454 osd_rec_show (g_showRXOSD );
@@ -487,6 +604,7 @@ void osd_update_mode() {
487604 osd_object_set_pos (is_fhd , g_osd_hdzero .latency_lock [is_fhd ], & g_setting .osd .element [OSD_GOGGLE_LATENCY_LOCK ].position );
488605 osd_object_set_pos (is_fhd , g_osd_hdzero .sd_rec [is_fhd ], & g_setting .osd .element [OSD_GOGGLE_SD_REC ].position );
489606 osd_object_set_pos (is_fhd , g_osd_hdzero .vlq [is_fhd ], & g_setting .osd .element [OSD_GOGGLE_VLQ ].position );
607+ osd_object_set_pos (is_fhd , g_osd_hdzero .channel [is_fhd ], & g_setting .osd .element [OSD_GOGGLE_CHANNEL ].position );
490608 osd_object_set_pos (is_fhd , g_osd_hdzero .ant0 [is_fhd ], & g_setting .osd .element [OSD_GOGGLE_ANT0 ].position );
491609 osd_object_set_pos (is_fhd , g_osd_hdzero .ant1 [is_fhd ], & g_setting .osd .element [OSD_GOGGLE_ANT1 ].position );
492610 osd_object_set_pos (is_fhd , g_osd_hdzero .ant2 [is_fhd ], & g_setting .osd .element [OSD_GOGGLE_ANT2 ].position );
0 commit comments