add callback to HTTPUpdate (#5408)
- add callback function to HTTPUpdate - update example to print httpupdate progress - fix ArduinoIDE syntax coloring Signed-off-by: Jayantajit Gogoi <jayanta.gogoi525@gmail.com>
This commit is contained in:
parent
f64ca2e084
commit
db4e7667af
@ -36,6 +36,22 @@ void setup() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update_started() {
|
||||||
|
Serial.println("CALLBACK: HTTP update process started");
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_finished() {
|
||||||
|
Serial.println("CALLBACK: HTTP update process finished");
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_progress(int cur, int total) {
|
||||||
|
Serial.printf("CALLBACK: HTTP update process at %d of %d bytes...\n", cur, total);
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_error(int err) {
|
||||||
|
Serial.printf("CALLBACK: HTTP update fatal error code %d\n", err);
|
||||||
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
// wait for WiFi connection
|
// wait for WiFi connection
|
||||||
if ((WiFiMulti.run() == WL_CONNECTED)) {
|
if ((WiFiMulti.run() == WL_CONNECTED)) {
|
||||||
@ -50,6 +66,11 @@ void loop() {
|
|||||||
// value is used to put the LED on. If the LED is on with HIGH, that value should be passed
|
// value is used to put the LED on. If the LED is on with HIGH, that value should be passed
|
||||||
// httpUpdate.setLedPin(LED_BUILTIN, LOW);
|
// httpUpdate.setLedPin(LED_BUILTIN, LOW);
|
||||||
|
|
||||||
|
httpUpdate.onStart(update_started);
|
||||||
|
httpUpdate.onEnd(update_finished);
|
||||||
|
httpUpdate.onProgress(update_progress);
|
||||||
|
httpUpdate.onError(update_error);
|
||||||
|
|
||||||
t_httpUpdate_return ret = httpUpdate.update(client, "http://server/file.bin");
|
t_httpUpdate_return ret = httpUpdate.update(client, "http://server/file.bin");
|
||||||
// Or:
|
// Or:
|
||||||
//t_httpUpdate_return ret = httpUpdate.update(client, "server", 80, "/file.bin");
|
//t_httpUpdate_return ret = httpUpdate.update(client, "server", 80, "/file.bin");
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
#######################################
|
#######################################
|
||||||
# Syntax Coloring Map For ESP8266httpUpdate
|
# Syntax Coloring Map For HTTPUpdate
|
||||||
#######################################
|
#######################################
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# Library (KEYWORD3)
|
# Library (KEYWORD3)
|
||||||
#######################################
|
#######################################
|
||||||
|
|
||||||
ESP8266httpUpdate KEYWORD3 RESERVED_WORD
|
ESP32httpUpdate KEYWORD3 RESERVED_WORD
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# Datatypes (KEYWORD1)
|
# Datatypes (KEYWORD1)
|
||||||
#######################################
|
#######################################
|
||||||
|
|
||||||
HTTPUpdateResult KEYWORD1 DATA_TYPE
|
HTTPUpdateResult KEYWORD1 DATA_TYPE
|
||||||
ESPhttpUpdate KEYWORD1 DATA_TYPE
|
httpUpdate KEYWORD1 DATA_TYPE
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# Methods and Functions (KEYWORD2)
|
# Methods and Functions (KEYWORD2)
|
||||||
|
@ -284,6 +284,10 @@ HTTPUpdateResult HTTPUpdate::handleUpdate(HTTPClient& http, const String& curren
|
|||||||
_lastError = HTTP_UE_TOO_LESS_SPACE;
|
_lastError = HTTP_UE_TOO_LESS_SPACE;
|
||||||
ret = HTTP_UPDATE_FAILED;
|
ret = HTTP_UPDATE_FAILED;
|
||||||
} else {
|
} else {
|
||||||
|
// Warn main app we're starting up...
|
||||||
|
if (_cbStart) {
|
||||||
|
_cbStart();
|
||||||
|
}
|
||||||
|
|
||||||
WiFiClient * tcp = http.getStreamPtr();
|
WiFiClient * tcp = http.getStreamPtr();
|
||||||
|
|
||||||
@ -338,6 +342,10 @@ HTTPUpdateResult HTTPUpdate::handleUpdate(HTTPClient& http, const String& curren
|
|||||||
ret = HTTP_UPDATE_OK;
|
ret = HTTP_UPDATE_OK;
|
||||||
log_d("Update ok\n");
|
log_d("Update ok\n");
|
||||||
http.end();
|
http.end();
|
||||||
|
// Warn main app we're all done
|
||||||
|
if (_cbEnd) {
|
||||||
|
_cbEnd();
|
||||||
|
}
|
||||||
|
|
||||||
if(_rebootOnUpdate && !spiffs) {
|
if(_rebootOnUpdate && !spiffs) {
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
@ -389,6 +397,10 @@ bool HTTPUpdate::runUpdate(Stream& in, uint32_t size, String md5, int command)
|
|||||||
|
|
||||||
StreamString error;
|
StreamString error;
|
||||||
|
|
||||||
|
if (_cbProgress) {
|
||||||
|
Update.onProgress(_cbProgress);
|
||||||
|
}
|
||||||
|
|
||||||
if(!Update.begin(size, command, _ledPin, _ledOn)) {
|
if(!Update.begin(size, command, _ledPin, _ledOn)) {
|
||||||
_lastError = Update.getError();
|
_lastError = Update.getError();
|
||||||
Update.printError(error);
|
Update.printError(error);
|
||||||
@ -397,6 +409,10 @@ bool HTTPUpdate::runUpdate(Stream& in, uint32_t size, String md5, int command)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_cbProgress) {
|
||||||
|
_cbProgress(0, size);
|
||||||
|
}
|
||||||
|
|
||||||
if(md5.length()) {
|
if(md5.length()) {
|
||||||
if(!Update.setMD5(md5.c_str())) {
|
if(!Update.setMD5(md5.c_str())) {
|
||||||
_lastError = HTTP_UE_SERVER_FAULTY_MD5;
|
_lastError = HTTP_UE_SERVER_FAULTY_MD5;
|
||||||
@ -415,6 +431,10 @@ bool HTTPUpdate::runUpdate(Stream& in, uint32_t size, String md5, int command)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_cbProgress) {
|
||||||
|
_cbProgress(size, size);
|
||||||
|
}
|
||||||
|
|
||||||
if(!Update.end()) {
|
if(!Update.end()) {
|
||||||
_lastError = Update.getError();
|
_lastError = Update.getError();
|
||||||
Update.printError(error);
|
Update.printError(error);
|
||||||
|
@ -52,6 +52,11 @@ enum HTTPUpdateResult {
|
|||||||
|
|
||||||
typedef HTTPUpdateResult t_httpUpdate_return; // backward compatibility
|
typedef HTTPUpdateResult t_httpUpdate_return; // backward compatibility
|
||||||
|
|
||||||
|
using HTTPUpdateStartCB = std::function<void()>;
|
||||||
|
using HTTPUpdateEndCB = std::function<void()>;
|
||||||
|
using HTTPUpdateErrorCB = std::function<void(int)>;
|
||||||
|
using HTTPUpdateProgressCB = std::function<void(int, int)>;
|
||||||
|
|
||||||
class HTTPUpdate
|
class HTTPUpdate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -91,6 +96,12 @@ public:
|
|||||||
|
|
||||||
t_httpUpdate_return updateSpiffs(HTTPClient &httpClient, const String ¤tVersion = "");
|
t_httpUpdate_return updateSpiffs(HTTPClient &httpClient, const String ¤tVersion = "");
|
||||||
|
|
||||||
|
// Notification callbacks
|
||||||
|
void onStart(HTTPUpdateStartCB cbOnStart) { _cbStart = cbOnStart; }
|
||||||
|
void onEnd(HTTPUpdateEndCB cbOnEnd) { _cbEnd = cbOnEnd; }
|
||||||
|
void onError(HTTPUpdateErrorCB cbOnError) { _cbError = cbOnError; }
|
||||||
|
void onProgress(HTTPUpdateProgressCB cbOnProgress) { _cbProgress = cbOnProgress; }
|
||||||
|
|
||||||
int getLastError(void);
|
int getLastError(void);
|
||||||
String getLastErrorString(void);
|
String getLastErrorString(void);
|
||||||
|
|
||||||
@ -98,12 +109,25 @@ protected:
|
|||||||
t_httpUpdate_return handleUpdate(HTTPClient& http, const String& currentVersion, bool spiffs = false);
|
t_httpUpdate_return handleUpdate(HTTPClient& http, const String& currentVersion, bool spiffs = false);
|
||||||
bool runUpdate(Stream& in, uint32_t size, String md5, int command = U_FLASH);
|
bool runUpdate(Stream& in, uint32_t size, String md5, int command = U_FLASH);
|
||||||
|
|
||||||
|
// Set the error and potentially use a CB to notify the application
|
||||||
|
void _setLastError(int err) {
|
||||||
|
_lastError = err;
|
||||||
|
if (_cbError) {
|
||||||
|
_cbError(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
int _lastError;
|
int _lastError;
|
||||||
bool _rebootOnUpdate = true;
|
bool _rebootOnUpdate = true;
|
||||||
private:
|
private:
|
||||||
int _httpClientTimeout;
|
int _httpClientTimeout;
|
||||||
followRedirects_t _followRedirects;
|
followRedirects_t _followRedirects;
|
||||||
|
|
||||||
|
// Callbacks
|
||||||
|
HTTPUpdateStartCB _cbStart;
|
||||||
|
HTTPUpdateEndCB _cbEnd;
|
||||||
|
HTTPUpdateErrorCB _cbError;
|
||||||
|
HTTPUpdateProgressCB _cbProgress;
|
||||||
|
|
||||||
int _ledPin;
|
int _ledPin;
|
||||||
uint8_t _ledOn;
|
uint8_t _ledOn;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user