diff --git a/radio/src/gui/480x272/radio_spectrum_analyser.cpp b/radio/src/gui/480x272/radio_spectrum_analyser.cpp index e94e6c5a5..734cc6dd7 100644 --- a/radio/src/gui/480x272/radio_spectrum_analyser.cpp +++ b/radio/src/gui/480x272/radio_spectrum_analyser.cpp @@ -110,14 +110,18 @@ bool menuRadioSpectrumAnalyser(event_t event) } } - for (uint32_t frequency = ((reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2) / 10000000) * 10000000; frequency < reusableBuffer.spectrumAnalyser.freq + reusableBuffer.spectrumAnalyser.span / 2; frequency += 10000000) { - int32_t offset = frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2); - uint32_t x = offset / reusableBuffer.spectrumAnalyser.step; - if (x > 0 && x < LCD_W - 1) - lcdDrawVerticalLine(x, MENU_HEADER_HEIGHT, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT, STASHED, CURVE_AXIS_COLOR); + for (uint32_t frequency = ((reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2) / 10000000) * 10000000 + 10000000; ; frequency += 10000000) { + int offset = frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2); + int x = offset / reusableBuffer.spectrumAnalyser.step; + if (x >= LCD_W - 1) + break; + lcdDrawVerticalLine(x, MENU_HEADER_HEIGHT, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT, STASHED, CURVE_AXIS_COLOR); } - for (coord_t y = MENU_HEADER_HEIGHT + (MENU_FOOTER_TOP - MENU_HEADER_HEIGHT) / 8; y < MENU_FOOTER_TOP; y += (MENU_FOOTER_TOP - MENU_HEADER_HEIGHT) / 8) { + for (uint8_t power = 20; ; power += 20) { + int y = MENU_FOOTER_TOP - 1 - limit(0, power << 1, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT); + if (y <= MENU_HEADER_HEIGHT) + break; lcdDrawHorizontalLine(0, y, LCD_W, STASHED, CURVE_AXIS_COLOR); } @@ -126,7 +130,7 @@ bool menuRadioSpectrumAnalyser(event_t event) coord_t prev_yv = (coord_t)-1; for (coord_t xv=0; xv(0, reusableBuffer.spectrumAnalyser.bars[xv] << 1, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT); + coord_t yv = MENU_FOOTER_TOP - 1 - limit(0, reusableBuffer.spectrumAnalyser.bars[xv] << 1, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT); if (prev_yv != (coord_t)-1) { if (yv < peak_y) { peak_x = xv; @@ -148,7 +152,7 @@ bool menuRadioSpectrumAnalyser(event_t event) prev_yv = (coord_t)-1; for (coord_t xv=0; xv(0, reusableBuffer.spectrumAnalyser.max[xv] << 1, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT); + coord_t yv = MENU_FOOTER_TOP - 1 - limit(0, reusableBuffer.spectrumAnalyser.max[xv] << 1, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT); if (prev_yv != (coord_t)-1) { if (prev_yv < yv) { for (int y=prev_yv; y<=yv; y+=1) { diff --git a/radio/src/pulses/pxx2.h b/radio/src/pulses/pxx2.h index 7ce8454e7..49b6c1344 100644 --- a/radio/src/pulses/pxx2.h +++ b/radio/src/pulses/pxx2.h @@ -58,6 +58,12 @@ #define PXX2_HW_INFO_TX_ID 0xFF +#if defined(COLORLCD) + #define SPECTRUM_ANALYSER_POWER_FLOOR -120 /*dBm*/ +#else + #define SPECTRUM_ANALYSER_POWER_FLOOR -120 /*dBm*/ +#endif + enum PXX2ModuleModelID { PXX2_MODULE_NONE, PXX2_MODULE_XJT, diff --git a/radio/src/telemetry/frsky_pxx2.cpp b/radio/src/telemetry/frsky_pxx2.cpp index bf700a271..52a5e86e6 100644 --- a/radio/src/telemetry/frsky_pxx2.cpp +++ b/radio/src/telemetry/frsky_pxx2.cpp @@ -237,7 +237,7 @@ void processSpectrumAnalyserFrame(uint8_t module, uint8_t * frame) uint32_t x = offset / reusableBuffer.spectrumAnalyser.step; if (x < LCD_W) { - reusableBuffer.spectrumAnalyser.bars[x] = 0x80 + power; + reusableBuffer.spectrumAnalyser.bars[x] = max(0, -SPECTRUM_ANALYSER_POWER_FLOOR + power); // we remove everything below -120dB #if defined(COLORLCD) if (reusableBuffer.spectrumAnalyser.bars[x] > reusableBuffer.spectrumAnalyser.max[x]) reusableBuffer.spectrumAnalyser.max[x] = reusableBuffer.spectrumAnalyser.bars[x];