Log function for search app (#2782)

This commit is contained in:
Totoo 2025-09-07 16:44:04 +02:00 committed by GitHub
parent b15bb59678
commit 325f295ee8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 1 deletions

View file

@ -31,6 +31,10 @@ using namespace portapack;
namespace ui { namespace ui {
void SearchLogger::log_data(SearchRecentEntry& data) {
log_file.write_entry(";" + to_string_short_freq(data.frequency) + ";" + std::to_string(data.duration));
}
template <> template <>
void RecentEntriesTable<SearchRecentEntries>::draw( void RecentEntriesTable<SearchRecentEntries>::draw(
const Entry& entry, const Entry& entry,
@ -75,6 +79,7 @@ SearchView::SearchView(
&check_snap, &check_snap,
&options_snap, &options_snap,
&big_display, &big_display,
&check_log,
&recent_entries_view}); &recent_entries_view});
baseband::set_spectrum(SEARCH_SLICE_WIDTH, 31); baseband::set_spectrum(SEARCH_SLICE_WIDTH, 31);
@ -100,6 +105,14 @@ SearchView::SearchView(
on_range_changed(); on_range_changed();
}); });
check_log.on_select = [this](Checkbox&, bool v) {
logging = v;
if (logging) {
logger.append(logs_dir.string() + "/SEARCH_" + to_string_timestamp(rtc_time::now()) + ".CSV");
logger.write_header();
}
};
bind(field_threshold, settings_.power_threshold); bind(field_threshold, settings_.power_threshold);
bind(check_snap, settings_.snap_search); bind(check_snap, settings_.snap_search);
bind(options_snap, settings_.snap_step); bind(options_snap, settings_.snap_step);
@ -192,7 +205,6 @@ void SearchView::do_detection() {
locked = true; locked = true;
locked_bin = bin_max; locked_bin = bin_max;
// TODO: open Audio. // TODO: open Audio.
} else } else
text_infos.set("Out of range"); text_infos.set("Out of range");
@ -210,6 +222,7 @@ void SearchView::do_detection() {
auto& entry = ::on_packet(recent, resolved_frequency); auto& entry = ::on_packet(recent, resolved_frequency);
entry.set_duration(duration); entry.set_duration(duration);
if (logging) logger.log_data(entry);
recent_entries_view.set_dirty(); recent_entries_view.set_dirty();
text_infos.set("Listening"); text_infos.set("Listening");

View file

@ -26,6 +26,8 @@
#include "radio_state.hpp" #include "radio_state.hpp"
#include "gradient.hpp" #include "gradient.hpp"
#include "ui_receiver.hpp" #include "ui_receiver.hpp"
#include "log_file.hpp"
#include "file_path.hpp"
namespace ui { namespace ui {
@ -70,6 +72,21 @@ struct SearchRecentEntry {
using SearchRecentEntries = RecentEntries<SearchRecentEntry>; using SearchRecentEntries = RecentEntries<SearchRecentEntry>;
class SearchLogger {
public:
Optional<File::Error> append(const std::filesystem::path& filename) {
return log_file.append(filename);
}
void log_data(SearchRecentEntry& data);
void write_header() {
log_file.write_raw("Time;Freq;Duration;");
}
private:
LogFile log_file{};
};
class SearchView : public View { class SearchView : public View {
public: public:
SearchView(NavigationView& nav); SearchView(NavigationView& nav);
@ -148,6 +165,8 @@ class SearchView : public View {
uint16_t locked_bin = 0; uint16_t locked_bin = 0;
uint8_t search_counter = 0; uint8_t search_counter = 0;
bool locked = false; bool locked = false;
bool logging = false;
SearchLogger logger{};
void do_detection(); void do_detection();
void do_timers(); void do_timers();
@ -169,6 +188,12 @@ class SearchView : public View {
{{1 * 8, 25 * 8}, "Accuracy +/-4.9kHz", Theme::getInstance()->fg_light->foreground}, {{1 * 8, 25 * 8}, "Accuracy +/-4.9kHz", Theme::getInstance()->fg_light->foreground},
{{26 * 8, 25 * 8}, "MHz", Theme::getInstance()->fg_light->foreground}}; {{26 * 8, 25 * 8}, "MHz", Theme::getInstance()->fg_light->foreground}};
Checkbox check_log{
{24 * 8, 10 * 8},
3,
"LOG",
true};
FrequencyField field_frequency_min{ FrequencyField field_frequency_min{
{1 * 8, 1 * 16}}; {1 * 8, 1 * 16}};
FrequencyField field_frequency_max{ FrequencyField field_frequency_max{