From 49f9738894aa2a245082294b4013bb7ce7e06233 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 10 Jun 2020 11:13:49 +0200 Subject: [PATCH] Adding 'rename' operation necessary for using the WiFiNiNa for OTA --- src/WiFiStorage.h | 6 ++++++ src/utility/wifi_drv.cpp | 32 ++++++++++++++++++++++++++++++++ src/utility/wifi_drv.h | 1 + src/utility/wifi_spi.h | 1 + 4 files changed, 40 insertions(+) diff --git a/src/WiFiStorage.h b/src/WiFiStorage.h index 72e1975f..e762f8fe 100644 --- a/src/WiFiStorage.h +++ b/src/WiFiStorage.h @@ -43,6 +43,9 @@ class WiFiStorageClass WiFiDrv::deleteFile(filename, strlen(filename)); return true; } + static bool rename(const char * old_file_name, const char * new_file_name) { + return (WiFiDrv::renameFile(old_file_name, strlen(old_file_name), new_file_name, strlen(new_file_name)) == 0); + } static bool read(const char *filename, uint32_t offset, uint8_t* buffer, uint32_t buffer_len) { WiFiDrv::readFile(filename, strlen(filename), offset, buffer, buffer_len); return true; @@ -59,6 +62,9 @@ class WiFiStorageClass static bool remove(String filename) { return remove(filename.c_str()); } + static bool rename(String old_file_name, String new_file_name) { + return rename(old_file_name.c_str(), new_file_name.c_str()); + } static bool read(String filename, uint32_t offset, uint8_t* buffer, uint32_t buffer_len) { return read(filename.c_str(), offset, buffer, buffer_len); } diff --git a/src/utility/wifi_drv.cpp b/src/utility/wifi_drv.cpp index de856e24..307f8925 100644 --- a/src/utility/wifi_drv.cpp +++ b/src/utility/wifi_drv.cpp @@ -1110,6 +1110,38 @@ int8_t WiFiDrv::downloadFile(const char* url, uint8_t url_len, const char *filen return _data; } +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) +{ + WAIT_FOR_SLAVE_SELECT(); + /* Send Command */ + SpiDrv::sendCmd(RENAME_FILE, PARAM_NUMS_2); + SpiDrv::sendParam((uint8_t*)old_file_name, old_file_name_len, NO_LAST_PARAM); + SpiDrv::sendParam((uint8_t*)new_file_name, new_file_name_len, LAST_PARAM); + + /* pad to multiple of 4 */ + int commandSize = 6 + old_file_name_len + new_file_name_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_FILE, PARAM_NUMS_1, &data, &dataLen)) + { + WARN("error waitResponse"); + data = WL_FAILURE; + } + SpiDrv::spiSlaveDeselect(); + return data; +} + int8_t WiFiDrv::fileOperation(uint8_t operation, const char *filename, uint8_t filename_len, uint32_t offset, uint8_t* buffer, uint32_t len) { WAIT_FOR_SLAVE_SELECT(); diff --git a/src/utility/wifi_drv.h b/src/utility/wifi_drv.h index 883b7e68..2e93936e 100644 --- a/src/utility/wifi_drv.h +++ b/src/utility/wifi_drv.h @@ -287,6 +287,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 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 14b10106..7611fc98 100644 --- a/src/utility/wifi_spi.h +++ b/src/utility/wifi_spi.h @@ -109,6 +109,7 @@ enum { EXISTS_FILE = 0x63, DOWNLOAD_FILE = 0x64, APPLY_OTA_COMMAND = 0x65, + RENAME_FILE = 0x66, };