diff --git a/lib/WiFiManager/include/WiFiManagerParameter.h b/lib/WiFiManager/include/WiFiManagerParameter.h new file mode 100644 index 0000000..82d63f0 --- /dev/null +++ b/lib/WiFiManager/include/WiFiManagerParameter.h @@ -0,0 +1,56 @@ +#ifndef WiFiManagerParameter_h +#define WiFiManagerParameter_h + +#include + +class WiFiManager; + +#ifndef WIFI_MANAGER_MAX_PARAMS + #define WIFI_MANAGER_MAX_PARAMS 5 // params will autoincrement and realloc by this amount when max is reached +#endif + +#define WFM_LABEL_BEFORE 1 +#define WFM_LABEL_AFTER 2 +#define WFM_NO_LABEL 0 +#define WFM_LABEL_DEFAULT 1 + +class WiFiManagerParameter { + public: + /** + Create custom parameters that can be added to the WiFiManager setup web page + @id is used for HTTP queries and must not contain spaces nor other special characters + */ + WiFiManagerParameter(); + explicit WiFiManagerParameter(const char *custom); + WiFiManagerParameter(const char *id, const char *label); + WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length); + WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length, const char *custom); + WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement); + ~WiFiManagerParameter(); + // WiFiManagerParameter& operator=(const WiFiManagerParameter& rhs); + + const char *getID() const; + const char *getValue() const; + const char *getLabel() const; + const char *getPlaceholder() const; // @deprecated, use getLabel + int getValueLength() const; + int getLabelPlacement() const; + virtual const char *getCustomHTML() const; + void setValue(const char *defaultValue, int length); + + protected: + void init(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement); + + WiFiManagerParameter& operator=(const WiFiManagerParameter&); + const char *_id; + const char *_label; + char *_value; + int _length; + int _labelPlacement; + + const char *_customHTML; + friend class WiFiManager; +}; + +#endif // WiFiManagerParameter_h + diff --git a/lib/WiFiManager/src/WiFiManager.cpp b/lib/WiFiManager/src/WiFiManager.cpp index 8232760..607a3f3 100644 --- a/lib/WiFiManager/src/WiFiManager.cpp +++ b/lib/WiFiManager/src/WiFiManager.cpp @@ -11,7 +11,6 @@ */ #include "WiFiManager.h" -#include "templates/WiFiPollingJS.h" #if defined(ESP8266) || defined(ESP32) @@ -19,113 +18,6 @@ uint8_t WiFiManager::_lastconxresulttmp = WL_IDLE_STATUS; #endif -/** - * -------------------------------------------------------------------------------- - * WiFiManagerParameter - * -------------------------------------------------------------------------------- -**/ - -WiFiManagerParameter::WiFiManagerParameter() { - WiFiManagerParameter(""); -} - -WiFiManagerParameter::WiFiManagerParameter(const char *custom) { - _id = NULL; - _label = NULL; - _length = 0; - _value = nullptr; - _labelPlacement = WFM_LABEL_DEFAULT; - _customHTML = custom; -} - -WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label) { - init(id, label, "", 0, "", WFM_LABEL_DEFAULT); -} - -WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length) { - init(id, label, defaultValue, length, "", WFM_LABEL_DEFAULT); -} - -WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length, const char *custom) { - init(id, label, defaultValue, length, custom, WFM_LABEL_DEFAULT); -} - -WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement) { - init(id, label, defaultValue, length, custom, labelPlacement); -} - -void WiFiManagerParameter::init(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement) { - _id = id; - _label = label; - _labelPlacement = labelPlacement; - _customHTML = custom; - _length = 0; - _value = nullptr; - setValue(defaultValue,length); -} - -WiFiManagerParameter::~WiFiManagerParameter() { - if (_value != NULL) { - delete[] _value; - } - _length=0; // setting length 0, ideally the entire parameter should be removed, or added to wifimanager scope so it follows -} - -// WiFiManagerParameter& WiFiManagerParameter::operator=(const WiFiManagerParameter& rhs){ -// Serial.println("copy assignment op called"); -// (*this->_value) = (*rhs._value); -// return *this; -// } - -// @note debug is not available in wmparameter class -void WiFiManagerParameter::setValue(const char *defaultValue, int length) { - if(!_id){ - // Serial.println("cannot set value of this parameter"); - return; - } - - // if(strlen(defaultValue) > length){ - // // Serial.println("defaultValue length mismatch"); - // // return false; //@todo bail - // } - - if(_length != length || _value == nullptr){ - _length = length; - if( _value != nullptr){ - delete[] _value; - } - _value = new char[_length + 1]; - } - - memset(_value, 0, _length + 1); // explicit null - - if (defaultValue != NULL) { - strncpy(_value, defaultValue, _length); - } -} -const char* WiFiManagerParameter::getValue() const { - // Serial.println(printf("Address of _value is %p\n", (void *)_value)); - return _value; -} -const char* WiFiManagerParameter::getID() const { - return _id; -} -const char* WiFiManagerParameter::getPlaceholder() const { - return _label; -} -const char* WiFiManagerParameter::getLabel() const { - return _label; -} -int WiFiManagerParameter::getValueLength() const { - return _length; -} -int WiFiManagerParameter::getLabelPlacement() const { - return _labelPlacement; -} -const char* WiFiManagerParameter::getCustomHTML() const { - return _customHTML; -} - /** * [addParameter description] * @access public diff --git a/lib/WiFiManager/src/WiFiManagerParameter.cpp b/lib/WiFiManager/src/WiFiManagerParameter.cpp new file mode 100644 index 0000000..328969f --- /dev/null +++ b/lib/WiFiManager/src/WiFiManagerParameter.cpp @@ -0,0 +1,105 @@ +#include "WiFiManagerParameter.h" + +#include + +WiFiManagerParameter::WiFiManagerParameter() { + WiFiManagerParameter(""); +} + +WiFiManagerParameter::WiFiManagerParameter(const char *custom) { + _id = NULL; + _label = NULL; + _length = 0; + _value = nullptr; + _labelPlacement = WFM_LABEL_DEFAULT; + _customHTML = custom; +} + +WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label) { + init(id, label, "", 0, "", WFM_LABEL_DEFAULT); +} + +WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length) { + init(id, label, defaultValue, length, "", WFM_LABEL_DEFAULT); +} + +WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length, const char *custom) { + init(id, label, defaultValue, length, custom, WFM_LABEL_DEFAULT); +} + +WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement) { + init(id, label, defaultValue, length, custom, labelPlacement); +} + +void WiFiManagerParameter::init(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement) { + _id = id; + _label = label; + _labelPlacement = labelPlacement; + _customHTML = custom; + _length = 0; + _value = nullptr; + setValue(defaultValue,length); +} + +WiFiManagerParameter::~WiFiManagerParameter() { + if (_value != NULL) { + delete[] _value; + } + _length=0; // setting length 0, ideally the entire parameter should be removed, or added to wifimanager scope so it follows +} + +// WiFiManagerParameter& WiFiManagerParameter::operator=(const WiFiManagerParameter& rhs){ +// Serial.println("copy assignment op called"); +// (*this->_value) = (*rhs._value); +// return *this; +// } + +// @note debug is not available in wmparameter class +void WiFiManagerParameter::setValue(const char *defaultValue, int length) { + if(!_id){ + // Serial.println("cannot set value of this parameter"); + return; + } + + // if(strlen(defaultValue) > length){ + // // Serial.println("defaultValue length mismatch"); + // // return false; //@todo bail + // } + + if(_length != length || _value == nullptr){ + _length = length; + if( _value != nullptr){ + delete[] _value; + } + _value = new char[_length + 1]; + } + + memset(_value, 0, _length + 1); // explicit null + + if (defaultValue != NULL) { + strncpy(_value, defaultValue, _length); + } +} +const char* WiFiManagerParameter::getValue() const { + // Serial.println(printf("Address of _value is %p\n", (void *)_value)); + return _value; +} +const char* WiFiManagerParameter::getID() const { + return _id; +} +const char* WiFiManagerParameter::getPlaceholder() const { + return _label; +} +const char* WiFiManagerParameter::getLabel() const { + return _label; +} +int WiFiManagerParameter::getValueLength() const { + return _length; +} +int WiFiManagerParameter::getLabelPlacement() const { + return _labelPlacement; +} +const char* WiFiManagerParameter::getCustomHTML() const { + return _customHTML; +} +