Prep spiffs for bigger data files

- added spiffs check after flase wipe to force it to update its status
- added spiffs write and append to write in 8192 byte chunks to allow spiffs space to be freed in time.
- fixed spiffs dump to correctly handle issues if it could not allocate bugbuff space.
This commit is contained in:
mwalker33 2022-08-31 18:51:39 +10:00
commit d8c18e6db8
4 changed files with 52 additions and 14 deletions

View file

@ -2166,8 +2166,12 @@ static void PacketReceived(PacketCommandNG *packet) {
uint32_t size = packet->oldarg[1]; uint32_t size = packet->oldarg[1];
uint8_t *buff = BigBuf_malloc(size); uint8_t *buff = BigBuf_malloc(size);
if (buff == NULL) {
if (g_dbglevel >= DBG_DEBUG) Dbprintf ("Could not allocate buffer");
// Trigger a finish downloading signal with an PM3_EMALLOC
reply_ng(CMD_SPIFFS_DOWNLOAD, PM3_EMALLOC, NULL, 0);
} else {
rdv40_spiffs_read_as_filetype((char *)filename, (uint8_t *)buff, size, RDV40_SPIFFS_SAFETY_SAFE); rdv40_spiffs_read_as_filetype((char *)filename, (uint8_t *)buff, size, RDV40_SPIFFS_SAFETY_SAFE);
// arg0 = filename // arg0 = filename
// arg1 = size // arg1 = size
// arg2 = RFU // arg2 = RFU
@ -2180,6 +2184,8 @@ static void PacketReceived(PacketCommandNG *packet) {
} }
// Trigger a finish downloading signal with an ACK frame // Trigger a finish downloading signal with an ACK frame
reply_ng(CMD_SPIFFS_DOWNLOAD, PM3_SUCCESS, NULL, 0); reply_ng(CMD_SPIFFS_DOWNLOAD, PM3_SUCCESS, NULL, 0);
BigBuf_free ();
}
LED_B_OFF(); LED_B_OFF();
break; break;
} }

View file

@ -22,6 +22,7 @@
#include "ticks.h" #include "ticks.h"
#include "dbprint.h" #include "dbprint.h"
#include "string.h" #include "string.h"
#include "spiffs.h"
/* here: use NCPS2 @ PA10: */ /* here: use NCPS2 @ PA10: */
#define SPI_CSR_NUM 2 #define SPI_CSR_NUM 2
@ -449,6 +450,9 @@ bool Flash_WipeMemoryPage(uint8_t page) {
Flash_CheckBusy(BUSY_TIMEOUT); Flash_CheckBusy(BUSY_TIMEOUT);
FlashStop(); FlashStop();
// let spiffs check and update its info post flash erase
rdv40_spiffs_check ();
return true; return true;
} }
// Wipes flash memory completely, fills with 0xFF // Wipes flash memory completely, fills with 0xFF

View file

@ -433,15 +433,41 @@ int rdv40_spiffs_lazy_mount_rollback(int changed) {
// statement or some function taking function parameters // statement or some function taking function parameters
// TODO : forbid writing to a filename which already exists as lnk ! // TODO : forbid writing to a filename which already exists as lnk !
// TODO : forbid writing to a filename.lnk which already exists without lnk ! // TODO : forbid writing to a filename.lnk which already exists without lnk !
// Note: Writing in 8192 byte chucks helps to ensure "free space" has been erased by GC (Garbage collection)
int rdv40_spiffs_write(const char *filename, uint8_t *src, uint32_t size, RDV40SpiFFSSafetyLevel level) { int rdv40_spiffs_write(const char *filename, uint8_t *src, uint32_t size, RDV40SpiFFSSafetyLevel level) {
RDV40_SPIFFS_SAFE_FUNCTION( RDV40_SPIFFS_SAFE_FUNCTION(
uint16_t idx;
if (size <= 8192) {
// write small file
write_to_spiffs(filename, src, size); write_to_spiffs(filename, src, size);
size = 0;
} else { //
// write first 8192 bytes
// need to write the first chuck of data, then append
write_to_spiffs(filename, src, 8192);
}
// append remaing 8192 byte chuncks
for (idx = 1; idx < (size / 8192); idx++) {
append_to_spiffs(filename, &src[8192 * idx], 8192);
}
// append remaing bytes
if (((int64_t)size - (8192 * idx)) > 0) {
append_to_spiffs(filename, &src[8192 * idx], size - (8192 * idx));
}
) )
} }
int rdv40_spiffs_append(const char *filename, uint8_t *src, uint32_t size, RDV40SpiFFSSafetyLevel level) { int rdv40_spiffs_append(const char *filename, uint8_t *src, uint32_t size, RDV40SpiFFSSafetyLevel level) {
RDV40_SPIFFS_SAFE_FUNCTION( RDV40_SPIFFS_SAFE_FUNCTION(
append_to_spiffs(filename, src, size); uint16_t idx;
// Append any 8192 byte chunks
for (idx = 0; idx < (size/8192); idx++) {
append_to_spiffs(filename, &src[8192 * idx], 8192);
}
// Append remain bytes
if (((int64_t)size - (8192 * idx)) > 0) {
append_to_spiffs(filename, &src[8192 * idx], size - (8192 * idx));
}
) )
} }

View file

@ -856,6 +856,8 @@ static bool dl_it(uint8_t *dest, uint32_t bytes, PacketResponseNG *response, siz
if (response->cmd == CMD_ACK) if (response->cmd == CMD_ACK)
return true; return true;
if (response->cmd == CMD_SPIFFS_DOWNLOAD && response->status == PM3_EMALLOC)
return false;
// Spiffs // fpgamem-plot download is converted to NG, // Spiffs // fpgamem-plot download is converted to NG,
if (response->cmd == CMD_SPIFFS_DOWNLOAD || response->cmd == CMD_FPGAMEM_DOWNLOAD) if (response->cmd == CMD_SPIFFS_DOWNLOAD || response->cmd == CMD_FPGAMEM_DOWNLOAD)
return true; return true;