Flash file upload

pull/193/head
Karai Csaba 9 years ago committed by Thorsten von Eicken
parent 29b691757e
commit 754dba2a31
  1. 35
      esp-link/cgiwebserver.c
  2. 6
      httpd/multipart.c

@ -6,8 +6,9 @@
#include "cgioptiboot.h"
#include "multipart.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)
{
@ -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
}
}
// 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;
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;
}
return 0;

@ -6,14 +6,14 @@
#define BOUNDARY_SIZE 100
void multipartAllocBoundaryBuffer(MultipartCtx * context)
void ICACHE_FLASH_ATTR multipartAllocBoundaryBuffer(MultipartCtx * context)
{
if( context->boundaryBuffer == NULL )
context->boundaryBuffer = (char *)os_malloc(3*BOUNDARY_SIZE + 1);
context->boundaryBufferPtr = 0;
}
void multipartFreeBoundaryBuffer(MultipartCtx * context)
void ICACHE_FLASH_ATTR multipartFreeBoundaryBuffer(MultipartCtx * context)
{
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 )
{

Loading…
Cancel
Save