diff --git a/src/WiFiStorage.h b/src/WiFiStorage.h index e762f8fe..f3eb93fe 100644 --- a/src/WiFiStorage.h +++ b/src/WiFiStorage.h @@ -58,6 +58,10 @@ class WiFiStorageClass WiFiDrv::downloadFile(url, strlen(url), filename, strlen(filename)); return true; } + static bool downloadOTA(const char * url) { + return (WiFiDrv::downloadOTA(url, strlen(url)) == 0); + } + static bool remove(String filename) { return remove(filename.c_str()); diff --git a/src/utility/wifi_drv.cpp b/src/utility/wifi_drv.cpp index 7a183e22..9110af56 100644 --- a/src/utility/wifi_drv.cpp +++ b/src/utility/wifi_drv.cpp @@ -1146,6 +1146,37 @@ int8_t WiFiDrv::downloadFile(const char* url, uint8_t url_len, const char *filen return _data; } +int8_t WiFiDrv::downloadOTA(const char* url, uint8_t url_len) +{ + WAIT_FOR_SLAVE_SELECT(); + // Send Command + SpiDrv::sendCmd(DOWNLOAD_OTA, PARAM_NUMS_1); + SpiDrv::sendParam((uint8_t*)url, url_len, LAST_PARAM); + + // pad to multiple of 4 + int commandSize = 6 + url_len; + while (commandSize % 4) { + SpiDrv::readChar(); + commandSize++; + } + + SpiDrv::spiSlaveDeselect(); + //Wait the reply elaboration + SpiDrv::waitForSlaveReady(); + SpiDrv::spiSlaveSelect(); + + // Wait for reply + uint8_t _data = 0; + uint8_t _dataLen = 0; + if (!SpiDrv::waitResponseCmd(DOWNLOAD_OTA, PARAM_NUMS_1, &_data, &_dataLen)) + { + WARN("error waitResponse"); + _data = WL_FAILURE; + } + SpiDrv::spiSlaveDeselect(); + return _data; +} + int8_t WiFiDrv::renameFile(const char * old_file_name, uint8_t const old_file_name_len, const char * new_file_name, uint8_t const new_file_name_len) { WAIT_FOR_SLAVE_SELECT(); diff --git a/src/utility/wifi_drv.h b/src/utility/wifi_drv.h index c97a1c1c..4127d475 100644 --- a/src/utility/wifi_drv.h +++ b/src/utility/wifi_drv.h @@ -294,6 +294,7 @@ class WiFiDrv static void analogWrite(uint8_t pin, uint8_t value); static int8_t downloadFile(const char* url, uint8_t url_len, const char *filename, uint8_t filename_len); + static int8_t downloadOTA(const char* url, uint8_t url_len); static int8_t renameFile(const char * old_file_name, uint8_t const old_file_name_len, const char * new_file_name, uint8_t const new_file_name_len); static int8_t fileOperation(uint8_t operation, const char *filename, uint8_t filename_len, uint32_t offset, uint8_t* buffer, uint32_t len); diff --git a/src/utility/wifi_spi.h b/src/utility/wifi_spi.h index f50f76c2..0dc46810 100644 --- a/src/utility/wifi_spi.h +++ b/src/utility/wifi_spi.h @@ -111,6 +111,7 @@ enum { DOWNLOAD_FILE = 0x64, APPLY_OTA_COMMAND = 0x65, RENAME_FILE = 0x66, + DOWNLOAD_OTA = 0x67, };