Flash file upload

pull/183/head
Karai Csaba 9 years ago committed by cskarai
parent 9bc8e297c0
commit eedf1959ca
  1. 35
      esp-link/cgiwebserver.c
  2. 6
      httpd/multipart.c

@ -6,8 +6,9 @@
#include "cgioptiboot.h" #include "cgioptiboot.h"
#include "multipart.h" #include "multipart.h"
#include "espfsformat.h" #include "espfsformat.h"
#include "config.h"
int webServerMultipartCallback(MultipartCmd cmd, char *data, int dataLen, int position) int ICACHE_FLASH_ATTR webServerMultipartCallback(MultipartCmd cmd, char *data, int dataLen, int position)
{ {
switch(cmd) switch(cmd)
{ {
@ -27,10 +28,38 @@ int webServerMultipartCallback(MultipartCmd cmd, char *data, int dataLen, int po
data[p - position] = 0xFF; // clean espfs magic to mark as invalid data[p - position] = 0xFF; // clean espfs magic to mark as invalid
} }
} }
// TODO: flash write
int spi_flash_addr = getUserPageSectionStart() + position;
int spi_flash_end_addr = spi_flash_addr + dataLen;
if( spi_flash_end_addr + dataLen >= getUserPageSectionEnd() )
{
os_printf("No more space in the flash!\n");
return 1;
}
int ptr = 0;
while( spi_flash_addr < spi_flash_end_addr )
{
if (spi_flash_addr % SPI_FLASH_SEC_SIZE == 0){
spi_flash_erase_sector(spi_flash_addr/SPI_FLASH_SEC_SIZE);
}
int max = (spi_flash_addr | (SPI_FLASH_SEC_SIZE - 1)) + 1;
int len = spi_flash_end_addr - spi_flash_addr;
if( spi_flash_end_addr > max )
len = max - spi_flash_addr;
spi_flash_write( spi_flash_addr, (uint32_t *)(data + ptr), len );
ptr += len;
spi_flash_addr += len;
}
break; break;
case FILE_DONE: case FILE_DONE:
// TODO: finalize changes, set back espfs magic {
uint32_t magic = ESPFS_MAGIC;
spi_flash_write( (int)getUserPageSectionStart(), (uint32_t *)&magic, sizeof(uint32_t) );
}
break; break;
} }
return 0; return 0;

@ -6,14 +6,14 @@
#define BOUNDARY_SIZE 100 #define BOUNDARY_SIZE 100
void multipartAllocBoundaryBuffer(MultipartCtx * context) void ICACHE_FLASH_ATTR multipartAllocBoundaryBuffer(MultipartCtx * context)
{ {
if( context->boundaryBuffer == NULL ) if( context->boundaryBuffer == NULL )
context->boundaryBuffer = (char *)os_malloc(3*BOUNDARY_SIZE + 1); context->boundaryBuffer = (char *)os_malloc(3*BOUNDARY_SIZE + 1);
context->boundaryBufferPtr = 0; context->boundaryBufferPtr = 0;
} }
void multipartFreeBoundaryBuffer(MultipartCtx * context) void ICACHE_FLASH_ATTR multipartFreeBoundaryBuffer(MultipartCtx * context)
{ {
if( context->boundaryBuffer != NULL ) if( context->boundaryBuffer != NULL )
{ {
@ -22,7 +22,7 @@ void multipartFreeBoundaryBuffer(MultipartCtx * context)
} }
} }
int multipartProcessBoundaryBuffer(MultipartCtx * context, char * boundary, char * buff, int len, int last) int ICACHE_FLASH_ATTR multipartProcessBoundaryBuffer(MultipartCtx * context, char * boundary, char * buff, int len, int last)
{ {
if( len != 0 ) if( len != 0 )
{ {

Loading…
Cancel
Save