From 0414ca2dc0c1fbb518e0686775b765ffb4a48fac Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 3 Feb 2023 10:49:44 -0600 Subject: [PATCH] Fixed it --- protobufs | 2 +- .../meshtastic/connection_status.pb.h | 34 ++--- src/modules/AdminModule.cpp | 132 ++++++++++++------ 3 files changed, 107 insertions(+), 61 deletions(-) diff --git a/protobufs b/protobufs index 4ef7e46a8..516074f2e 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 4ef7e46a8b83d4d2147f027c7aaa7d1b481f8688 +Subproject commit 516074f2e49743c234430abb2ea43ea3f66b0acb diff --git a/src/mesh/generated/meshtastic/connection_status.pb.h b/src/mesh/generated/meshtastic/connection_status.pb.h index c13ec2bc6..c824f8b82 100644 --- a/src/mesh/generated/meshtastic/connection_status.pb.h +++ b/src/mesh/generated/meshtastic/connection_status.pb.h @@ -22,6 +22,17 @@ typedef struct _meshtastic_NetworkConnectionStatus { bool is_syslog_connected; } meshtastic_NetworkConnectionStatus; +/* WiFi connection status */ +typedef struct _meshtastic_WifiConnectionStatus { + /* Connection status */ + bool has_status; + meshtastic_NetworkConnectionStatus status; + /* WiFi access point ssid */ + char ssid[33]; + /* Rssi of wireless connection */ + int32_t rssi; +} meshtastic_WifiConnectionStatus; + /* Ethernet connection status */ typedef struct _meshtastic_EthernetConnectionStatus { /* Connection status */ @@ -29,17 +40,6 @@ typedef struct _meshtastic_EthernetConnectionStatus { meshtastic_NetworkConnectionStatus status; } meshtastic_EthernetConnectionStatus; -/* WiFi connection status */ -typedef struct _meshtastic_WifiConnectionStatus { - /* Connection status */ - bool has_status; - meshtastic_EthernetConnectionStatus status; - /* WiFi access point ssid */ - char ssid[33]; - /* Rssi of wireless connection */ - int32_t rssi; -} meshtastic_WifiConnectionStatus; - /* Bluetooth connection status */ typedef struct _meshtastic_BluetoothConnectionStatus { /* The pairing pin for bluetooth */ @@ -80,13 +80,13 @@ extern "C" { /* Initializer values for message structs */ #define meshtastic_DeviceConnectionStatus_init_default {false, meshtastic_WifiConnectionStatus_init_default, false, meshtastic_EthernetConnectionStatus_init_default, false, meshtastic_BluetoothConnectionStatus_init_default, false, meshtastic_SerialConnectionStatus_init_default} -#define meshtastic_WifiConnectionStatus_init_default {false, meshtastic_EthernetConnectionStatus_init_default, "", 0} +#define meshtastic_WifiConnectionStatus_init_default {false, meshtastic_NetworkConnectionStatus_init_default, "", 0} #define meshtastic_EthernetConnectionStatus_init_default {false, meshtastic_NetworkConnectionStatus_init_default} #define meshtastic_NetworkConnectionStatus_init_default {0, 0, 0, 0} #define meshtastic_BluetoothConnectionStatus_init_default {0, 0, 0} #define meshtastic_SerialConnectionStatus_init_default {0, 0} #define meshtastic_DeviceConnectionStatus_init_zero {false, meshtastic_WifiConnectionStatus_init_zero, false, meshtastic_EthernetConnectionStatus_init_zero, false, meshtastic_BluetoothConnectionStatus_init_zero, false, meshtastic_SerialConnectionStatus_init_zero} -#define meshtastic_WifiConnectionStatus_init_zero {false, meshtastic_EthernetConnectionStatus_init_zero, "", 0} +#define meshtastic_WifiConnectionStatus_init_zero {false, meshtastic_NetworkConnectionStatus_init_zero, "", 0} #define meshtastic_EthernetConnectionStatus_init_zero {false, meshtastic_NetworkConnectionStatus_init_zero} #define meshtastic_NetworkConnectionStatus_init_zero {0, 0, 0, 0} #define meshtastic_BluetoothConnectionStatus_init_zero {0, 0, 0} @@ -97,10 +97,10 @@ extern "C" { #define meshtastic_NetworkConnectionStatus_is_connected_tag 2 #define meshtastic_NetworkConnectionStatus_is_mqtt_connected_tag 3 #define meshtastic_NetworkConnectionStatus_is_syslog_connected_tag 4 -#define meshtastic_EthernetConnectionStatus_status_tag 1 #define meshtastic_WifiConnectionStatus_status_tag 1 #define meshtastic_WifiConnectionStatus_ssid_tag 2 #define meshtastic_WifiConnectionStatus_rssi_tag 3 +#define meshtastic_EthernetConnectionStatus_status_tag 1 #define meshtastic_BluetoothConnectionStatus_pin_tag 1 #define meshtastic_BluetoothConnectionStatus_rssi_tag 2 #define meshtastic_BluetoothConnectionStatus_is_connected_tag 3 @@ -130,7 +130,7 @@ X(a, STATIC, SINGULAR, STRING, ssid, 2) \ X(a, STATIC, SINGULAR, INT32, rssi, 3) #define meshtastic_WifiConnectionStatus_CALLBACK NULL #define meshtastic_WifiConnectionStatus_DEFAULT NULL -#define meshtastic_WifiConnectionStatus_status_MSGTYPE meshtastic_EthernetConnectionStatus +#define meshtastic_WifiConnectionStatus_status_MSGTYPE meshtastic_NetworkConnectionStatus #define meshtastic_EthernetConnectionStatus_FIELDLIST(X, a) \ X(a, STATIC, OPTIONAL, MESSAGE, status, 1) @@ -176,11 +176,11 @@ extern const pb_msgdesc_t meshtastic_SerialConnectionStatus_msg; /* Maximum encoded size of messages (where known) */ #define meshtastic_BluetoothConnectionStatus_size 19 -#define meshtastic_DeviceConnectionStatus_size 108 +#define meshtastic_DeviceConnectionStatus_size 106 #define meshtastic_EthernetConnectionStatus_size 13 #define meshtastic_NetworkConnectionStatus_size 11 #define meshtastic_SerialConnectionStatus_size 8 -#define meshtastic_WifiConnectionStatus_size 60 +#define meshtastic_WifiConnectionStatus_size 58 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/modules/AdminModule.cpp b/src/modules/AdminModule.cpp index f52aa4e0f..fecf3362c 100644 --- a/src/modules/AdminModule.cpp +++ b/src/modules/AdminModule.cpp @@ -33,7 +33,8 @@ static const char *secretReserved = "sekrit"; /// If buf is the reserved secret word, replace the buffer with currentVal static void writeSecret(char *buf, size_t bufsz, const char *currentVal) { - if (strcmp(buf, secretReserved) == 0) { + if (strcmp(buf, secretReserved) == 0) + { strncpy(buf, currentVal, bufsz); } } @@ -51,7 +52,8 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta bool handled = false; assert(r); - switch (r->which_payload_variant) { + switch (r->which_payload_variant) + { /** * Getters @@ -71,7 +73,8 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta handleGetModuleConfig(mp, r->get_module_config_request); break; - case meshtastic_AdminMessage_get_channel_request_tag: { + case meshtastic_AdminMessage_get_channel_request_tag: + { uint32_t i = r->get_channel_request - 1; LOG_INFO("Client is getting channel %u\n", i); if (i >= MAX_NUM_CHANNELS) @@ -110,17 +113,22 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta /** * Other */ - case meshtastic_AdminMessage_reboot_seconds_tag: { + case meshtastic_AdminMessage_reboot_seconds_tag: + { reboot(r->reboot_seconds); break; } - case meshtastic_AdminMessage_reboot_ota_seconds_tag: { + case meshtastic_AdminMessage_reboot_ota_seconds_tag: + { int32_t s = r->reboot_ota_seconds; #ifdef ARCH_ESP32 - if (BleOta::getOtaAppVersion().isEmpty()) { + if (BleOta::getOtaAppVersion().isEmpty()) + { LOG_INFO("No OTA firmware available, scheduling regular reboot in %d seconds\n", s); screen->startRebootScreen(); - } else { + } + else + { screen->startFirmwareUpdateScreen(); BleOta::switchToOtaApp(); LOG_INFO("Rebooting to OTA in %d seconds\n", s); @@ -132,41 +140,48 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000); break; } - case meshtastic_AdminMessage_shutdown_seconds_tag: { + case meshtastic_AdminMessage_shutdown_seconds_tag: + { int32_t s = r->shutdown_seconds; LOG_INFO("Shutdown in %d seconds\n", s); shutdownAtMsec = (s < 0) ? 0 : (millis() + s * 1000); break; } - case meshtastic_AdminMessage_get_device_metadata_request_tag: { + case meshtastic_AdminMessage_get_device_metadata_request_tag: + { LOG_INFO("Client is getting device metadata\n"); handleGetDeviceMetadata(mp); break; } - case meshtastic_AdminMessage_factory_reset_tag: { + case meshtastic_AdminMessage_factory_reset_tag: + { LOG_INFO("Initiating factory reset\n"); nodeDB.factoryReset(); reboot(DEFAULT_REBOOT_SECONDS); break; } - case meshtastic_AdminMessage_nodedb_reset_tag: { + case meshtastic_AdminMessage_nodedb_reset_tag: + { LOG_INFO("Initiating node-db reset\n"); nodeDB.resetNodes(); reboot(DEFAULT_REBOOT_SECONDS); break; } - case meshtastic_AdminMessage_begin_edit_settings_tag: { + case meshtastic_AdminMessage_begin_edit_settings_tag: + { LOG_INFO("Beginning transaction for editing settings\n"); hasOpenEditTransaction = true; break; } - case meshtastic_AdminMessage_commit_edit_settings_tag: { + case meshtastic_AdminMessage_commit_edit_settings_tag: + { LOG_INFO("Committing transaction for edited settings\n"); hasOpenEditTransaction = false; saveChanges(SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_DEVICESTATE | SEGMENT_CHANNELS); break; } - case meshtastic_AdminMessage_get_device_connection_status_request_tag: { + case meshtastic_AdminMessage_get_device_connection_status_request_tag: + { LOG_INFO("Client is getting device connection status\n"); handleGetDeviceConnectionStatus(mp); break; @@ -182,11 +197,16 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta meshtastic_AdminMessage res = meshtastic_AdminMessage_init_default; AdminMessageHandleResult handleResult = MeshModule::handleAdminMessageForAllPlugins(mp, r, &res); - if (handleResult == AdminMessageHandleResult::HANDLED_WITH_RESPONSE) { + if (handleResult == AdminMessageHandleResult::HANDLED_WITH_RESPONSE) + { myReply = allocDataProtobuf(res); - } else if (mp.decoded.want_response) { + } + else if (mp.decoded.want_response) + { LOG_DEBUG("We did not responded to a request that wanted a respond. req.variant=%d\n", r->which_payload_variant); - } else if (handleResult != AdminMessageHandleResult::HANDLED) { + } + else if (handleResult != AdminMessageHandleResult::HANDLED) + { // Probably a message sent by us or sent to our local node. FIXME, we should avoid scanning these messages LOG_INFO("Ignoring nonrelevant admin %d\n", r->which_payload_variant); } @@ -194,7 +214,8 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta } // If asked for a response and it is not yet set, generate an 'ACK' response - if (mp.decoded.want_response && !myReply) { + if (mp.decoded.want_response && !myReply) + { myReply = allocErrorResponse(meshtastic_Routing_Error_NONE, &mp); } @@ -210,26 +231,31 @@ void AdminModule::handleSetOwner(const meshtastic_User &o) int changed = 0; bool licensed_changed = false; - if (*o.long_name) { + if (*o.long_name) + { changed |= strcmp(owner.long_name, o.long_name); strncpy(owner.long_name, o.long_name, sizeof(owner.long_name)); } - if (*o.short_name) { + if (*o.short_name) + { changed |= strcmp(owner.short_name, o.short_name); strncpy(owner.short_name, o.short_name, sizeof(owner.short_name)); } - if (*o.id) { + if (*o.id) + { changed |= strcmp(owner.id, o.id); strncpy(owner.id, o.id, sizeof(owner.id)); } - if (owner.is_licensed != o.is_licensed) { + if (owner.is_licensed != o.is_licensed) + { changed = 1; licensed_changed = true; owner.is_licensed = o.is_licensed; config.lora.override_duty_cycle = owner.is_licensed; // override duty cycle for licensed operators } - if (changed) { // If nothing really changed, don't broadcast on the network or write to flash + if (changed) + { // If nothing really changed, don't broadcast on the network or write to flash service.reloadOwner(!hasOpenEditTransaction); licensed_changed ? saveChanges(SEGMENT_CONFIG | SEGMENT_DEVICESTATE) : saveChanges(SEGMENT_DEVICESTATE); } @@ -240,7 +266,8 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c) auto existingRole = config.device.role; bool isRegionUnset = (config.lora.region == meshtastic_Config_LoRaConfig_RegionCode_UNSET); - switch (c.which_payload_variant) { + switch (c.which_payload_variant) + { case meshtastic_Config_device_tag: LOG_INFO("Setting config: Device\n"); config.has_device = true; @@ -275,7 +302,8 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c) LOG_INFO("Setting config: LoRa\n"); config.has_lora = true; config.lora = c.payload_variant.lora; - if (isRegionUnset && config.lora.region > meshtastic_Config_LoRaConfig_RegionCode_UNSET) { + if (isRegionUnset && config.lora.region > meshtastic_Config_LoRaConfig_RegionCode_UNSET) + { config.lora.tx_enabled = true; } break; @@ -291,7 +319,8 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c) void AdminModule::handleSetModuleConfig(const meshtastic_ModuleConfig &c) { - switch (c.which_payload_variant) { + switch (c.which_payload_variant) + { case meshtastic_ModuleConfig_mqtt_tag: LOG_INFO("Setting module config: MQTT\n"); moduleConfig.has_mqtt = true; @@ -355,7 +384,8 @@ void AdminModule::handleSetChannel(const meshtastic_Channel &cc) void AdminModule::handleGetOwner(const meshtastic_MeshPacket &req) { - if (req.decoded.want_response) { + if (req.decoded.want_response) + { // We create the reply here meshtastic_AdminMessage res = meshtastic_AdminMessage_init_default; res.get_owner_response = owner; @@ -369,8 +399,10 @@ void AdminModule::handleGetConfig(const meshtastic_MeshPacket &req, const uint32 { meshtastic_AdminMessage res = meshtastic_AdminMessage_init_default; - if (req.decoded.want_response) { - switch (configType) { + if (req.decoded.want_response) + { + switch (configType) + { case meshtastic_AdminMessage_ConfigType_DEVICE_CONFIG: LOG_INFO("Getting config: Device\n"); res.get_config_response.which_payload_variant = meshtastic_Config_device_tag; @@ -425,8 +457,10 @@ void AdminModule::handleGetModuleConfig(const meshtastic_MeshPacket &req, const { meshtastic_AdminMessage res = meshtastic_AdminMessage_init_default; - if (req.decoded.want_response) { - switch (configType) { + if (req.decoded.want_response) + { + switch (configType) + { case meshtastic_AdminMessage_ModuleConfigType_MQTT_CONFIG: LOG_INFO("Getting module config: MQTT\n"); res.get_module_config_response.which_payload_variant = meshtastic_ModuleConfig_mqtt_tag; @@ -514,29 +548,36 @@ void AdminModule::handleGetDeviceConnectionStatus(const meshtastic_MeshPacket &r #if HAS_WIFI conn.has_wifi = true; - conn.wifi.status.status.is_connected = WiFi.status() != WL_CONNECTED; + conn.wifi.has_status = true; + conn.wifi.status.is_connected = WiFi.status() != WL_CONNECTED; strncpy(conn.wifi.ssid, config.network.wifi_ssid, 33); - if (conn.wifi.status.status.is_connected) { + if (conn.wifi.status.is_connected) + { conn.wifi.rssi = WiFi.RSSI(); - conn.wifi.status.status.ip_address = WiFi.localIP(); - conn.wifi.status.status.is_mqtt_connected = mqtt && mqtt->connected(); - conn.wifi.status.status.is_syslog_connected = false; // FIXME wire this up + conn.wifi.status.ip_address = WiFi.localIP(); + conn.wifi.status.is_mqtt_connected = mqtt && mqtt->connected(); + conn.wifi.status.is_syslog_connected = false; // FIXME wire this up } #endif #if HAS_ETHERNET conn.has_ethernet = true; - if (Ethernet.linkStatus() == LinkON) { + conn.ethernet.has_status = true; + if (Ethernet.linkStatus() == LinkON) + { conn.ethernet.status.is_connected = true; conn.ethernet.status.ip_address = Ethernet.localIP(); conn.ethernet.status.is_mqtt_connected = mqtt && mqtt->connected(); conn.ethernet.status.is_syslog_connected = false; // FIXME wire this up } - conn.ethernet.status.is_connected = false; + else + { + conn.ethernet.status.is_connected = false; + } #endif #if HAS_BLUETOOTH - conn.has_bluetooth = HAS_BLUETOOTH; + conn.has_bluetooth = true; conn.bluetooth.pin = config.bluetooth.fixed_pin; #endif #ifdef ARCH_ESP32 @@ -556,7 +597,8 @@ void AdminModule::handleGetDeviceConnectionStatus(const meshtastic_MeshPacket &r void AdminModule::handleGetChannel(const meshtastic_MeshPacket &req, uint32_t channelIndex) { - if (req.decoded.want_response) { + if (req.decoded.want_response) + { // We create the reply here meshtastic_AdminMessage r = meshtastic_AdminMessage_init_default; r.get_channel_response = channels.getByIndex(channelIndex); @@ -574,13 +616,17 @@ void AdminModule::reboot(int32_t seconds) void AdminModule::saveChanges(int saveWhat, bool shouldReboot) { - if (!hasOpenEditTransaction) { + if (!hasOpenEditTransaction) + { LOG_INFO("Saving changes to disk\n"); service.reloadConfig(saveWhat); // Calls saveToDisk among other things - } else { + } + else + { LOG_INFO("Delaying save of changes to disk until the open transaction is committed\n"); } - if (shouldReboot) { + if (shouldReboot) + { reboot(DEFAULT_REBOOT_SECONDS); } }