diff --git a/WiFiManager.cpp b/WiFiManager.cpp index c36f46d82..181bbe1d3 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -37,30 +37,30 @@ WiFiManagerParameter::WiFiManagerParameter(const char *custom) { _customHTML = custom; } -WiFiManagerParameter::WiFiManagerParameter(const char *id, const char *label) { - init(id, label, "", 0, "", WFM_LABEL_DEFAULT); +WiFiManagerParameter::WiFiManagerParameter(const char *name, const char *label) { + init(name, 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 *name, const char *label, const char *defaultValue, int maxLength) { + init(name, label, defaultValue, maxLength, "", 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 *name, const char *label, const char *defaultValue, int maxLength, const char *custom) { + init(name, label, defaultValue, maxLength, 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); +WiFiManagerParameter::WiFiManagerParameter(const char *name, const char *label, const char *defaultValue, int maxLength, const char *custom, int labelPlacement) { + init(name, label, defaultValue, maxLength, custom, labelPlacement); } -void WiFiManagerParameter::init(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement) { - _id = id; +void WiFiManagerParameter::init(const char *name, const char *label, const char *defaultValue, int maxLength, const char *custom, int labelPlacement) { + _id = name; _label = label; _labelPlacement = labelPlacement; _customHTML = custom; _length = 0; _value = nullptr; - setValue(defaultValue,length); + setValue(defaultValue, maxLength); } WiFiManagerParameter::~WiFiManagerParameter() { @@ -77,19 +77,24 @@ WiFiManagerParameter::~WiFiManagerParameter() { // } // @note debug is not available in wmparameter class -void WiFiManagerParameter::setValue(const char *defaultValue, int length) { +void WiFiManagerParameter::setValue(const char *defaultValue, int maxLength) { if(!_id){ // Serial.println("cannot set value of this parameter"); return; } + + if(maxLength < 0){ + // Serial.println("cannot set length below zero"); + return; + } - // if(strlen(defaultValue) > length){ + // if(strlen(defaultValue) > maxLength){ // // Serial.println("defaultValue length mismatch"); // // return false; //@todo bail // } - if(_length != length || _value == nullptr){ - _length = length; + if(_length != maxLength || _value == nullptr){ + _length = maxLength; if( _value != nullptr){ delete[] _value; } @@ -102,10 +107,20 @@ void WiFiManagerParameter::setValue(const char *defaultValue, int length) { strncpy(_value, defaultValue, _length); } } + +void WiFiManagerParameter::setValueReceived(const char* value) { + // by default, this just passes through to 'setValue' + // derived classes can intercept the received value here + setValue(value, getValueMaxLength()); +} + const char* WiFiManagerParameter::getValue() const { // Serial.println(printf("Address of _value is %p\n", (void *)_value)); return _value; } +const char* WiFiManagerParameter::getName() const { + return _id; +} const char* WiFiManagerParameter::getID() const { return _id; } @@ -118,6 +133,9 @@ const char* WiFiManagerParameter::getLabel() const { int WiFiManagerParameter::getValueLength() const { return _length; } +int WiFiManagerParameter::getValueMaxLength() const { + return _length; +} int WiFiManagerParameter::getLabelPlacement() const { return _labelPlacement; } @@ -132,12 +150,12 @@ const char* WiFiManagerParameter::getCustomHTML() const { */ bool WiFiManager::addParameter(WiFiManagerParameter *p) { - // check param id is valid, unless null - if(p->getID()){ - for (size_t i = 0; i < strlen(p->getID()); i++){ - if(!(isAlphaNumeric(p->getID()[i])) && !(p->getID()[i]=='_')){ + // check param name is valid, unless null + if(p->getName()){ + for (size_t i = 0; i < strlen(p->getName()); i++){ + if(!(isAlphaNumeric(p->getName()[i])) && !(p->getName()[i]=='_')){ #ifdef WM_DEBUG_LEVEL - DEBUG_WM(WM_DEBUG_ERROR,F("[ERROR] parameter IDs can only contain alpha numeric chars")); + DEBUG_WM(WM_DEBUG_ERROR,F("[ERROR] parameter names can only contain alpha numeric chars")); #endif return false; } @@ -179,7 +197,7 @@ bool WiFiManager::addParameter(WiFiManagerParameter *p) { _paramsCount++; #ifdef WM_DEBUG_LEVEL - DEBUG_WM(WM_DEBUG_VERBOSE,F("Added Parameter:"),p->getID()); + DEBUG_WM(WM_DEBUG_VERBOSE,F("Added Parameter:"),p->getName()); #endif return true; } @@ -1735,8 +1753,8 @@ String WiFiManager::getParamOut(){ char valLength[5]; for (int i = 0; i < _paramsCount; i++) { - //Serial.println((String)_params[i]->_length); - if (_params[i] == NULL || _params[i]->_length > 99999) { + //Serial.println((String)_params[i]->getValueMaxLength()); + if (_params[i] == NULL || _params[i]->getValueMaxLength() > 99999) { // try to detect param scope issues, doesnt always catch but works ok #ifdef WM_DEBUG_LEVEL DEBUG_WM(WM_DEBUG_ERROR,F("[ERROR] WiFiManagerParameter is out of scope")); @@ -1767,13 +1785,13 @@ String WiFiManager::getParamOut(){ // Input templating // "
"; // if no ID use customhtml for item, else generate from param string - if (_params[i]->getID() != NULL) { + if (_params[i]->getName() != NULL) { if(tok_I)pitem.replace(FPSTR(T_I), (String)FPSTR(S_parampre)+(String)i); // T_I id number - if(tok_i)pitem.replace(FPSTR(T_i), _params[i]->getID()); // T_i id name - if(tok_n)pitem.replace(FPSTR(T_n), _params[i]->getID()); // T_n id name alias + if(tok_i)pitem.replace(FPSTR(T_i), _params[i]->getName()); // T_i name + if(tok_n)pitem.replace(FPSTR(T_n), _params[i]->getName()); // T_n name alias if(tok_p)pitem.replace(FPSTR(T_p), FPSTR(T_t)); // T_p replace legacy placeholder token if(tok_t)pitem.replace(FPSTR(T_t), _params[i]->getLabel()); // T_t title/label - snprintf(valLength, 5, "%d", _params[i]->getValueLength()); + snprintf(valLength, 5, "%d", _params[i]->getValueMaxLength()); if(tok_l)pitem.replace(FPSTR(T_l), valLength); // T_l value length if(tok_v)pitem.replace(FPSTR(T_v), _params[i]->getValue()); // T_v value if(tok_c)pitem.replace(FPSTR(T_c), _params[i]->getCustomHTML()); // T_c meant for additional attributes, not html, but can stuff @@ -1937,7 +1955,7 @@ void WiFiManager::doParamSave(){ #endif for (int i = 0; i < _paramsCount; i++) { - if (_params[i] == NULL || _params[i]->_length > 99999) { + if (_params[i] == NULL || _params[i]->getValueMaxLength() > 99999) { #ifdef WM_DEBUG_LEVEL DEBUG_WM(WM_DEBUG_ERROR,F("[ERROR] WiFiManagerParameter is out of scope")); #endif @@ -1949,13 +1967,13 @@ void WiFiManager::doParamSave(){ if(server->hasArg(name)) { value = server->arg(name); } else { - value = server->arg(_params[i]->getID()); + value = server->arg(_params[i]->getName()); } //store it in params array - value.toCharArray(_params[i]->_value, _params[i]->_length+1); // length+1 null terminated + _params[i]->setValueReceived(value.c_str()); #ifdef WM_DEBUG_LEVEL - DEBUG_WM(WM_DEBUG_VERBOSE,(String)_params[i]->getID() + ":",value); + DEBUG_WM(WM_DEBUG_VERBOSE,(String)_params[i]->getName() + ":",value); #endif } #ifdef WM_DEBUG_LEVEL diff --git a/WiFiManager.h b/WiFiManager.h index f911beb0d..af7409217 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -203,34 +203,37 @@ class WiFiManagerParameter { */ WiFiManagerParameter(); 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(const char *name, const char *label); + WiFiManagerParameter(const char *name, const char *label, const char *defaultValue, int maxLength); + WiFiManagerParameter(const char *name, const char *label, const char *defaultValue, int maxLength, const char *custom); + WiFiManagerParameter(const char *name, const char *label, const char *defaultValue, int maxLength, const char *custom, int labelPlacement); + virtual ~WiFiManagerParameter(); // WiFiManagerParameter& operator=(const WiFiManagerParameter& rhs); - const char *getID() const; + const char *getName() const; + const char *getID() const; // @deprecated, use getName const char *getValue() const; const char *getLabel() const; const char *getPlaceholder() const; // @deprecated, use getLabel - int getValueLength() const; + int getValueLength() const; // @deprecated, use getValueMaxLength + int getValueMaxLength() const; int getLabelPlacement() const; virtual const char *getCustomHTML() const; - void setValue(const char *defaultValue, int length); + void setValue(const char *defaultValue, int maxLength); + + virtual void setValueReceived(const char* value); protected: - void init(const char *id, const char *label, const char *defaultValue, int length, const char *custom, int labelPlacement); + void init(const char *name, const char *label, const char *defaultValue, int maxLength, const char *custom, int labelPlacement); WiFiManagerParameter& operator=(const WiFiManagerParameter&); - const char *_id; + const char *_id; // @deprecated this should be _name const char *_label; char *_value; - int _length; + int _length; // @deprecated this should be _maxLength int _labelPlacement; const char *_customHTML; - friend class WiFiManager; }; diff --git a/examples/NonBlocking/AutoConnectNonBlockingwParams/AutoConnectNonBlockingwParams.ino b/examples/NonBlocking/AutoConnectNonBlockingwParams/AutoConnectNonBlockingwParams.ino index 3af79f010..bac56c3b3 100644 --- a/examples/NonBlocking/AutoConnectNonBlockingwParams/AutoConnectNonBlockingwParams.ino +++ b/examples/NonBlocking/AutoConnectNonBlockingwParams/AutoConnectNonBlockingwParams.ino @@ -30,7 +30,7 @@ void loop() { void saveParamsCallback () { Serial.println("Get Params:"); - Serial.print(custom_mqtt_server.getID()); + Serial.print(custom_mqtt_server.getName()); Serial.print(" : "); Serial.println(custom_mqtt_server.getValue()); } diff --git a/keywords.txt b/keywords.txt index 7159e7400..079536aad 100644 --- a/keywords.txt +++ b/keywords.txt @@ -27,10 +27,10 @@ setSTAStaticIPConfig KEYWORD2 setAPCallback KEYWORD2 setSaveConfigCallback KEYWORD2 addParameter KEYWORD2 -getID KEYWORD2 +getName KEYWORD2 getValue KEYWORD2 getPlaceholder KEYWORD2 -getValueLength KEYWORD2 +getValueMaxLength KEYWORD2 ####################################### # Constants (LITERAL1)