Skip to content

Commit b2ec4e2

Browse files
committed
Fix stale GUI/protocol SNR by updating stats before frame delivery
1 parent c4bbcb2 commit b2ec4e2

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/gui/modem/modem_engine.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,17 @@ ModemEngine::ModemEngine() {
6464

6565
// Set callbacks to wire into existing ModemEngine callbacks
6666
streaming_decoder_->setFrameCallback([this](const DecodeResult& result) {
67-
if (result.success && !result.frame_data.empty()) {
68-
deliverFrame(result.frame_data);
69-
notifyFrameParsed(result.frame_data, result.frame_type);
70-
}
71-
// Update stats
67+
// Update SNR/sync stats before delivering frame so downstream callbacks
68+
// (ProtocolEngine via raw_data_callback_) read fresh channel estimates.
7269
updateStats([&](LoopbackStats& s) {
7370
s.snr_db = result.snr_db;
7471
s.synced = result.success;
7572
});
73+
74+
if (result.success && !result.frame_data.empty()) {
75+
deliverFrame(result.frame_data);
76+
notifyFrameParsed(result.frame_data, result.frame_type);
77+
}
7678
// Save peer CFO for future frames
7779
if (std::abs(result.cfo_hz) > 0.1f) {
7880
peer_cfo_hz_ = result.cfo_hz;
@@ -84,7 +86,11 @@ ModemEngine::ModemEngine() {
8486
if (ping_received_callback_) {
8587
ping_received_callback_(snr_db);
8688
}
87-
updateStats([](LoopbackStats& s) { s.frames_received++; });
89+
updateStats([&](LoopbackStats& s) {
90+
s.frames_received++;
91+
s.snr_db = snr_db;
92+
s.synced = true;
93+
});
8894
last_rx_complete_time_ = std::chrono::steady_clock::now();
8995
});
9096

0 commit comments

Comments
 (0)