mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-12-24 23:09:26 -05:00
Added Freq to Radio State, only update specified App Settings, always Load/Save Settings (#1498)
* Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload
This commit is contained in:
parent
5135b6404d
commit
9929376acf
@ -244,8 +244,7 @@ SettingsManager::SettingsManager(
|
|||||||
: app_name_{app_name},
|
: app_name_{app_name},
|
||||||
settings_{},
|
settings_{},
|
||||||
bindings_{},
|
bindings_{},
|
||||||
loaded_{false},
|
loaded_{false} {
|
||||||
radio_loaded_{false} {
|
|
||||||
settings_.mode = mode;
|
settings_.mode = mode;
|
||||||
settings_.options = options;
|
settings_.options = options;
|
||||||
|
|
||||||
@ -253,12 +252,9 @@ SettingsManager::SettingsManager(
|
|||||||
additional_settings.reserve(17 + additional_settings.size());
|
additional_settings.reserve(17 + additional_settings.size());
|
||||||
bindings_ = std::move(additional_settings);
|
bindings_ = std::move(additional_settings);
|
||||||
|
|
||||||
// Additional settings should always be loaded because apps now rely
|
// Settings should always be loaded because apps now rely
|
||||||
// on being able to store UI settings, config, etc. The radio settings
|
// on being able to store UI settings, config, etc.
|
||||||
// are only loaded if the global option has been enabled.
|
|
||||||
// Add the radio setting bindings if either load or save are enabled.
|
|
||||||
if (portapack::persistent_memory::load_app_settings() ||
|
|
||||||
portapack::persistent_memory::save_app_settings()) {
|
|
||||||
// Transmitter model settings.
|
// Transmitter model settings.
|
||||||
if (flags_enabled(mode, Mode::TX)) {
|
if (flags_enabled(mode, Mode::TX)) {
|
||||||
bindings_.emplace_back("tx_frequency"sv, &settings_.tx_frequency);
|
bindings_.emplace_back("tx_frequency"sv, &settings_.tx_frequency);
|
||||||
@ -285,20 +281,20 @@ SettingsManager::SettingsManager(
|
|||||||
bindings_.emplace_back("sampling_rate"sv, &settings_.sampling_rate);
|
bindings_.emplace_back("sampling_rate"sv, &settings_.sampling_rate);
|
||||||
bindings_.emplace_back("step"sv, &settings_.step);
|
bindings_.emplace_back("step"sv, &settings_.step);
|
||||||
bindings_.emplace_back("volume"sv, &settings_.volume);
|
bindings_.emplace_back("volume"sv, &settings_.volume);
|
||||||
}
|
|
||||||
|
// RadioState should have initialized default radio parameters before this function;
|
||||||
|
// copy them to settings_ before checking settings .ini file (in case the file doesn't exist
|
||||||
|
// or doesn't include all parameters). Settings in the file can overwrite all, or a subset of parameters.
|
||||||
|
copy_from_radio_model(settings_);
|
||||||
|
|
||||||
loaded_ = load_settings(app_name_, bindings_);
|
loaded_ = load_settings(app_name_, bindings_);
|
||||||
|
|
||||||
// Only copy to the radio if load was successful.
|
// Only copy to the radio if load was successful.
|
||||||
if (loaded_ && portapack::persistent_memory::load_app_settings()) {
|
if (loaded_)
|
||||||
radio_loaded_ = true;
|
|
||||||
copy_to_radio_model(settings_);
|
copy_to_radio_model(settings_);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
SettingsManager::~SettingsManager() {
|
SettingsManager::~SettingsManager() {
|
||||||
// Only save radio settings when the option is enabled.
|
|
||||||
if (portapack::persistent_memory::save_app_settings())
|
|
||||||
copy_from_radio_model(settings_);
|
copy_from_radio_model(settings_);
|
||||||
|
|
||||||
save_settings(app_name_, bindings_);
|
save_settings(app_name_, bindings_);
|
||||||
|
@ -170,8 +170,6 @@ class SettingsManager {
|
|||||||
/* True if settings were successfully loaded from file. */
|
/* True if settings were successfully loaded from file. */
|
||||||
bool loaded() const { return loaded_; }
|
bool loaded() const { return loaded_; }
|
||||||
|
|
||||||
/* True if radio settings were successfully loaded from file. */
|
|
||||||
bool radio_loaded() const { return radio_loaded_; }
|
|
||||||
Mode mode() const { return settings_.mode; }
|
Mode mode() const { return settings_.mode; }
|
||||||
|
|
||||||
AppSettings& raw() { return settings_; }
|
AppSettings& raw() { return settings_; }
|
||||||
@ -181,7 +179,6 @@ class SettingsManager {
|
|||||||
AppSettings settings_;
|
AppSettings settings_;
|
||||||
SettingBindings bindings_;
|
SettingBindings bindings_;
|
||||||
bool loaded_;
|
bool loaded_;
|
||||||
bool radio_loaded_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace app_settings
|
} // namespace app_settings
|
||||||
|
@ -60,11 +60,12 @@ class ACARSAppView : public View {
|
|||||||
private:
|
private:
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
131550000 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2457600 /* sampling rate */
|
2457600 /* sampling rate */
|
||||||
};
|
};
|
||||||
app_settings::SettingsManager settings_{
|
app_settings::SettingsManager settings_{
|
||||||
"rx_acars.hpp", app_settings::Mode::RX};
|
"rx_acars", app_settings::Mode::RX};
|
||||||
|
|
||||||
bool logging{false};
|
bool logging{false};
|
||||||
uint32_t packet_counter{0};
|
uint32_t packet_counter{0};
|
||||||
|
@ -382,9 +382,6 @@ AISAppView::AISAppView(NavigationView& nav)
|
|||||||
|
|
||||||
recent_entry_detail_view.hidden(true);
|
recent_entry_detail_view.hidden(true);
|
||||||
|
|
||||||
if (!settings_.radio_loaded())
|
|
||||||
receiver_model.set_target_frequency(initial_target_frequency);
|
|
||||||
|
|
||||||
receiver_model.enable();
|
receiver_model.enable();
|
||||||
|
|
||||||
options_channel.on_change = [this](size_t, OptionsField::value_t v) {
|
options_channel.on_change = [this](size_t, OptionsField::value_t v) {
|
||||||
|
@ -162,9 +162,8 @@ class AISAppView : public View {
|
|||||||
std::string title() const override { return "AIS RX"; };
|
std::string title() const override { return "AIS RX"; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr uint32_t initial_target_frequency = 162025000;
|
|
||||||
|
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
162025000 /* frequency*/,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2457600 /* sampling rate */
|
2457600 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -110,9 +110,6 @@ ERTAppView::ERTAppView(NavigationView&) {
|
|||||||
&recent_entries_view,
|
&recent_entries_view,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!settings_.radio_loaded())
|
|
||||||
receiver_model.set_target_frequency(initial_target_frequency);
|
|
||||||
|
|
||||||
receiver_model.enable();
|
receiver_model.enable();
|
||||||
|
|
||||||
logger = std::make_unique<ERTLogger>();
|
logger = std::make_unique<ERTLogger>();
|
||||||
|
@ -123,12 +123,11 @@ class ERTAppView : public View {
|
|||||||
std::string title() const override { return "ERT RX"; };
|
std::string title() const override { return "ERT RX"; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr uint32_t initial_target_frequency = 911600000;
|
|
||||||
|
|
||||||
ERTRecentEntries recent{};
|
ERTRecentEntries recent{};
|
||||||
std::unique_ptr<ERTLogger> logger{};
|
std::unique_ptr<ERTLogger> logger{};
|
||||||
|
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
911600000 /* frequency */,
|
||||||
2500000 /* bandwidth */,
|
2500000 /* bandwidth */,
|
||||||
4194304 /* sampling rate */};
|
4194304 /* sampling rate */};
|
||||||
app_settings::SettingsManager settings_{
|
app_settings::SettingsManager settings_{
|
||||||
|
@ -176,13 +176,6 @@ GpsSimAppView::GpsSimAppView(
|
|||||||
&waterfall,
|
&waterfall,
|
||||||
});
|
});
|
||||||
|
|
||||||
transmitter_model.set_baseband_bandwidth(15'000'000); // GPS L1 signal use to have wide band spectrum, still with lobule energy -30dB's at + - 15 Mhz
|
|
||||||
|
|
||||||
if (!settings_.radio_loaded()) {
|
|
||||||
field_frequency.set_value(initial_target_frequency);
|
|
||||||
transmitter_model.set_sampling_rate(2600000);
|
|
||||||
}
|
|
||||||
|
|
||||||
field_frequency.set_step(5000);
|
field_frequency.set_step(5000);
|
||||||
|
|
||||||
button_play.on_select = [this](ImageButton&) {
|
button_play.on_select = [this](ImageButton&) {
|
||||||
|
@ -51,21 +51,17 @@ class GpsSimAppView : public View {
|
|||||||
std::string title() const override { return "GPS Sim TX"; };
|
std::string title() const override { return "GPS Sim TX"; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr uint32_t initial_target_frequency = 1575420000;
|
|
||||||
|
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
3000000 /* bandwidth */,
|
1575420000 /* frequency */,
|
||||||
500000 /* sampling rate */
|
15000000 /* bandwidth */,
|
||||||
|
2600000 /* sampling rate */
|
||||||
};
|
};
|
||||||
app_settings::SettingsManager settings_{
|
app_settings::SettingsManager settings_{
|
||||||
"tx_gps", app_settings::Mode::TX};
|
"tx_gps", app_settings::Mode::TX};
|
||||||
|
|
||||||
static constexpr ui::Dim header_height = 3 * 16;
|
static constexpr ui::Dim header_height = 3 * 16;
|
||||||
|
|
||||||
int32_t tx_gain{47};
|
|
||||||
bool rf_amp{true}; // aux private var to store temporal, same as Replay App rf_amp user selection.
|
|
||||||
static constexpr uint32_t baseband_bandwidth = 3000000; // filter bandwidth
|
|
||||||
const size_t read_size{16384};
|
const size_t read_size{16384};
|
||||||
const size_t buffer_count{3};
|
const size_t buffer_count{3};
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ class LGEView : public View {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
868067000 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2280000 /* sampling rate */
|
2280000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -114,9 +114,6 @@ POCSAGAppView::POCSAGAppView(NavigationView& nav)
|
|||||||
? FILTER_NONE
|
? FILTER_NONE
|
||||||
: FILTER_DROP;
|
: FILTER_DROP;
|
||||||
}
|
}
|
||||||
if (!app_settings_.radio_loaded()) {
|
|
||||||
field_frequency.set_value(initial_target_frequency);
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.append(LOG_ROOT_DIR "/POCSAG.TXT");
|
logger.append(LOG_ROOT_DIR "/POCSAG.TXT");
|
||||||
|
|
||||||
|
@ -197,14 +197,17 @@ class POCSAGAppView : public View {
|
|||||||
void focus() override;
|
void focus() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr uint32_t initial_target_frequency = 466'175'000;
|
|
||||||
bool logging() const { return settings_.enable_logging; };
|
bool logging() const { return settings_.enable_logging; };
|
||||||
bool logging_raw() const { return settings_.enable_raw_log; };
|
bool logging_raw() const { return settings_.enable_raw_log; };
|
||||||
bool hide_bad_data() const { return settings_.hide_bad_data; };
|
bool hide_bad_data() const { return settings_.hide_bad_data; };
|
||||||
bool hide_addr_only() const { return settings_.hide_addr_only; };
|
bool hide_addr_only() const { return settings_.hide_addr_only; };
|
||||||
|
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{};
|
RxRadioState radio_state_{
|
||||||
|
466175000 /* frequency*/,
|
||||||
|
max283x::filter::bandwidth_minimum /* bandwidth */,
|
||||||
|
3072000 /* sampling rate */
|
||||||
|
};
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
POCSAGSettings settings_{};
|
POCSAGSettings settings_{};
|
||||||
|
@ -120,7 +120,6 @@ void SoundBoardView::start_tx(const uint32_t id) {
|
|||||||
);
|
);
|
||||||
baseband::set_sample_rate(sample_rate);
|
baseband::set_sample_rate(sample_rate);
|
||||||
|
|
||||||
transmitter_model.set_baseband_bandwidth(1'750'000); // the Minimum TX LPF 1M75 is fine.
|
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
|
|
||||||
tx_view.set_transmitting(true);
|
tx_view.set_transmitting(true);
|
||||||
|
@ -50,6 +50,7 @@ class SoundBoardView : public View {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
1536000 /* sampling rate */
|
1536000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -157,9 +157,6 @@ TPMSAppView::TPMSAppView(NavigationView&) {
|
|||||||
&field_vga,
|
&field_vga,
|
||||||
&recent_entries_view});
|
&recent_entries_view});
|
||||||
|
|
||||||
if (!settings_.radio_loaded())
|
|
||||||
receiver_model.set_target_frequency(initial_target_frequency);
|
|
||||||
|
|
||||||
receiver_model.enable();
|
receiver_model.enable();
|
||||||
|
|
||||||
options_band.on_change = [this](size_t, OptionsField::value_t v) {
|
options_band.on_change = [this](size_t, OptionsField::value_t v) {
|
||||||
|
@ -102,9 +102,8 @@ class TPMSAppView : public View {
|
|||||||
std::string title() const override { return "TPMS RX"; };
|
std::string title() const override { return "TPMS RX"; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static constexpr uint32_t initial_target_frequency = 315000000;
|
|
||||||
|
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
315000000 /* frequency*/,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2457600 /* sampling rate */};
|
2457600 /* sampling rate */};
|
||||||
app_settings::SettingsManager settings_{
|
app_settings::SettingsManager settings_{
|
||||||
@ -135,7 +134,7 @@ class TPMSAppView : public View {
|
|||||||
3,
|
3,
|
||||||
{
|
{
|
||||||
{"315", 315000000},
|
{"315", 315000000},
|
||||||
{"433", 433920000},
|
{"434", 433920000},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
OptionsField options_pressure{
|
OptionsField options_pressure{
|
||||||
|
@ -521,7 +521,6 @@ ADSBRxView::ADSBRxView(NavigationView& nav) {
|
|||||||
|
|
||||||
baseband::set_adsb();
|
baseband::set_adsb();
|
||||||
|
|
||||||
receiver_model.set_target_frequency(1'090'000'000);
|
|
||||||
receiver_model.enable();
|
receiver_model.enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,6 +342,7 @@ class ADSBRxView : public View {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
1090000000 /* frequency */,
|
||||||
2500000 /* bandwidth */,
|
2500000 /* bandwidth */,
|
||||||
2000000 /* sampling rate */,
|
2000000 /* sampling rate */,
|
||||||
ReceiverModel::Mode::SpectrumAnalysis};
|
ReceiverModel::Mode::SpectrumAnalysis};
|
||||||
|
@ -299,7 +299,6 @@ void ADSBTxView::start_tx() {
|
|||||||
/* Already tested , with SDR Angel + another Hackrf RX and dump1090 + SDR RLT. Final conclusion is TX LPF 6 Mhz is
|
/* Already tested , with SDR Angel + another Hackrf RX and dump1090 + SDR RLT. Final conclusion is TX LPF 6 Mhz is
|
||||||
* the best settings to fulfill ADSB transponder spectrum mask requirements (<=-20 dB's at +-7Mhz , <=-40 dB's at +-23Mhz )
|
* the best settings to fulfill ADSB transponder spectrum mask requirements (<=-20 dB's at +-7Mhz , <=-40 dB's at +-23Mhz )
|
||||||
* and not showing any ADSB data decoding degradation.*/
|
* and not showing any ADSB data decoding degradation.*/
|
||||||
transmitter_model.set_baseband_bandwidth(6'000'000); // best settings for ADSB TX.
|
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
|
|
||||||
baseband::set_adsb();
|
baseband::set_adsb();
|
||||||
|
@ -203,7 +203,8 @@ class ADSBTxView : public View {
|
|||||||
};*/
|
};*/
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
10000000 /* bandwidth */,
|
1090000000 /* frequency */,
|
||||||
|
6000000 /* bandwidth */,
|
||||||
4000000 /* sampling rate */
|
4000000 /* sampling rate */
|
||||||
};
|
};
|
||||||
app_settings::SettingsManager settings_{
|
app_settings::SettingsManager settings_{
|
||||||
|
@ -190,7 +190,11 @@ class APRSRxView : public View {
|
|||||||
bool reset_console = false;
|
bool reset_console = false;
|
||||||
|
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{};
|
RxRadioState radio_state_{
|
||||||
|
144390000 /* frequency */,
|
||||||
|
1750000 /* bandwidth */,
|
||||||
|
3072000 /* sampling rate */
|
||||||
|
};
|
||||||
app_settings::SettingsManager settings_{
|
app_settings::SettingsManager settings_{
|
||||||
"rx_aprs", app_settings::Mode::RX};
|
"rx_aprs", app_settings::Mode::RX};
|
||||||
|
|
||||||
|
@ -57,7 +57,6 @@ void APRSTXView::start_tx() {
|
|||||||
// uint8_t * bb_data_ptr = shared_memory.bb_data.data;
|
// uint8_t * bb_data_ptr = shared_memory.bb_data.data;
|
||||||
// text_payload.set(to_string_hex_array(bb_data_ptr + 56, 15));
|
// text_payload.set(to_string_hex_array(bb_data_ptr + 56, 15));
|
||||||
|
|
||||||
transmitter_model.set_baseband_bandwidth(1'750'000); // APRS Automatic Packet Reporting System (APRS).AFSK with NBFM , max BW= 12k5 , then TX LPF min 1M75
|
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
|
|
||||||
baseband::set_afsk_data(
|
baseband::set_afsk_data(
|
||||||
|
@ -46,6 +46,7 @@ class APRSTXView : public View {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
144390000 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
AFSK_TX_SAMPLERATE /* sampling rate */
|
AFSK_TX_SAMPLERATE /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -54,7 +54,6 @@ BTLERxView::BTLERxView(NavigationView& nav)
|
|||||||
&console});
|
&console});
|
||||||
|
|
||||||
// Auto-configure modem for LCR RX (TODO: remove later)
|
// Auto-configure modem for LCR RX (TODO: remove later)
|
||||||
field_frequency.set_value(2426000000);
|
|
||||||
auto def_bell202 = &modem_defs[0];
|
auto def_bell202 = &modem_defs[0];
|
||||||
persistent_memory::set_modem_baudrate(def_bell202->baudrate);
|
persistent_memory::set_modem_baudrate(def_bell202->baudrate);
|
||||||
serial_format_t serial_format;
|
serial_format_t serial_format;
|
||||||
|
@ -50,6 +50,7 @@ class BTLERxView : public View {
|
|||||||
|
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
2426000000 /* frequency */,
|
||||||
4000000 /* bandwidth */,
|
4000000 /* bandwidth */,
|
||||||
4000000 /* sampling rate */,
|
4000000 /* sampling rate */,
|
||||||
ReceiverModel::Mode::WidebandFMAudio};
|
ReceiverModel::Mode::WidebandFMAudio};
|
||||||
|
@ -67,7 +67,6 @@ void CoasterPagerView::generate_frame() {
|
|||||||
void CoasterPagerView::start_tx() {
|
void CoasterPagerView::start_tx() {
|
||||||
generate_frame();
|
generate_frame();
|
||||||
|
|
||||||
transmitter_model.set_baseband_bandwidth(1'750'000); // AFSK narrowband ,low baud, max FM dev 150khz , std 10khz. TX LPF=1M75 the min.
|
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
|
|
||||||
baseband::set_fsk_data(19 * 8, 2280000 / 1000, 5000, 32);
|
baseband::set_fsk_data(19 * 8, 2280000 / 1000, 5000, 32);
|
||||||
|
@ -52,6 +52,7 @@ class CoasterPagerView : public View {
|
|||||||
tx_modes tx_mode = IDLE;
|
tx_modes tx_mode = IDLE;
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
433920000, /* frequency */
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2280000 /* sampling rate */
|
2280000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -272,7 +272,6 @@ void EncodersView::start_tx(const bool scan) {
|
|||||||
/* Setting TX LPF 1M75 in this TX OOK App , We got same results as fw 1.7.4
|
/* Setting TX LPF 1M75 in this TX OOK App , We got same results as fw 1.7.4
|
||||||
* Looking max BW of this app, we tested , Selecting OOK type 145026 with CLK 455K and max DEV. 150k,
|
* Looking max BW of this app, we tested , Selecting OOK type 145026 with CLK 455K and max DEV. 150k,
|
||||||
* and we got BW +-2Mhz , with that TX LPF 1M75, it is fine.*/
|
* and we got BW +-2Mhz , with that TX LPF 1M75, it is fine.*/
|
||||||
transmitter_model.set_baseband_bandwidth(1'750'000); // Min. TX LPF value.
|
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
|
|
||||||
baseband::set_ook_data(
|
baseband::set_ook_data(
|
||||||
|
@ -185,6 +185,7 @@ class EncodersView : public View {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
433920000 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
OOK_SAMPLERATE /* sampling rate */
|
OOK_SAMPLERATE /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -101,6 +101,7 @@ class JammerView : public View {
|
|||||||
private:
|
private:
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
3500000 /* bandwidth */,
|
3500000 /* bandwidth */,
|
||||||
3072000 /* sampling rate */
|
3072000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -222,8 +222,6 @@ KeyfobView::KeyfobView(
|
|||||||
|
|
||||||
options_make.set_selected_index(0);
|
options_make.set_selected_index(0);
|
||||||
|
|
||||||
transmitter_model.set_target_frequency(433920000); // Fixed 433.92MHz
|
|
||||||
|
|
||||||
tx_view.on_edit_frequency = [this, &nav]() {
|
tx_view.on_edit_frequency = [this, &nav]() {
|
||||||
auto new_view = nav.push<FrequencyKeypadView>(transmitter_model.target_frequency());
|
auto new_view = nav.push<FrequencyKeypadView>(transmitter_model.target_frequency());
|
||||||
new_view->on_changed = [this](rf::Frequency f) {
|
new_view->on_changed = [this](rf::Frequency f) {
|
||||||
|
@ -44,6 +44,7 @@ class KeyfobView : public View {
|
|||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
433920000 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
OOK_SAMPLERATE /* sampling rate */
|
OOK_SAMPLERATE /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -82,6 +82,7 @@ class LCRView : public View {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
AFSK_TX_SAMPLERATE /* sampling rate */
|
AFSK_TX_SAMPLERATE /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -82,6 +82,7 @@ class MicTXView : public View {
|
|||||||
|
|
||||||
RxRadioState rx_radio_state_{};
|
RxRadioState rx_radio_state_{};
|
||||||
TxRadioState tx_radio_state_{
|
TxRadioState tx_radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
sampling_rate /* sampling rate */
|
sampling_rate /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -70,6 +70,7 @@ class MorseView : public View {
|
|||||||
uint32_t time_units{0};
|
uint32_t time_units{0};
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
1536000 /* sampling rate */
|
1536000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -54,7 +54,6 @@ NRFRxView::NRFRxView(NavigationView& nav)
|
|||||||
&console});
|
&console});
|
||||||
|
|
||||||
// Auto-configure modem for LCR RX (will be removed later)
|
// Auto-configure modem for LCR RX (will be removed later)
|
||||||
field_frequency.set_value(2480000000);
|
|
||||||
auto def_bell202 = &modem_defs[0];
|
auto def_bell202 = &modem_defs[0];
|
||||||
persistent_memory::set_modem_baudrate(def_bell202->baudrate);
|
persistent_memory::set_modem_baudrate(def_bell202->baudrate);
|
||||||
serial_format_t serial_format;
|
serial_format_t serial_format;
|
||||||
|
@ -50,6 +50,7 @@ class NRFRxView : public View {
|
|||||||
|
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
2480000000 /* frequency */,
|
||||||
4000000 /* bandwidth */,
|
4000000 /* bandwidth */,
|
||||||
4000000 /* sampling rate */,
|
4000000 /* sampling rate */,
|
||||||
ReceiverModel::Mode::WidebandFMAudio};
|
ReceiverModel::Mode::WidebandFMAudio};
|
||||||
|
@ -56,6 +56,7 @@ class NumbersStationView : public View {
|
|||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
1536000 /* sampling rate */
|
1536000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -56,6 +56,7 @@ class NuoptixView : public View {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
1536000 /* sampling rate */
|
1536000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -60,6 +60,7 @@ class POCSAGTXView : public View {
|
|||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2280000 /* sampling rate */
|
2280000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -187,7 +187,6 @@ void RDSView::start_tx() {
|
|||||||
else
|
else
|
||||||
frame_datetime.clear();
|
frame_datetime.clear();
|
||||||
|
|
||||||
transmitter_model.set_baseband_bandwidth(1'750'000); // Big Spectrum harmonics reduction, and now quicker decoding time.
|
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
|
|
||||||
tx_thread = std::make_unique<RDSThread>(frames);
|
tx_thread = std::make_unique<RDSThread>(frames);
|
||||||
|
@ -142,6 +142,7 @@ class RDSView : public View {
|
|||||||
RDS_flags rds_flags{};
|
RDS_flags rds_flags{};
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2280000 /* sampling rate */
|
2280000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -90,6 +90,7 @@ class SearchView : public View {
|
|||||||
private:
|
private:
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
100'000'000 /* frequency */,
|
||||||
2500000 /* bandwidth */,
|
2500000 /* bandwidth */,
|
||||||
SEARCH_SLICE_WIDTH /* sampling rate */,
|
SEARCH_SLICE_WIDTH /* sampling rate */,
|
||||||
ReceiverModel::Mode::SpectrumAnalysis};
|
ReceiverModel::Mode::SpectrumAnalysis};
|
||||||
|
@ -343,34 +343,6 @@ void SetUIView::focus() {
|
|||||||
button_save.focus();
|
button_save.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SetAppSettingsView ************************************/
|
|
||||||
|
|
||||||
SetAppSettingsView::SetAppSettingsView(NavigationView& nav) {
|
|
||||||
add_children({
|
|
||||||
&labels,
|
|
||||||
&checkbox_load_app_settings,
|
|
||||||
&checkbox_save_app_settings,
|
|
||||||
&button_save,
|
|
||||||
&button_cancel,
|
|
||||||
});
|
|
||||||
|
|
||||||
checkbox_load_app_settings.set_value(pmem::load_app_settings());
|
|
||||||
checkbox_save_app_settings.set_value(pmem::save_app_settings());
|
|
||||||
|
|
||||||
button_save.on_select = [&nav, this](Button&) {
|
|
||||||
pmem::set_load_app_settings(checkbox_load_app_settings.value());
|
|
||||||
pmem::set_save_app_settings(checkbox_save_app_settings.value());
|
|
||||||
nav.pop();
|
|
||||||
};
|
|
||||||
button_cancel.on_select = [&nav, this](Button&) {
|
|
||||||
nav.pop();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetAppSettingsView::focus() {
|
|
||||||
button_save.focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SetConverterSettingsView ******************************/
|
/* SetConverterSettingsView ******************************/
|
||||||
|
|
||||||
SetConverterSettingsView::SetConverterSettingsView(NavigationView& nav) {
|
SetConverterSettingsView::SetConverterSettingsView(NavigationView& nav) {
|
||||||
@ -654,7 +626,6 @@ SettingsMenuView::SettingsMenuView(NavigationView& nav) {
|
|||||||
add_items({{"..", ui::Color::light_grey(), &bitmap_icon_previous, [&nav]() { nav.pop(); }}});
|
add_items({{"..", ui::Color::light_grey(), &bitmap_icon_previous, [&nav]() { nav.pop(); }}});
|
||||||
}
|
}
|
||||||
add_items({
|
add_items({
|
||||||
{"App Settings", ui::Color::dark_cyan(), &bitmap_icon_setup, [&nav]() { nav.push<SetAppSettingsView>(); }},
|
|
||||||
{"Audio", ui::Color::dark_cyan(), &bitmap_icon_speaker, [&nav]() { nav.push<SetAudioView>(); }},
|
{"Audio", ui::Color::dark_cyan(), &bitmap_icon_speaker, [&nav]() { nav.push<SetAudioView>(); }},
|
||||||
{"Calibration", ui::Color::dark_cyan(), &bitmap_icon_options_touch, [&nav]() { nav.push<TouchCalibrationView>(); }},
|
{"Calibration", ui::Color::dark_cyan(), &bitmap_icon_options_touch, [&nav]() { nav.push<TouchCalibrationView>(); }},
|
||||||
{"Converter", ui::Color::dark_cyan(), &bitmap_icon_options_radio, [&nav]() { nav.push<SetConverterSettingsView>(); }},
|
{"Converter", ui::Color::dark_cyan(), &bitmap_icon_options_radio, [&nav]() { nav.push<SetConverterSettingsView>(); }},
|
||||||
|
@ -310,41 +310,6 @@ class SetUIView : public View {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class SetAppSettingsView : public View {
|
|
||||||
public:
|
|
||||||
SetAppSettingsView(NavigationView& nav);
|
|
||||||
|
|
||||||
void focus() override;
|
|
||||||
std::string title() const override { return "App Settings"; };
|
|
||||||
|
|
||||||
private:
|
|
||||||
Labels labels{
|
|
||||||
{{1 * 8, 1 * 16}, "App settings are saved to", Color::light_grey()},
|
|
||||||
{{1 * 8, 2 * 16}, "the SD card in /SETTINGS.", Color::light_grey()},
|
|
||||||
{{1 * 8, 3 * 16}, "Radio settings may also be", Color::light_grey()},
|
|
||||||
{{1 * 8, 4 * 16}, "loaded or saved per app.", Color::light_grey()},
|
|
||||||
};
|
|
||||||
|
|
||||||
Checkbox checkbox_load_app_settings{
|
|
||||||
{3 * 8, 6 * 16},
|
|
||||||
25,
|
|
||||||
"Load radio settings"};
|
|
||||||
|
|
||||||
Checkbox checkbox_save_app_settings{
|
|
||||||
{3 * 8, 8 * 16},
|
|
||||||
25,
|
|
||||||
"Save radio settings"};
|
|
||||||
|
|
||||||
Button button_save{
|
|
||||||
{2 * 8, 16 * 16, 12 * 8, 32},
|
|
||||||
"Save"};
|
|
||||||
|
|
||||||
Button button_cancel{
|
|
||||||
{16 * 8, 16 * 16, 12 * 8, 32},
|
|
||||||
"Cancel",
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class SetConverterSettingsView : public View {
|
class SetConverterSettingsView : public View {
|
||||||
public:
|
public:
|
||||||
SetConverterSettingsView(NavigationView& nav);
|
SetConverterSettingsView(NavigationView& nav);
|
||||||
|
@ -51,6 +51,7 @@ class SigGenView : public View {
|
|||||||
void on_tx_progress(const uint32_t progress, const bool done);
|
void on_tx_progress(const uint32_t progress, const bool done);
|
||||||
|
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
1536000 /* sampling rate */
|
1536000 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -66,9 +66,6 @@ SondeView::SondeView(NavigationView& nav)
|
|||||||
&button_see_qr,
|
&button_see_qr,
|
||||||
&button_see_map});
|
&button_see_map});
|
||||||
|
|
||||||
if (!settings_.radio_loaded())
|
|
||||||
field_frequency.set_value(initial_target_frequency);
|
|
||||||
|
|
||||||
field_frequency.set_step(500); // euquiq: was 10000, but we are using this for fine-tunning
|
field_frequency.set_step(500); // euquiq: was 10000, but we are using this for fine-tunning
|
||||||
|
|
||||||
geopos.set_read_only(true);
|
geopos.set_read_only(true);
|
||||||
|
@ -68,6 +68,7 @@ class SondeView : public View {
|
|||||||
private:
|
private:
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
402700000 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2457600 /* sampling rate */
|
2457600 /* sampling rate */
|
||||||
};
|
};
|
||||||
@ -75,7 +76,6 @@ class SondeView : public View {
|
|||||||
"rx_sonde", app_settings::Mode::RX};
|
"rx_sonde", app_settings::Mode::RX};
|
||||||
|
|
||||||
std::unique_ptr<SondeLogger> logger{};
|
std::unique_ptr<SondeLogger> logger{};
|
||||||
uint32_t target_frequency_{402700000};
|
|
||||||
bool logging{false};
|
bool logging{false};
|
||||||
bool use_crc{false};
|
bool use_crc{false};
|
||||||
bool beep{false};
|
bool beep{false};
|
||||||
|
@ -62,6 +62,7 @@ class TestView : public View {
|
|||||||
private:
|
private:
|
||||||
NavigationView& nav_;
|
NavigationView& nav_;
|
||||||
RxRadioState radio_state_{
|
RxRadioState radio_state_{
|
||||||
|
0 /* frequency */,
|
||||||
1750000 /* bandwidth */,
|
1750000 /* bandwidth */,
|
||||||
2457600 * 2 /* sampling rate */
|
2457600 * 2 /* sampling rate */
|
||||||
};
|
};
|
||||||
|
@ -85,7 +85,6 @@ void TouchTunesView::on_tx_progress(const uint32_t progress, const bool done) {
|
|||||||
// transmission events.
|
// transmission events.
|
||||||
void TouchTunesView::start_ew() {
|
void TouchTunesView::start_ew() {
|
||||||
// Radio
|
// Radio
|
||||||
transmitter_model.set_target_frequency(433920000);
|
|
||||||
transmitter_model.set_rf_amp(true);
|
transmitter_model.set_rf_amp(true);
|
||||||
transmitter_model.set_tx_gain(47);
|
transmitter_model.set_tx_gain(47);
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
@ -151,10 +150,7 @@ void TouchTunesView::start_tx(const uint32_t button_index) {
|
|||||||
|
|
||||||
size_t bitstream_length = make_bitstream(fragments);
|
size_t bitstream_length = make_bitstream(fragments);
|
||||||
|
|
||||||
transmitter_model.set_target_frequency(433920000);
|
|
||||||
transmitter_model.set_sampling_rate(OOK_SAMPLERATE);
|
|
||||||
transmitter_model.set_rf_amp(true);
|
transmitter_model.set_rf_amp(true);
|
||||||
transmitter_model.set_baseband_bandwidth(1750000);
|
|
||||||
transmitter_model.enable();
|
transmitter_model.enable();
|
||||||
|
|
||||||
baseband::set_ook_data(
|
baseband::set_ook_data(
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "ui_transmitter.hpp"
|
#include "ui_transmitter.hpp"
|
||||||
#include "transmitter_model.hpp"
|
#include "transmitter_model.hpp"
|
||||||
#include "radio_state.hpp"
|
#include "radio_state.hpp"
|
||||||
|
#include "encoders.hpp"
|
||||||
|
|
||||||
// The coding in notpike's script is quite complex, using multiple LUTs to form the data sent to the YSO.
|
// The coding in notpike's script is quite complex, using multiple LUTs to form the data sent to the YSO.
|
||||||
// The format is actually very simple if it is rather seen as short and long gaps between pulses (as seen in many OOK remotes).
|
// The format is actually very simple if it is rather seen as short and long gaps between pulses (as seen in many OOK remotes).
|
||||||
@ -115,8 +116,9 @@ class TouchTunesView : public View {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
TxRadioState radio_state_{
|
TxRadioState radio_state_{
|
||||||
3500000 /* bandwidth */,
|
433920000 /* frequency */,
|
||||||
3072000 /* sampling rate */
|
1750000 /* bandwidth */,
|
||||||
|
OOK_SAMPLERATE /* sampling rate */
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t scan_button_index{};
|
uint32_t scan_button_index{};
|
||||||
|
@ -41,8 +41,10 @@ class RadioState {
|
|||||||
model->initialize();
|
model->initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
RadioState(uint32_t new_bandwidth, uint32_t new_sampling_rate) {
|
RadioState(uint32_t new_frequency, uint32_t new_bandwidth, uint32_t new_sampling_rate) {
|
||||||
model->initialize();
|
model->initialize();
|
||||||
|
if (new_frequency != 0)
|
||||||
|
model->set_target_frequency(new_frequency);
|
||||||
model->set_sampling_rate(new_sampling_rate);
|
model->set_sampling_rate(new_sampling_rate);
|
||||||
model->set_baseband_bandwidth(new_bandwidth);
|
model->set_baseband_bandwidth(new_bandwidth);
|
||||||
}
|
}
|
||||||
@ -61,10 +63,13 @@ class RadioState {
|
|||||||
typename U = TModel,
|
typename U = TModel,
|
||||||
typename Mode = std::enable_if_t<sizeof(typename U::Mode), typename U::Mode> >
|
typename Mode = std::enable_if_t<sizeof(typename U::Mode), typename U::Mode> >
|
||||||
RadioState(
|
RadioState(
|
||||||
|
uint32_t new_frequency,
|
||||||
uint32_t new_bandwidth,
|
uint32_t new_bandwidth,
|
||||||
uint32_t new_sampling_rate,
|
uint32_t new_sampling_rate,
|
||||||
Mode new_mode) {
|
Mode new_mode) {
|
||||||
model->initialize();
|
model->initialize();
|
||||||
|
if (new_frequency != 0)
|
||||||
|
model->set_target_frequency(new_frequency);
|
||||||
model->set_sampling_rate(new_sampling_rate);
|
model->set_sampling_rate(new_sampling_rate);
|
||||||
model->set_baseband_bandwidth(new_bandwidth);
|
model->set_baseband_bandwidth(new_bandwidth);
|
||||||
model->settings().mode = new_mode;
|
model->settings().mode = new_mode;
|
||||||
|
@ -524,14 +524,6 @@ bool show_gui_return_icon() { // add return icon in touchscreen menu
|
|||||||
return data->ui_config.show_gui_return_icon != 0;
|
return data->ui_config.show_gui_return_icon != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool load_app_settings() { // load (last saved) app settings on startup of app
|
|
||||||
return data->ui_config.load_app_settings != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool save_app_settings() { // save app settings when closing app
|
|
||||||
return data->ui_config.save_app_settings != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool show_bigger_qr_code() { // show bigger QR code
|
bool show_bigger_qr_code() { // show bigger QR code
|
||||||
return data->ui_config.show_large_qr_code != 0;
|
return data->ui_config.show_large_qr_code != 0;
|
||||||
}
|
}
|
||||||
|
@ -179,8 +179,6 @@ bool config_converter();
|
|||||||
bool config_updown_converter();
|
bool config_updown_converter();
|
||||||
int64_t config_converter_freq();
|
int64_t config_converter_freq();
|
||||||
bool show_gui_return_icon();
|
bool show_gui_return_icon();
|
||||||
bool load_app_settings();
|
|
||||||
bool save_app_settings();
|
|
||||||
bool show_bigger_qr_code();
|
bool show_bigger_qr_code();
|
||||||
bool hide_clock();
|
bool hide_clock();
|
||||||
bool clock_with_date();
|
bool clock_with_date();
|
||||||
|
Loading…
Reference in New Issue
Block a user