mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-23 08:15:13 +03:00
Attempt to improve frequency analyser on small LCD ... definitely not good
This commit is contained in:
parent
9dca2d6b79
commit
380a76eddd
3 changed files with 18 additions and 1 deletions
|
@ -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;
|
reusableBuffer.spectrumAnalyser.freq = uint32_t(checkIncDec(event, frequency, reusableBuffer.spectrumAnalyser.freqMin, reusableBuffer.spectrumAnalyser.freqMax, 0)) * 1000000;
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
reusableBuffer.spectrumAnalyser.dirty = true;
|
reusableBuffer.spectrumAnalyser.dirty = true;
|
||||||
|
memclear(reusableBuffer.spectrumAnalyser.peak, sizeof(reusableBuffer.spectrumAnalyser.peak));
|
||||||
|
memclear(reusableBuffer.spectrumAnalyser.bars, sizeof(reusableBuffer.spectrumAnalyser.bars));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -103,6 +105,8 @@ void menuRadioSpectrumAnalyser(event_t event)
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
reusableBuffer.spectrumAnalyser.step = reusableBuffer.spectrumAnalyser.span / LCD_W;
|
reusableBuffer.spectrumAnalyser.step = reusableBuffer.spectrumAnalyser.span / LCD_W;
|
||||||
reusableBuffer.spectrumAnalyser.dirty = true;
|
reusableBuffer.spectrumAnalyser.dirty = true;
|
||||||
|
memclear(reusableBuffer.spectrumAnalyser.peak, sizeof(reusableBuffer.spectrumAnalyser.peak));
|
||||||
|
memclear(reusableBuffer.spectrumAnalyser.bars, sizeof(reusableBuffer.spectrumAnalyser.bars));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -114,6 +118,14 @@ void menuRadioSpectrumAnalyser(event_t event)
|
||||||
for (uint8_t i=0; i<LCD_W; i++) {
|
for (uint8_t i=0; i<LCD_W; i++) {
|
||||||
uint8_t h = min<uint8_t >(reusableBuffer.spectrumAnalyser.bars[i] >> 1, LCD_H);
|
uint8_t h = min<uint8_t >(reusableBuffer.spectrumAnalyser.bars[i] >> 1, LCD_H);
|
||||||
lcdDrawSolidVerticalLine(i, LCD_H - h, h);
|
lcdDrawSolidVerticalLine(i, LCD_H - h, h);
|
||||||
|
h = min<uint8_t >(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<int8_t>(FH, LCD_H - peak_y - FH);
|
int8_t y = max<int8_t>(FH, LCD_H - peak_y - FH);
|
||||||
|
|
|
@ -1189,6 +1189,7 @@ union ReusableBuffer
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint8_t bars[LCD_W];
|
uint8_t bars[LCD_W];
|
||||||
|
uint8_t peak[LCD_W];
|
||||||
uint32_t freq;
|
uint32_t freq;
|
||||||
uint32_t span;
|
uint32_t span;
|
||||||
uint32_t step;
|
uint32_t step;
|
||||||
|
|
|
@ -223,7 +223,11 @@ void processSpectrumAnalyserFrame(uint8_t module, uint8_t * frame)
|
||||||
int32_t position = *frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2);
|
int32_t position = *frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2);
|
||||||
uint32_t x = (position * LCD_W / 8) / (reusableBuffer.spectrumAnalyser.span / 8);
|
uint32_t x = (position * LCD_W / 8) / (reusableBuffer.spectrumAnalyser.span / 8);
|
||||||
if (x < LCD_W) {
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue