@@ -224,8 +224,8 @@ static bool osdDisplayHasCanvas;
224224
225225#define AH_MAX_PITCH_DEFAULT 20 // Specify default maximum AHI pitch value displayed (degrees)
226226
227- PG_REGISTER_WITH_RESET_TEMPLATE (osdConfig_t , osdConfig , PG_OSD_CONFIG , 13 );
228- PG_REGISTER_WITH_RESET_FN (osdLayoutsConfig_t , osdLayoutsConfig , PG_OSD_LAYOUTS_CONFIG , 2 );
227+ PG_REGISTER_WITH_RESET_TEMPLATE (osdConfig_t , osdConfig , PG_OSD_CONFIG , 14 );
228+ PG_REGISTER_WITH_RESET_FN (osdLayoutsConfig_t , osdLayoutsConfig , PG_OSD_LAYOUTS_CONFIG , 3 );
229229
230230void osdStartedSaveProcess (void ) {
231231 savingSettings = true;
@@ -2467,15 +2467,15 @@ static bool osdDrawSingleElement(uint8_t item)
24672467 return true;
24682468 }
24692469
2470- #if defined(USE_SERIALRX_CRSF )
2471- case OSD_CRSF_RSSI_DBM :
2470+ #if defined(USE_SERIALRX_CRSF ) || defined( USE_RX_MSP )
2471+ case OSD_RSSI_DBM :
24722472 {
24732473 int16_t rssi = rxLinkStatistics .uplinkRSSI ;
24742474 buff [0 ] = (rxLinkStatistics .activeAntenna == 0 ) ? SYM_RSSI : SYM_2RSS ; // Separate symbols for each antenna
24752475 if (rssi <= -100 ) {
24762476 tfp_sprintf (buff + 1 , "%4d%c" , rssi , SYM_DBM );
24772477 } else {
2478- tfp_sprintf (buff + 1 , "%3d%c%c " , rssi , SYM_DBM , ' ' );
2478+ tfp_sprintf (buff + 1 , " %3d%c" , rssi , SYM_DBM );
24792479 }
24802480 if (!failsafeIsReceivingRxData ()){
24812481 TEXT_ATTRIBUTES_ADD_BLINK (elemAttr );
@@ -2484,19 +2484,15 @@ static bool osdDrawSingleElement(uint8_t item)
24842484 }
24852485 break ;
24862486 }
2487- case OSD_CRSF_LQ :
2487+ case OSD_LQ_UPLINK :
24882488 {
24892489 buff [0 ] = SYM_LQ ;
2490- int16_t statsLQ = rxLinkStatistics .uplinkLQ ;
2491- int16_t scaledLQ = scaleRange (constrain (statsLQ , 0 , 100 ), 0 , 100 , 170 , 300 );
2492- switch (osdConfig ()-> crsf_lq_format ) {
2493- case OSD_CRSF_LQ_TYPE1 :
2494- if (!failsafeIsReceivingRxData ()) {
2495- tfp_sprintf (buff + 1 , "%3d" , 0 );
2496- } else {
2497- tfp_sprintf (buff + 1 , "%3d" , rxLinkStatistics .uplinkLQ );
2498- }
2499- break ;
2490+ uint8_t lqFormat = osdConfig ()-> crsf_lq_format ;
2491+
2492+ if (rxConfig ()-> receiverType == RX_TYPE_MSP )
2493+ lqFormat = OSD_CRSF_LQ_TYPE1 ;
2494+
2495+ switch (lqFormat ) {
25002496 case OSD_CRSF_LQ_TYPE2 :
25012497 if (!failsafeIsReceivingRxData ()) {
25022498 tfp_sprintf (buff + 1 , "%s:%3d" , " " , 0 );
@@ -2508,9 +2504,18 @@ static bool osdDrawSingleElement(uint8_t item)
25082504 if (!failsafeIsReceivingRxData ()) {
25092505 tfp_sprintf (buff + 1 , "%3d" , 0 );
25102506 } else {
2507+ int16_t scaledLQ = scaleRange (constrain (rxLinkStatistics .uplinkLQ , 0 , 100 ), 0 , 100 , 170 , 300 );
25112508 tfp_sprintf (buff + 1 , "%3d" , rxLinkStatistics .rfMode >= 2 ? scaledLQ : rxLinkStatistics .uplinkLQ );
25122509 }
25132510 break ;
2511+ case OSD_CRSF_LQ_TYPE1 :
2512+ default :
2513+ if (!failsafeIsReceivingRxData ()) {
2514+ tfp_sprintf (buff + 1 , "%3d" , 0 );
2515+ } else {
2516+ tfp_sprintf (buff + 1 , "%3d" , rxLinkStatistics .uplinkLQ );
2517+ }
2518+ break ;
25142519 }
25152520 if (!failsafeIsReceivingRxData ()) {
25162521 TEXT_ATTRIBUTES_ADD_BLINK (elemAttr );
@@ -2520,7 +2525,24 @@ static bool osdDrawSingleElement(uint8_t item)
25202525 break ;
25212526 }
25222527
2523- case OSD_CRSF_SNR_DB :
2528+ case OSD_LQ_DOWNLINK :
2529+ {
2530+ buff [0 ] = SYM_LQ ;
2531+ if (!failsafeIsReceivingRxData ()) {
2532+ tfp_sprintf (buff + 1 , "%3d%c" , 0 , SYM_AH_DECORATION_DOWN );
2533+ } else {
2534+ tfp_sprintf (buff + 1 , "%3d%c" , rxLinkStatistics .downlinkLQ , SYM_AH_DECORATION_DOWN );
2535+ }
2536+
2537+ if (!failsafeIsReceivingRxData ()) {
2538+ TEXT_ATTRIBUTES_ADD_BLINK (elemAttr );
2539+ } else if (rxLinkStatistics .downlinkLQ < osdConfig ()-> link_quality_alarm ) {
2540+ TEXT_ATTRIBUTES_ADD_BLINK (elemAttr );
2541+ }
2542+ break ;
2543+ }
2544+
2545+ case OSD_SNR_DB :
25242546 {
25252547 static pt1Filter_t snrFilterState ;
25262548 static timeMs_t snrUpdated = 0 ;
@@ -2539,23 +2561,49 @@ static bool osdDrawSingleElement(uint8_t item)
25392561 }
25402562 } else if (snrFiltered <= osdConfig ()-> snr_alarm ) {
25412563 buff [0 ] = SYM_SNR ;
2542- if (snrFiltered <= -10 ) {
2564+ if (snrFiltered <= -10 || snrFiltered >= 10 ) {
25432565 tfp_sprintf (buff + 1 , "%3d%c" , snrFiltered , SYM_DB );
25442566 } else {
2545- tfp_sprintf (buff + 1 , "%2d%c%c " , snrFiltered , SYM_DB , ' ' );
2567+ tfp_sprintf (buff + 1 , " %2d%c" , snrFiltered , SYM_DB );
25462568 }
25472569 }
25482570 break ;
25492571 }
25502572
2551- case OSD_CRSF_TX_POWER :
2573+ case OSD_TX_POWER_UPLINK :
25522574 {
25532575 if (!failsafeIsReceivingRxData ())
2554- tfp_sprintf (buff , "%s%c" , " " , SYM_BLANK );
2576+ tfp_sprintf (buff , "%s%c" , " " , SYM_MW );
25552577 else
25562578 tfp_sprintf (buff , "%4d%c" , rxLinkStatistics .uplinkTXPower , SYM_MW );
25572579 break ;
25582580 }
2581+
2582+ case OSD_RX_POWER_DOWNLINK :
2583+ {
2584+ if (!failsafeIsReceivingRxData ())
2585+ tfp_sprintf (buff , "%s%c%c" , " " , SYM_MW , SYM_AH_DECORATION_DOWN );
2586+ else
2587+ tfp_sprintf (buff , "%4d%c%c" , rxLinkStatistics .downlinkTXPower , SYM_MW , SYM_AH_DECORATION_DOWN );
2588+ break ;
2589+ }
2590+ case OSD_RX_BAND :
2591+ displayWriteChar (osdDisplayPort , elemPosX ++ , elemPosY , SYM_RX_BAND );
2592+ strcat (buff , rxLinkStatistics .band );
2593+ if (strlen (rxLinkStatistics .band ) < 4 )
2594+ for (uint8_t i = strlen (rxLinkStatistics .band ); i < 4 ; i ++ )
2595+ buff [i ] = ' ' ;
2596+ buff [4 ] = '\0' ;
2597+ break ;
2598+
2599+ case OSD_RX_MODE :
2600+ displayWriteChar (osdDisplayPort , elemPosX ++ , elemPosY , SYM_RX_MODE );
2601+ strcat (buff , rxLinkStatistics .mode );
2602+ if (strlen (rxLinkStatistics .mode ) < 6 )
2603+ for (uint8_t i = strlen (rxLinkStatistics .mode ); i < 6 ; i ++ )
2604+ buff [i ] = ' ' ;
2605+ buff [6 ] = '\0' ;
2606+ break ;
25592607#endif
25602608
25612609 case OSD_FORMATION_FLIGHT :
@@ -3996,7 +4044,7 @@ PG_RESET_TEMPLATE(osdConfig_t, osdConfig,
39964044 .adsb_distance_alert = SETTING_OSD_ADSB_DISTANCE_ALERT_DEFAULT ,
39974045 .adsb_ignore_plane_above_me_limit = SETTING_OSD_ADSB_IGNORE_PLANE_ABOVE_ME_LIMIT_DEFAULT ,
39984046#endif
3999- #ifdef USE_SERIALRX_CRSF
4047+ #if defined( USE_SERIALRX_CRSF ) || defined ( USE_RX_MSP )
40004048 .snr_alarm = SETTING_OSD_SNR_ALARM_DEFAULT ,
40014049 .crsf_lq_format = SETTING_OSD_CRSF_LQ_FORMAT_DEFAULT ,
40024050 .link_quality_alarm = SETTING_OSD_LINK_QUALITY_ALARM_DEFAULT ,
@@ -4147,11 +4195,15 @@ void pgResetFn_osdLayoutsConfig(osdLayoutsConfig_t *osdLayoutsConfig)
41474195 osdLayoutsConfig -> item_pos [0 ][OSD_PILOT_LOGO ] = OSD_POS (20 , 3 );
41484196 osdLayoutsConfig -> item_pos [0 ][OSD_VTX_CHANNEL ] = OSD_POS (8 , 6 );
41494197
4150- #ifdef USE_SERIALRX_CRSF
4151- osdLayoutsConfig -> item_pos [0 ][OSD_CRSF_RSSI_DBM ] = OSD_POS (23 , 12 );
4152- osdLayoutsConfig -> item_pos [0 ][OSD_CRSF_LQ ] = OSD_POS (23 , 11 );
4153- osdLayoutsConfig -> item_pos [0 ][OSD_CRSF_SNR_DB ] = OSD_POS (24 , 9 );
4154- osdLayoutsConfig -> item_pos [0 ][OSD_CRSF_TX_POWER ] = OSD_POS (24 , 10 );
4198+ #if defined(USE_SERIALRX_CRSF ) || defined(USE_RX_MSP )
4199+ osdLayoutsConfig -> item_pos [0 ][OSD_RSSI_DBM ] = OSD_POS (23 , 12 );
4200+ osdLayoutsConfig -> item_pos [0 ][OSD_LQ_UPLINK ] = OSD_POS (23 , 10 );
4201+ osdLayoutsConfig -> item_pos [0 ][OSD_LQ_DOWNLINK ] = OSD_POS (23 , 11 );
4202+ osdLayoutsConfig -> item_pos [0 ][OSD_SNR_DB ] = OSD_POS (24 , 9 );
4203+ osdLayoutsConfig -> item_pos [0 ][OSD_TX_POWER_UPLINK ] = OSD_POS (24 , 10 );
4204+ osdLayoutsConfig -> item_pos [0 ][OSD_RX_POWER_DOWNLINK ] = OSD_POS (24 , 11 );
4205+ osdLayoutsConfig -> item_pos [0 ][OSD_RX_BAND ] = OSD_POS (24 , 12 );
4206+ osdLayoutsConfig -> item_pos [0 ][OSD_RX_MODE ] = OSD_POS (24 , 13 );
41554207#endif
41564208
41574209 osdLayoutsConfig -> item_pos [0 ][OSD_ONTIME ] = OSD_POS (23 , 8 );
0 commit comments