Level meter (#827)

* added possibility to scale vertically from bottom to top

* Squeleton of Level app from Recon App

* Working LevelApp

* Tweaking peak and display or RSSI chart

* Moved widgets, prepared audio decode, added working ctcss display and peak hold max rssi val

* Added RSSIGraph

* Updated Level to use RSSIGraph

* Graph as lines instead as bars

* correct CTCSS hiding if not in NFM mode

* added back db value and drawing for it. clamped to [-100,20] db

* added back audio, volume, better placement for buttons, db graph

* Using different icon for Level app, unless someone provide a better one

* fixed CTCSS position

---------

Co-authored-by: GullCode <gullradriel@hotmail.com>
This commit is contained in:
gullradriel 2023-03-10 14:25:38 +01:00 committed by GitHub
parent e2620f1a33
commit 69df16d6e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 832 additions and 68 deletions

View file

@ -49,13 +49,21 @@ public:
int32_t get_min();
int32_t get_avg();
int32_t get_max();
void set_vertical_rssi(bool enabled);
void set_peak(bool enabled, size_t duration);
private:
int32_t min_;
int32_t avg_;
int32_t max_;
int32_t peak_ = 0 ;
size_t peak_duration_ = 0 ;
bool pitch_rssi_enabled = false;
bool vertical_rssi_enabled = false; // scale [vertically/from bottom to top]
// instead of [horizontally/from left to right]
bool peak_enabled = false;
size_t peak_duration = 1000; // peak duration in msec before being reset to actual max_rssi
MessageHandlerRegistration message_handler_stats {
Message::ID::RSSIStatistics,
@ -76,6 +84,29 @@ private:
void set_pitch_rssi(bool enabled);
};
struct RSSIGraph_entry {
int32_t rssi_min { 0 };
int32_t rssi_avg { 0 };
int32_t rssi_max { 0 };
int32_t db { 0 };
};
using RSSIGraphList = std::vector<RSSIGraph_entry>;
class RSSIGraph : public Widget {
public:
RSSIGraph(
const Rect parent_rect
) : Widget { parent_rect }
{
}
void paint(Painter& painter) override;
void add_values(int32_t rssi_min, int32_t rssi_avg, int32_t rssi_max, int32_t db );
private:
RSSIGraphList graph_list { } ;
};
}
#endif/*__UI_RSSI_H__*/