73 lines
2.0 KiB
C++

#pragma once
#include "Preset.h"
#include <tt_hal_radio.h>
#include <lvgl.h>
class ParameterInput;
class SettingsView {
static constexpr size_t MAX_RADIOS = 32;
static constexpr Modulation FIRST_MODULATION = MODULATION_NONE;
static constexpr Modulation LAST_MODULATION = MODULATION_LRFHSS;
static constexpr size_t MAX_MODEMS = LAST_MODULATION + 1;
static constexpr size_t MAX_PARAMS = RADIO_NARROWGRID + 1;
RadioHandle radios[MAX_RADIOS] = {0};
size_t radioCount = 0;
RadioHandle radioSelected = nullptr;
RadioStateSubscriptionId radioStateSubId = -1;
Modulation modemsAvailable[MAX_MODEMS] = {};
size_t modemsAvailableCount = 0;
RadioParameter paramsAvailable[MAX_PARAMS] = {};
ParameterInput* paramInputs[MAX_PARAMS] = {0};
size_t paramsAvailableCount = 0;
LinkedList<Preset*> presets;
LinkedList<Preset*> presetsByModulation[MAX_MODEMS];
lv_obj_t* mainPanel = nullptr;
lv_obj_t* deviceForm = nullptr;
lv_obj_t* radioDropdown = nullptr;
lv_obj_t* radioSwitch = nullptr;
lv_obj_t* radioStateLabel = nullptr;
lv_obj_t* modemDropdown = nullptr;
lv_obj_t* modemPresetDropdown = nullptr;
lv_obj_t *propertiesForm = nullptr;
public:
void addPreset(Preset* preset);
void queryRadios();
void getRadioNames(Str &names, const char* const separator);
int getModemAvailableIndex(Modulation m);
lv_obj_t* initParameterFormGeneric(lv_obj_t *parent, const Modulation modem);
void selectModulation(int modemIndex);
void selectPreset(int presetIndex);
void onParameterInput();
void updatePresets();
void selectRadio(int index);
lv_obj_t *initDeviceForm(lv_obj_t *parent);
void updateSelectedRadioState(RadioState state);
bool enableSelectedRadio(bool enable);
void activateConfig();
void deactivateConfig();
void initUi(lv_obj_t *parent);
explicit SettingsView(lv_obj_t *parent) {
queryRadios();
initUi(parent);
}
};