From c7628ac07f5d0601047cba6c38b2671ad120ae63 Mon Sep 17 00:00:00 2001 From: proddy Date: Sat, 7 Jan 2023 14:39:30 +0100 Subject: [PATCH] NUM_TAGS is used to check of overflow --- src/emsdevicevalue.cpp | 9 +++++---- src/emsdevicevalue.h | 7 ++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/emsdevicevalue.cpp b/src/emsdevicevalue.cpp index c6ce56bcc..6a24d0522 100644 --- a/src/emsdevicevalue.cpp +++ b/src/emsdevicevalue.cpp @@ -107,9 +107,10 @@ DeviceValue::DeviceValue(uint8_t device_type, // must be an int of 4 bytes, 32bit aligned const char * DeviceValue::DeviceValueUOM_s[] = { - F_(uom_blank), F_(uom_degrees), F_(uom_degrees), F_(uom_percent), F_(uom_lmin), F_(uom_kwh), F_(uom_wh), FL_(hours)[0], FL_(minutes)[0], - F_(uom_ua), F_(uom_bar), F_(uom_kw), F_(uom_w), F_(uom_kb), FL_(seconds)[0], F_(uom_dbm), F_(uom_fahrenheit), F_(uom_mv), - F_(uom_sqm), F_(uom_m3), F_(uom_l), F_(uom_kmin), F_(uom_k), F_(uom_blank) + F_(uom_blank), // 0 + F_(uom_degrees), F_(uom_degrees), F_(uom_percent), F_(uom_lmin), F_(uom_kwh), F_(uom_wh), FL_(hours)[0], FL_(minutes)[0], + F_(uom_ua), F_(uom_bar), F_(uom_kw), F_(uom_w), F_(uom_kb), FL_(seconds)[0], F_(uom_dbm), F_(uom_fahrenheit), + F_(uom_mv), F_(uom_sqm), F_(uom_m3), F_(uom_l), F_(uom_kmin), F_(uom_k), F_(uom_blank) }; @@ -207,7 +208,7 @@ const char * const DeviceValue::DeviceValueTAG_mqtt[] = { }; // count #tags once at compile time -size_t DeviceValue::tag_count = sizeof(DeviceValue::DeviceValueTAG_s) / sizeof(char * const *); +uint8_t DeviceValue::NUM_TAGS = sizeof(DeviceValue::DeviceValueTAG_s) / sizeof(char * const *); // checks whether the device value has an actual value // returns true if its valid diff --git a/src/emsdevicevalue.h b/src/emsdevicevalue.h index 16a2f0788..b5d3e4b87 100644 --- a/src/emsdevicevalue.h +++ b/src/emsdevicevalue.h @@ -178,7 +178,12 @@ class DeviceValue { uint16_t max, uint8_t state); + // has values bool hasValue() const; + bool has_tag() const { + return ((tag < DeviceValue::NUM_TAGS) && (tag != DeviceValue::DeviceValueTAG::TAG_NONE)); + } + bool get_min_max(int16_t & dv_set_min, uint16_t & dv_set_max); void set_custom_minmax(); @@ -204,7 +209,7 @@ class DeviceValue { static const char * DeviceValueUOM_s[]; static const char * const * DeviceValueTAG_s[]; static const char * const DeviceValueTAG_mqtt[]; - static size_t tag_count; // # tags + static uint8_t NUM_TAGS; // # tags }; }; // namespace emsesp