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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user