diff --git a/lib/esp8266-oled-ssd1306/SH1106Wire.h b/lib/esp8266-oled-ssd1306/SH1106Wire.h index 25650e8cc..cade45f3a 100644 --- a/lib/esp8266-oled-ssd1306/SH1106Wire.h +++ b/lib/esp8266-oled-ssd1306/SH1106Wire.h @@ -84,7 +84,7 @@ class SH1106Wire : public OLEDDisplay { // If the minBoundY wasn't updated // we can savely assume that buffer_back[pos] == buffer[pos] // holdes true for all values of pos - if (minBoundY == ~0) return; + if (minBoundY == static_cast(~0)) return; // Calculate the colum offset uint8_t minBoundXp2H = (minBoundX + 2) & 0x0F; diff --git a/platformio_special_envs.ini b/platformio_special_envs.ini index d7e191c70..82b1b6664 100644 --- a/platformio_special_envs.ini +++ b/platformio_special_envs.ini @@ -8,7 +8,7 @@ build_type = debug ;check_tool = clangtidy check_tool = pvs-studio check_flags = - pvs-studio: --analysis-mode=4 --errors-off=V532,V586,V795 --lic-file=../pvs_studio.lic + pvs-studio: --analysis-mode=4 --errors-off=V532,V586,V795,V1042 --lic-file=../pvs_studio.lic build_flags = ${compiler_warnings.build_flags} diff --git a/src/_P026_Sysinfo.ino b/src/_P026_Sysinfo.ino index 1a002555c..4d5fa26c1 100644 --- a/src/_P026_Sysinfo.ino +++ b/src/_P026_Sysinfo.ino @@ -253,7 +253,7 @@ float P026_get_value(int type) } case 9: { - value = timePassedSince(lastWeb) / 1000; // respond in seconds + value = timePassedSince(lastWeb) / 1000.0f; // respond in seconds break; } case 10: diff --git a/src/src/Commands/GPIO.cpp b/src/src/Commands/GPIO.cpp index 420fc8a57..a752e33a1 100644 --- a/src/src/Commands/GPIO.cpp +++ b/src/src/Commands/GPIO.cpp @@ -590,6 +590,12 @@ bool getPluginIDAndPrefix(char selection, pluginID_t& pluginID, String& logPrefi } struct range_pattern_helper_data { + range_pattern_helper_data() { + // Make sure the pointer is always set. + logPrefix = F("GPIO"); + } + + const __FlashStringHelper * logPrefix; uint32_t write = 0; uint32_t mask = 0; diff --git a/src/src/ControllerQueue/DelayQueueElements.cpp b/src/src/ControllerQueue/DelayQueueElements.cpp index 0d1b5dfc6..17eec061d 100644 --- a/src/src/ControllerQueue/DelayQueueElements.cpp +++ b/src/src/ControllerQueue/DelayQueueElements.cpp @@ -47,7 +47,7 @@ void exit_mqtt_delay_queue() { \*********************************************************************************************/ #ifdef USES_C001 # define C001_queue_element simple_queue_element_string_only -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 1) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 1) // -V522 #endif // ifdef USES_C001 /*********************************************************************************************\ @@ -55,16 +55,16 @@ DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 1) \*********************************************************************************************/ #ifdef USES_C003 # define C003_queue_element simple_queue_element_string_only -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 3) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 3) // -V522 #endif // ifdef USES_C003 #ifdef USES_C004 -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 4) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 4) // -V522 #endif // ifdef USES_C004 #ifdef USES_C007 # define C007_queue_element queue_element_formatted_uservar -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 7) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 7) // -V522 #endif // ifdef USES_C007 @@ -75,12 +75,12 @@ DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 7) \*********************************************************************************************/ #ifdef USES_C008 # define C008_queue_element queue_element_single_value_base -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 8) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 8) // -V522 #endif // ifdef USES_C008 #ifdef USES_C009 # define C009_queue_element queue_element_formatted_uservar -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 9) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 9) // -V522 #endif // ifdef USES_C009 @@ -90,7 +90,7 @@ DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(00, 9) \*********************************************************************************************/ #ifdef USES_C010 # define C010_queue_element queue_element_single_value_base -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 10) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 10) // -V522 #endif // ifdef USES_C010 @@ -99,7 +99,7 @@ DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 10) * C011_queue_element for queueing requests for 011: Generic HTTP Advanced \*********************************************************************************************/ #ifdef USES_C011 -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 11) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 11) // -V522 #endif // ifdef USES_C011 @@ -109,81 +109,81 @@ DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 11) \*********************************************************************************************/ #ifdef USES_C012 # define C012_queue_element queue_element_single_value_base -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 12) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP( 0, 12) // -V522 #endif // ifdef USES_C012 /* #ifdef USES_C013 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 13) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 13) // -V522 #endif */ /* #ifdef USES_C014 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 14) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 14) // -V522 #endif */ #ifdef USES_C015 -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 15) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 15) // -V522 #endif // ifdef USES_C015 #ifdef USES_C016 -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 16) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 16) // -V522 #endif // ifdef USES_C016 #ifdef USES_C017 -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 17) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 17) // -V522 #endif // ifdef USES_C017 #ifdef USES_C018 -DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 18) +DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 18) // -V522 #endif // ifdef USES_C018 /* #ifdef USES_C019 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 19) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 19) // -V522 #endif */ /* #ifdef USES_C020 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 20) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 20) // -V522 #endif */ /* #ifdef USES_C021 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 21) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 21) // -V522 #endif */ /* #ifdef USES_C022 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 22) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 22) // -V522 #endif */ /* #ifdef USES_C023 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 23) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 23) // -V522 #endif */ /* #ifdef USES_C024 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 24) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 24) // -V522 #endif */ /* #ifdef USES_C025 - DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 25) + DEFINE_Cxxx_DELAY_QUEUE_MACRO_CPP(0, 25) // -V522 #endif */ diff --git a/src/src/DataStructs/ControllerSettingsStruct.h b/src/src/DataStructs/ControllerSettingsStruct.h index 0de00ffd8..9f945d48b 100644 --- a/src/src/DataStructs/ControllerSettingsStruct.h +++ b/src/src/DataStructs/ControllerSettingsStruct.h @@ -8,13 +8,13 @@ #include // For std::shared_ptr #include // for std::nothrow +#include +#include +#include + #include "../../ESPEasy_common.h" #include "../Globals/Plugins.h" -class IPAddress; -class WiFiClient; -class WiFiUDP; - // Minimum delay between messages for a controller to send in msec. #ifndef CONTROLLER_DELAY_QUEUE_DELAY_MAX # define CONTROLLER_DELAY_QUEUE_DELAY_MAX 3600000 diff --git a/src/src/DataStructs/DeviceStruct.h b/src/src/DataStructs/DeviceStruct.h index 579701a07..3df6b0224 100644 --- a/src/src/DataStructs/DeviceStruct.h +++ b/src/src/DataStructs/DeviceStruct.h @@ -77,11 +77,11 @@ struct DeviceStruct bool isCustom() const; - uint8_t Number; // Plugin ID number. (PLUGIN_ID_xxx) - uint8_t Type; // How the device is connected. e.g. DEVICE_TYPE_SINGLE => connected through 1 datapin + uint8_t Number; // Plugin ID number. (PLUGIN_ID_xxx) + uint8_t Type; // How the device is connected. e.g. DEVICE_TYPE_SINGLE => connected through 1 datapin Sensor_VType VType; // Type of value the plugin will return. e.g. SENSOR_TYPE_STRING - uint8_t Ports; // Port to use when device has multiple I/O pins (N.B. not used much) - uint8_t ValueCount; // The number of output values of a plugin. The value should match the number of keys PLUGIN_VALUENAME1_xxx + uint8_t Ports; // Port to use when device has multiple I/O pins (N.B. not used much) + uint8_t ValueCount; // The number of output values of a plugin. The value should match the number of keys PLUGIN_VALUENAME1_xxx Output_Data_type_t OutputDataType; // Subset of selectable output data types (Default = no selection) bool PullUpOption : 1; // Allow to set internal pull-up resistors. diff --git a/src/src/DataStructs/Modbus.cpp b/src/src/DataStructs/Modbus.cpp index ca505da59..e49b4d57b 100644 --- a/src/src/DataStructs/Modbus.cpp +++ b/src/src/DataStructs/Modbus.cpp @@ -142,6 +142,7 @@ bool Modbus::handle() { errcnt++; TXRXstate = MODBUS_IDLE; } + // FIXME TD-er: Missing break? case MODBUS_RECEIVE_PAYLOAD: diff --git a/src/src/DataStructs/Modbus.h b/src/src/DataStructs/Modbus.h index af5757da6..b8ef4ebfd 100644 --- a/src/src/DataStructs/Modbus.h +++ b/src/src/DataStructs/Modbus.h @@ -56,26 +56,26 @@ public: private: - WiFiClient *ModbusClient; // pointer to tcp client - unsigned int errcnt; + WiFiClient *ModbusClient = nullptr; // pointer to tcp client + unsigned int errcnt = 0; char sendBuffer[12] = { 0, 1, 0, 0, 0, 6, 0x7e, 4, 0x9d, 7, 0, 1 }; #ifndef BUILD_NO_DEBUG String LogString; // for debug logging #endif - unsigned long timeout; // send and read timeout - MODBUS_states_t TXRXstate; // state for handle() state machine - unsigned int RXavailable; - unsigned int payLoad; // number of bytes to receive as payload. Payload may come as seperate frame. + unsigned long timeout = 0; // send and read timeout + MODBUS_states_t TXRXstate = MODBUS_IDLE; // state for handle() state machine + unsigned int RXavailable = 0; + unsigned int payLoad = 0; // number of bytes to receive as payload. Payload may come as seperate frame. bool hasTimeout(); - MODBUS_registerTypes_t incomingValue; // how to interpret the incoming value - double result; // incoming value, converted to double - bool resultReceived; // incoming value is valid ? + MODBUS_registerTypes_t incomingValue = signed16; // how to interpret the incoming value + double result = 0.0; // incoming value, converted to double + bool resultReceived = false; // incoming value is valid ? bool isBusy(void) { return TXRXstate != MODBUS_IDLE; } - uint16_t currentRegister; - uint8_t currentFunction; + uint16_t currentRegister = 0; + uint8_t currentFunction = 0; }; diff --git a/src/src/DataStructs/SettingsStruct.h b/src/src/DataStructs/SettingsStruct.h index caeb8dcef..c4f47deea 100644 --- a/src/src/DataStructs/SettingsStruct.h +++ b/src/src/DataStructs/SettingsStruct.h @@ -3,6 +3,7 @@ #define DATASTRUCTS_SETTINGSSTRUCT_H #include "../CustomBuild/ESPEasyLimits.h" +#include "../DataStructs/DeviceStruct.h" #include "../DataTypes/EthernetParameters.h" #include "../DataTypes/NetworkMedium.h" #include "../DataTypes/TimeSource.h" @@ -52,7 +53,7 @@ class SettingsStruct_tmpl { public: - SettingsStruct_tmpl(); + SettingsStruct_tmpl(); //-V730 // VariousBits1 defaults to 0, keep in mind when adding bit lookups. bool appendUnitToHostname() const; @@ -219,52 +220,52 @@ class SettingsStruct_tmpl void setWiFi_TX_power(float dBm); - unsigned long PID; - int Version; - int16_t Build; - uint8_t IP[4]; - uint8_t Gateway[4]; - uint8_t Subnet[4]; - uint8_t DNS[4]; - uint8_t IP_Octet; - uint8_t Unit; - char Name[26]; - char NTPHost[64]; + unsigned long PID = 0; + int Version = 0; + int16_t Build = 0; + uint8_t IP[4] = {0}; + uint8_t Gateway[4] = {0}; + uint8_t Subnet[4] = {0}; + uint8_t DNS[4] = {0}; + uint8_t IP_Octet = 0; + uint8_t Unit = 0; + char Name[26] = {0}; + char NTPHost[64] = {0}; // FIXME TD-er: Issue #2690 - unsigned long Delay; // Sleep time in seconds - int8_t Pin_i2c_sda; - int8_t Pin_i2c_scl; - int8_t Pin_status_led; - int8_t Pin_sd_cs; - int8_t PinBootStates[17]; // Only use getPinBootState and setPinBootState as multiple pins are packed for ESP32 - uint8_t Syslog_IP[4]; - unsigned int UDPPort; - uint8_t SyslogLevel; - uint8_t SerialLogLevel; - uint8_t WebLogLevel; - uint8_t SDLogLevel; - unsigned long BaudRate; - unsigned long MessageDelay_unused; // MQTT settings now moved to the controller settings. - uint8_t deepSleep_wakeTime; // 0 = Sleep Disabled, else time awake from sleep in seconds - boolean CustomCSS; - boolean DST; - uint8_t WDI2CAddress; - boolean UseRules; - boolean UseSerial; - boolean UseSSDP; - uint8_t ExternalTimeSource; - unsigned long WireClockStretchLimit; - boolean GlobalSync; - unsigned long ConnectionFailuresThreshold; - int16_t TimeZone; - boolean MQTTRetainFlag_unused; - uint8_t InitSPI; //0 = disabled, 1= enabled but for ESP32 there is option 2= SPI2 9 = User defined, see src/src/WebServer/HardwarePage.h enum SPI_Options_e + unsigned long Delay = 0; // Sleep time in seconds + int8_t Pin_i2c_sda = -1; + int8_t Pin_i2c_scl = -1; + int8_t Pin_status_led = -1; + int8_t Pin_sd_cs = -1; + int8_t PinBootStates[17] = {0}; // Only use getPinBootState and setPinBootState as multiple pins are packed for ESP32 + uint8_t Syslog_IP[4] = {0}; + unsigned int UDPPort = 8266; + uint8_t SyslogLevel = 0; + uint8_t SerialLogLevel = 0; + uint8_t WebLogLevel = 0; + uint8_t SDLogLevel = 0; + unsigned long BaudRate = 115200; + unsigned long MessageDelay_unused = 0; // MQTT settings now moved to the controller settings. + uint8_t deepSleep_wakeTime = 0; // 0 = Sleep Disabled, else time awake from sleep in seconds + boolean CustomCSS = false; + boolean DST = false; + uint8_t WDI2CAddress = 0; + boolean UseRules = false; + boolean UseSerial = false; + boolean UseSSDP = false; + uint8_t ExternalTimeSource = 0; + unsigned long WireClockStretchLimit = 0; + boolean GlobalSync = false; + unsigned long ConnectionFailuresThreshold = 0; + int16_t TimeZone = 0; + boolean MQTTRetainFlag_unused = false; + uint8_t InitSPI = 0; //0 = disabled, 1= enabled but for ESP32 there is option 2= SPI2 9 = User defined, see src/src/WebServer/HardwarePage.h enum SPI_Options_e // FIXME TD-er: Must change to cpluginID_t, but then also another check must be added since changing the pluginID_t will also render settings incompatible - uint8_t Protocol[CONTROLLER_MAX]; - uint8_t Notification[NOTIFICATION_MAX]; //notifications, point to a NPLUGIN id + uint8_t Protocol[CONTROLLER_MAX] = {0}; + uint8_t Notification[NOTIFICATION_MAX] = {0}; //notifications, point to a NPLUGIN id // FIXME TD-er: Must change to pluginID_t, but then also another check must be added since changing the pluginID_t will also render settings incompatible - uint8_t TaskDeviceNumber[N_TASKS]; // The "plugin number" set at as task (e.g. 4 for P004_dallas) - unsigned int OLD_TaskDeviceID[N_TASKS]; //UNUSED: this can be removed + uint8_t TaskDeviceNumber[N_TASKS] = {0}; // The "plugin number" set at as task (e.g. 4 for P004_dallas) + unsigned int OLD_TaskDeviceID[N_TASKS] = {0}; //UNUSED: this can be removed union { struct { int8_t TaskDevicePin1[N_TASKS]; @@ -274,68 +275,68 @@ class SettingsStruct_tmpl }; int8_t TaskDevicePin[4][N_TASKS]; }; - boolean TaskDevicePin1PullUp[N_TASKS]; + boolean TaskDevicePin1PullUp[N_TASKS] = {0}; int16_t TaskDevicePluginConfig[N_TASKS][PLUGIN_CONFIGVAR_MAX]; - boolean TaskDevicePin1Inversed[N_TASKS]; + boolean TaskDevicePin1Inversed[N_TASKS] = {0}; float TaskDevicePluginConfigFloat[N_TASKS][PLUGIN_CONFIGFLOATVAR_MAX]; long TaskDevicePluginConfigLong[N_TASKS][PLUGIN_CONFIGLONGVAR_MAX]; - uint8_t TaskDeviceSendDataFlags[N_TASKS]; - uint8_t OLD_TaskDeviceGlobalSync[N_TASKS]; - uint8_t TaskDeviceDataFeed[N_TASKS]; // When set to 0, only read local connected sensorsfeeds - unsigned long TaskDeviceTimer[N_TASKS]; - boolean TaskDeviceEnabled[N_TASKS]; - boolean ControllerEnabled[CONTROLLER_MAX]; - boolean NotificationEnabled[NOTIFICATION_MAX]; + uint8_t TaskDeviceSendDataFlags[N_TASKS] = {0}; + uint8_t OLD_TaskDeviceGlobalSync[N_TASKS] = {0}; + uint8_t TaskDeviceDataFeed[N_TASKS] = {0}; // When set to 0, only read local connected sensorsfeeds + unsigned long TaskDeviceTimer[N_TASKS] = {0}; + boolean TaskDeviceEnabled[N_TASKS] = {0}; + boolean ControllerEnabled[CONTROLLER_MAX] = {0}; + boolean NotificationEnabled[NOTIFICATION_MAX] = {0}; unsigned int TaskDeviceID[CONTROLLER_MAX][N_TASKS]; // IDX number (mainly used by Domoticz) boolean TaskDeviceSendData[CONTROLLER_MAX][N_TASKS]; - boolean Pin_status_led_Inversed; - boolean deepSleepOnFail; - boolean UseValueLogger; - boolean ArduinoOTAEnable; - uint16_t DST_Start; - uint16_t DST_End; - boolean UseRTOSMultitasking; - int8_t Pin_Reset; - uint8_t SyslogFacility; - uint32_t StructSize; // Forced to be 32 bit, to make sure alignment is clear. - boolean MQTTUseUnitNameAsClientId_unused; + boolean Pin_status_led_Inversed = false; + boolean deepSleepOnFail = false; + boolean UseValueLogger = false; + boolean ArduinoOTAEnable = false; + uint16_t DST_Start = 0; + uint16_t DST_End = 0; + boolean UseRTOSMultitasking = false; + int8_t Pin_Reset = -1; + uint8_t SyslogFacility = 0; + uint32_t StructSize = 0; // Forced to be 32 bit, to make sure alignment is clear. + boolean MQTTUseUnitNameAsClientId_unused = false; //its safe to extend this struct, up to several bytes, default values in config are 0 //look in misc.ino how config.dat is used because also other stuff is stored in it at different offsets. //TODO: document config.dat somewhere here - float Latitude; - float Longitude; - uint32_t VariousBits1; - uint32_t ResetFactoryDefaultPreference; // Do not clear this one in the clearAll() - uint32_t I2C_clockSpeed; - uint16_t WebserverPort; - uint16_t SyslogPort; + float Latitude = 0.0f; + float Longitude = 0.0f; + uint32_t VariousBits1 = 0; + uint32_t ResetFactoryDefaultPreference = 0; // Do not clear this one in the clearAll() + uint32_t I2C_clockSpeed = 400000; + uint16_t WebserverPort = 80; + uint16_t SyslogPort = 0; // FIXME @TD-er: As discussed in #1292, the CRC for the settings is now disabled. // make sure crc is the last value in the struct // Try to extend settings to make the checksum 4-uint8_t aligned. // uint8_t ProgmemMd5[16]; // crc of the binary that last saved the struct to file. // uint8_t md5[16]; - int8_t ETH_Phy_Addr; - int8_t ETH_Pin_mdc; - int8_t ETH_Pin_mdio; - int8_t ETH_Pin_power; - EthPhyType_t ETH_Phy_Type; - EthClockMode_t ETH_Clock_Mode; - uint8_t ETH_IP[4]; - uint8_t ETH_Gateway[4]; - uint8_t ETH_Subnet[4]; - uint8_t ETH_DNS[4]; - NetworkMedium_t NetworkMedium; - int8_t I2C_Multiplexer_Type; - int8_t I2C_Multiplexer_Addr; + int8_t ETH_Phy_Addr = -1; + int8_t ETH_Pin_mdc = -1; + int8_t ETH_Pin_mdio = -1; + int8_t ETH_Pin_power = -1; + EthPhyType_t ETH_Phy_Type = EthPhyType_t::LAN8710; + EthClockMode_t ETH_Clock_Mode = EthClockMode_t::Ext_crystal_osc; + uint8_t ETH_IP[4] = {0}; + uint8_t ETH_Gateway[4] = {0}; + uint8_t ETH_Subnet[4] = {0}; + uint8_t ETH_DNS[4] = {0}; + NetworkMedium_t NetworkMedium = NetworkMedium_t::WIFI; + int8_t I2C_Multiplexer_Type = I2C_MULTIPLEXER_NONE; + int8_t I2C_Multiplexer_Addr = -1; int8_t I2C_Multiplexer_Channel[N_TASKS]; - uint8_t I2C_Flags[N_TASKS]; - uint32_t I2C_clockSpeed_Slow; - uint8_t I2C_Multiplexer_ResetPin; + uint8_t I2C_Flags[N_TASKS] = {0}; + uint32_t I2C_clockSpeed_Slow = 100000; + int8_t I2C_Multiplexer_ResetPin = -1; #ifdef ESP32 - int8_t PinBootStates_ESP32[24]; // pins 17 ... 39 + int8_t PinBootStates_ESP32[24] = {0}; // pins 17 ... 39 #endif uint8_t WiFi_TX_power = 70; // 70 = 17.5dBm. unit: 0.25 dBm int8_t WiFi_sensitivity_margin = 3; // Margin in dBm on top of sensitivity. diff --git a/src/src/Globals/NPlugins.cpp b/src/src/Globals/NPlugins.cpp index f14b19a78..14d166aaf 100644 --- a/src/src/Globals/NPlugins.cpp +++ b/src/src/Globals/NPlugins.cpp @@ -12,7 +12,7 @@ nprotocolIndex_t INVALID_NPROTOCOL_INDEX = NPLUGIN_MAX; bool (*NPlugin_ptr[NPLUGIN_MAX])(NPlugin::Function, struct EventStruct *, String&); -npluginID_t NPlugin_id[NPLUGIN_MAX] = { INVALID_N_PLUGIN_ID }; +npluginID_t NPlugin_id[NPLUGIN_MAX]; NotificationStruct Notification[NPLUGIN_MAX]; diff --git a/src/src/Helpers/ESPEasy_time_calc.h b/src/src/Helpers/ESPEasy_time_calc.h index 8cc9e9bd3..1b2eb714e 100644 --- a/src/src/Helpers/ESPEasy_time_calc.h +++ b/src/src/Helpers/ESPEasy_time_calc.h @@ -43,7 +43,7 @@ inline int64_t usecPassedSince(const uint64_t& timestamp) { return timeDiff64(timestamp, getMicros64()); } -inline int64_t usecPassedSince(uint64_t& timestamp) { +inline int64_t usecPassedSince(uint64_t& timestamp) { //-V669 return timeDiff64(timestamp, getMicros64()); } diff --git a/src/src/Helpers/Hardware.cpp b/src/src/Helpers/Hardware.cpp index 073bba42d..fc252bfd3 100644 --- a/src/src/Helpers/Hardware.cpp +++ b/src/src/Helpers/Hardware.cpp @@ -900,10 +900,10 @@ uint32_t HwRandom() { uint32_t result = 0; do { ccount = ESP.getCycleCount(); - result ^= *(volatile uint32_t *)_RAND_ADDR; + result ^= *(volatile uint32_t *)_RAND_ADDR; // -V566 } while (ccount - last_ccount < 64); last_ccount = ccount; - return result ^ *(volatile uint32_t *)_RAND_ADDR; + return result ^ *(volatile uint32_t *)_RAND_ADDR; // -V566 #undef _RAND_ADDR } diff --git a/src/src/Helpers/_CPlugin_Helper.h b/src/src/Helpers/_CPlugin_Helper.h index 5c5f107f7..a4585dab4 100644 --- a/src/src/Helpers/_CPlugin_Helper.h +++ b/src/src/Helpers/_CPlugin_Helper.h @@ -2,12 +2,15 @@ #define CPLUGIN_HELPER_H #include +#include +#include #include "../../ESPEasy_common.h" #include "../../_Plugin_Helper.h" #include "../ControllerQueue/DelayQueueElements.h" // Also forward declaring the do_process_cNNN_delay_queue +#include "../DataStructs/ControllerSettingsStruct.h" #include "../ESPEasyCore/Controller.h" #include "../ESPEasyCore/ESPEasyNetwork.h" #include "../Globals/CPlugins.h" @@ -21,9 +24,6 @@ #include "../Helpers/_CPlugin_Helper_webform.h" -struct ControllerSettingsStruct; -class WiFiUDP; -class WiFiClient; /*********************************************************************************************\ * Helper functions used in a number of controllers diff --git a/src/src/Helpers/_NPlugin_init.cpp b/src/src/Helpers/_NPlugin_init.cpp index b39c68149..df75bf0a5 100644 --- a/src/src/Helpers/_NPlugin_init.cpp +++ b/src/src/Helpers/_NPlugin_init.cpp @@ -33,7 +33,8 @@ void NPluginInit() // Clear pointer table for all plugins for (x = 0; x < NPLUGIN_MAX; x++) { - NPlugin_ptr[x] = nullptr; + NPlugin_ptr[x] = nullptr; + NPlugin_id[x] = INVALID_N_PLUGIN_ID; // ProtocolIndex_to_NPlugin_id[x] = INVALID_N_PLUGIN_ID; // Do not initialize NPlugin_id_to_ProtocolIndex[x] to an invalid value. (it is map) } diff --git a/src/src/Static/WebStaticData.cpp b/src/src/Static/WebStaticData.cpp index 2347c8fa9..e8fa1e40a 100644 --- a/src/src/Static/WebStaticData.cpp +++ b/src/src/Static/WebStaticData.cpp @@ -77,6 +77,12 @@ void serve_JS(JSfiles_e JSfile) { { #ifndef WEBSERVER_INCLUDE_JS url = generate_external_URL(url); + addHtml(F("'); + html_add_script_end(); + return; #else html_add_script(true); switch (JSfile) { @@ -114,12 +120,6 @@ void serve_JS(JSfiles_e JSfile) { html_add_script_end(); return; #endif - addHtml(F("'); - html_add_script_end(); - return; } // Now stream the file directly from the file system. html_add_script(false);