2015-08-04 17:03:18 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc.
|
2016-08-24 12:44:57 +00:00
|
|
|
* Copyright (C) 2016 Furrtek
|
2015-08-04 17:03:18 +00:00
|
|
|
*
|
|
|
|
* 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 __PORTAPACK_PERSISTENT_MEMORY_H__
|
|
|
|
#define __PORTAPACK_PERSISTENT_MEMORY_H__
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
2022-05-28 20:55:18 +00:00
|
|
|
#include "optional.hpp"
|
|
|
|
|
2015-08-04 17:31:03 +00:00
|
|
|
#include "rf_path.hpp"
|
2016-07-27 22:30:43 +00:00
|
|
|
#include "touch.hpp"
|
2017-04-21 05:22:31 +00:00
|
|
|
#include "modems.hpp"
|
2017-04-24 17:15:57 +00:00
|
|
|
#include "serializer.hpp"
|
2023-06-05 18:09:50 +00:00
|
|
|
#include "volume.hpp"
|
2017-04-21 05:22:31 +00:00
|
|
|
|
2023-06-04 19:25:25 +00:00
|
|
|
// persistant memory from/to sdcard flag file
|
2023-07-02 16:35:34 +00:00
|
|
|
#define PMEM_FILEFLAG u"/SETTINGS/PMEM_FILEFLAG"
|
|
|
|
|
2023-06-04 19:25:25 +00:00
|
|
|
// persistant memory from/to sdcard flag file
|
2023-07-02 16:35:34 +00:00
|
|
|
#define PMEM_SETTING_FILE u"/SETTINGS/pmem_settings"
|
2023-06-04 19:25:25 +00:00
|
|
|
|
2023-12-22 07:45:05 +00:00
|
|
|
#define PMEM_SIZE_BYTES 256 // total amount of pmem space in bytes, including checksum
|
|
|
|
#define PMEM_SIZE_WORDS (PMEM_SIZE_BYTES / 4)
|
|
|
|
|
2017-04-21 05:22:31 +00:00
|
|
|
using namespace modems;
|
2017-04-24 17:15:57 +00:00
|
|
|
using namespace serializer;
|
2015-08-04 17:31:03 +00:00
|
|
|
|
2015-08-04 17:03:18 +00:00
|
|
|
namespace portapack {
|
2023-03-31 12:05:33 +00:00
|
|
|
|
2023-05-18 20:16:05 +00:00
|
|
|
namespace persistent_memory {
|
|
|
|
|
|
|
|
enum backlight_timeout_t {
|
|
|
|
Timeout5Sec = 0,
|
|
|
|
Timeout15Sec = 1,
|
|
|
|
Timeout30Sec = 2,
|
|
|
|
Timeout60Sec = 3,
|
|
|
|
Timeout180Sec = 4,
|
|
|
|
Timeout300Sec = 5,
|
|
|
|
Timeout600Sec = 6,
|
|
|
|
Timeout3600Sec = 7,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct backlight_config_t {
|
|
|
|
public:
|
|
|
|
backlight_config_t()
|
|
|
|
: _timeout_enum(backlight_timeout_t::Timeout600Sec),
|
|
|
|
_timeout_enabled(false) {
|
|
|
|
}
|
|
|
|
|
|
|
|
backlight_config_t(
|
|
|
|
backlight_timeout_t timeout_enum,
|
|
|
|
bool timeout_enabled)
|
|
|
|
: _timeout_enum(timeout_enum),
|
|
|
|
_timeout_enabled(timeout_enabled) {
|
|
|
|
}
|
|
|
|
|
|
|
|
bool timeout_enabled() const {
|
|
|
|
return _timeout_enabled;
|
|
|
|
}
|
|
|
|
|
|
|
|
backlight_timeout_t timeout_enum() const {
|
|
|
|
return _timeout_enum;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t timeout_seconds() const {
|
|
|
|
switch (timeout_enum()) {
|
|
|
|
case Timeout5Sec:
|
|
|
|
return 5;
|
|
|
|
case Timeout15Sec:
|
|
|
|
return 15;
|
|
|
|
case Timeout30Sec:
|
|
|
|
return 30;
|
|
|
|
case Timeout60Sec:
|
|
|
|
return 60;
|
|
|
|
case Timeout180Sec:
|
|
|
|
return 180;
|
|
|
|
case Timeout300Sec:
|
|
|
|
return 300;
|
|
|
|
default:
|
|
|
|
case Timeout600Sec:
|
|
|
|
return 600;
|
|
|
|
case Timeout3600Sec:
|
|
|
|
return 3600;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
backlight_timeout_t _timeout_enum;
|
|
|
|
bool _timeout_enabled;
|
|
|
|
};
|
|
|
|
|
Support for Rotary Encoder Dial sensitivity levels, issue #965 (#1057)
* Support for 3 levels of rotary encoder sensitivity #965
Backend support; UI will still need to call set function to configure.
* Support for 3 levels of rotary encoder sensitivity #965
Backend support only. UI will still need to be changed to call the set_sensitivity() function to configure.
* Removed trailing space
* Deleted blank lines to see if format checker will be happier
* Simpler support for multiple levels of encoder sensitivity, for issue #965
Removed the convoluted code :-) and instead just using a 2-dimensional array to choose which transition map to use. For now I only have 2 (vs 3) levels enabled as well, to save code space and because high-sensitivity is very touchy.
* Simpler version of configurable encoder sensitivity, issue #965
* Formatting
* Formatting test for Clang
* Formatting test
* Formatting (removed helpful comment)
* Formatting test (remove commented-out code)
* Formatting & swapping medium/low so default mode=0
* Swapped medium/low so default mode=0
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Removed unneeded range check (trusting in pmem checksum)
2023-05-25 02:32:12 +00:00
|
|
|
enum encoder_dial_sensitivity {
|
2023-07-27 14:45:39 +00:00
|
|
|
DIAL_SENSITIVITY_NORMAL = 0,
|
|
|
|
DIAL_SENSITIVITY_LOW = 1,
|
|
|
|
DIAL_SENSITIVITY_HIGH = 2,
|
Support for Rotary Encoder Dial sensitivity levels, issue #965 (#1057)
* Support for 3 levels of rotary encoder sensitivity #965
Backend support; UI will still need to call set function to configure.
* Support for 3 levels of rotary encoder sensitivity #965
Backend support only. UI will still need to be changed to call the set_sensitivity() function to configure.
* Removed trailing space
* Deleted blank lines to see if format checker will be happier
* Simpler support for multiple levels of encoder sensitivity, for issue #965
Removed the convoluted code :-) and instead just using a 2-dimensional array to choose which transition map to use. For now I only have 2 (vs 3) levels enabled as well, to save code space and because high-sensitivity is very touchy.
* Simpler version of configurable encoder sensitivity, issue #965
* Formatting
* Formatting test for Clang
* Formatting test
* Formatting (removed helpful comment)
* Formatting test (remove commented-out code)
* Formatting & swapping medium/low so default mode=0
* Swapped medium/low so default mode=0
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Removed unneeded range check (trusting in pmem checksum)
2023-05-25 02:32:12 +00:00
|
|
|
NUM_DIAL_SENSITIVITY
|
|
|
|
};
|
|
|
|
|
2023-05-18 20:16:05 +00:00
|
|
|
namespace cache {
|
|
|
|
|
|
|
|
/* Set values in cache to sensible defaults. */
|
|
|
|
void defaults();
|
|
|
|
|
|
|
|
/* Load cached settings from values in persistent RAM, replacing with defaults
|
|
|
|
* if persistent RAM contents appear to be invalid. */
|
|
|
|
void init();
|
|
|
|
|
|
|
|
/* Calculate a check value for cached settings, and copy the check value and
|
|
|
|
* settings into persistent RAM. Intended to be called periodically to update
|
|
|
|
* persistent settings with current settings. */
|
|
|
|
void persist();
|
|
|
|
|
|
|
|
} /* namespace cache */
|
|
|
|
|
|
|
|
using ppb_t = int32_t;
|
|
|
|
|
2023-06-11 18:47:13 +00:00
|
|
|
rf::Frequency target_frequency();
|
|
|
|
void set_target_frequency(const rf::Frequency new_value);
|
2023-05-18 20:16:05 +00:00
|
|
|
|
2023-06-05 18:09:50 +00:00
|
|
|
volume_t headphone_volume();
|
|
|
|
void set_headphone_volume(volume_t new_value);
|
|
|
|
|
2023-05-18 20:16:05 +00:00
|
|
|
ppb_t correction_ppb();
|
|
|
|
void set_correction_ppb(const ppb_t new_value);
|
|
|
|
|
|
|
|
void set_touch_calibration(const touch::Calibration& new_value);
|
|
|
|
const touch::Calibration& touch_calibration();
|
|
|
|
|
|
|
|
serial_format_t serial_format();
|
|
|
|
void set_serial_format(const serial_format_t new_value);
|
|
|
|
|
|
|
|
int32_t tone_mix();
|
|
|
|
void set_tone_mix(const int32_t new_value);
|
|
|
|
|
|
|
|
int32_t afsk_mark_freq();
|
|
|
|
void set_afsk_mark(const int32_t new_value);
|
|
|
|
|
|
|
|
int32_t afsk_space_freq();
|
|
|
|
void set_afsk_space(const int32_t new_value);
|
|
|
|
|
|
|
|
int32_t modem_baudrate();
|
|
|
|
void set_modem_baudrate(const int32_t new_value);
|
|
|
|
|
|
|
|
uint8_t modem_repeat();
|
|
|
|
void set_modem_repeat(const uint32_t new_value);
|
|
|
|
|
|
|
|
uint32_t playing_dead();
|
|
|
|
void set_playing_dead(const uint32_t new_value);
|
|
|
|
|
|
|
|
uint32_t playdead_sequence();
|
|
|
|
void set_playdead_sequence(const uint32_t new_value);
|
|
|
|
|
|
|
|
bool stealth_mode();
|
|
|
|
void set_stealth_mode(const bool v);
|
|
|
|
|
|
|
|
uint8_t config_cpld();
|
|
|
|
void set_config_cpld(uint8_t i);
|
|
|
|
|
2023-09-04 15:46:07 +00:00
|
|
|
bool config_disable_external_tcxo();
|
2023-11-19 14:08:29 +00:00
|
|
|
bool config_sdcard_high_speed_io();
|
2023-05-18 20:16:05 +00:00
|
|
|
bool config_splash();
|
|
|
|
bool config_converter();
|
|
|
|
bool config_updown_converter();
|
|
|
|
int64_t config_converter_freq();
|
|
|
|
bool show_gui_return_icon();
|
|
|
|
bool show_bigger_qr_code();
|
|
|
|
bool hide_clock();
|
|
|
|
bool clock_with_date();
|
|
|
|
bool config_login();
|
2023-06-17 21:15:21 +00:00
|
|
|
bool config_audio_mute();
|
|
|
|
bool config_speaker_disable();
|
2023-05-18 20:16:05 +00:00
|
|
|
backlight_config_t config_backlight_timer();
|
|
|
|
bool disable_touchscreen();
|
|
|
|
|
|
|
|
void set_gui_return_icon(bool v);
|
|
|
|
void set_load_app_settings(bool v);
|
|
|
|
void set_save_app_settings(bool v);
|
|
|
|
void set_show_bigger_qr_code(bool v);
|
2023-09-04 15:46:07 +00:00
|
|
|
void set_config_disable_external_tcxo(bool v);
|
2023-11-19 14:08:29 +00:00
|
|
|
void set_config_sdcard_high_speed_io(bool v, bool save);
|
2023-05-18 20:16:05 +00:00
|
|
|
void set_config_splash(bool v);
|
2023-05-20 07:30:08 +00:00
|
|
|
bool config_converter();
|
|
|
|
bool config_updown_converter();
|
|
|
|
int64_t config_converter_freq();
|
2023-05-18 20:16:05 +00:00
|
|
|
void set_config_converter(bool v);
|
2023-05-20 07:30:08 +00:00
|
|
|
void set_config_updown_converter(bool v);
|
|
|
|
void set_config_converter_freq(int64_t v);
|
|
|
|
bool config_freq_tx_correction_updown();
|
|
|
|
void set_freq_tx_correction_updown(bool v);
|
|
|
|
bool config_freq_rx_correction_updown();
|
|
|
|
void set_freq_rx_correction_updown(bool v);
|
2023-05-21 21:47:02 +00:00
|
|
|
uint32_t config_freq_tx_correction();
|
|
|
|
uint32_t config_freq_rx_correction();
|
|
|
|
void set_config_freq_tx_correction(uint32_t v);
|
|
|
|
void set_config_freq_rx_correction(uint32_t v);
|
2023-05-18 20:16:05 +00:00
|
|
|
void set_clock_hidden(bool v);
|
|
|
|
void set_clock_with_date(bool v);
|
|
|
|
void set_config_login(bool v);
|
2023-06-17 21:15:21 +00:00
|
|
|
void set_config_audio_mute(bool v);
|
|
|
|
void set_config_speaker_disable(bool v);
|
2023-05-18 20:16:05 +00:00
|
|
|
void set_config_backlight_timer(const backlight_config_t& new_value);
|
|
|
|
void set_disable_touchscreen(bool v);
|
Support for Rotary Encoder Dial sensitivity levels, issue #965 (#1057)
* Support for 3 levels of rotary encoder sensitivity #965
Backend support; UI will still need to call set function to configure.
* Support for 3 levels of rotary encoder sensitivity #965
Backend support only. UI will still need to be changed to call the set_sensitivity() function to configure.
* Removed trailing space
* Deleted blank lines to see if format checker will be happier
* Simpler support for multiple levels of encoder sensitivity, for issue #965
Removed the convoluted code :-) and instead just using a 2-dimensional array to choose which transition map to use. For now I only have 2 (vs 3) levels enabled as well, to save code space and because high-sensitivity is very touchy.
* Simpler version of configurable encoder sensitivity, issue #965
* Formatting
* Formatting test for Clang
* Formatting test
* Formatting (removed helpful comment)
* Formatting test (remove commented-out code)
* Formatting & swapping medium/low so default mode=0
* Swapped medium/low so default mode=0
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Adding UI & PMEM support to make encoder dial sensitivity configurable, issue #965
* Removed unneeded range check (trusting in pmem checksum)
2023-05-25 02:32:12 +00:00
|
|
|
uint8_t config_encoder_dial_sensitivity();
|
|
|
|
void set_encoder_dial_sensitivity(uint8_t v);
|
2023-05-18 20:16:05 +00:00
|
|
|
|
2023-09-04 15:46:07 +00:00
|
|
|
#define CONFIG_MODE_GUARD_VALUE 2001
|
|
|
|
#define CONFIG_MODE_NORMAL_VALUE 1999
|
|
|
|
uint32_t config_mode_storage();
|
|
|
|
void set_config_mode_storage(uint32_t v);
|
|
|
|
|
2023-05-18 20:16:05 +00:00
|
|
|
uint32_t pocsag_last_address();
|
|
|
|
void set_pocsag_last_address(uint32_t address);
|
|
|
|
|
|
|
|
uint32_t pocsag_ignore_address();
|
|
|
|
void set_pocsag_ignore_address(uint32_t address);
|
|
|
|
|
|
|
|
bool clkout_enabled();
|
|
|
|
void set_clkout_enabled(bool v);
|
2023-07-02 16:35:34 +00:00
|
|
|
uint16_t clkout_freq();
|
|
|
|
void set_clkout_freq(uint16_t freq);
|
2023-05-18 20:16:05 +00:00
|
|
|
|
|
|
|
/* Recon app */
|
|
|
|
bool recon_autosave_freqs();
|
|
|
|
bool recon_autostart_recon();
|
|
|
|
bool recon_continuous();
|
|
|
|
bool recon_clear_output();
|
|
|
|
bool recon_load_freqs();
|
|
|
|
bool recon_load_ranges();
|
|
|
|
bool recon_update_ranges_when_recon();
|
2023-06-25 06:16:49 +00:00
|
|
|
bool recon_auto_record_locked();
|
2023-05-18 20:16:05 +00:00
|
|
|
bool recon_load_hamradios();
|
|
|
|
bool recon_match_mode();
|
|
|
|
void set_recon_autosave_freqs(const bool v);
|
|
|
|
void set_recon_autostart_recon(const bool v);
|
|
|
|
void set_recon_continuous(const bool v);
|
|
|
|
void set_recon_clear_output(const bool v);
|
|
|
|
void set_recon_load_freqs(const bool v);
|
|
|
|
void set_recon_load_ranges(const bool v);
|
|
|
|
void set_recon_update_ranges_when_recon(const bool v);
|
2023-06-25 06:16:49 +00:00
|
|
|
void set_recon_auto_record_locked(const bool v);
|
2023-05-18 20:16:05 +00:00
|
|
|
void set_recon_load_hamradios(const bool v);
|
|
|
|
void set_recon_match_mode(const bool v);
|
|
|
|
|
2023-06-23 23:13:39 +00:00
|
|
|
/* UI Config 2 */
|
|
|
|
bool ui_hide_speaker();
|
2023-06-26 06:08:09 +00:00
|
|
|
bool ui_hide_mute();
|
2023-06-23 23:13:39 +00:00
|
|
|
bool ui_hide_converter();
|
|
|
|
bool ui_hide_stealth();
|
|
|
|
bool ui_hide_camera();
|
|
|
|
bool ui_hide_sleep();
|
|
|
|
bool ui_hide_bias_tee();
|
|
|
|
bool ui_hide_clock();
|
|
|
|
bool ui_hide_sd_card();
|
|
|
|
void set_ui_hide_speaker(bool v);
|
2023-06-26 06:08:09 +00:00
|
|
|
void set_ui_hide_mute(bool v);
|
2023-06-23 23:13:39 +00:00
|
|
|
void set_ui_hide_converter(bool v);
|
|
|
|
void set_ui_hide_stealth(bool v);
|
|
|
|
void set_ui_hide_camera(bool v);
|
|
|
|
void set_ui_hide_sleep(bool v);
|
|
|
|
void set_ui_hide_bias_tee(bool v);
|
|
|
|
void set_ui_hide_clock(bool v);
|
|
|
|
void set_ui_hide_sd_card(bool v);
|
|
|
|
|
2023-05-18 20:16:05 +00:00
|
|
|
// sd persisting settings
|
2023-06-04 19:25:25 +00:00
|
|
|
bool should_use_sdcard_for_pmem();
|
|
|
|
int save_persistent_settings_to_file();
|
|
|
|
int load_persistent_settings_from_file();
|
2023-05-18 20:16:05 +00:00
|
|
|
|
2023-11-17 18:10:11 +00:00
|
|
|
uint32_t pmem_data_word(uint32_t index);
|
|
|
|
uint32_t pmem_stored_checksum(void);
|
|
|
|
uint32_t pmem_calculated_checksum(void);
|
|
|
|
|
2023-06-07 20:32:44 +00:00
|
|
|
size_t data_size();
|
|
|
|
|
2023-06-22 15:35:21 +00:00
|
|
|
bool debug_dump();
|
|
|
|
|
2023-05-18 20:16:05 +00:00
|
|
|
} /* namespace persistent_memory */
|
2023-03-31 12:05:33 +00:00
|
|
|
|
2015-08-04 17:03:18 +00:00
|
|
|
} /* namespace portapack */
|
|
|
|
|
2023-05-18 20:16:05 +00:00
|
|
|
#endif /*__PORTAPACK_PERSISTENT_MEMORY_H__*/
|