mirror of
https://github.com/opentx/opentx.git
synced 2025-07-19 06:15:10 +03:00
Fixes #7004
This commit is contained in:
parent
a2c63fc758
commit
afeca718c9
1 changed files with 18 additions and 14 deletions
|
@ -30,7 +30,7 @@ enum SpectrumFields
|
||||||
SPECTRUM_FIELDS_MAX
|
SPECTRUM_FIELDS_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
coord_t getAverage(uint8_t number, uint8_t * value)
|
coord_t getAverage(uint8_t number, const uint8_t * value)
|
||||||
{
|
{
|
||||||
uint16_t sum = 0;
|
uint16_t sum = 0;
|
||||||
for (uint8_t i = 0; i < number; i++) {
|
for (uint8_t i = 0; i < number; i++) {
|
||||||
|
@ -40,7 +40,6 @@ coord_t getAverage(uint8_t number, uint8_t * value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SPECTRUM_ROW (isModuleMultimodule(g_moduleIdx) ? READONLY_ROW : (uint8_t)0)
|
#define SPECTRUM_ROW (isModuleMultimodule(g_moduleIdx) ? READONLY_ROW : (uint8_t)0)
|
||||||
constexpr uint8_t GREYBAR_HEIGHT = 12;
|
|
||||||
|
|
||||||
bool menuRadioSpectrumAnalyser(event_t event)
|
bool menuRadioSpectrumAnalyser(event_t event)
|
||||||
{
|
{
|
||||||
|
@ -151,8 +150,13 @@ bool menuRadioSpectrumAnalyser(event_t event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr coord_t SCALE_HEIGHT = 12;
|
||||||
|
constexpr coord_t SCALE_TOP = MENU_FOOTER_TOP - SCALE_HEIGHT;
|
||||||
|
constexpr coord_t BARGRAPH_HEIGHT = SCALE_TOP - MENU_HEADER_HEIGHT;
|
||||||
|
|
||||||
// Draw fixed part (scale,..)
|
// Draw fixed part (scale,..)
|
||||||
lcdDrawFilledRect(0, MENU_FOOTER_TOP - GREYBAR_HEIGHT, LCD_W, GREYBAR_HEIGHT, SOLID, CURVE_AXIS_COLOR);
|
lcdDrawSolidFilledRect(0, SCALE_TOP, LCD_W, SCALE_HEIGHT, CURVE_AXIS_COLOR);
|
||||||
for (uint32_t frequency = ((reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2) / 10000000) * 10000000 + 10000000; ; frequency += 10000000) {
|
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 offset = frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2);
|
||||||
int x = offset / reusableBuffer.spectrumAnalyser.step;
|
int x = offset / reusableBuffer.spectrumAnalyser.step;
|
||||||
|
@ -161,7 +165,7 @@ bool menuRadioSpectrumAnalyser(event_t event)
|
||||||
lcdDrawVerticalLine(x, MENU_HEADER_HEIGHT, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT, STASHED, CURVE_AXIS_COLOR);
|
lcdDrawVerticalLine(x, MENU_HEADER_HEIGHT, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT, STASHED, CURVE_AXIS_COLOR);
|
||||||
|
|
||||||
if ((frequency / 1000000) % 2 == 0) {
|
if ((frequency / 1000000) % 2 == 0) {
|
||||||
lcdDrawNumber(x, MENU_FOOTER_TOP - GREYBAR_HEIGHT - 1, frequency / 1000000, TINSIZE | TEXT_COLOR | CENTERED);
|
lcdDrawNumber(x, SCALE_TOP - 1, frequency / 1000000, TINSIZE | TEXT_COLOR | CENTERED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,29 +176,29 @@ bool menuRadioSpectrumAnalyser(event_t event)
|
||||||
lcdDrawHorizontalLine(0, y, LCD_W, STASHED, CURVE_AXIS_COLOR);
|
lcdDrawHorizontalLine(0, y, LCD_W, STASHED, CURVE_AXIS_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw Tracker
|
// Draw tracker
|
||||||
int offset = reusableBuffer.spectrumAnalyser.track - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2);
|
int offset = reusableBuffer.spectrumAnalyser.track - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2);
|
||||||
int x = offset / reusableBuffer.spectrumAnalyser.step;
|
int x = limit<int>(0, offset / reusableBuffer.spectrumAnalyser.step, LCD_W - 1);
|
||||||
lcdDrawVerticalLine(x, MENU_HEADER_HEIGHT, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT - GREYBAR_HEIGHT, SOLID, TEXT_COLOR);
|
lcdDrawSolidVerticalLine(x, MENU_HEADER_HEIGHT, BARGRAPH_HEIGHT, TEXT_COLOR);
|
||||||
|
|
||||||
// Draw spectrum data
|
// Draw spectrum data
|
||||||
constexpr uint8_t step = 4;
|
constexpr uint8_t step = 4;
|
||||||
|
|
||||||
for (coord_t xv = 0; xv <= LCD_W - step; xv += 4) {
|
for (coord_t xv = 0; xv < LCD_W; xv += step) {
|
||||||
coord_t yv = MENU_FOOTER_TOP - 1 - limit<int>(0, getAverage(step, &reusableBuffer.spectrumAnalyser.bars[xv]) << 1, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT);
|
coord_t yv = SCALE_TOP - 1 - limit<int>(0, getAverage(step, &reusableBuffer.spectrumAnalyser.bars[xv]) << 1, BARGRAPH_HEIGHT);
|
||||||
coord_t max_yv = MENU_FOOTER_TOP - 1 - limit<int>(0, getAverage(step, &reusableBuffer.spectrumAnalyser.max[xv]) << 1, LCD_H - MENU_HEADER_HEIGHT - MENU_FOOTER_HEIGHT);
|
coord_t max_yv = SCALE_TOP - 1 - limit<int>(0, getAverage(step, &reusableBuffer.spectrumAnalyser.max[xv]) << 1, BARGRAPH_HEIGHT);
|
||||||
|
|
||||||
// Signal bar
|
// Signal bar
|
||||||
lcdDrawSolidFilledRect(xv, yv, step - 1, LCD_H - yv - MENU_FOOTER_HEIGHT - GREYBAR_HEIGHT, TEXT_INVERTED_BGCOLOR);
|
lcdDrawSolidFilledRect(xv, yv, step - 1, SCALE_TOP - yv, TEXT_INVERTED_BGCOLOR);
|
||||||
lcdDrawRect(xv, yv, step - 1, LCD_H - yv - MENU_FOOTER_HEIGHT - GREYBAR_HEIGHT);
|
// lcdDrawSolidRect(xv, yv, step - 1, SCALE_TOP - yv, 1, TEXT_COLOR);
|
||||||
|
|
||||||
// Signal max
|
// Signal max
|
||||||
lcdDrawLine(xv, max_yv, xv + step, max_yv);
|
lcdDrawSolidHorizontalLine(xv, max_yv, step - 1, TEXT_COLOR);
|
||||||
|
|
||||||
// Decay max values
|
// Decay max values
|
||||||
if (max_yv < yv) { // Those value are INVERTED (MENU_FOOTER_TOP - value)
|
if (max_yv < yv) { // Those value are INVERTED (MENU_FOOTER_TOP - value)
|
||||||
for (uint8_t i = 0; i < step; i++) {
|
for (uint8_t i = 0; i < step; i++) {
|
||||||
reusableBuffer.spectrumAnalyser.max[xv + i] -= 1;
|
reusableBuffer.spectrumAnalyser.max[xv + i] = max<int>(0, reusableBuffer.spectrumAnalyser.max[xv + i] - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue