diff --git a/src/containers.h b/src/containers.h
deleted file mode 100644
index 072f1f1ce..000000000
--- a/src/containers.h
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * EMS-ESP - https://github.com/proddy/EMS-ESP
- * Copyright 2020 Paul Derbyshire
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-/*
- * Lightweight queue & array
- * Based ideas from https://github.com/muwerk/ustd
- * Limits to max 255 entries
- * Was used in testing with ESP8266 to overcome heap memory issues - no longer used
- */
-
-#ifndef EMSESP_CONTAINERS_H
-#define EMSESP_CONTAINERS_H
-
-#include
-
-#if defined EMSESP_ASSERT
-#include
-#endif
-
-namespace emsesp {
-
-template
-class queueIterator {
- public:
- queueIterator(T * values_ptr, uint8_t p)
- : values_ptr_{values_ptr}
- , position_{p} {
- }
-
- bool operator!=(const queueIterator & other) const {
- return !(*this == other);
- }
-
- bool operator==(const queueIterator & other) const {
- return position_ == other.position_;
- }
-
- queueIterator & operator++() {
- ++position_;
- return *this;
- }
-
- T & operator*() const {
- return *(values_ptr_ + position_);
- }
-
- private:
- T * values_ptr_;
- uint8_t position_;
-};
-
-template
-class queue {
- private:
- T * que_;
- uint8_t peakSize_;
- uint8_t maxSize_;
- uint8_t size_;
- uint8_t quePtrFront_; // back
- uint8_t quePtrBack_; // front
- T bad_;
-
- public:
- // Constructs a queue object with the maximum number of pointer entries
- queue(uint8_t maxQueueSize)
- : maxSize_(maxQueueSize) {
- memset(&bad_, 0, sizeof(bad_));
- quePtrFront_ = 0;
- quePtrBack_ = 0;
- size_ = 0;
- peakSize_ = 0;
- que_ = (T *)malloc(sizeof(T) * maxSize_);
- if (que_ == nullptr)
- maxSize_ = 0;
- }
-
- // Deallocate the queue structure
- ~queue() {
- if (que_ != nullptr) {
- free(que_);
- que_ = nullptr;
- }
- }
-
- // Push a new entry into the queue.
- // true on success, false if queue is full, then the element is relaced with the front one
- bool push(T ent) {
- // Serial.print("quePtrFront_: ");
- // Serial.print(quePtrFront_);
- // Serial.print(" quePtrBack_: ");
- // Serial.print(quePtrBack_);
- // Serial.println();
- if (size_ >= maxSize_) {
- // que_[quePtrFront_] = ent;
- return false;
- }
- que_[quePtrBack_] = ent;
- quePtrBack_ = (quePtrBack_ + 1) % maxSize_;
- ++size_;
- if (size_ > peakSize_) {
- peakSize_ = size_;
- }
- return true;
- }
-
- bool push_back(T ent) {
- return push(ent);
- }
-
- // Push a new entry into the front of queue, moving the rest down
- // true on success, false if queue is full
- // there are no good checks for overflow
- bool push_front(T ent) {
- if (size_ >= maxSize_) {
- return false;
- }
- // Serial.print("quePtrFront_: ");
- // Serial.print(quePtrFront_);
- // Serial.print(" quePtrBack_: ");
- // Serial.print(quePtrBack_);
- // Serial.println();
-
- for (uint8_t i = 0; i <= size_; i++) {
- que_[quePtrBack_ - i + 1] = que_[quePtrBack_ - i]; // move the rest up 1
- }
- que_[quePtrFront_] = ent; // add the new one
- quePtrBack_ = (quePtrBack_ + 1) % maxSize_;
- ++size_;
- if (size_ > peakSize_) {
- peakSize_ = size_;
- }
- return true;
- }
-
- T & operator[](uint8_t i) {
- return que_[i + quePtrFront_];
- }
-
- // Pop the oldest entry from the queue
- T pop() {
- if (size_ == 0)
- return bad_;
- T ent = que_[quePtrFront_];
- quePtrFront_ = (quePtrFront_ + 1) % maxSize_;
- --size_;
- return ent;
- }
-
- // alias pop_front to keep backwards compatibility with std::list/queue
- T pop_front() {
- return pop();
- }
-
- T front() {
- return que_[quePtrFront_];
- }
-
- uint8_t front_i() {
- return quePtrFront_;
- }
-
- T * front_p() {
- return &que_[quePtrFront_];
- }
-
- T back() {
- return que_[quePtrBack_];
- }
-
- // Set the value for entry that's given back, if read from an empty
- // queue is requested. By default, an entry all memset to zero is given
- // back. Using this function, the value of an invalid read can be configured
- void setInvalidValue(T & entryInvalidValue) {
- bad_ = entryInvalidValue;
- }
-
- // returns true: queue empty, false: not empty
- bool empty() {
- if (size_ == 0)
- return true;
- else
- return false;
- }
-
- // returns number of entries in the queue
- uint8_t size() {
- return (size_);
- }
-
- // max number of queue entries that have been in the queue
- uint8_t peak() {
- return (peakSize_);
- }
-
- // iterators
- queueIterator begin() {
- return queueIterator(que_, quePtrFront_);
- }
- queueIterator end() {
- return queueIterator(que_, quePtrFront_ + size_);
- }
-
- queueIterator begin() const {
- return queueIterator(que_, quePtrFront_);
- }
-
- queueIterator end() const {
- return queueIterator(que_, quePtrFront_ + size_);
- }
-};
-
-
-template
-class arrayIterator {
- public:
- arrayIterator(T * values_ptr)
- : values_ptr_{values_ptr}
- , position_{0} {
- }
-
- arrayIterator(T * values_ptr, size_t size_)
- : values_ptr_{values_ptr}
- , position_{size_} {
- }
-
- bool operator!=(const arrayIterator & other) const {
- return !(*this == other);
- }
-
- bool operator==(const arrayIterator & other) const {
- return position_ == other.position_;
- }
-
- arrayIterator & operator++() {
- ++position_;
- return *this;
- }
-
- T & operator*() const {
- return *(values_ptr_ + position_);
- }
-
- private:
- T * values_ptr_;
- size_t position_;
-};
-
-#define ARRAY_INIT_SIZE 16
-#define ARRAY_MAX_SIZE 255 // fixed for uint8_t
-#define ARRAY_INC_SIZE 16
-
-template
-class array {
- private:
- T * arr_;
- uint8_t startSize_;
- uint8_t maxSize_;
- uint8_t incSize_ = ARRAY_INC_SIZE;
- uint8_t allocSize_;
- uint8_t size_;
- T bad_;
-
- public:
- // Constructs an array object. All allocation-hints are optional, the
- // array class will allocate memory as needed during writes, if
- // startSize_!=maxSize_.
- // @param startSize_ The number of array entries that are allocated
- // during object creation
- // @param maxSize_ The maximal limit of records that will be allocated.
- // If startSize_ < maxSize_, the array size_ will grow automatically as
- // needed.
- // @param incSize_ The number of array entries that are allocated as a
- // chunk if the array needs to grow
- array(uint8_t startSize_ = ARRAY_INIT_SIZE, uint8_t maxSize_ = ARRAY_MAX_SIZE, uint8_t incSize_ = ARRAY_INC_SIZE)
- : startSize_(startSize_)
- , maxSize_(maxSize_)
- , incSize_(incSize_) {
- size_ = 0;
- memset(&bad_, 0, sizeof(bad_));
- if (maxSize_ < startSize_)
- maxSize_ = startSize_;
- allocSize_ = startSize_;
- arr_ = new T[allocSize_];
- }
-
- ~array() {
- /*! Free resources */
- if (arr_ != nullptr) {
- delete[] arr_;
- arr_ = nullptr;
- }
- }
-
- // Change the array allocation size_. the new number of array entries, corresponding memory is allocated/free'd as necessary.
- bool resize(uint8_t newSize) {
- uint8_t mv = newSize;
- if (newSize > maxSize_) {
- if (maxSize_ == allocSize_)
- return false;
- else
- newSize = maxSize_;
- }
- if (newSize <= allocSize_)
- return true;
- T * arrn = new T[newSize];
- if (arrn == nullptr)
- return false;
- for (uint8_t i = 0; i < mv; i++) {
- arrn[i] = arr_[i];
- }
- delete[] arr_;
- arr_ = arrn;
- allocSize_ = newSize;
- return true;
- }
-
- // Set the value for entry that's given back,
- // if read of an invalid index is requested.
- // By default, an entry all memset to zero is given
- // back. Using this function, the value of an invalid read can be configured.
- // returns the value that is given back in case an invalid operation (e.g. read out of bounds) is tried
- void setInvalidValue(T & entryInvalidValue) {
- bad_ = entryInvalidValue;
- }
-
- // Append an array element after the current end of the array
- // takes entry array element that is appended after the last current
- // entry. The new array size_ must be smaller than maxSize_ as defined
- // during array creation. New array memory is automatically allocated if
- // within maxSize_ boundaries
- int push(T & entry) {
- if (size_ >= allocSize_) {
- if (incSize_ == 0)
- return -1;
- if (!resize(allocSize_ + incSize_))
- return -1;
- }
- arr_[size_] = entry;
- ++size_;
- return size_ - 1;
- }
-
- // Assign content of array element at i for const's
- T operator[](uint8_t i) const {
- if (i >= allocSize_) {
- if (incSize_ == 0) {
-#ifdef EMSESP_ASSERT
- assert(i < allocSize_);
-#endif
- }
- if (!resize(allocSize_ + incSize_)) {
-#ifdef EMSESP_ASSERT
- assert(i < allocSize_);
-#endif
- }
- }
- if (i >= size_ && i <= allocSize_)
- size_ = i + 1;
- if (i >= allocSize_) {
- return bad_;
- }
- return arr_[i];
- }
-
- // Assign content of array element at i
- T & operator[](uint8_t i) {
- if (i >= allocSize_) {
- if (incSize_ == 0) {
-#ifdef EMSESP_ASSERT
- assert(i < allocSize_);
-#endif
- }
- if (!resize(allocSize_ + incSize_)) {
-#ifdef EMSESP_ASSERT
- assert(i < allocSize_);
-#endif
- }
- }
- if (i >= size_ && i <= allocSize_)
- size_ = i + 1;
- if (i >= allocSize_) {
- return bad_;
- }
- return arr_[i];
- }
-
- // true if array empty, false otherwise
- bool empty() const {
- if (size_ == 0)
- return true;
- else
- return false;
- }
-
- // return number of array elements
- uint8_t size() const {
- return (size_);
- }
-
- // returns number of allocated entries which can be larger than the length of the array
- uint8_t alloclen() const {
- return (allocSize_);
- }
-
- // emplace
- // template
- // void emplace1(Args... args) {
- // add(args...);
- // };
- // template
- // void emplace(Args &&... args) {
- // add(T(std::forward(args)...));
- // }
-
- // iterators
- arrayIterator begin() {
- return arrayIterator(arr_);
- }
- arrayIterator end() {
- return arrayIterator(arr_, size_);
- }
-
- arrayIterator begin() const {
- return arrayIterator(arr_);
- }
-
- arrayIterator end() const {
- return arrayIterator(arr_, size_);
- }
-};
-
-} // namespace emsesp
-
-#endif
diff --git a/src/emsdevice.h b/src/emsdevice.h
index 33096f2b8..069ecd21b 100644
--- a/src/emsdevice.h
+++ b/src/emsdevice.h
@@ -23,7 +23,6 @@
#include
#include
-// #include "containers.h"
#include "emsfactory.h"
#include "telegram.h"
#include "mqtt.h"
@@ -218,7 +217,6 @@ class EMSdevice {
void show_mqtt_handlers(uuid::console::Shell & shell);
using process_function_p = std::function)>;
- // using process_function_p = void (*)(std::shared_ptr);
void register_telegram_type(const uint16_t telegram_type_id, const __FlashStringHelper * telegram_type_name, bool fetch, process_function_p cb);
bool handle_telegram(std::shared_ptr telegram);
@@ -315,14 +313,10 @@ class EMSdevice {
void reserve_device_values(uint8_t elements) {
devicevalues_.reserve(elements);
- // static auto dv_ = emsesp::array(elements, 255, 16);
- // devicevalues_ = &dv_;
}
void reserve_telgram_functions(uint8_t elements) {
telegram_functions_.reserve(elements);
- // static auto tf_ = emsesp::array(elements, 255, 16);
- // telegram_functions_ = &tf_;
}
private:
@@ -351,7 +345,6 @@ class EMSdevice {
, process_function_(process_function) {
}
};
- // emsesp::array * telegram_functions_; // each EMS device has its own set of registered telegram types
struct DeviceValue {
uint8_t device_type; // EMSdevice::DeviceType
@@ -392,7 +385,6 @@ class EMSdevice {
std::vector telegram_functions_; // each EMS device has its own set of registered telegram types
- // emsesp::array * devicevalues_;
std::vector devicevalues_;
};
diff --git a/src/system.cpp b/src/system.cpp
index acc7ef337..83427124d 100644
--- a/src/system.cpp
+++ b/src/system.cpp
@@ -97,7 +97,9 @@ void System::restart() {
LOG_INFO(F("Restarting system..."));
Shell::loop_all();
delay(1000); // wait a second
+#ifndef EMSESP_STANDALONE
ESP.restart();
+#endif
}
// saves all settings
@@ -118,7 +120,9 @@ void System::format(uuid::console::Shell & shell) {
EMSuart::stop();
+#ifndef EMSESP_STANDALONE
LITTLEFS.format();
+#endif
System::restart();
}
@@ -344,10 +348,12 @@ void System::loop() {
}
void System::show_mem(const char * note) {
+#ifndef EMSESP_STANDALONE
static uint32_t old_free_heap = 0;
uint32_t free_heap = ESP.getFreeHeap();
LOG_INFO(F("(%s) Free heap: %lu (~%lu)"), note, free_heap, (uint32_t)Helpers::abs(free_heap - old_free_heap));
old_free_heap = free_heap;
+#endif
}
// send periodic MQTT message with system information