mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-13 08:45:04 +00:00
device-ui persistency
This commit is contained in:
parent
9683a8f768
commit
97a602ebc2
@ -53,6 +53,7 @@ NodeDB *nodeDB = nullptr;
|
|||||||
EXT_RAM_BSS_ATTR meshtastic_DeviceState devicestate;
|
EXT_RAM_BSS_ATTR meshtastic_DeviceState devicestate;
|
||||||
meshtastic_MyNodeInfo &myNodeInfo = devicestate.my_node;
|
meshtastic_MyNodeInfo &myNodeInfo = devicestate.my_node;
|
||||||
meshtastic_LocalConfig config;
|
meshtastic_LocalConfig config;
|
||||||
|
meshtastic_DeviceUIConfig uiconfig{.screen_timeout = 30};
|
||||||
meshtastic_LocalModuleConfig moduleConfig;
|
meshtastic_LocalModuleConfig moduleConfig;
|
||||||
meshtastic_ChannelFile channelFile;
|
meshtastic_ChannelFile channelFile;
|
||||||
meshtastic_OEMStore oemStore;
|
meshtastic_OEMStore oemStore;
|
||||||
@ -687,6 +688,7 @@ void NodeDB::pickNewNodeNum()
|
|||||||
|
|
||||||
static const char *prefFileName = "/prefs/db.proto";
|
static const char *prefFileName = "/prefs/db.proto";
|
||||||
static const char *configFileName = "/prefs/config.proto";
|
static const char *configFileName = "/prefs/config.proto";
|
||||||
|
static const char *uiconfigFileName = "/prefs/uiconfig.proto";
|
||||||
static const char *moduleConfigFileName = "/prefs/module.proto";
|
static const char *moduleConfigFileName = "/prefs/module.proto";
|
||||||
static const char *channelFileName = "/prefs/channels.proto";
|
static const char *channelFileName = "/prefs/channels.proto";
|
||||||
static const char *oemConfigFile = "/oem/oem.proto";
|
static const char *oemConfigFile = "/oem/oem.proto";
|
||||||
@ -797,6 +799,12 @@ void NodeDB::loadFromDisk()
|
|||||||
hasOemStore = true;
|
hasOemStore = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state = loadProto(uiconfigFileName, meshtastic_DeviceUIConfig_size, sizeof(meshtastic_DeviceUIConfig),
|
||||||
|
&meshtastic_DeviceUIConfig_msg, &uiconfig);
|
||||||
|
if (state == LoadFileResult::LOAD_SUCCESS) {
|
||||||
|
LOG_INFO("Loaded UIConfig\n");
|
||||||
|
}
|
||||||
|
|
||||||
// 2.4.X - configuration migration to update new default intervals
|
// 2.4.X - configuration migration to update new default intervals
|
||||||
if (moduleConfig.version < 23) {
|
if (moduleConfig.version < 23) {
|
||||||
LOG_DEBUG("ModuleConfig version %d is stale, upgrading to new default intervals\n", moduleConfig.version);
|
LOG_DEBUG("ModuleConfig version %d is stale, upgrading to new default intervals\n", moduleConfig.version);
|
||||||
|
@ -30,6 +30,7 @@ extern meshtastic_DeviceState devicestate;
|
|||||||
extern meshtastic_ChannelFile channelFile;
|
extern meshtastic_ChannelFile channelFile;
|
||||||
extern meshtastic_MyNodeInfo &myNodeInfo;
|
extern meshtastic_MyNodeInfo &myNodeInfo;
|
||||||
extern meshtastic_LocalConfig config;
|
extern meshtastic_LocalConfig config;
|
||||||
|
extern meshtastic_DeviceUIConfig uiconfig;
|
||||||
extern meshtastic_LocalModuleConfig moduleConfig;
|
extern meshtastic_LocalModuleConfig moduleConfig;
|
||||||
extern meshtastic_OEMStore oemStore;
|
extern meshtastic_OEMStore oemStore;
|
||||||
extern meshtastic_User &owner;
|
extern meshtastic_User &owner;
|
||||||
|
@ -52,7 +52,7 @@ void PhoneAPI::handleStartConfig()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// even if we were already connected - restart our state machine
|
// even if we were already connected - restart our state machine
|
||||||
state = STATE_SEND_MY_INFO;
|
state = STATE_SEND_UIDATA;
|
||||||
pauseBluetoothLogging = true;
|
pauseBluetoothLogging = true;
|
||||||
filesManifest = getFiles("/", 10);
|
filesManifest = getFiles("/", 10);
|
||||||
LOG_DEBUG("Got %d files in manifest\n", filesManifest.size());
|
LOG_DEBUG("Got %d files in manifest\n", filesManifest.size());
|
||||||
@ -190,7 +190,12 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
case STATE_SEND_NOTHING:
|
case STATE_SEND_NOTHING:
|
||||||
LOG_INFO("getFromRadio=STATE_SEND_NOTHING\n");
|
LOG_INFO("getFromRadio=STATE_SEND_NOTHING\n");
|
||||||
break;
|
break;
|
||||||
|
case STATE_SEND_UIDATA:
|
||||||
|
LOG_INFO("getFromRadio=STATE_SEND_UIDATA\n");
|
||||||
|
fromRadioScratch.which_payload_variant = meshtastic_FromRadio_deviceuiConfig_tag;
|
||||||
|
fromRadioScratch.deviceuiConfig = uiconfig;
|
||||||
|
state = STATE_SEND_MY_INFO;
|
||||||
|
break;
|
||||||
case STATE_SEND_MY_INFO:
|
case STATE_SEND_MY_INFO:
|
||||||
LOG_INFO("getFromRadio=STATE_SEND_MY_INFO\n");
|
LOG_INFO("getFromRadio=STATE_SEND_MY_INFO\n");
|
||||||
// If the user has specified they don't want our node to share its location, make sure to tell the phone
|
// If the user has specified they don't want our node to share its location, make sure to tell the phone
|
||||||
@ -499,6 +504,7 @@ bool PhoneAPI::available()
|
|||||||
switch (state) {
|
switch (state) {
|
||||||
case STATE_SEND_NOTHING:
|
case STATE_SEND_NOTHING:
|
||||||
return false;
|
return false;
|
||||||
|
case STATE_SEND_UIDATA:
|
||||||
case STATE_SEND_MY_INFO:
|
case STATE_SEND_MY_INFO:
|
||||||
case STATE_SEND_CHANNELS:
|
case STATE_SEND_CHANNELS:
|
||||||
case STATE_SEND_CONFIG:
|
case STATE_SEND_CONFIG:
|
||||||
|
@ -34,6 +34,7 @@ class PhoneAPI
|
|||||||
{
|
{
|
||||||
enum State {
|
enum State {
|
||||||
STATE_SEND_NOTHING, // Initial state, don't send anything until the client starts asking for config
|
STATE_SEND_NOTHING, // Initial state, don't send anything until the client starts asking for config
|
||||||
|
STATE_SEND_UIDATA, // send stored data for device-ui
|
||||||
STATE_SEND_MY_INFO, // send our my info record
|
STATE_SEND_MY_INFO, // send our my info record
|
||||||
STATE_SEND_OWN_NODEINFO,
|
STATE_SEND_OWN_NODEINFO,
|
||||||
STATE_SEND_METADATA,
|
STATE_SEND_METADATA,
|
||||||
|
@ -175,6 +175,11 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta
|
|||||||
LOG_INFO("Client is setting ham mode\n");
|
LOG_INFO("Client is setting ham mode\n");
|
||||||
handleSetHamMode(r->set_ham_mode);
|
handleSetHamMode(r->set_ham_mode);
|
||||||
break;
|
break;
|
||||||
|
case meshtastic_AdminMessage_get_ui_config_request_tag: {
|
||||||
|
LOG_INFO("Client is getting device-ui config\n");
|
||||||
|
handleGetDeviceUIConfig(mp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Other
|
* Other
|
||||||
@ -234,6 +239,11 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta
|
|||||||
reboot(DEFAULT_REBOOT_SECONDS);
|
reboot(DEFAULT_REBOOT_SECONDS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case meshtastic_AdminMessage_store_ui_config_tag: {
|
||||||
|
LOG_INFO("Storing device-ui config\n");
|
||||||
|
handleStoreDeviceUIConfig(r->store_ui_config);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case meshtastic_AdminMessage_begin_edit_settings_tag: {
|
case meshtastic_AdminMessage_begin_edit_settings_tag: {
|
||||||
LOG_INFO("Beginning transaction for editing settings\n");
|
LOG_INFO("Beginning transaction for editing settings\n");
|
||||||
hasOpenEditTransaction = true;
|
hasOpenEditTransaction = true;
|
||||||
@ -960,6 +970,14 @@ void AdminModule::handleGetChannel(const meshtastic_MeshPacket &req, uint32_t ch
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdminModule::handleGetDeviceUIConfig(const meshtastic_MeshPacket &req)
|
||||||
|
{
|
||||||
|
meshtastic_AdminMessage r = meshtastic_AdminMessage_init_default;
|
||||||
|
r.which_payload_variant = meshtastic_AdminMessage_get_ui_config_response_tag;
|
||||||
|
r.store_ui_config = uiconfig;
|
||||||
|
myReply = allocDataProtobuf(r);
|
||||||
|
}
|
||||||
|
|
||||||
void AdminModule::reboot(int32_t seconds)
|
void AdminModule::reboot(int32_t seconds)
|
||||||
{
|
{
|
||||||
LOG_INFO("Rebooting in %d seconds\n", seconds);
|
LOG_INFO("Rebooting in %d seconds\n", seconds);
|
||||||
@ -980,6 +998,11 @@ void AdminModule::saveChanges(int saveWhat, bool shouldReboot)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AdminModule::handleStoreDeviceUIConfig(const meshtastic_DeviceUIConfig &uicfg)
|
||||||
|
{
|
||||||
|
nodeDB->saveProto("/prefs/uiconfig.proto", meshtastic_DeviceUIConfig_size, &meshtastic_DeviceUIConfig_msg, &uicfg);
|
||||||
|
}
|
||||||
|
|
||||||
void AdminModule::handleSetHamMode(const meshtastic_HamParameters &p)
|
void AdminModule::handleSetHamMode(const meshtastic_HamParameters &p)
|
||||||
{
|
{
|
||||||
// Set call sign and override lora limitations for licensed use
|
// Set call sign and override lora limitations for licensed use
|
||||||
@ -1046,7 +1069,8 @@ bool AdminModule::messageIsResponse(const meshtastic_AdminMessage *r)
|
|||||||
r->which_payload_variant == meshtastic_AdminMessage_get_ringtone_response_tag ||
|
r->which_payload_variant == meshtastic_AdminMessage_get_ringtone_response_tag ||
|
||||||
r->which_payload_variant == meshtastic_AdminMessage_get_device_connection_status_response_tag ||
|
r->which_payload_variant == meshtastic_AdminMessage_get_device_connection_status_response_tag ||
|
||||||
r->which_payload_variant == meshtastic_AdminMessage_get_node_remote_hardware_pins_response_tag ||
|
r->which_payload_variant == meshtastic_AdminMessage_get_node_remote_hardware_pins_response_tag ||
|
||||||
r->which_payload_variant == meshtastic_NodeRemoteHardwarePinsResponse_node_remote_hardware_pins_tag)
|
r->which_payload_variant == meshtastic_NodeRemoteHardwarePinsResponse_node_remote_hardware_pins_tag ||
|
||||||
|
r->which_payload_variant == meshtastic_AdminMessage_get_ui_config_response_tag)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
@ -1062,7 +1086,8 @@ bool AdminModule::messageIsRequest(const meshtastic_AdminMessage *r)
|
|||||||
r->which_payload_variant == meshtastic_AdminMessage_get_device_metadata_request_tag ||
|
r->which_payload_variant == meshtastic_AdminMessage_get_device_metadata_request_tag ||
|
||||||
r->which_payload_variant == meshtastic_AdminMessage_get_ringtone_request_tag ||
|
r->which_payload_variant == meshtastic_AdminMessage_get_ringtone_request_tag ||
|
||||||
r->which_payload_variant == meshtastic_AdminMessage_get_device_connection_status_request_tag ||
|
r->which_payload_variant == meshtastic_AdminMessage_get_device_connection_status_request_tag ||
|
||||||
r->which_payload_variant == meshtastic_AdminMessage_get_node_remote_hardware_pins_request_tag)
|
r->which_payload_variant == meshtastic_AdminMessage_get_node_remote_hardware_pins_request_tag ||
|
||||||
|
r->which_payload_variant == meshtastic_AdminMessage_get_ui_config_request_tag)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
|
@ -41,6 +41,7 @@ class AdminModule : public ProtobufModule<meshtastic_AdminMessage>, public Obser
|
|||||||
void handleGetDeviceMetadata(const meshtastic_MeshPacket &req);
|
void handleGetDeviceMetadata(const meshtastic_MeshPacket &req);
|
||||||
void handleGetDeviceConnectionStatus(const meshtastic_MeshPacket &req);
|
void handleGetDeviceConnectionStatus(const meshtastic_MeshPacket &req);
|
||||||
void handleGetNodeRemoteHardwarePins(const meshtastic_MeshPacket &req);
|
void handleGetNodeRemoteHardwarePins(const meshtastic_MeshPacket &req);
|
||||||
|
void handleGetDeviceUIConfig(const meshtastic_MeshPacket &req);
|
||||||
/**
|
/**
|
||||||
* Setters
|
* Setters
|
||||||
*/
|
*/
|
||||||
@ -50,6 +51,7 @@ class AdminModule : public ProtobufModule<meshtastic_AdminMessage>, public Obser
|
|||||||
void handleSetModuleConfig(const meshtastic_ModuleConfig &c);
|
void handleSetModuleConfig(const meshtastic_ModuleConfig &c);
|
||||||
void handleSetChannel();
|
void handleSetChannel();
|
||||||
void handleSetHamMode(const meshtastic_HamParameters &req);
|
void handleSetHamMode(const meshtastic_HamParameters &req);
|
||||||
|
void handleStoreDeviceUIConfig(const meshtastic_DeviceUIConfig &uicfg);
|
||||||
void reboot(int32_t seconds);
|
void reboot(int32_t seconds);
|
||||||
|
|
||||||
void setPassKey(meshtastic_AdminMessage *res);
|
void setPassKey(meshtastic_AdminMessage *res);
|
||||||
|
Loading…
Reference in New Issue
Block a user