From d5c8525afc615cdb8b86391e0febbdc0a9a973dc Mon Sep 17 00:00:00 2001 From: Mark Thompson <129641948+NotherNgineer@users.noreply.github.com> Date: Mon, 25 Mar 2024 02:44:49 -0500 Subject: [PATCH] Declare all folder names in a single source file (#2039) --- firmware/application/CMakeLists.txt | 1 + firmware/application/app_settings.cpp | 5 +- firmware/application/app_settings.hpp | 3 -- firmware/application/apps/acars_app.cpp | 3 +- firmware/application/apps/acars_app.hpp | 2 +- firmware/application/apps/ais_app.cpp | 3 +- firmware/application/apps/ble_comm_app.cpp | 3 +- firmware/application/apps/ble_comm_app.hpp | 2 +- firmware/application/apps/ble_rx_app.cpp | 5 +- firmware/application/apps/ble_rx_app.hpp | 11 ++-- firmware/application/apps/ble_tx_app.cpp | 1 + firmware/application/apps/ble_tx_app.hpp | 7 +-- firmware/application/apps/capture_app.hpp | 3 +- firmware/application/apps/ert_app.cpp | 3 +- firmware/application/apps/pocsag_app.cpp | 3 +- firmware/application/apps/pocsag_app.hpp | 2 +- firmware/application/apps/soundboard_app.cpp | 5 +- firmware/application/apps/tpms_app.cpp | 3 +- firmware/application/apps/ui_adsb_rx.cpp | 3 +- firmware/application/apps/ui_aprs_rx.cpp | 3 +- firmware/application/apps/ui_aprs_rx.hpp | 5 +- .../application/apps/ui_flash_utility.cpp | 11 ++-- firmware/application/apps/ui_freqman.cpp | 1 + firmware/application/apps/ui_fsk_rx.cpp | 3 +- firmware/application/apps/ui_fsk_rx.hpp | 2 +- firmware/application/apps/ui_iq_trim.cpp | 3 +- .../application/apps/ui_looking_glass_app.cpp | 3 +- firmware/application/apps/ui_playlist.cpp | 9 ++-- firmware/application/apps/ui_recon.cpp | 8 +-- firmware/application/apps/ui_recon.hpp | 2 +- .../application/apps/ui_recon_settings.cpp | 1 + firmware/application/apps/ui_remote.cpp | 9 ++-- firmware/application/apps/ui_scanner.cpp | 1 + firmware/application/apps/ui_settings.cpp | 13 ++--- firmware/application/apps/ui_sonde.cpp | 3 +- firmware/application/apps/ui_test.hpp | 2 +- firmware/application/apps/ui_whipcalc.cpp | 3 +- firmware/application/database.cpp | 9 ++-- firmware/application/database.hpp | 8 +-- firmware/application/debug.cpp | 4 +- .../external/afsk_rx/ui_afsk_rx.cpp | 3 +- .../external/afsk_rx/ui_afsk_rx.hpp | 2 +- .../external/spainter/ui_spectrum_painter.cpp | 6 +-- .../external/spainter/ui_spectrum_painter.hpp | 2 +- .../spainter/ui_spectrum_painter_image.cpp | 8 +-- .../spainter/ui_spectrum_painter_image.hpp | 2 +- firmware/application/file_path.cpp | 46 +++++++++++++++++ firmware/application/file_path.hpp | 50 +++++++++++++++++++ firmware/application/freqman_db.cpp | 2 +- firmware/application/freqman_db.hpp | 1 - firmware/application/log_file.hpp | 2 - firmware/application/ui/ui_geomap.cpp | 5 +- firmware/application/ui_navigation.cpp | 7 +-- firmware/application/usb_serial_shell.cpp | 9 ++-- .../common/portapack_persistent_memory.cpp | 9 ++-- .../common/portapack_persistent_memory.hpp | 4 +- 56 files changed, 224 insertions(+), 105 deletions(-) create mode 100644 firmware/application/file_path.cpp create mode 100644 firmware/application/file_path.hpp diff --git a/firmware/application/CMakeLists.txt b/firmware/application/CMakeLists.txt index 575c5032..8fab990e 100644 --- a/firmware/application/CMakeLists.txt +++ b/firmware/application/CMakeLists.txt @@ -190,6 +190,7 @@ set(CPPSRC event_m0.cpp file_reader.cpp file.cpp + file_path.cpp freqman_db.cpp freqman.cpp io_convert.cpp diff --git a/firmware/application/app_settings.cpp b/firmware/application/app_settings.cpp index a9e5811b..ce067e4c 100644 --- a/firmware/application/app_settings.cpp +++ b/firmware/application/app_settings.cpp @@ -30,6 +30,7 @@ #include "portapack.hpp" #include "portapack_persistent_memory.hpp" #include "utility.hpp" +#include "file_path.hpp" #include #include @@ -40,7 +41,7 @@ using namespace portapack; namespace { fs::path get_settings_path(const std::string& app_name) { - return fs::path{SETTINGS_DIR} / app_name + u".ini"; + return settings_dir / app_name + u".ini"; } } // namespace @@ -156,7 +157,7 @@ bool save_settings(std::string_view store_name, const SettingBindings& bindings) File f; auto path = get_settings_path(std::string{store_name}); - ensure_directory(SETTINGS_DIR); + ensure_directory(settings_dir); auto error = f.create(path); if (error) return false; diff --git a/firmware/application/app_settings.hpp b/firmware/application/app_settings.hpp index 0e36ffab..422daaa3 100644 --- a/firmware/application/app_settings.hpp +++ b/firmware/application/app_settings.hpp @@ -36,9 +36,6 @@ #include "max283x.hpp" #include "string_format.hpp" -// Folder to store app settings, pmem_fileflag, and date_fileflag -#define SETTINGS_DIR u"/SETTINGS" - // Bring in the string_view literal. using std::literals::operator""sv; diff --git a/firmware/application/apps/acars_app.cpp b/firmware/application/apps/acars_app.cpp index c041726c..a8a5e1f9 100644 --- a/firmware/application/apps/acars_app.cpp +++ b/firmware/application/apps/acars_app.cpp @@ -24,6 +24,7 @@ #include "baseband_api.hpp" #include "portapack_persistent_memory.hpp" +#include "file_path.hpp" using namespace portapack; using namespace acars; @@ -77,7 +78,7 @@ ACARSAppView::ACARSAppView(NavigationView& nav) logger = std::make_unique(); if (logger) - logger->append(LOG_ROOT_DIR "/ACARS.TXT"); + logger->append(logs_dir / u"ACARS.TXT"); } ACARSAppView::~ACARSAppView() { diff --git a/firmware/application/apps/acars_app.hpp b/firmware/application/apps/acars_app.hpp index 75d11f6b..fd688695 100644 --- a/firmware/application/apps/acars_app.hpp +++ b/firmware/application/apps/acars_app.hpp @@ -35,7 +35,7 @@ class ACARSLogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } diff --git a/firmware/application/apps/ais_app.cpp b/firmware/application/apps/ais_app.cpp index 5f3fa9a1..0be21bda 100644 --- a/firmware/application/apps/ais_app.cpp +++ b/firmware/application/apps/ais_app.cpp @@ -23,6 +23,7 @@ #include "string_format.hpp" #include "database.hpp" +#include "file_path.hpp" #include "baseband_api.hpp" @@ -399,7 +400,7 @@ AISAppView::AISAppView(NavigationView& nav) logger = std::make_unique(); if (logger) { - logger->append(LOG_ROOT_DIR "/AIS.TXT"); + logger->append(logs_dir / u"AIS.TXT"); } } diff --git a/firmware/application/apps/ble_comm_app.cpp b/firmware/application/apps/ble_comm_app.cpp index c910f714..331da938 100644 --- a/firmware/application/apps/ble_comm_app.cpp +++ b/firmware/application/apps/ble_comm_app.cpp @@ -32,6 +32,7 @@ #include "string_format.hpp" #include "portapack_persistent_memory.hpp" #include "ui_text.hpp" +#include "file_path.hpp" using namespace portapack; using namespace modems; @@ -100,7 +101,7 @@ BLECommView::BLECommView(NavigationView& nav) logging = v; if (logger && logging) - logger->append(LOG_ROOT_DIR "/BLELOG_" + to_string_timestamp(rtc_time::now()) + ".TXT"); + logger->append(logs_dir.string() + "/BLELOG_" + to_string_timestamp(rtc_time::now()) + ".TXT"); }; options_channel.on_change = [this](size_t, int32_t i) { diff --git a/firmware/application/apps/ble_comm_app.hpp b/firmware/application/apps/ble_comm_app.hpp index d94d959b..a21a03cd 100644 --- a/firmware/application/apps/ble_comm_app.hpp +++ b/firmware/application/apps/ble_comm_app.hpp @@ -42,7 +42,7 @@ class BLECommLogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } diff --git a/firmware/application/apps/ble_rx_app.cpp b/firmware/application/apps/ble_rx_app.cpp index 88cdb19f..1d40ecc1 100644 --- a/firmware/application/apps/ble_rx_app.cpp +++ b/firmware/application/apps/ble_rx_app.cpp @@ -470,10 +470,7 @@ BLERxView::BLERxView(NavigationView& nav) logging = v; if (logger && logging) - logger->append( - "BLERX/Logs" - "/BLELOG_" + - to_string_timestamp(rtc_time::now()) + ".TXT"); + logger->append(blerx_dir.string() + "/Logs/BLELOG_" + to_string_timestamp(rtc_time::now()) + ".TXT"); }; check_log.set_value(logging); diff --git a/firmware/application/apps/ble_rx_app.hpp b/firmware/application/apps/ble_rx_app.hpp index f3e81444..54560ce0 100644 --- a/firmware/application/apps/ble_rx_app.hpp +++ b/firmware/application/apps/ble_rx_app.hpp @@ -36,12 +36,13 @@ #include "log_file.hpp" #include "utility.hpp" #include "usb_serial_thread.hpp" +#include "file_path.hpp" #include "recent_entries.hpp" class BLELogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } @@ -133,7 +134,7 @@ class BleRecentEntryDetailView : public View { void on_save_file(const std::string value, BLETxPacket packetToSave); bool saveFile(const std::filesystem::path& path, BLETxPacket packetToSave); std::string packetFileBuffer{}; - std::filesystem::path packet_save_path{u"BLERX/Lists/????.csv"}; + std::filesystem::path packet_save_path{blerx_dir / u"Lists/????.csv"}; static constexpr uint8_t total_data_lines{5}; @@ -250,9 +251,9 @@ class BLERxView : public View { uint64_t total_count = 0; std::vector searchList{}; - std::filesystem::path find_packet_path{u"BLERX/Find/????.TXT"}; - std::filesystem::path log_packets_path{u"BLERX/Logs/????.TXT"}; - std::filesystem::path packet_save_path{u"BLERX/Lists/????.csv"}; + std::filesystem::path find_packet_path{blerx_dir / u"Find/????.TXT"}; + std::filesystem::path log_packets_path{blerx_dir / u"Logs/????.TXT"}; + std::filesystem::path packet_save_path{blerx_dir / u"Lists/????.csv"}; static constexpr auto header_height = 4 * 16; static constexpr auto switch_button_height = 3 * 16; diff --git a/firmware/application/apps/ble_tx_app.cpp b/firmware/application/apps/ble_tx_app.cpp index b226bfdd..013e8540 100644 --- a/firmware/application/apps/ble_tx_app.cpp +++ b/firmware/application/apps/ble_tx_app.cpp @@ -34,6 +34,7 @@ #include "portapack_persistent_memory.hpp" #include "rtc_time.hpp" #include "string_format.hpp" +#include "file_path.hpp" using namespace portapack; using namespace modems; diff --git a/firmware/application/apps/ble_tx_app.hpp b/firmware/application/apps/ble_tx_app.hpp index 438c9322..f28e5aeb 100644 --- a/firmware/application/apps/ble_tx_app.hpp +++ b/firmware/application/apps/ble_tx_app.hpp @@ -36,6 +36,7 @@ #include "replay_thread.hpp" #include "log_file.hpp" #include "utility.hpp" +#include "file_path.hpp" #include "recent_entries.hpp" @@ -44,7 +45,7 @@ class BLELoggerTx { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } @@ -138,7 +139,7 @@ class BLETxView : public View { uint32_t prev_value{0}; std::filesystem::path file_path{}; - std::filesystem::path packet_save_path{u"BLETX/BLETX_????.TXT"}; + std::filesystem::path packet_save_path{bletx_dir / u"BLETX_????.TXT"}; uint8_t channel_number = 37; bool auto_channel = false; @@ -165,7 +166,7 @@ class BLETxView : public View { std::unique_ptr dataFileWrapper{}; File dataFile{}; - std::filesystem::path dataTempFilePath{u"BLETX/dataFileTemp.TXT"}; + std::filesystem::path dataTempFilePath{bletx_dir / u"dataFileTemp.TXT"}; std::vector markedBytes{}; CursorPos cursor_pos{}; uint8_t marked_counter = 0; diff --git a/firmware/application/apps/capture_app.hpp b/firmware/application/apps/capture_app.hpp index d643bb43..07a162b4 100644 --- a/firmware/application/apps/capture_app.hpp +++ b/firmware/application/apps/capture_app.hpp @@ -31,6 +31,7 @@ #include "ui_spectrum.hpp" #include "app_settings.hpp" #include "radio_state.hpp" +#include "file_path.hpp" namespace ui { @@ -101,7 +102,7 @@ class CaptureAppView : public View { RecordView record_view{ {0 * 8, 2 * 16, 30 * 8, 1 * 16}, u"BBD_????.*", - u"CAPTURES", + captures_dir, RecordView::FileType::RawS16, 16384, 3}; diff --git a/firmware/application/apps/ert_app.cpp b/firmware/application/apps/ert_app.cpp index 107622d8..26b6f735 100644 --- a/firmware/application/apps/ert_app.cpp +++ b/firmware/application/apps/ert_app.cpp @@ -31,6 +31,7 @@ using namespace portapack; #include "crc.hpp" #include "string_format.hpp" +#include "file_path.hpp" namespace ert { @@ -129,7 +130,7 @@ ERTAppView::ERTAppView(NavigationView& nav) logger = std::make_unique(); if (logger) { - logger->append(LOG_ROOT_DIR "/ERT.TXT"); + logger->append(logs_dir / u"ERT.TXT"); } } diff --git a/firmware/application/apps/pocsag_app.cpp b/firmware/application/apps/pocsag_app.cpp index 88d4a647..5d0533e4 100644 --- a/firmware/application/apps/pocsag_app.cpp +++ b/firmware/application/apps/pocsag_app.cpp @@ -27,6 +27,7 @@ #include "portapack_persistent_memory.hpp" #include "string_format.hpp" #include "utility.hpp" +#include "file_path.hpp" using namespace portapack; using namespace pocsag; @@ -115,7 +116,7 @@ POCSAGAppView::POCSAGAppView(NavigationView& nav) : FILTER_DROP; } - logger.append(LOG_ROOT_DIR "/POCSAG.TXT"); + logger.append(logs_dir / u"POCSAG.TXT"); field_squelch.set_value(receiver_model.squelch_level()); field_squelch.on_change = [this](int32_t v) { diff --git a/firmware/application/apps/pocsag_app.hpp b/firmware/application/apps/pocsag_app.hpp index ea97ef61..b03161a6 100644 --- a/firmware/application/apps/pocsag_app.hpp +++ b/firmware/application/apps/pocsag_app.hpp @@ -39,7 +39,7 @@ class POCSAGLogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } diff --git a/firmware/application/apps/soundboard_app.cpp b/firmware/application/apps/soundboard_app.cpp index 304ca2b8..65cd5e83 100644 --- a/firmware/application/apps/soundboard_app.cpp +++ b/firmware/application/apps/soundboard_app.cpp @@ -28,6 +28,7 @@ #include "tonesets.hpp" #include "ui_tone_key.hpp" #include "audio.hpp" +#include "file_path.hpp" using namespace tonekey; using namespace portapack; @@ -164,7 +165,7 @@ void SoundBoardView::refresh_list() { // List directories and files, put directories up top uint32_t count = 0; - for (const auto& entry : std::filesystem::directory_iterator(u"WAV", u"*")) { + for (const auto& entry : std::filesystem::directory_iterator(wav_dir, u"*")) { if (std::filesystem::is_regular_file(entry.status())) { if (entry.path().string().length()) { auto entry_extension = entry.path().extension().string(); @@ -173,7 +174,7 @@ void SoundBoardView::refresh_list() { c = toupper(c); if (entry_extension == ".WAV") { - if (reader->open(u"/WAV/" + entry.path().native())) { + if (reader->open(wav_dir / entry.path())) { if ((reader->channels() == 1) && ((reader->bits_per_sample() == 8) || (reader->bits_per_sample() == 16))) { // sounds[c].ms_duration = reader->ms_duration(); // sounds[c].path = u"WAV/" + entry.path().native(); diff --git a/firmware/application/apps/tpms_app.cpp b/firmware/application/apps/tpms_app.cpp index 54bb7b5d..bf9f14f8 100644 --- a/firmware/application/apps/tpms_app.cpp +++ b/firmware/application/apps/tpms_app.cpp @@ -30,6 +30,7 @@ using namespace portapack; #include "string_format.hpp" #include "utility.hpp" +#include "file_path.hpp" namespace tpms { @@ -176,7 +177,7 @@ TPMSAppView::TPMSAppView(NavigationView&) { logger = std::make_unique(); if (logger) { - logger->append(LOG_ROOT_DIR "/TPMS.TXT"); + logger->append(logs_dir / u"TPMS.TXT"); } } diff --git a/firmware/application/apps/ui_adsb_rx.cpp b/firmware/application/apps/ui_adsb_rx.cpp index 9598843d..9fb60cd8 100644 --- a/firmware/application/apps/ui_adsb_rx.cpp +++ b/firmware/application/apps/ui_adsb_rx.cpp @@ -31,6 +31,7 @@ #include "portapack_persistent_memory.hpp" #include "rtc_time.hpp" #include "string_format.hpp" +#include "file_path.hpp" using namespace portapack; @@ -390,7 +391,7 @@ ADSBRxView::ADSBRxView(NavigationView& nav) { }; logger = std::make_unique(); - logger->append(LOG_ROOT_DIR "/ADSB.TXT"); + logger->append(logs_dir / u"ADSB.TXT"); receiver_model.enable(); baseband::set_adsb(); diff --git a/firmware/application/apps/ui_aprs_rx.cpp b/firmware/application/apps/ui_aprs_rx.cpp index a5fa7a6f..42b75dcf 100644 --- a/firmware/application/apps/ui_aprs_rx.cpp +++ b/firmware/application/apps/ui_aprs_rx.cpp @@ -27,6 +27,7 @@ #include "baseband_api.hpp" #include "string_format.hpp" #include "portapack_persistent_memory.hpp" +#include "file_path.hpp" using namespace portapack; @@ -111,7 +112,7 @@ APRSRxView::APRSRxView(NavigationView& nav, Rect parent_rect) logger = std::make_unique(); if (logger) - logger->append(LOG_ROOT_DIR "/APRS.TXT"); + logger->append(logs_dir / u"APRS.TXT"); baseband::set_aprs(1200); diff --git a/firmware/application/apps/ui_aprs_rx.hpp b/firmware/application/apps/ui_aprs_rx.hpp index be5c1693..3c3d8337 100644 --- a/firmware/application/apps/ui_aprs_rx.hpp +++ b/firmware/application/apps/ui_aprs_rx.hpp @@ -36,10 +36,11 @@ #include "log_file.hpp" #include "utility.hpp" +#include "file_path.hpp" class APRSLogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } @@ -232,7 +233,7 @@ class APRSRxView : public View { RecordView record_view{ {0 * 8, 1 * 16, 30 * 8, 1 * 16}, u"AFS_????.WAV", - u"APRS", + aprs_dir, RecordView::FileType::WAV, 4096, 4}; diff --git a/firmware/application/apps/ui_flash_utility.cpp b/firmware/application/apps/ui_flash_utility.cpp index 27bccde0..dafc0f5b 100644 --- a/firmware/application/apps/ui_flash_utility.cpp +++ b/firmware/application/apps/ui_flash_utility.cpp @@ -23,11 +23,10 @@ #include "ui_flash_utility.hpp" #include "ui_styles.hpp" #include "portapack_shared_memory.hpp" +#include "file_path.hpp" namespace ui { -static const std::filesystem::path firmware_path = u"/FIRMWARE"; - // Firmware image validation static const char* hackrf_magic = "HACKRFFW"; #define FIRMWARE_INFO_AREA_OFFSET 0x400 @@ -84,7 +83,7 @@ FlashUtilityView::FlashUtilityView(NavigationView& nav) menu_view.set_parent_rect({0, 3 * 8, 240, 33 * 8}); - ensure_directory(firmware_path); + ensure_directory(firmware_dir); auto add_firmware_items = [&]( const std::filesystem::path& folder_path, @@ -103,8 +102,8 @@ FlashUtilityView::FlashUtilityView(NavigationView& nav) } }; - add_firmware_items(firmware_path, u"*.bin", ui::Color::red()); - add_firmware_items(firmware_path, u"*.tar", ui::Color::purple()); + add_firmware_items(firmware_dir, u"*.bin", ui::Color::red()); + add_firmware_items(firmware_dir, u"*.tar", ui::Color::purple()); // add_firmware_items(user_firmware_folder,u"*.bin", ui::Color::purple()); } @@ -116,7 +115,7 @@ void FlashUtilityView::firmware_selected(std::filesystem::path::string_type path YESNO, [this, path](bool choice) { if (choice) { - std::u16string full_path = std::u16string(u"FIRMWARE/") + path; + std::filesystem::path::string_type full_path = firmware_dir.native() + u"/" + path; this->flash_firmware(full_path); } }); diff --git a/firmware/application/apps/ui_freqman.cpp b/firmware/application/apps/ui_freqman.cpp index 50a44f64..b3c5db75 100644 --- a/firmware/application/apps/ui_freqman.cpp +++ b/firmware/application/apps/ui_freqman.cpp @@ -31,6 +31,7 @@ #include "ui_receiver.hpp" #include "ui_styles.hpp" #include "utility.hpp" +#include "file_path.hpp" #include diff --git a/firmware/application/apps/ui_fsk_rx.cpp b/firmware/application/apps/ui_fsk_rx.cpp index 6e0c6259..17380858 100644 --- a/firmware/application/apps/ui_fsk_rx.cpp +++ b/firmware/application/apps/ui_fsk_rx.cpp @@ -27,6 +27,7 @@ #include "portapack_persistent_memory.hpp" #include "string_format.hpp" #include "utility.hpp" +#include "file_path.hpp" #include "ui_freqman.hpp" @@ -134,7 +135,7 @@ FskxRxMainView::FskxRxMainView(NavigationView& nav) field_frequency.set_value(initial_target_frequency); deviation_frequency.set_value(initial_deviation); - logger.append(LOG_ROOT_DIR "/FSKRX.TXT"); + logger.append(logs_dir / u"FSKRX.TXT"); baseband::set_fsk(initial_deviation); diff --git a/firmware/application/apps/ui_fsk_rx.hpp b/firmware/application/apps/ui_fsk_rx.hpp index e9e2aca0..6c9338ca 100644 --- a/firmware/application/apps/ui_fsk_rx.hpp +++ b/firmware/application/apps/ui_fsk_rx.hpp @@ -42,7 +42,7 @@ class FskRxLogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } diff --git a/firmware/application/apps/ui_iq_trim.cpp b/firmware/application/apps/ui_iq_trim.cpp index 88bc2ada..a4e5297e 100644 --- a/firmware/application/apps/ui_iq_trim.cpp +++ b/firmware/application/apps/ui_iq_trim.cpp @@ -25,6 +25,7 @@ #include "complex.hpp" #include "portapack.hpp" #include "ui_fileman.hpp" +#include "file_path.hpp" using namespace portapack; namespace fs = std::filesystem; @@ -47,7 +48,7 @@ IQTrimView::IQTrimView(NavigationView& nav) field_path.on_select = [this](TextField&) { auto open_view = nav_.push(".C*"); - open_view->push_dir(u"CAPTURES"); + open_view->push_dir(captures_dir); open_view->on_changed = [this](fs::path path) { open_file(path); }; diff --git a/firmware/application/apps/ui_looking_glass_app.cpp b/firmware/application/apps/ui_looking_glass_app.cpp index ec71c846..5679c5a0 100644 --- a/firmware/application/apps/ui_looking_glass_app.cpp +++ b/firmware/application/apps/ui_looking_glass_app.cpp @@ -26,6 +26,7 @@ #include "file_reader.hpp" #include "string_format.hpp" #include "audio.hpp" +#include "file_path.hpp" using namespace portapack; @@ -571,7 +572,7 @@ void GlassView::set_spec_iq_phase_calibration_value(uint8_t cal_value) { // def void GlassView::load_presets() { File presets_file; - auto error = presets_file.open("LOOKINGGLASS/PRESETS.TXT"); + auto error = presets_file.open(looking_glass_dir / u"PRESETS.TXT"); presets_db.clear(); // Add the "Manual" entry. diff --git a/firmware/application/apps/ui_playlist.cpp b/firmware/application/apps/ui_playlist.cpp index 164bb76d..e08654b8 100644 --- a/firmware/application/apps/ui_playlist.cpp +++ b/firmware/application/apps/ui_playlist.cpp @@ -36,6 +36,7 @@ #include "string_format.hpp" #include "ui_fileman.hpp" #include "utility.hpp" +#include "file_path.hpp" #include #include @@ -130,7 +131,7 @@ void PlaylistView::open_file(bool prompt_save) { } auto open_view = nav_.push(".PPL"); - open_view->push_dir(u"PLAYLIST"); + open_view->push_dir(playlist_dir); open_view->on_changed = [this](fs::path new_file_path) { on_file_changed(new_file_path); }; @@ -169,7 +170,7 @@ void PlaylistView::save_file(bool show_dialogs) { void PlaylistView::add_entry(fs::path&& path) { if (playlist_path_.empty()) { - playlist_path_ = next_filename_matching_pattern(u"/PLAYLIST/PLAY_????.PPL"); + playlist_path_ = next_filename_matching_pattern(playlist_dir / u"PLAY_????.PPL"); // Hack around focus getting called by ctor before parent is set. if (parent()) @@ -387,7 +388,7 @@ PlaylistView::PlaylistView( &waterfall, }); - ensure_directory(u"PLAYLIST"); + ensure_directory(playlist_dir); waterfall.show_audio_spectrum_view(false); field_frequency.set_value(transmitter_model.target_frequency()); @@ -410,7 +411,7 @@ PlaylistView::PlaylistView( if (is_active()) return; auto open_view = nav_.push(".C*"); - open_view->push_dir(u"CAPTURES"); + open_view->push_dir(captures_dir); open_view->on_changed = [this](fs::path path) { add_entry(std::move(path)); }; diff --git a/firmware/application/apps/ui_recon.cpp b/firmware/application/apps/ui_recon.cpp index 03f2c8b0..09c0640c 100644 --- a/firmware/application/apps/ui_recon.cpp +++ b/firmware/application/apps/ui_recon.cpp @@ -337,7 +337,7 @@ ReconView::ReconView(NavigationView& nav) // set record View record_view = std::make_unique(Rect{0, 0, 30 * 8, 1 * 16}, - u"AUTO_AUDIO", u"AUDIO", + u"AUTO_AUDIO", audio_dir, RecordView::FileType::WAV, 4096, 4); record_view->set_filename_date_frequency(true); record_view->set_auto_trim(false); @@ -1170,18 +1170,18 @@ size_t ReconView::change_mode(freqman_index_t new_mod) { if (new_mod == SPEC_MODULATION) { if (persistent_memory::recon_repeat_recorded()) { record_view = std::make_unique(Rect{0, 0, 30 * 8, 1 * 16}, - u"RECON_REPEAT.C16", u"CAPTURES", + u"RECON_REPEAT.C16", captures_dir, RecordView::FileType::RawS16, 16384, 3); record_view->set_filename_as_is(true); } else { record_view = std::make_unique(Rect{0, 0, 30 * 8, 1 * 16}, - u"AUTO_RAW", u"CAPTURES", + u"AUTO_RAW", captures_dir, RecordView::FileType::RawS16, 16384, 3); record_view->set_filename_date_frequency(true); } } else { record_view = std::make_unique(Rect{0, 0, 30 * 8, 1 * 16}, - u"AUTO_AUDIO", u"AUDIO", + u"AUTO_AUDIO", audio_dir, RecordView::FileType::WAV, 4096, 4); record_view->set_filename_date_frequency(true); } diff --git a/firmware/application/apps/ui_recon.hpp b/firmware/application/apps/ui_recon.hpp index d9943f92..e686c278 100644 --- a/firmware/application/apps/ui_recon.hpp +++ b/firmware/application/apps/ui_recon.hpp @@ -38,6 +38,7 @@ #include "baseband_api.hpp" #include "string_format.hpp" #include "file.hpp" +#include "file_path.hpp" #include "app_settings.hpp" #include "radio_state.hpp" #include "ui_recon_settings.hpp" @@ -181,7 +182,6 @@ class ReconView : public View { const std::filesystem::path repeat_rec_file = u"RECON_REPEAT.C16"; const std::filesystem::path repeat_rec_meta = u"RECON_REPEAT.TXT"; - const std::filesystem::path repeat_rec_path = u"CAPTURES"; const size_t repeat_read_size{16384}; const size_t repeat_buffer_count{3}; int8_t repeat_cur_rep = 0; diff --git a/firmware/application/apps/ui_recon_settings.cpp b/firmware/application/apps/ui_recon_settings.cpp index 543476af..b5e7be34 100644 --- a/firmware/application/apps/ui_recon_settings.cpp +++ b/firmware/application/apps/ui_recon_settings.cpp @@ -30,6 +30,7 @@ #include "freqman_db.hpp" #include "portapack.hpp" #include "portapack_persistent_memory.hpp" +#include "file_path.hpp" using namespace std; using namespace portapack; diff --git a/firmware/application/apps/ui_remote.cpp b/firmware/application/apps/ui_remote.cpp index 7b0a1310..f2335ce6 100644 --- a/firmware/application/apps/ui_remote.cpp +++ b/firmware/application/apps/ui_remote.cpp @@ -32,6 +32,7 @@ #include "ui_receiver.hpp" #include "ui_textentry.hpp" #include "utility.hpp" +#include "file_path.hpp" using namespace portapack; namespace fs = std::filesystem; @@ -246,7 +247,7 @@ RemoteEntryEditView::RemoteEntryEditView( field_path.on_select = [this, &nav](TextField&) { auto open_view = nav.push(".C*"); - open_view->push_dir(u"CAPTURES"); + open_view->push_dir(captures_dir); open_view->on_changed = [this](fs::path path) { load_path(std::move(path)); refresh_ui(); @@ -355,7 +356,7 @@ RemoteView::RemoteView( Dim waterfall_height = waterfall_bottom - waterfall_top; waterfall.set_parent_rect({0, waterfall_top, screen_width, waterfall_height}); - ensure_directory(u"REMOTES"); + ensure_directory(remotes_dir); // Load the previously loaded remote if exists. if (!load_remote(settings_.remote_path)) @@ -527,7 +528,7 @@ void RemoteView::new_remote() { void RemoteView::open_remote() { auto open_view = nav_.push(".REM"); - open_view->push_dir(u"REMOTES"); + open_view->push_dir(remotes_dir); open_view->on_changed = [this](fs::path path) { save_remote(); load_remote(std::move(path)); @@ -538,7 +539,7 @@ void RemoteView::open_remote() { void RemoteView::init_remote() { model_ = {"", {}}; reset_buttons(); - set_remote_path(next_filename_matching_pattern(u"/REMOTES/REMOTE_????.REM")); + set_remote_path(next_filename_matching_pattern(remotes_dir / u"REMOTE_????.REM")); set_needs_save(false); if (remote_path_.empty()) diff --git a/firmware/application/apps/ui_scanner.cpp b/firmware/application/apps/ui_scanner.cpp index c1e019da..e6a3c819 100644 --- a/firmware/application/apps/ui_scanner.cpp +++ b/firmware/application/apps/ui_scanner.cpp @@ -26,6 +26,7 @@ #include "optional.hpp" #include "ui_fileman.hpp" #include "ui_freqman.hpp" +#include "file_path.hpp" using namespace portapack; namespace fs = std::filesystem; diff --git a/firmware/application/apps/ui_settings.cpp b/firmware/application/apps/ui_settings.cpp index 36bca5ad..9f6c7fc4 100644 --- a/firmware/application/apps/ui_settings.cpp +++ b/firmware/application/apps/ui_settings.cpp @@ -41,6 +41,7 @@ using namespace lpc43xx; using namespace portapack; #include "file.hpp" +#include "file_path.hpp" namespace fs = std::filesystem; #include "string_format.hpp" @@ -571,17 +572,17 @@ SetPersistentMemoryView::SetPersistentMemoryView(NavigationView& nav) { check_use_sdcard_for_pmem.on_select = [this](Checkbox&, bool v) { File pmem_flag_file_handle; if (v) { - if (fs::file_exists(PMEM_FILEFLAG)) { + if (fs::file_exists(settings_dir / PMEM_FILEFLAG)) { text_pmem_status.set("P.Mem flag file present."); } else { - auto error = pmem_flag_file_handle.create(PMEM_FILEFLAG); + auto error = pmem_flag_file_handle.create(settings_dir / PMEM_FILEFLAG); if (error) text_pmem_status.set("Error creating P.Mem File!"); else text_pmem_status.set("P.Mem flag file created."); } } else { - auto result = delete_file(PMEM_FILEFLAG); + auto result = delete_file(settings_dir / PMEM_FILEFLAG); if (result.code() != FR_OK) text_pmem_status.set("Error deleting P.Mem flag!"); else @@ -717,10 +718,10 @@ AppSettingsView::AppSettingsView( menu_view.set_parent_rect({0, 3 * 8, 240, 33 * 8}); - ensure_directory(SETTINGS_DIR); + ensure_directory(settings_dir); - for (const auto& entry : std::filesystem::directory_iterator(SETTINGS_DIR, u"*.ini")) { - auto path = (std::filesystem::path)SETTINGS_DIR / entry.path(); + for (const auto& entry : std::filesystem::directory_iterator(settings_dir, u"*.ini")) { + auto path = settings_dir / entry.path(); menu_view.add_item({path.filename().string().substr(0, 26), ui::Color::dark_cyan(), diff --git a/firmware/application/apps/ui_sonde.cpp b/firmware/application/apps/ui_sonde.cpp index 003d8085..281acd0e 100644 --- a/firmware/application/apps/ui_sonde.cpp +++ b/firmware/application/apps/ui_sonde.cpp @@ -25,6 +25,7 @@ #include "baseband_api.hpp" #include "audio.hpp" #include "app_settings.hpp" +#include "file_path.hpp" #include "portapack.hpp" #include @@ -112,7 +113,7 @@ SondeView::SondeView(NavigationView& nav) logger = std::make_unique(); if (logger) - logger->append(LOG_ROOT_DIR "/SONDE.TXT"); + logger->append(logs_dir / u"SONDE.TXT"); audio::output::start(); diff --git a/firmware/application/apps/ui_test.hpp b/firmware/application/apps/ui_test.hpp index 9bf69506..bb3861bf 100644 --- a/firmware/application/apps/ui_test.hpp +++ b/firmware/application/apps/ui_test.hpp @@ -38,7 +38,7 @@ class TestLogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } diff --git a/firmware/application/apps/ui_whipcalc.cpp b/firmware/application/apps/ui_whipcalc.cpp index 1fdf262b..8285e66f 100644 --- a/firmware/application/apps/ui_whipcalc.cpp +++ b/firmware/application/apps/ui_whipcalc.cpp @@ -27,6 +27,7 @@ #include "event_m0.hpp" #include "file_reader.hpp" #include "portapack.hpp" +#include "file_path.hpp" #include @@ -142,7 +143,7 @@ WhipCalcView::WhipCalcView(NavigationView& nav) void WhipCalcView::load_antenna_db() { File antennas_file; - auto error = antennas_file.open("/WHIPCALC/ANTENNAS.TXT"); + auto error = antennas_file.open(whipcalc_dir / u"ANTENNAS.TXT"); if (error) return; diff --git a/firmware/application/database.cpp b/firmware/application/database.cpp index f5d16419..432453b9 100644 --- a/firmware/application/database.cpp +++ b/firmware/application/database.cpp @@ -23,10 +23,11 @@ #include "database.hpp" #include "file.hpp" +#include "file_path.hpp" #include int database::retrieve_mid_record(MidDBRecord* record, std::string search_term) { - file_path = "AIS/mids.db"; + file_path = ais_dir / u"mids.db"; index_item_length = 4; record_length = 32; @@ -36,7 +37,7 @@ int database::retrieve_mid_record(MidDBRecord* record, std::string search_term) } int database::retrieve_airline_record(AirlinesDBRecord* record, std::string search_term) { - file_path = "ADSB/airlines.db"; + file_path = adsb_dir / u"airlines.db"; index_item_length = 4; record_length = 64; @@ -46,7 +47,7 @@ int database::retrieve_airline_record(AirlinesDBRecord* record, std::string sear } int database::retrieve_aircraft_record(AircraftDBRecord* record, std::string search_term) { - file_path = "ADSB/icao24.db"; + file_path = adsb_dir / u"icao24.db"; index_item_length = 7; record_length = 146; @@ -55,7 +56,7 @@ int database::retrieve_aircraft_record(AircraftDBRecord* record, std::string sea return (result); } -int database::retrieve_record(std::string file_path, int index_item_length, int record_length, void* record, std::string search_term) { +int database::retrieve_record(std::filesystem::path file_path, int index_item_length, int record_length, void* record, std::string search_term) { if (search_term.empty()) return DATABASE_RECORD_NOT_FOUND; diff --git a/firmware/application/database.hpp b/firmware/application/database.hpp index 336c7aa9..4720da87 100644 --- a/firmware/application/database.hpp +++ b/firmware/application/database.hpp @@ -61,9 +61,9 @@ class database { int retrieve_aircraft_record(AircraftDBRecord* record, std::string search_term); private: - std::string file_path = ""; // path inclusing filename - int index_item_length = 0; // length of index item - int record_length = 0; // length of record + std::filesystem::path file_path = ""; // path including filename + int index_item_length = 0; // length of index item + int record_length = 0; // length of record File db_file{}; int number_of_records = 0; @@ -74,7 +74,7 @@ class database { int result = 0; - int retrieve_record(std::string file_path, int index_item_length, int record_length, void* record, std::string search_term); + int retrieve_record(std::filesystem::path file_path, int index_item_length, int record_length, void* record, std::string search_term); }; #endif /*__DATABASE_H__*/ diff --git a/firmware/application/debug.cpp b/firmware/application/debug.cpp index 745784ce..4713b636 100644 --- a/firmware/application/debug.cpp +++ b/firmware/application/debug.cpp @@ -32,6 +32,7 @@ #include "string_format.hpp" #include "ui_styles.hpp" #include "irq_controls.hpp" +#include "file_path.hpp" using namespace ui; @@ -266,7 +267,6 @@ bool stack_dump() { bool memory_dump(uint32_t* addr_start, uint32_t num_words, bool stack_flag) { Painter painter; - std::string debug_dir = "DEBUG"; std::filesystem::path filename{}; File dump_file{}; bool error; @@ -277,7 +277,7 @@ bool memory_dump(uint32_t* addr_start, uint32_t num_words, bool stack_flag) { bool data_found{false}; ensure_directory(debug_dir); - filename = next_filename_matching_pattern(debug_dir + "/" + (stack_flag ? "STACK" : "MEMORY") + "_DUMP_????.TXT"); + filename = next_filename_matching_pattern(debug_dir + (stack_flag ? u"/STACK" : u"/MEMORY") + u"_DUMP_????.TXT"); error = filename.empty(); if (!error) error = dump_file.create(filename) != 0; diff --git a/firmware/application/external/afsk_rx/ui_afsk_rx.cpp b/firmware/application/external/afsk_rx/ui_afsk_rx.cpp index 2b43ca23..626ff76e 100644 --- a/firmware/application/external/afsk_rx/ui_afsk_rx.cpp +++ b/firmware/application/external/afsk_rx/ui_afsk_rx.cpp @@ -29,6 +29,7 @@ #include "baseband_api.hpp" #include "string_format.hpp" #include "portapack_persistent_memory.hpp" +#include "file_path.hpp" using namespace portapack; using namespace modems; @@ -84,7 +85,7 @@ AFSKRxView::AFSKRxView(NavigationView& nav) logger = std::make_unique(); if (logger) - logger->append(LOG_ROOT_DIR "/AFSK.TXT"); + logger->append(logs_dir / u"AFSK.TXT"); // Auto-configure modem for LCR RX (will be removed later) baseband::set_afsk(persistent_memory::modem_baudrate(), 8, 0, false); diff --git a/firmware/application/external/afsk_rx/ui_afsk_rx.hpp b/firmware/application/external/afsk_rx/ui_afsk_rx.hpp index 188cd5df..2e0794cf 100644 --- a/firmware/application/external/afsk_rx/ui_afsk_rx.hpp +++ b/firmware/application/external/afsk_rx/ui_afsk_rx.hpp @@ -40,7 +40,7 @@ namespace ui::external_app::afsk_rx { class AFSKLogger { public: - Optional append(const std::string& filename) { + Optional append(const std::filesystem::path& filename) { return log_file.append(filename); } diff --git a/firmware/application/external/spainter/ui_spectrum_painter.cpp b/firmware/application/external/spainter/ui_spectrum_painter.cpp index 8b680b5f..ceeb1f81 100644 --- a/firmware/application/external/spainter/ui_spectrum_painter.cpp +++ b/firmware/application/external/spainter/ui_spectrum_painter.cpp @@ -76,15 +76,15 @@ SpectrumPainterView::SpectrumPainterView( transmitter_model.set_rf_amp(rf_amp); }; - input_image.on_input_avaliable = [this]() { - image_input_avaliable = true; + input_image.on_input_available = [this]() { + image_input_available = true; }; button_play.on_select = [this](ImageButton&) { if (tx_active == false) { tx_mode = tab_view.selected(); - if (tx_mode == 0 && image_input_avaliable == false) + if (tx_mode == 0 && image_input_available == false) return; /* By experimental test measurement, we got a good painted spectrum quality when selecting a BW GUI App range from 100k ... 2M aprox. In that range , the best TX LPF filter = 1M75 (the min) diff --git a/firmware/application/external/spainter/ui_spectrum_painter.hpp b/firmware/application/external/spainter/ui_spectrum_painter.hpp index 40f3939c..ba780a67 100644 --- a/firmware/application/external/spainter/ui_spectrum_painter.hpp +++ b/firmware/application/external/spainter/ui_spectrum_painter.hpp @@ -61,7 +61,7 @@ class SpectrumPainterView : public View { app_settings::SettingsManager settings_{ "tx_painter", app_settings::Mode::TX}; - bool image_input_avaliable{false}; + bool image_input_available{false}; bool tx_active{false}; uint32_t tx_mode{0}; uint16_t tx_current_line{0}; diff --git a/firmware/application/external/spainter/ui_spectrum_painter_image.cpp b/firmware/application/external/spainter/ui_spectrum_painter_image.cpp index 5f26ec86..fd2e8cb1 100644 --- a/firmware/application/external/spainter/ui_spectrum_painter_image.cpp +++ b/firmware/application/external/spainter/ui_spectrum_painter_image.cpp @@ -28,6 +28,7 @@ #include "io_file.hpp" #include "file.hpp" #include "portapack_persistent_memory.hpp" +#include "file_path.hpp" namespace ui::external_app::spainter { @@ -39,15 +40,14 @@ SpectrumInputImageView::SpectrumInputImageView(NavigationView& nav) { button_load_image.on_select = [this, &nav](Button&) { auto open_view = nav.push(".bmp"); - constexpr auto data_directory = u"SPECTRUM"; - ensure_directory(data_directory); - open_view->push_dir(data_directory); + ensure_directory(spectrum_dir); + open_view->push_dir(spectrum_dir); open_view->on_changed = [this](std::filesystem::path new_file_path) { this->file = new_file_path.string(); painted = false; this->set_dirty(); - this->on_input_avaliable(); + this->on_input_available(); }; }; } diff --git a/firmware/application/external/spainter/ui_spectrum_painter_image.hpp b/firmware/application/external/spainter/ui_spectrum_painter_image.hpp index d4ae6cd9..711e8f27 100644 --- a/firmware/application/external/spainter/ui_spectrum_painter_image.hpp +++ b/firmware/application/external/spainter/ui_spectrum_painter_image.hpp @@ -46,7 +46,7 @@ class SpectrumInputImageView : public View { uint16_t get_height(); std::vector get_line(uint16_t); - std::function on_input_avaliable{}; + std::function on_input_available{}; private: bool painted{false}; diff --git a/firmware/application/file_path.cpp b/firmware/application/file_path.cpp new file mode 100644 index 00000000..9188d2a5 --- /dev/null +++ b/firmware/application/file_path.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 Mark Thompson + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "file_path.hpp" +#include "file.hpp" + +const std::filesystem::path adsb_dir = u"ADSB"; +const std::filesystem::path ais_dir = u"AIS"; +const std::filesystem::path aprs_dir = u"APRS"; +const std::filesystem::path audio_dir = u"AUDIO"; +const std::filesystem::path blerx_dir = u"BLERX"; +const std::filesystem::path bletx_dir = u"BLETX"; +const std::filesystem::path captures_dir = u"CAPTURES"; +const std::filesystem::path debug_dir = u"DEBUG"; +const std::filesystem::path firmware_dir = u"FIRMWARE"; +const std::filesystem::path freqman_dir = u"FREQMAN"; +const std::filesystem::path logs_dir = u"LOGS"; +const std::filesystem::path looking_glass_dir = u"LOOKINGGLASS"; +const std::filesystem::path playlist_dir = u"PLAYLIST"; +const std::filesystem::path remotes_dir = u"REMOTES"; +const std::filesystem::path repeat_rec_path = u"CAPTURES"; +const std::filesystem::path screenshots_dir = u"SCREENSHOTS"; +const std::filesystem::path settings_dir = u"SETTINGS"; +const std::filesystem::path spectrum_dir = u"SPECTRUM"; +const std::filesystem::path splash_dir = u"SPLASH"; +const std::filesystem::path sstv_dir = u"SSTV"; +const std::filesystem::path wav_dir = u"WAV"; +const std::filesystem::path whipcalc_dir = u"WHIPCALC"; diff --git a/firmware/application/file_path.hpp b/firmware/application/file_path.hpp new file mode 100644 index 00000000..7661ab22 --- /dev/null +++ b/firmware/application/file_path.hpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 Mark Thompson + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __FILE_PATH_H__ +#define __FILE_PATH_H__ + +#include "file.hpp" + +extern const std::filesystem::path adsb_dir; +extern const std::filesystem::path ais_dir; +extern const std::filesystem::path aprs_dir; +extern const std::filesystem::path audio_dir; +extern const std::filesystem::path blerx_dir; +extern const std::filesystem::path bletx_dir; +extern const std::filesystem::path captures_dir; +extern const std::filesystem::path debug_dir; +extern const std::filesystem::path firmware_dir; +extern const std::filesystem::path freqman_dir; +extern const std::filesystem::path logs_dir; +extern const std::filesystem::path looking_glass_dir; +extern const std::filesystem::path playlist_dir; +extern const std::filesystem::path remotes_dir; +extern const std::filesystem::path repeat_rec_path; +extern const std::filesystem::path screenshots_dir; +extern const std::filesystem::path settings_dir; +extern const std::filesystem::path spectrum_dir; +extern const std::filesystem::path splash_dir; +extern const std::filesystem::path sstv_dir; +extern const std::filesystem::path wav_dir; +extern const std::filesystem::path whipcalc_dir; + +#endif /* __FILE_PATH_H__ */ diff --git a/firmware/application/freqman_db.cpp b/firmware/application/freqman_db.cpp index e676d3b9..61a071e5 100644 --- a/firmware/application/freqman_db.cpp +++ b/firmware/application/freqman_db.cpp @@ -29,6 +29,7 @@ #include "string_format.hpp" #include "tone_key.hpp" #include "utility.hpp" +#include "file_path.hpp" #include #include @@ -37,7 +38,6 @@ namespace fs = std::filesystem; -const std::filesystem::path freqman_dir{u"/FREQMAN"}; const std::filesystem::path freqman_extension{u".TXT"}; // NB: Don't include UI headers to keep this code unit testable. diff --git a/firmware/application/freqman_db.hpp b/firmware/application/freqman_db.hpp index 6e1a1d7b..2fed7a93 100644 --- a/firmware/application/freqman_db.hpp +++ b/firmware/application/freqman_db.hpp @@ -36,7 +36,6 @@ #include /* Defined in freqman_db.cpp */ -extern const std::filesystem::path freqman_dir; extern const std::filesystem::path freqman_extension; using freqman_index_t = uint8_t; diff --git a/firmware/application/log_file.hpp b/firmware/application/log_file.hpp index 9ec0e3fe..430bf14a 100644 --- a/firmware/application/log_file.hpp +++ b/firmware/application/log_file.hpp @@ -27,8 +27,6 @@ #include "file.hpp" #include "rtc_time.hpp" -#define LOG_ROOT_DIR "LOGS" - class LogFile { public: Optional append(const std::filesystem::path& filename) { diff --git a/firmware/application/ui/ui_geomap.cpp b/firmware/application/ui/ui_geomap.cpp index 75829854..3b48a95a 100644 --- a/firmware/application/ui/ui_geomap.cpp +++ b/firmware/application/ui/ui_geomap.cpp @@ -34,6 +34,7 @@ using namespace portapack; #include "complex.hpp" #include "ui_styles.hpp" #include "ui_font_fixed_5x8.hpp" +#include "file_path.hpp" namespace ui { @@ -447,7 +448,7 @@ void GeoMap::move(const float lon, const float lat) { } bool GeoMap::init() { - auto result = map_file.open("ADSB/world_map.bin"); + auto result = map_file.open(adsb_dir / u"world_map.bin"); map_opened = !result.is_valid(); if (map_opened) { @@ -613,7 +614,7 @@ void GeoMapView::focus() { geopos.focus(); if (!geomap.map_file_opened()) - nav_.display_modal("No map", "No world_map.bin file in\n/ADSB/ directory", ABORT); + nav_.display_modal("No map", "No world_map.bin file in\n/" + adsb_dir.string() + "/ directory", ABORT); } void GeoMapView::update_my_position(float lat, float lon, int32_t altitude) { diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index d417002d..a8a6f2bc 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -106,6 +106,7 @@ #include "file.hpp" #include "file_reader.hpp" #include "png_writer.hpp" +#include "file_path.hpp" using portapack::receiver_model; using portapack::transmitter_model; @@ -473,8 +474,8 @@ void SystemStatusView::on_bias_tee() { } void SystemStatusView::on_camera() { - ensure_directory("SCREENSHOTS"); - auto path = next_filename_matching_pattern(u"SCREENSHOTS/SCR_????.PNG"); + ensure_directory(screenshots_dir); + auto path = next_filename_matching_pattern(screenshots_dir / u"SCR_????.PNG"); if (path.empty()) return; @@ -535,7 +536,7 @@ void SystemStatusView::rtc_battery_workaround() { } } } else { - ensure_directory(SETTINGS_DIR); + ensure_directory(settings_dir); make_new_file(DATE_FILEFLAG); year = 1980; diff --git a/firmware/application/usb_serial_shell.cpp b/firmware/application/usb_serial_shell.cpp index 21fc12c0..6aba0f14 100644 --- a/firmware/application/usb_serial_shell.cpp +++ b/firmware/application/usb_serial_shell.cpp @@ -44,6 +44,7 @@ #include "ui_flash_utility.hpp" #include "untar.hpp" #include "ui_widget.hpp" +#include "file_path.hpp" #include "ui_navigation.hpp" #include "usb_serial_shell_filesystem.hpp" @@ -167,8 +168,8 @@ static void cmd_screenshot(BaseSequentialStream* chp, int argc, char* argv[]) { (void)argc; (void)argv; - ensure_directory("SCREENSHOTS"); - auto path = next_filename_matching_pattern(u"SCREENSHOTS/SCR_????.PNG"); + ensure_directory(screenshots_dir); + auto path = next_filename_matching_pattern(screenshots_dir / u"SCR_????.PNG"); if (path.empty()) return; @@ -1037,9 +1038,9 @@ static void cmd_settingsreset(BaseSequentialStream* chp, int argc, char* argv[]) if (!nav) return; nav->home(true); // to exit all running apps - for (const auto& entry : std::filesystem::directory_iterator(SETTINGS_DIR, u"*.ini")) { + for (const auto& entry : std::filesystem::directory_iterator(settings_dir, u"*.ini")) { if (std::filesystem::is_regular_file(entry.status())) { - std::filesystem::path pth = SETTINGS_DIR; + std::filesystem::path pth = settings_dir; pth += u"/" + entry.path(); chprintf(chp, pth.string().c_str()); chprintf(chp, "\r\n"); diff --git a/firmware/common/portapack_persistent_memory.cpp b/firmware/common/portapack_persistent_memory.cpp index b904722b..4fe7aa62 100644 --- a/firmware/common/portapack_persistent_memory.cpp +++ b/firmware/common/portapack_persistent_memory.cpp @@ -37,6 +37,7 @@ #include "ui_flash_utility.hpp" #include "utility.hpp" #include "rtc_time.hpp" +#include "file_path.hpp" #include #include @@ -1105,14 +1106,14 @@ void set_menu_color(Color v) { // PMem to sdcard settings bool should_use_sdcard_for_pmem() { - return std::filesystem::file_exists(PMEM_FILEFLAG); + return std::filesystem::file_exists(settings_dir / PMEM_FILEFLAG); } int save_persistent_settings_to_file() { File outfile; - ensure_directory(SETTINGS_DIR); - auto error = outfile.create(PMEM_SETTING_FILE); + ensure_directory(settings_dir); + auto error = outfile.create(settings_dir / PMEM_SETTING_FILE); if (error) return false; @@ -1122,7 +1123,7 @@ int save_persistent_settings_to_file() { int load_persistent_settings_from_file() { File infile; - auto error = infile.open(PMEM_SETTING_FILE); + auto error = infile.open(settings_dir / PMEM_SETTING_FILE); if (error) return false; diff --git a/firmware/common/portapack_persistent_memory.hpp b/firmware/common/portapack_persistent_memory.hpp index 6c40fa3a..397c79ab 100644 --- a/firmware/common/portapack_persistent_memory.hpp +++ b/firmware/common/portapack_persistent_memory.hpp @@ -37,10 +37,10 @@ #include "ui.hpp" // persistent memory from/to sdcard flag file -#define PMEM_FILEFLAG u"/SETTINGS/PMEM_FILEFLAG" +#define PMEM_FILEFLAG u"PMEM_FILEFLAG" // persistent memory from/to sdcard flag file -#define PMEM_SETTING_FILE u"/SETTINGS/pmem_settings" +#define PMEM_SETTING_FILE u"pmem_settings" #define PMEM_SIZE_BYTES 256 // total amount of pmem space in bytes, including checksum #define PMEM_SIZE_WORDS (PMEM_SIZE_BYTES / 4)