@@ -264,17 +264,25 @@ static void luadevUpdateModelID() {
264264 strcat (modelMatchUnit," )" );
265265}
266266
267- static void luadevUpdateTlmBandwidth () {
268- if ((expresslrs_tlm_ratio_e)config.GetTlm ()){
269- tlmBandwidth[0 ] = ' ' ;
270- uint32_t hz = RateEnumToHz (ExpressLRS_currAirRate_Modparams->enum_rate );
271- uint32_t tlmRatio = TLMratioEnumToValue ((expresslrs_tlm_ratio_e)config.GetTlm ());
272- uint32_t bandwidthValue = ((float )hz / tlmRatio) *1 /2 *5 *8 ;
273- itoa (bandwidthValue,tlmBandwidth+2 ,10 );
274- strcat (tlmBandwidth," bps)" );
275- } else {
267+ static void luadevUpdateTlmBandwidth ()
268+ {
269+ expresslrs_tlm_ratio_e eRatio = (expresslrs_tlm_ratio_e)config.GetTlm ();
270+ if (eRatio == TLM_RATIO_NO_TLM)
271+ {
276272 tlmBandwidth[0 ] = ' \0 ' ;
277273 }
274+ else
275+ {
276+ tlmBandwidth[0 ] = ' ' ;
277+
278+ uint16_t hz = RateEnumToHz (ExpressLRS_currAirRate_Modparams->enum_rate );
279+ uint8_t ratiodiv = TLMratioEnumToValue (eRatio);
280+ uint8_t burst = TLMBurstMaxForRateRatio (hz, ratiodiv);
281+ uint32_t bandwidthValue = ELRS_TELEMETRY_BYTES_PER_CALL * 8U * burst * hz / ratiodiv / (burst + 1 );
282+
283+ itoa (bandwidthValue, &tlmBandwidth[2 ], 10 );
284+ strcat (tlmBandwidth, " bps)" );
285+ }
278286}
279287
280288static void luadevGeneratePowerOpts ()
@@ -395,57 +403,86 @@ static void luahandSimpleSendCmd(struct luaPropertiesCommon *item, uint8_t arg)
395403 }
396404}
397405
398- static void updateFolderName (){
399-
400- // power folder name
406+ static void updateFolderName_TxPower ()
407+ {
401408 uint8_t txPwrDyn = config.GetDynamicPower () ? config.GetBoostChannel () + 1 : 0 ;
402- uint8_t pwrFolderLabelOffset = getSeparatorIndex (2 ,pwrFolderDynamicName); // start writing name after the 2nd space
409+ uint8_t pwrFolderLabelOffset = getSeparatorIndex (2 , pwrFolderDynamicName); // start writing name after the 2nd space
410+
411+ // Power Level
403412 pwrFolderDynamicName[pwrFolderLabelOffset++] = ' (' ;
404413 pwrFolderLabelOffset += findLuaSelectionLabel (&luaPower, &pwrFolderDynamicName[pwrFolderLabelOffset], config.GetPower () - MinPower);
405- if (txPwrDyn){
414+
415+ // Dynamic Power
416+ if (txPwrDyn)
417+ {
406418 pwrFolderDynamicName[pwrFolderLabelOffset++] = folderNameSeparator[0 ];
407419 pwrFolderLabelOffset += findLuaSelectionLabel (&luaDynamicPower, &pwrFolderDynamicName[pwrFolderLabelOffset], txPwrDyn);
408420 }
421+
409422 pwrFolderDynamicName[pwrFolderLabelOffset++] = ' )' ;
410423 pwrFolderDynamicName[pwrFolderLabelOffset] = ' \0 ' ;
411- // vtx folder
424+ }
425+
426+ static void updateFolderName_VtxAdmin ()
427+ {
412428 uint8_t vtxBand = config.GetVtxBand ();
413- if (vtxBand){
429+ if (vtxBand)
430+ {
414431 luaVtxFolder.dyn_name = vtxFolderDynamicName;
415432 uint8_t vtxFolderLabelOffset = getSeparatorIndex (2 ,vtxFolderDynamicName); // start writing name after the 2nd space
416433 vtxFolderDynamicName[vtxFolderLabelOffset++] = ' (' ;
434+
435+ // Band
417436 vtxFolderLabelOffset += findLuaSelectionLabel (&luaVtxBand, &vtxFolderDynamicName[vtxFolderLabelOffset], vtxBand);
418437 vtxFolderDynamicName[vtxFolderLabelOffset++] = folderNameSeparator[1 ];
438+
439+ // Channel
419440 vtxFolderLabelOffset += findLuaSelectionLabel (&luaVtxChannel, &vtxFolderDynamicName[vtxFolderLabelOffset], config.GetVtxChannel ());
441+
442+ // VTX Power
420443 uint8_t vtxPwr = config.GetVtxPower ();
421444 // if power is no-change (-), don't show, also hide pitmode
422- if (vtxPwr){
445+ if (vtxPwr)
446+ {
423447 vtxFolderDynamicName[vtxFolderLabelOffset++] = folderNameSeparator[1 ];
424448 vtxFolderLabelOffset += findLuaSelectionLabel (&luaVtxPwr, &vtxFolderDynamicName[vtxFolderLabelOffset], vtxPwr);
425-
449+
450+ // Pit Mode
426451 uint8_t vtxPit = config.GetVtxPitmode ();
427452 // if pitmode is off, don't show
428453 // show pitmode AuxSwitch or show P if not OFF
429- if (vtxPit != 0 ){
430- if (vtxPit != 1 ){
454+ if (vtxPit != 0 )
455+ {
456+ if (vtxPit != 1 )
457+ {
431458 vtxFolderDynamicName[vtxFolderLabelOffset++] = folderNameSeparator[1 ];
432459 vtxFolderLabelOffset += findLuaSelectionLabel (&luaVtxPit, &vtxFolderDynamicName[vtxFolderLabelOffset], vtxPit);
433- } else {
460+ }
461+ else
462+ {
434463 vtxFolderDynamicName[vtxFolderLabelOffset++] = folderNameSeparator[1 ];
435464 vtxFolderDynamicName[vtxFolderLabelOffset++] = ' P' ;
436465 }
437466 }
438467 }
439468 vtxFolderDynamicName[vtxFolderLabelOffset++] = ' )' ;
440469 vtxFolderDynamicName[vtxFolderLabelOffset] = ' \0 ' ;
441- } else {
442- // don't show vtx settings if band is OFF
470+ }
471+ else
472+ {
473+ // don't show vtx settings if band is OFF
443474 luaVtxFolder.dyn_name = NULL ;
444475 }
445476}
446477
478+ static void updateFolderNames ()
479+ {
480+ updateFolderName_TxPower ();
481+ updateFolderName_VtxAdmin ();
482+ }
483+
447484static void registerLuaParameters ()
448- {
485+ {
449486 registerLUAParameter (&luaAirRate, [](struct luaPropertiesCommon *item, uint8_t arg) {
450487 if ((arg < RATE_MAX) && (arg >= 0 ))
451488 {
@@ -500,12 +537,12 @@ static void registerLuaParameters()
500537 luadevGeneratePowerOpts ();
501538 registerLUAParameter (&luaPower, [](struct luaPropertiesCommon *item, uint8_t arg) {
502539 config.SetPower ((PowerLevels_e)constrain (arg + MinPower, MinPower, MaxPower));
503- updateFolderName ();
540+ updateFolderName_TxPower ();
504541 }, luaPowerFolder.common .id );
505542 registerLUAParameter (&luaDynamicPower, [](struct luaPropertiesCommon *item, uint8_t arg) {
506543 config.SetDynamicPower (arg > 0 );
507544 config.SetBoostChannel ((arg - 1 ) > 0 ? arg - 1 : 0 );
508- updateFolderName ();
545+ updateFolderName_TxPower ();
509546 }, luaPowerFolder.common .id );
510547#if defined(GPIO_PIN_FAN_EN)
511548 registerLUAParameter (&luaFanThreshold, [](struct luaPropertiesCommon *item, uint8_t arg){
@@ -519,19 +556,19 @@ static void registerLuaParameters()
519556 registerLUAParameter (&luaVtxFolder);
520557 registerLUAParameter (&luaVtxBand, [](struct luaPropertiesCommon *item, uint8_t arg) {
521558 config.SetVtxBand (arg);
522- updateFolderName ();
559+ updateFolderName_VtxAdmin ();
523560 }, luaVtxFolder.common .id );
524561 registerLUAParameter (&luaVtxChannel, [](struct luaPropertiesCommon *item, uint8_t arg) {
525562 config.SetVtxChannel (arg);
526- updateFolderName ();
563+ updateFolderName_VtxAdmin ();
527564 }, luaVtxFolder.common .id );
528565 registerLUAParameter (&luaVtxPwr, [](struct luaPropertiesCommon *item, uint8_t arg) {
529566 config.SetVtxPower (arg);
530- updateFolderName ();
567+ updateFolderName_VtxAdmin ();
531568 }, luaVtxFolder.common .id );
532569 registerLUAParameter (&luaVtxPit, [](struct luaPropertiesCommon *item, uint8_t arg) {
533570 config.SetVtxPitmode (arg);
534- updateFolderName ();
571+ updateFolderName_VtxAdmin ();
535572 }, luaVtxFolder.common .id );
536573 registerLUAParameter (&luaVtxSend, &luahandSimpleSendCmd, luaVtxFolder.common .id );
537574 // WIFI folder
@@ -596,17 +633,14 @@ static int timeout()
596633static int start ()
597634{
598635 CRSF::RecvParameterUpdate = &luaParamUpdateReq;
599- luadevUpdateModelID ();
600- luadevUpdateRateSensitivity ();
601- luadevUpdateTlmBandwidth ();
602636 registerLuaParameters ();
603637 registerLUAPopulateParams ([](){
604638 itoa (CRSF::BadPktsCountResult, luaBadGoodString, 10 );
605639 strcat (luaBadGoodString, " /" );
606640 itoa (CRSF::GoodPktsCountResult, luaBadGoodString + strlen (luaBadGoodString), 10 );
607641 setLuaStringValue (&luaInfo, luaBadGoodString);
608642 });
609- updateFolderName ();
643+ updateFolderNames ();
610644 event ();
611645 return DURATION_IMMEDIATELY;
612646}
0 commit comments