From 380a76eddddf04737687cde770237779b48216b6 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 7 May 2019 12:24:39 +0200 Subject: [PATCH] Attempt to improve frequency analyser on small LCD ... definitely not good --- .../gui/common/stdlcd/radio_spectrum_analyser.cpp | 12 ++++++++++++ radio/src/opentx.h | 1 + radio/src/telemetry/frsky_pxx2.cpp | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp b/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp index 1ba581994..f96b52ea8 100644 --- a/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/common/stdlcd/radio_spectrum_analyser.cpp @@ -88,6 +88,8 @@ void menuRadioSpectrumAnalyser(event_t event) reusableBuffer.spectrumAnalyser.freq = uint32_t(checkIncDec(event, frequency, reusableBuffer.spectrumAnalyser.freqMin, reusableBuffer.spectrumAnalyser.freqMax, 0)) * 1000000; if (checkIncDec_Ret) { reusableBuffer.spectrumAnalyser.dirty = true; + memclear(reusableBuffer.spectrumAnalyser.peak, sizeof(reusableBuffer.spectrumAnalyser.peak)); + memclear(reusableBuffer.spectrumAnalyser.bars, sizeof(reusableBuffer.spectrumAnalyser.bars)); } } break; @@ -103,6 +105,8 @@ void menuRadioSpectrumAnalyser(event_t event) if (checkIncDec_Ret) { reusableBuffer.spectrumAnalyser.step = reusableBuffer.spectrumAnalyser.span / LCD_W; reusableBuffer.spectrumAnalyser.dirty = true; + memclear(reusableBuffer.spectrumAnalyser.peak, sizeof(reusableBuffer.spectrumAnalyser.peak)); + memclear(reusableBuffer.spectrumAnalyser.bars, sizeof(reusableBuffer.spectrumAnalyser.bars)); } } break; @@ -114,6 +118,14 @@ void menuRadioSpectrumAnalyser(event_t event) for (uint8_t i=0; i(reusableBuffer.spectrumAnalyser.bars[i] >> 1, LCD_H); lcdDrawSolidVerticalLine(i, LCD_H - h, h); + h = min(reusableBuffer.spectrumAnalyser.peak[i] >> 1, LCD_H); + if (h) { + lcdDrawPoint(i, LCD_H - h, FORCE); + if (h > peak_y) { + peak_x = i; + peak_y = h; + } + } } int8_t y = max(FH, LCD_H - peak_y - FH); diff --git a/radio/src/opentx.h b/radio/src/opentx.h index bafc0517d..6c86e77a4 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1189,6 +1189,7 @@ union ReusableBuffer struct { uint8_t bars[LCD_W]; + uint8_t peak[LCD_W]; uint32_t freq; uint32_t span; uint32_t step; diff --git a/radio/src/telemetry/frsky_pxx2.cpp b/radio/src/telemetry/frsky_pxx2.cpp index 7e05082fb..9b3c0337d 100644 --- a/radio/src/telemetry/frsky_pxx2.cpp +++ b/radio/src/telemetry/frsky_pxx2.cpp @@ -223,7 +223,11 @@ void processSpectrumAnalyserFrame(uint8_t module, uint8_t * frame) int32_t position = *frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2); uint32_t x = (position * LCD_W / 8) / (reusableBuffer.spectrumAnalyser.span / 8); if (x < LCD_W) { - reusableBuffer.spectrumAnalyser.bars[x] = 0x80 + *power; + uint8_t powerUnsigned = 0x80 + *power; + reusableBuffer.spectrumAnalyser.bars[x] = powerUnsigned; + if (powerUnsigned > reusableBuffer.spectrumAnalyser.peak[x]) { + reusableBuffer.spectrumAnalyser.peak[x] = powerUnsigned; + } } }