@@ -349,29 +349,43 @@ App::App(const Options& opts) : options_(opts), sim_ui_visible_(opts.enable_sim)
349349 protocol_.onPingReceived ();
350350 });
351351
352- protocol_.setDataModeChangedCallback ([this ](Modulation mod, CodeRate rate, float snr_db) {
352+ protocol_.setDataModeChangedCallback ([this ](Modulation mod, CodeRate rate, float snr_db, float peer_fading ) {
353353 // Update modem engine with new data mode
354354 modem_.setDataMode (mod, rate);
355355
356- // Get waveform mode and fading index from modem
356+ // Local estimate for operator visibility/debugging.
357357 auto waveform = modem_.getWaveformMode ();
358- float fading = modem_.getFadingIndex ();
359-
360- const char * quality = fadingToQuality (fading);
358+ float local_fading = modem_.getFadingIndex ();
359+
360+ const char * local_quality = fadingToQuality (local_fading);
361+ bool peer_fading_valid = (peer_fading >= 0 .0f );
362+ const char * peer_quality = peer_fading_valid ? fadingToQuality (peer_fading) : " n/a" ;
363+ char peer_fading_text[32 ];
364+ if (peer_fading_valid) {
365+ snprintf (peer_fading_text, sizeof (peer_fading_text), " %.2f %s" , peer_fading, peer_quality);
366+ } else {
367+ snprintf (peer_fading_text, sizeof (peer_fading_text), " n/a" );
368+ }
361369 const char * wf_name = waveformDisplayName (waveform);
362- guiLog (" MODE_CHANGE: %s %s %s (peer_snr=%.1f dB, local_fading=%.2f %s)" ,
370+ guiLog (" MODE_CHANGE: %s %s %s (peer_snr=%.1f dB, peer_fading=%s, local_fading=%.2f %s)" ,
363371 wf_name, modulationToString (mod), codeRateToString (rate),
364- snr_db, fading, quality);
372+ snr_db, peer_fading_text,
373+ local_fading, local_quality);
365374
366375 // Format display with waveform info and channel quality
367- char buf[120 ];
376+ char buf[200 ];
368377 if (waveform == protocol::WaveformMode::MC_DPSK) {
369- snprintf (buf, sizeof (buf), " [MODE] MC-DPSK 8 carriers %s (peer SNR=%d dB, local fading=%.2f %s)" ,
370- codeRateToString (rate), static_cast <int >(snr_db), fading, quality);
378+ snprintf (buf, sizeof (buf),
379+ " [MODE] MC-DPSK 8 carriers %s (peer SNR=%d dB, peer fading=%s, local fading=%.2f %s)" ,
380+ codeRateToString (rate), static_cast <int >(snr_db),
381+ peer_fading_text,
382+ local_fading, local_quality);
371383 } else {
372- snprintf (buf, sizeof (buf), " [MODE] %s %s %s (peer SNR=%d dB, local fading=%.2f %s)" ,
384+ snprintf (buf, sizeof (buf),
385+ " [MODE] %s %s %s (peer SNR=%d dB, peer fading=%s, local fading=%.2f %s)" ,
373386 wf_name, modulationToString (mod), codeRateToString (rate),
374- static_cast <int >(snr_db), fading, quality);
387+ static_cast <int >(snr_db), peer_fading_text,
388+ local_fading, local_quality);
375389 }
376390 rx_log_.push_back (buf);
377391 if (rx_log_.size () > MAX_RX_LOG) {
@@ -713,24 +727,35 @@ void App::initVirtualStation() {
713727 }
714728 });
715729
716- virtual_protocol_.setDataModeChangedCallback ([this ](Modulation mod, CodeRate rate, float snr_db) {
730+ virtual_protocol_.setDataModeChangedCallback ([this ](Modulation mod, CodeRate rate, float snr_db, float peer_fading ) {
717731 // Update virtual modem engine with new data mode
718732 virtual_modem_->setDataMode (mod, rate);
719733
720734 // Show [SIM-MODE] line so user can see what the responder actually measured
721735 auto waveform = virtual_modem_->getWaveformMode ();
722- float fading = virtual_modem_->getFadingIndex ();
723- const char * quality = fadingToQuality (fading);
736+ float local_fading = virtual_modem_->getFadingIndex ();
737+ const char * local_quality = fadingToQuality (local_fading);
738+ bool peer_fading_valid = (peer_fading >= 0 .0f );
739+ const char * peer_quality = peer_fading_valid ? fadingToQuality (peer_fading) : " n/a" ;
740+ char peer_fading_text[32 ];
741+ if (peer_fading_valid) {
742+ snprintf (peer_fading_text, sizeof (peer_fading_text), " %.2f %s" , peer_fading, peer_quality);
743+ } else {
744+ snprintf (peer_fading_text, sizeof (peer_fading_text), " n/a" );
745+ }
724746 const char * wf_name = waveformDisplayName (waveform);
725747
726- guiLog (" SIM: Virtual MODE_CHANGE: %s %s %s (peer_snr=%.1f dB, local_fading=%.2f %s)" ,
748+ guiLog (" SIM: Virtual MODE_CHANGE: %s %s %s (peer_snr=%.1f dB, peer_fading=%s, local_fading=%.2f %s)" ,
727749 wf_name, modulationToString (mod), codeRateToString (rate),
728- snr_db, fading, quality);
750+ snr_db, peer_fading_text,
751+ local_fading, local_quality);
729752
730- char buf[120 ];
731- snprintf (buf, sizeof (buf), " [SIM-MODE] %s %s %s (peer SNR=%d dB, local fading=%.2f %s)" ,
753+ char buf[200 ];
754+ snprintf (buf, sizeof (buf),
755+ " [SIM-MODE] %s %s %s (peer SNR=%d dB, peer fading=%s, local fading=%.2f %s)" ,
732756 wf_name, modulationToString (mod), codeRateToString (rate),
733- static_cast <int >(snr_db), fading, quality);
757+ static_cast <int >(snr_db), peer_fading_text,
758+ local_fading, local_quality);
734759 rx_log_.push_back (buf);
735760 if (rx_log_.size () > MAX_RX_LOG) rx_log_.pop_front ();
736761 });
0 commit comments