From 163774bb1f3380a95a09d55200fe19324bb89d41 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 1 May 2022 14:26:05 -0500 Subject: [PATCH] Moved refactored prefs --- proto | 2 +- src/mesh/NodeDB.cpp | 1 + src/mesh/NodeDB.h | 11 ++- src/mesh/generated/admin.pb.c | 1 + src/mesh/generated/admin.pb.h | 2 +- src/mesh/generated/config.pb.h | 62 ++++++++---- src/mesh/generated/radioconfig.pb.c | 1 - src/mesh/generated/radioconfig.pb.h | 66 +------------ src/mesh/generated/telemetry.pb.c | 1 + src/mesh/generated/telemetry.pb.h | 31 ++++++ src/modules/Telemetry/DeviceTelemetry.cpp | 3 +- src/modules/Telemetry/DeviceTelemetry.h | 2 + .../Telemetry/EnvironmentTelemetry.cpp | 97 +++++++++---------- src/modules/Telemetry/EnvironmentTelemetry.h | 2 + src/modules/Telemetry/Sensor/DHTSensor.cpp | 10 +- src/modules/Telemetry/Sensor/DallasSensor.cpp | 4 +- .../Telemetry/Sensor/TelemetrySensor.h | 3 +- 17 files changed, 156 insertions(+), 143 deletions(-) diff --git a/proto b/proto index 6c790cef4..d02d7131a 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit 6c790cef4c500f02773986726e48d45d4a218b5d +Subproject commit d02d7131a20210a18f12a87a327753e1e34b4282 diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 660280fcb..c40849213 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -35,6 +35,7 @@ NodeDB nodeDB; EXT_RAM_ATTR DeviceState devicestate; MyNodeInfo &myNodeInfo = devicestate.my_node; RadioConfig radioConfig; +Config config; ChannelFile channelFile; /** The current change # for radio settings. Starts at 0 on boot and any time the radio settings diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index 4cea56068..d7cc44e85 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -12,6 +12,7 @@ extern DeviceState devicestate; extern ChannelFile channelFile; extern MyNodeInfo &myNodeInfo; extern RadioConfig radioConfig; +extern Config config; extern User &owner; /// Given a node, return how many seconds in the past (vs now) that we last heard from it @@ -161,13 +162,17 @@ extern NodeDB nodeDB; #define IF_ROUTER(routerVal, normalVal) ((radioConfig.preferences.role == Role_Router) ? (routerVal) : (normalVal)) +#define default_broadcast_interval_secs IF_ROUTER(12 * 60 * 60, 15 * 60) + +inline uint32_t getIntervalOrDefaultMs(uint32_t interval) { + if (interval > 0) return interval * 1000; + return default_broadcast_interval_secs * 1000; +} + #define PREF_GET(name, defaultVal) \ inline uint32_t getPref_##name() { return radioConfig.preferences.name ? radioConfig.preferences.name : (defaultVal); } PREF_GET(position_broadcast_secs, IF_ROUTER(12 * 60 * 60, 15 * 60)) -// Defaulting Telemetry to the same as position interval for now -PREF_GET(telemetry_module_device_update_interval, IF_ROUTER(12 * 60 * 60, 15 * 60)) -PREF_GET(telemetry_module_environment_update_interval, IF_ROUTER(12 * 60 * 60, 15 * 60)) // Each time we wake into the DARK state allow 1 minute to send and receive BLE packets to the phone diff --git a/src/mesh/generated/admin.pb.c b/src/mesh/generated/admin.pb.c index 688cba334..aab68eb8f 100644 --- a/src/mesh/generated/admin.pb.c +++ b/src/mesh/generated/admin.pb.c @@ -10,3 +10,4 @@ PB_BIND(AdminMessage, AdminMessage, 2) + diff --git a/src/mesh/generated/admin.pb.h b/src/mesh/generated/admin.pb.h index 13ec47ca2..b6703c302 100644 --- a/src/mesh/generated/admin.pb.h +++ b/src/mesh/generated/admin.pb.h @@ -165,7 +165,7 @@ extern const pb_msgdesc_t AdminMessage_msg; /* Maximum encoded size of messages (where known) */ #if defined(Config_size) #define AdminMessage_size (0 + sizeof(union AdminMessage_variant_size_union)) -union AdminMessage_variant_size_union {char f0[598]; char f11[(6 + Config_size)];}; +union AdminMessage_variant_size_union {char f11[(6 + Config_size)]; char f0[551];}; #endif #ifdef __cplusplus diff --git a/src/mesh/generated/config.pb.h b/src/mesh/generated/config.pb.h index cb7923d14..a8e78161d 100644 --- a/src/mesh/generated/config.pb.h +++ b/src/mesh/generated/config.pb.h @@ -4,6 +4,7 @@ #ifndef PB_CONFIG_PB_H_INCLUDED #define PB_CONFIG_PB_H_INCLUDED #include +#include "telemetry.pb.h" #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. @@ -50,14 +51,28 @@ typedef struct _Config_ModuleConfig_StoreForwardConfig { char dummy_field; } Config_ModuleConfig_StoreForwardConfig; -typedef struct _Config_ModuleConfig_TelemetryConfig { - char dummy_field; -} Config_ModuleConfig_TelemetryConfig; - typedef struct _Config_PowerConfig { char dummy_field; } Config_PowerConfig; +typedef struct _Config_ModuleConfig_TelemetryConfig { + uint32_t device_update_interval; + uint32_t environment_update_interval; + bool environment_measurement_enabled; + bool environment_screen_enabled; + uint32_t environment_read_error_count_threshold; + uint32_t environment_recovery_interval; + bool environment_display_fahrenheit; + TelemetrySensorType environment_sensor_type; + uint32_t environment_sensor_pin; +} Config_ModuleConfig_TelemetryConfig; + +typedef struct _Config_WiFiConfig { + pb_callback_t wifi_ssid; + pb_callback_t wifi_password; + bool wifi_ap_mode; +} Config_WiFiConfig; + typedef struct _Config_ModuleConfig { pb_size_t which_payloadVariant; union { @@ -71,12 +86,6 @@ typedef struct _Config_ModuleConfig { } payloadVariant; } Config_ModuleConfig; -typedef struct _Config_WiFiConfig { - pb_callback_t wifi_ssid; - pb_callback_t wifi_password; - bool wifi_ap_mode; -} Config_WiFiConfig; - typedef struct _Config { /* TODO: REPLACE */ pb_size_t which_payloadVariant; @@ -110,7 +119,7 @@ extern "C" { #define Config_ModuleConfig_ExternalNotificationConfig_init_default {0} #define Config_ModuleConfig_StoreForwardConfig_init_default {0} #define Config_ModuleConfig_RangeTestConfig_init_default {0} -#define Config_ModuleConfig_TelemetryConfig_init_default {0} +#define Config_ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0, 0, 0, _TelemetrySensorType_MIN, 0} #define Config_ModuleConfig_CannedMessageConfig_init_default {0} #define Config_init_zero {0, {Config_DeviceConfig_init_zero}} #define Config_DeviceConfig_init_zero {0} @@ -125,10 +134,22 @@ extern "C" { #define Config_ModuleConfig_ExternalNotificationConfig_init_zero {0} #define Config_ModuleConfig_StoreForwardConfig_init_zero {0} #define Config_ModuleConfig_RangeTestConfig_init_zero {0} -#define Config_ModuleConfig_TelemetryConfig_init_zero {0} +#define Config_ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 0, 0, 0, _TelemetrySensorType_MIN, 0} #define Config_ModuleConfig_CannedMessageConfig_init_zero {0} /* Field tags (for use in manual encoding/decoding) */ +#define Config_ModuleConfig_TelemetryConfig_device_update_interval_tag 1 +#define Config_ModuleConfig_TelemetryConfig_environment_update_interval_tag 2 +#define Config_ModuleConfig_TelemetryConfig_environment_measurement_enabled_tag 3 +#define Config_ModuleConfig_TelemetryConfig_environment_screen_enabled_tag 4 +#define Config_ModuleConfig_TelemetryConfig_environment_read_error_count_threshold_tag 5 +#define Config_ModuleConfig_TelemetryConfig_environment_recovery_interval_tag 6 +#define Config_ModuleConfig_TelemetryConfig_environment_display_fahrenheit_tag 7 +#define Config_ModuleConfig_TelemetryConfig_environment_sensor_type_tag 8 +#define Config_ModuleConfig_TelemetryConfig_environment_sensor_pin_tag 9 +#define Config_WiFiConfig_wifi_ssid_tag 1 +#define Config_WiFiConfig_wifi_password_tag 2 +#define Config_WiFiConfig_wifi_ap_mode_tag 3 #define Config_ModuleConfig_mqtt_config_tag 1 #define Config_ModuleConfig_serial_config_tag 2 #define Config_ModuleConfig_external_notification_config_tag 3 @@ -136,9 +157,6 @@ extern "C" { #define Config_ModuleConfig_range_test_config_tag 5 #define Config_ModuleConfig_telemetry_config_tag 6 #define Config_ModuleConfig_canned_message_config_tag 7 -#define Config_WiFiConfig_wifi_ssid_tag 1 -#define Config_WiFiConfig_wifi_password_tag 2 -#define Config_WiFiConfig_wifi_ap_mode_tag 3 #define Config_device_config_tag 1 #define Config_gps_config_tag 2 #define Config_power_config_tag 3 @@ -242,7 +260,15 @@ X(a, STATIC, ONEOF, MESSAGE, (payloadVariant,canned_message_config,payload #define Config_ModuleConfig_RangeTestConfig_DEFAULT NULL #define Config_ModuleConfig_TelemetryConfig_FIELDLIST(X, a) \ - +X(a, STATIC, SINGULAR, UINT32, device_update_interval, 1) \ +X(a, STATIC, SINGULAR, UINT32, environment_update_interval, 2) \ +X(a, STATIC, SINGULAR, BOOL, environment_measurement_enabled, 3) \ +X(a, STATIC, SINGULAR, BOOL, environment_screen_enabled, 4) \ +X(a, STATIC, SINGULAR, UINT32, environment_read_error_count_threshold, 5) \ +X(a, STATIC, SINGULAR, UINT32, environment_recovery_interval, 6) \ +X(a, STATIC, SINGULAR, BOOL, environment_display_fahrenheit, 7) \ +X(a, STATIC, SINGULAR, UENUM, environment_sensor_type, 8) \ +X(a, STATIC, SINGULAR, UINT32, environment_sensor_pin, 9) #define Config_ModuleConfig_TelemetryConfig_CALLBACK NULL #define Config_ModuleConfig_TelemetryConfig_DEFAULT NULL @@ -297,8 +323,8 @@ extern const pb_msgdesc_t Config_ModuleConfig_CannedMessageConfig_msg; #define Config_ModuleConfig_RangeTestConfig_size 0 #define Config_ModuleConfig_SerialConfig_size 0 #define Config_ModuleConfig_StoreForwardConfig_size 0 -#define Config_ModuleConfig_TelemetryConfig_size 0 -#define Config_ModuleConfig_size 2 +#define Config_ModuleConfig_TelemetryConfig_size 38 +#define Config_ModuleConfig_size 40 #define Config_PowerConfig_size 0 #ifdef __cplusplus diff --git a/src/mesh/generated/radioconfig.pb.c b/src/mesh/generated/radioconfig.pb.c index 47b4f3903..a5de74964 100644 --- a/src/mesh/generated/radioconfig.pb.c +++ b/src/mesh/generated/radioconfig.pb.c @@ -21,4 +21,3 @@ PB_BIND(RadioConfig_UserPreferences, RadioConfig_UserPreferences, 2) - diff --git a/src/mesh/generated/radioconfig.pb.h b/src/mesh/generated/radioconfig.pb.h index b6a50bb90..343c32450 100644 --- a/src/mesh/generated/radioconfig.pb.h +++ b/src/mesh/generated/radioconfig.pb.h @@ -237,31 +237,6 @@ typedef enum _RadioConfig_UserPreferences_Serial_Mode { RadioConfig_UserPreferences_Serial_Mode_MODE_PROTO = 2 } RadioConfig_UserPreferences_Serial_Mode; -/* Sets the charge control current of devices with a battery charger that can be - configured. This is passed into the axp power management chip like on the tbeam. */ -typedef enum _RadioConfig_UserPreferences_TelemetrySensorType { - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_None = 0, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_DHT11 = 1, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_DS18B20 = 2, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_DHT12 = 3, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_DHT21 = 4, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_DHT22 = 5, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_BME280 = 6, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_BME680 = 7, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_MCP9808 = 8, - /* TODO: REPLACE */ - RadioConfig_UserPreferences_TelemetrySensorType_SHTC3 = 9 -} RadioConfig_UserPreferences_TelemetrySensorType; - /* Struct definitions */ typedef struct _RadioConfig_UserPreferences { uint32_t position_broadcast_secs; @@ -314,14 +289,6 @@ typedef struct _RadioConfig_UserPreferences { uint32_t store_forward_module_records; uint32_t store_forward_module_history_return_max; uint32_t store_forward_module_history_return_window; - bool telemetry_module_environment_measurement_enabled; - bool telemetry_module_environment_screen_enabled; - uint32_t telemetry_module_environment_read_error_count_threshold; - uint32_t telemetry_module_device_update_interval; - uint32_t telemetry_module_environment_recovery_interval; - bool telemetry_module_environment_display_fahrenheit; - RadioConfig_UserPreferences_TelemetrySensorType telemetry_module_environment_sensor_type; - uint32_t telemetry_module_environment_sensor_pin; bool store_forward_module_enabled; bool store_forward_module_heartbeat; uint32_t position_flags; @@ -347,7 +314,6 @@ typedef struct _RadioConfig_UserPreferences { bool mqtt_encryption_enabled; float adc_multiplier_override; RadioConfig_UserPreferences_Serial_Baud serial_module_baud; - uint32_t telemetry_module_environment_update_interval; } RadioConfig_UserPreferences; /* The entire set of user settable/readable settings for our radio device. @@ -393,10 +359,6 @@ typedef struct _RadioConfig { #define _RadioConfig_UserPreferences_Serial_Mode_MAX RadioConfig_UserPreferences_Serial_Mode_MODE_PROTO #define _RadioConfig_UserPreferences_Serial_Mode_ARRAYSIZE ((RadioConfig_UserPreferences_Serial_Mode)(RadioConfig_UserPreferences_Serial_Mode_MODE_PROTO+1)) -#define _RadioConfig_UserPreferences_TelemetrySensorType_MIN RadioConfig_UserPreferences_TelemetrySensorType_None -#define _RadioConfig_UserPreferences_TelemetrySensorType_MAX RadioConfig_UserPreferences_TelemetrySensorType_SHTC3 -#define _RadioConfig_UserPreferences_TelemetrySensorType_ARRAYSIZE ((RadioConfig_UserPreferences_TelemetrySensorType)(RadioConfig_UserPreferences_TelemetrySensorType_SHTC3+1)) - #ifdef __cplusplus extern "C" { @@ -404,9 +366,9 @@ extern "C" { /* Initializer values for message structs */ #define RadioConfig_init_default {false, RadioConfig_UserPreferences_init_default} -#define RadioConfig_UserPreferences_init_default {0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, _RegionCode_MIN, _ChargeCurrent_MIN, 0, _Role_MIN, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, _GpsCoordinateFormat_MIN, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, _RadioConfig_UserPreferences_Serial_Mode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _RadioConfig_UserPreferences_TelemetrySensorType_MIN, 0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, 0, 0, 0, 0, 0, _InputEventChar_MIN, _InputEventChar_MIN, _InputEventChar_MIN, 0, 0, "", 0, 0, 0, _RadioConfig_UserPreferences_Serial_Baud_MIN, 0} +#define RadioConfig_UserPreferences_init_default {0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, _RegionCode_MIN, _ChargeCurrent_MIN, 0, _Role_MIN, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, _GpsCoordinateFormat_MIN, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, _RadioConfig_UserPreferences_Serial_Mode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, 0, 0, 0, 0, 0, _InputEventChar_MIN, _InputEventChar_MIN, _InputEventChar_MIN, 0, 0, "", 0, 0, 0, _RadioConfig_UserPreferences_Serial_Baud_MIN} #define RadioConfig_init_zero {false, RadioConfig_UserPreferences_init_zero} -#define RadioConfig_UserPreferences_init_zero {0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, _RegionCode_MIN, _ChargeCurrent_MIN, 0, _Role_MIN, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, _GpsCoordinateFormat_MIN, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, _RadioConfig_UserPreferences_Serial_Mode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _RadioConfig_UserPreferences_TelemetrySensorType_MIN, 0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, 0, 0, 0, 0, 0, _InputEventChar_MIN, _InputEventChar_MIN, _InputEventChar_MIN, 0, 0, "", 0, 0, 0, _RadioConfig_UserPreferences_Serial_Baud_MIN, 0} +#define RadioConfig_UserPreferences_init_zero {0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, _RegionCode_MIN, _ChargeCurrent_MIN, 0, _Role_MIN, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, _GpsCoordinateFormat_MIN, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, _RadioConfig_UserPreferences_Serial_Mode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", "", 0, 0, 0, 0, 0, 0, _InputEventChar_MIN, _InputEventChar_MIN, _InputEventChar_MIN, 0, 0, "", 0, 0, 0, _RadioConfig_UserPreferences_Serial_Baud_MIN} /* Field tags (for use in manual encoding/decoding) */ #define RadioConfig_UserPreferences_position_broadcast_secs_tag 1 @@ -458,14 +420,6 @@ extern "C" { #define RadioConfig_UserPreferences_store_forward_module_records_tag 137 #define RadioConfig_UserPreferences_store_forward_module_history_return_max_tag 138 #define RadioConfig_UserPreferences_store_forward_module_history_return_window_tag 139 -#define RadioConfig_UserPreferences_telemetry_module_environment_measurement_enabled_tag 140 -#define RadioConfig_UserPreferences_telemetry_module_environment_screen_enabled_tag 141 -#define RadioConfig_UserPreferences_telemetry_module_environment_read_error_count_threshold_tag 142 -#define RadioConfig_UserPreferences_telemetry_module_device_update_interval_tag 143 -#define RadioConfig_UserPreferences_telemetry_module_environment_recovery_interval_tag 144 -#define RadioConfig_UserPreferences_telemetry_module_environment_display_fahrenheit_tag 145 -#define RadioConfig_UserPreferences_telemetry_module_environment_sensor_type_tag 146 -#define RadioConfig_UserPreferences_telemetry_module_environment_sensor_pin_tag 147 #define RadioConfig_UserPreferences_store_forward_module_enabled_tag 148 #define RadioConfig_UserPreferences_store_forward_module_heartbeat_tag 149 #define RadioConfig_UserPreferences_position_flags_tag 150 @@ -491,7 +445,6 @@ extern "C" { #define RadioConfig_UserPreferences_mqtt_encryption_enabled_tag 174 #define RadioConfig_UserPreferences_adc_multiplier_override_tag 175 #define RadioConfig_UserPreferences_serial_module_baud_tag 176 -#define RadioConfig_UserPreferences_telemetry_module_environment_update_interval_tag 177 #define RadioConfig_preferences_tag 1 /* Struct field encoding specification for nanopb */ @@ -551,14 +504,6 @@ X(a, STATIC, SINGULAR, BOOL, range_test_module_save, 134) \ X(a, STATIC, SINGULAR, UINT32, store_forward_module_records, 137) \ X(a, STATIC, SINGULAR, UINT32, store_forward_module_history_return_max, 138) \ X(a, STATIC, SINGULAR, UINT32, store_forward_module_history_return_window, 139) \ -X(a, STATIC, SINGULAR, BOOL, telemetry_module_environment_measurement_enabled, 140) \ -X(a, STATIC, SINGULAR, BOOL, telemetry_module_environment_screen_enabled, 141) \ -X(a, STATIC, SINGULAR, UINT32, telemetry_module_environment_read_error_count_threshold, 142) \ -X(a, STATIC, SINGULAR, UINT32, telemetry_module_device_update_interval, 143) \ -X(a, STATIC, SINGULAR, UINT32, telemetry_module_environment_recovery_interval, 144) \ -X(a, STATIC, SINGULAR, BOOL, telemetry_module_environment_display_fahrenheit, 145) \ -X(a, STATIC, SINGULAR, UENUM, telemetry_module_environment_sensor_type, 146) \ -X(a, STATIC, SINGULAR, UINT32, telemetry_module_environment_sensor_pin, 147) \ X(a, STATIC, SINGULAR, BOOL, store_forward_module_enabled, 148) \ X(a, STATIC, SINGULAR, BOOL, store_forward_module_heartbeat, 149) \ X(a, STATIC, SINGULAR, UINT32, position_flags, 150) \ @@ -583,8 +528,7 @@ X(a, STATIC, SINGULAR, STRING, canned_message_module_allow_input_source, 171 X(a, STATIC, SINGULAR, BOOL, canned_message_module_send_bell, 173) \ X(a, STATIC, SINGULAR, BOOL, mqtt_encryption_enabled, 174) \ X(a, STATIC, SINGULAR, FLOAT, adc_multiplier_override, 175) \ -X(a, STATIC, SINGULAR, UENUM, serial_module_baud, 176) \ -X(a, STATIC, SINGULAR, UINT32, telemetry_module_environment_update_interval, 177) +X(a, STATIC, SINGULAR, UENUM, serial_module_baud, 176) #define RadioConfig_UserPreferences_CALLBACK NULL #define RadioConfig_UserPreferences_DEFAULT NULL @@ -596,8 +540,8 @@ extern const pb_msgdesc_t RadioConfig_UserPreferences_msg; #define RadioConfig_UserPreferences_fields &RadioConfig_UserPreferences_msg /* Maximum encoded size of messages (where known) */ -#define RadioConfig_UserPreferences_size 592 -#define RadioConfig_size 595 +#define RadioConfig_UserPreferences_size 545 +#define RadioConfig_size 548 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/telemetry.pb.c b/src/mesh/generated/telemetry.pb.c index 674a2f84d..a2d812cad 100644 --- a/src/mesh/generated/telemetry.pb.c +++ b/src/mesh/generated/telemetry.pb.c @@ -16,3 +16,4 @@ PB_BIND(Telemetry, Telemetry, AUTO) + diff --git a/src/mesh/generated/telemetry.pb.h b/src/mesh/generated/telemetry.pb.h index b3bf3df1d..6c9db655c 100644 --- a/src/mesh/generated/telemetry.pb.h +++ b/src/mesh/generated/telemetry.pb.h @@ -9,6 +9,31 @@ #error Regenerate this file with the current version of nanopb generator. #endif +/* Enum definitions */ +/* TODO: REPLACE */ +typedef enum _TelemetrySensorType { + /* No external telemetry sensor */ + TelemetrySensorType_NotSet = 0, + /* TODO: REPLACE */ + TelemetrySensorType_DHT11 = 1, + /* TODO: REPLACE */ + TelemetrySensorType_DS18B20 = 2, + /* TODO: REPLACE */ + TelemetrySensorType_DHT12 = 3, + /* TODO: REPLACE */ + TelemetrySensorType_DHT21 = 4, + /* TODO: REPLACE */ + TelemetrySensorType_DHT22 = 5, + /* TODO: REPLACE */ + TelemetrySensorType_BME280 = 6, + /* TODO: REPLACE */ + TelemetrySensorType_BME680 = 7, + /* TODO: REPLACE */ + TelemetrySensorType_MCP9808 = 8, + /* TODO: REPLACE */ + TelemetrySensorType_SHTC3 = 9 +} TelemetrySensorType; + /* Struct definitions */ /* Key native device metrics such as battery level */ typedef struct _DeviceMetrics { @@ -55,6 +80,12 @@ typedef struct _Telemetry { } Telemetry; +/* Helper constants for enums */ +#define _TelemetrySensorType_MIN TelemetrySensorType_NotSet +#define _TelemetrySensorType_MAX TelemetrySensorType_SHTC3 +#define _TelemetrySensorType_ARRAYSIZE ((TelemetrySensorType)(TelemetrySensorType_SHTC3+1)) + + #ifdef __cplusplus extern "C" { #endif diff --git a/src/modules/Telemetry/DeviceTelemetry.cpp b/src/modules/Telemetry/DeviceTelemetry.cpp index 4568521c3..9ba59f5a1 100644 --- a/src/modules/Telemetry/DeviceTelemetry.cpp +++ b/src/modules/Telemetry/DeviceTelemetry.cpp @@ -20,7 +20,8 @@ int32_t DeviceTelemetryModule::runOnce() } sendOurTelemetry(); // OSThread library. Multiply the preference value by 1000 to convert seconds to miliseconds - return (getPref_telemetry_module_device_update_interval() * 1000); + + return getIntervalOrDefaultMs(moduleConfig.device_update_interval); #endif } diff --git a/src/modules/Telemetry/DeviceTelemetry.h b/src/modules/Telemetry/DeviceTelemetry.h index c224a2c1d..07c781645 100644 --- a/src/modules/Telemetry/DeviceTelemetry.h +++ b/src/modules/Telemetry/DeviceTelemetry.h @@ -1,6 +1,7 @@ #pragma once #include "../mesh/generated/telemetry.pb.h" #include "ProtobufModule.h" +#include "NodeDB.h" #include #include @@ -27,6 +28,7 @@ class DeviceTelemetryModule : private concurrency::OSThread, public ProtobufModu bool sendOurTelemetry(NodeNum dest = NODENUM_BROADCAST, bool wantReplies = false); private: + Config_ModuleConfig_TelemetryConfig moduleConfig = config.payloadVariant.module_config.payloadVariant.telemetry_config; bool firstTime = 1; const MeshPacket *lastMeasurementPacket; }; diff --git a/src/modules/Telemetry/EnvironmentTelemetry.cpp b/src/modules/Telemetry/EnvironmentTelemetry.cpp index 0257fe311..2735f5ef1 100644 --- a/src/modules/Telemetry/EnvironmentTelemetry.cpp +++ b/src/modules/Telemetry/EnvironmentTelemetry.cpp @@ -50,17 +50,17 @@ int32_t EnvironmentTelemetryModule::runOnce() without having to configure it from the PythonAPI or WebUI. */ /* - radioConfig.preferences.telemetry_module_environment_measurement_enabled = 1; - radioConfig.preferences.telemetry_module_environment_screen_enabled = 1; - radioConfig.preferences.telemetry_module_environment_read_error_count_threshold = 5; - radioConfig.preferences.telemetry_module_environment_update_interval = 600; - radioConfig.preferences.telemetry_module_environment_recovery_interval = 60; - radioConfig.preferences.telemetry_module_environment_sensor_pin = 13; // If one-wire - radioConfig.preferences.telemetry_module_environment_sensor_type = RadioConfig_UserPreferences_TelemetrySensorType::RadioConfig_UserPreferences_TelemetrySensorType_BME280; + moduleConfig.environment_measurement_enabled = 1; + moduleConfig.environment_screen_enabled = 1; + moduleConfig.environment_read_error_count_threshold = 5; + moduleConfig.environment_update_interval = 600; + moduleConfig.environment_recovery_interval = 60; + moduleConfig.environment_sensor_pin = 13; // If one-wire + moduleConfig.environment_sensor_type = TelemetrySensorType::TelemetrySensorType_BME280; */ - if (!(radioConfig.preferences.telemetry_module_environment_measurement_enabled || - radioConfig.preferences.telemetry_module_environment_screen_enabled)) { + if (!(moduleConfig.environment_measurement_enabled || + moduleConfig.environment_screen_enabled)) { // If this module is not enabled, and the user doesn't want the display screen don't waste any OSThread time on it return (INT32_MAX); } @@ -69,24 +69,24 @@ int32_t EnvironmentTelemetryModule::runOnce() // This is the first time the OSThread library has called this function, so do some setup firstTime = 0; - if (radioConfig.preferences.telemetry_module_environment_measurement_enabled) { + if (moduleConfig.environment_measurement_enabled) { DEBUG_MSG("Environment Telemetry: Initializing\n"); // it's possible to have this module enabled, only for displaying values on the screen. // therefore, we should only enable the sensor loop if measurement is also enabled - switch (radioConfig.preferences.telemetry_module_environment_sensor_type) { + switch (moduleConfig.environment_sensor_type) { - case RadioConfig_UserPreferences_TelemetrySensorType_DHT11: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT12: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT21: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT22: + case TelemetrySensorType_DHT11: + case TelemetrySensorType_DHT12: + case TelemetrySensorType_DHT21: + case TelemetrySensorType_DHT22: return dhtSensor.runOnce(); - case RadioConfig_UserPreferences_TelemetrySensorType_DS18B20: + case TelemetrySensorType_DS18B20: return dallasSensor.runOnce(); - case RadioConfig_UserPreferences_TelemetrySensorType_BME280: + case TelemetrySensorType_BME280: return bme280Sensor.runOnce(); - case RadioConfig_UserPreferences_TelemetrySensorType_BME680: + case TelemetrySensorType_BME680: return bme680Sensor.runOnce(); - case RadioConfig_UserPreferences_TelemetrySensorType_MCP9808: + case TelemetrySensorType_MCP9808: return mcp9808Sensor.runOnce(); default: DEBUG_MSG("Environment Telemetry: Invalid sensor type selected; Disabling module"); @@ -97,55 +97,54 @@ int32_t EnvironmentTelemetryModule::runOnce() return (INT32_MAX); } else { // if we somehow got to a second run of this module with measurement disabled, then just wait forever - if (!radioConfig.preferences.telemetry_module_environment_measurement_enabled) + if (!moduleConfig.environment_measurement_enabled) return (INT32_MAX); // this is not the first time OSThread library has called this function // so just do what we intend to do on the interval - if (sensor_read_error_count > radioConfig.preferences.telemetry_module_environment_read_error_count_threshold) { - if (radioConfig.preferences.telemetry_module_environment_recovery_interval > 0) { + if (sensor_read_error_count > moduleConfig.environment_read_error_count_threshold) { + if (moduleConfig.environment_recovery_interval > 0) { DEBUG_MSG("Environment Telemetry: TEMPORARILY DISABLED; The " "telemetry_module_environment_read_error_count_threshold has been exceed: %d. Will retry reads in " "%d seconds\n", - radioConfig.preferences.telemetry_module_environment_read_error_count_threshold, - radioConfig.preferences.telemetry_module_environment_recovery_interval); + moduleConfig.environment_read_error_count_threshold, + moduleConfig.environment_recovery_interval); sensor_read_error_count = 0; - return (radioConfig.preferences.telemetry_module_environment_recovery_interval * 1000); + return (moduleConfig.environment_recovery_interval * 1000); } DEBUG_MSG("Environment Telemetry: DISABLED; The telemetry_module_environment_read_error_count_threshold has " "been exceed: %d. Reads will not be retried until after device reset\n", - radioConfig.preferences.telemetry_module_environment_read_error_count_threshold); + moduleConfig.environment_read_error_count_threshold); return (INT32_MAX); } else if (sensor_read_error_count > 0) { DEBUG_MSG("Environment Telemetry: There have been %d sensor read failures. Will retry %d more times\n", sensor_read_error_count, sensor_read_error_count, sensor_read_error_count, - radioConfig.preferences.telemetry_module_environment_read_error_count_threshold - + moduleConfig.environment_read_error_count_threshold - sensor_read_error_count); } if (!sendOurTelemetry()) { // if we failed to read the sensor, then try again // as soon as we can according to the maximum polling frequency - switch (radioConfig.preferences.telemetry_module_environment_sensor_type) { - case RadioConfig_UserPreferences_TelemetrySensorType_DHT11: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT12: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT21: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT22: + switch (moduleConfig.environment_sensor_type) { + case TelemetrySensorType_DHT11: + case TelemetrySensorType_DHT12: + case TelemetrySensorType_DHT21: + case TelemetrySensorType_DHT22: return (DHT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); - case RadioConfig_UserPreferences_TelemetrySensorType_DS18B20: + case TelemetrySensorType_DS18B20: return (DS18B20_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); - case RadioConfig_UserPreferences_TelemetrySensorType_BME280: - case RadioConfig_UserPreferences_TelemetrySensorType_BME680: + case TelemetrySensorType_BME280: + case TelemetrySensorType_BME680: return (BME_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); - case RadioConfig_UserPreferences_TelemetrySensorType_MCP9808: + case TelemetrySensorType_MCP9808: return (MCP_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); default: return (DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); } } } - // OSThread library. Multiply the preference value by 1000 to convert seconds to miliseconds - return (getPref_telemetry_module_environment_update_interval() * 1000); + return getIntervalOrDefaultMs(moduleConfig.environment_update_interval); #endif } @@ -163,7 +162,7 @@ uint32_t GetTimeSinceMeshPacket(const MeshPacket *mp) bool EnvironmentTelemetryModule::wantUIFrame() { - return radioConfig.preferences.telemetry_module_environment_screen_enabled; + return moduleConfig.environment_screen_enabled; } float EnvironmentTelemetryModule::CelsiusToFahrenheit(float c) @@ -197,7 +196,7 @@ void EnvironmentTelemetryModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiSt display->setFont(FONT_SMALL); String last_temp = String(lastMeasurement.variant.environment_metrics.temperature, 0) + "°C"; - if (radioConfig.preferences.telemetry_module_environment_display_fahrenheit) { + if (moduleConfig.environment_display_fahrenheit) { last_temp = String(CelsiusToFahrenheit(lastMeasurement.variant.environment_metrics.temperature), 0) + "°F"; } display->drawString(x, y += fontHeight(FONT_MEDIUM) - 2, "From: " + String(lastSender) + "(" + String(agoSecs) + "s)"); @@ -243,25 +242,25 @@ bool EnvironmentTelemetryModule::sendOurTelemetry(NodeNum dest, bool wantReplies DEBUG_MSG("-----------------------------------------\n"); DEBUG_MSG("Environment Telemetry: Read data\n"); - switch (radioConfig.preferences.telemetry_module_environment_sensor_type) { - case RadioConfig_UserPreferences_TelemetrySensorType_DS18B20: + switch (moduleConfig.environment_sensor_type) { + case TelemetrySensorType_DS18B20: if (!dallasSensor.getMeasurement(&m)) sensor_read_error_count++; break; - case RadioConfig_UserPreferences_TelemetrySensorType_DHT11: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT12: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT21: - case RadioConfig_UserPreferences_TelemetrySensorType_DHT22: + case TelemetrySensorType_DHT11: + case TelemetrySensorType_DHT12: + case TelemetrySensorType_DHT21: + case TelemetrySensorType_DHT22: if (!dhtSensor.getMeasurement(&m)) sensor_read_error_count++; break; - case RadioConfig_UserPreferences_TelemetrySensorType_BME280: + case TelemetrySensorType_BME280: bme280Sensor.getMeasurement(&m); break; - case RadioConfig_UserPreferences_TelemetrySensorType_BME680: + case TelemetrySensorType_BME680: bme680Sensor.getMeasurement(&m); break; - case RadioConfig_UserPreferences_TelemetrySensorType_MCP9808: + case TelemetrySensorType_MCP9808: mcp9808Sensor.getMeasurement(&m); break; default: diff --git a/src/modules/Telemetry/EnvironmentTelemetry.h b/src/modules/Telemetry/EnvironmentTelemetry.h index c1cdc9994..48360312f 100644 --- a/src/modules/Telemetry/EnvironmentTelemetry.h +++ b/src/modules/Telemetry/EnvironmentTelemetry.h @@ -1,6 +1,7 @@ #pragma once #include "../mesh/generated/telemetry.pb.h" #include "ProtobufModule.h" +#include "NodeDB.h" #include #include @@ -28,6 +29,7 @@ class EnvironmentTelemetryModule : private concurrency::OSThread, public Protobu bool sendOurTelemetry(NodeNum dest = NODENUM_BROADCAST, bool wantReplies = false); private: + Config_ModuleConfig_TelemetryConfig moduleConfig = config.payloadVariant.module_config.payloadVariant.telemetry_config; float CelsiusToFahrenheit(float c); bool firstTime = 1; const MeshPacket *lastMeasurementPacket; diff --git a/src/modules/Telemetry/Sensor/DHTSensor.cpp b/src/modules/Telemetry/Sensor/DHTSensor.cpp index 063adced5..6711c4ce6 100644 --- a/src/modules/Telemetry/Sensor/DHTSensor.cpp +++ b/src/modules/Telemetry/Sensor/DHTSensor.cpp @@ -9,18 +9,18 @@ DHTSensor::DHTSensor() : TelemetrySensor {} { } int32_t DHTSensor::runOnce() { - if (RadioConfig_UserPreferences_TelemetrySensorType_DHT11 || - RadioConfig_UserPreferences_TelemetrySensorType_DHT12) { - dht = new DHT(radioConfig.preferences.telemetry_module_environment_sensor_pin, DHT11); + if (TelemetrySensorType_DHT11 || + TelemetrySensorType_DHT12) { + dht = new DHT(moduleConfig.environment_sensor_pin, DHT11); } else { - dht = new DHT(radioConfig.preferences.telemetry_module_environment_sensor_pin, DHT22); + dht = new DHT(moduleConfig.environment_sensor_pin, DHT22); } dht->begin(); dht->read(); DEBUG_MSG("Telemetry: Opened DHT11/DHT12 on pin: %d\n", - radioConfig.preferences.telemetry_module_environment_sensor_pin); + moduleConfig.environment_sensor_pin); return (DHT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); } diff --git a/src/modules/Telemetry/Sensor/DallasSensor.cpp b/src/modules/Telemetry/Sensor/DallasSensor.cpp index 1be369d79..f549a0af3 100644 --- a/src/modules/Telemetry/Sensor/DallasSensor.cpp +++ b/src/modules/Telemetry/Sensor/DallasSensor.cpp @@ -10,13 +10,13 @@ DallasSensor::DallasSensor() : TelemetrySensor {} { } int32_t DallasSensor::runOnce() { - oneWire = new OneWire(radioConfig.preferences.telemetry_module_environment_sensor_pin); + oneWire = new OneWire(moduleConfig.environment_sensor_pin); ds18b20 = new DS18B20(oneWire); ds18b20->begin(); ds18b20->setResolution(12); ds18b20->requestTemperatures(); DEBUG_MSG("Telemetry: Opened DS18B20 on pin: %d\n", - radioConfig.preferences.telemetry_module_environment_sensor_pin); + moduleConfig.environment_sensor_pin); return (DS18B20_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); } diff --git a/src/modules/Telemetry/Sensor/TelemetrySensor.h b/src/modules/Telemetry/Sensor/TelemetrySensor.h index 327ef8aaa..746a05621 100644 --- a/src/modules/Telemetry/Sensor/TelemetrySensor.h +++ b/src/modules/Telemetry/Sensor/TelemetrySensor.h @@ -1,11 +1,12 @@ #pragma once #include "../mesh/generated/telemetry.pb.h" +#include "NodeDB.h" #define DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS 1000 class TelemetrySensor { protected: TelemetrySensor() { } - + Config_ModuleConfig_TelemetryConfig moduleConfig = config.payloadVariant.module_config.payloadVariant.telemetry_config; public: virtual int32_t runOnce() = 0; virtual bool getMeasurement(Telemetry *measurement) = 0;