Skip to content

Commit 92455f7

Browse files
committed
Merge branch 'ficeto-esp8266' into esp8266
* ficeto-esp8266: add flash splits depending on the flash size use WDT_RESET macro in spiffs_flashmem methods fix reading bytes from incoming POST upload double add flash frequency and mode options mount spiffs on boot blah cast it make sure write return a positive or zero value fix FSFile template add toolchain to ignore
2 parents 4644c3b + 540fdb0 commit 92455f7

File tree

11 files changed

+74
-27
lines changed

11 files changed

+74
-27
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,5 @@ avr-toolchain-*.zip
5858
/hardware/tools/listComPorts.exe
5959

6060
build/macosx/esptool-*-osx.zip
61+
62+
build/macosx/dist/osx-xtensa-lx106-elf.tgz

boards.txt

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
menu.UploadSpeed=Upload Speed
22
menu.CpuFrequency=CPU Frequency
3-
menu.FlashSize=Flash size
3+
menu.FlashSize=Flash Size
4+
menu.FlashFreq=Flash Frequency
5+
menu.FlashMode=Flash Mode
46

57
##############################################################
68
generic.name=Generic ESP8266 Module
@@ -21,6 +23,7 @@ generic.build.variant=generic
2123
generic.build.flash_mode=qio
2224
generic.build.flash_size=512K
2325
generic.build.flash_freq=40
26+
generic.build.flash_ld=eagle.flash.512k.ld
2427

2528
generic.menu.CpuFrequency.80=80 MHz
2629
generic.menu.CpuFrequency.80.build.f_cpu=80000000L
@@ -48,14 +51,37 @@ generic.menu.UploadSpeed.921600.upload.speed=921600
4851

4952
generic.menu.FlashSize.512K=512K
5053
generic.menu.FlashSize.512K.build.flash_size=512K
54+
generic.menu.FlashSize.512K.build.flash_ld=eagle.flash.512k.ld
5155
generic.menu.FlashSize.256K=256K
5256
generic.menu.FlashSize.256K.build.flash_size=256K
57+
generic.menu.FlashSize.256K.build.flash_ld=eagle.flash.256k.ld
5358
generic.menu.FlashSize.1M=1M
5459
generic.menu.FlashSize.1M.build.flash_size=1M
60+
generic.menu.FlashSize.1M.build.flash_ld=eagle.flash.1m.ld
5561
generic.menu.FlashSize.2M=2M
5662
generic.menu.FlashSize.2M.build.flash_size=2M
63+
generic.menu.FlashSize.2M.build.flash_ld=eagle.flash.2m.ld
5764
generic.menu.FlashSize.4M=4M
5865
generic.menu.FlashSize.4M.build.flash_size=4M
66+
generic.menu.FlashSize.4M.build.flash_ld=eagle.flash.4m.ld
67+
68+
generic.menu.FlashFreq.40=40MHz
69+
generic.menu.FlashFreq.40.build.flash_freq=40
70+
generic.menu.FlashFreq.20=20MHz
71+
generic.menu.FlashFreq.20.build.flash_freq=20
72+
generic.menu.FlashFreq.26=26.7MHz
73+
generic.menu.FlashFreq.26.build.flash_freq=26.7
74+
generic.menu.FlashFreq.80=80MHz
75+
generic.menu.FlashFreq.80.build.flash_freq=80
76+
77+
generic.menu.FlashMode.qio=QIO
78+
generic.menu.FlashMode.qio.build.flash_mode=qio
79+
generic.menu.FlashMode.qout=QOUT
80+
generic.menu.FlashMode.qout.build.flash_mode=qout
81+
generic.menu.FlashMode.dio=DIO
82+
generic.menu.FlashMode.dio.build.flash_mode=dio
83+
generic.menu.FlashMode.dout=DOUT
84+
generic.menu.FlashMode.dout.build.flash_mode=dout
5985

6086
##############################################################
6187
modwifi.name=Olimex MOD-WIFI-ESP8266(-DEV)
@@ -77,6 +103,7 @@ modwifi.build.variant=generic
77103
modwifi.build.flash_mode=qio
78104
modwifi.build.flash_size=2M
79105
modwifi.build.flash_freq=40
106+
modwifi.build.flash_ld=eagle.flash.2m.ld
80107

81108
modwifi.menu.CpuFrequency.80=80 MHz
82109
modwifi.menu.CpuFrequency.80.build.f_cpu=80000000L
@@ -122,6 +149,7 @@ nodemcu.build.variant=nodemcu
122149
nodemcu.build.flash_mode=qio
123150
nodemcu.build.flash_size=4M
124151
nodemcu.build.flash_freq=40
152+
nodemcu.build.flash_ld=eagle.flash.4m.ld
125153

126154
nodemcu.menu.CpuFrequency.80=80 MHz
127155
nodemcu.menu.CpuFrequency.80.build.f_cpu=80000000L
@@ -168,6 +196,7 @@ nodemcu.menu.FlashSize.4M.build.flash_size=4M
168196
# wifio.build.flash_mode=qio
169197
# wifio.build.flash_size=512K
170198
# wifio.build.flash_freq=40
199+
# wifio.build.flash_ld=eagle.flash.512k.ld
171200
#
172201
# wifio.menu.CpuFrequency.80=80MHz
173202
# wifio.menu.CpuFrequency.80.build.f_cpu=80000000L

cores/esp8266/Arduino.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ extern "C" {
3838
#include "pgmspace.h"
3939
#include "esp8266_peri.h"
4040
#include "twi.h"
41-
#include "spiffs/spiffs.h"
41+
//#include "spiffs/spiffs.h"
4242

4343
void yield(void);
4444

cores/esp8266/FileSystem.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ int FSFile::available() {
162162

163163
size_t FSFile::write(const uint8_t *buf, size_t size){
164164
if (! _file) return 0;
165-
return SPIFFS_write(&_filesystemStorageHandle, _file, (uint8_t *)buf, size);
165+
int res = SPIFFS_write(&_filesystemStorageHandle, _file, (uint8_t *)buf, size);
166+
return (res > 0)?(size_t)res:0;
166167
}
167168

168169
size_t FSFile::write(uint8_t val) {

cores/esp8266/FileSystem.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,15 @@ class FSFile : public Stream {
6161
size_t bytesWritten = 0;
6262
while (true){
6363
size_t available = src.available();
64+
if(!available)
65+
return bytesWritten;
6466
size_t willWrite = (available < bufferSize) ? available : bufferSize;
6567
src.read(obuf, willWrite);
6668
size_t cb = write(obuf, willWrite);
67-
bytesWritten += cb;
6869
if (cb != willWrite) {
6970
return bytesWritten;
7071
}
72+
bytesWritten += cb;
7173
}
7274
return bytesWritten;
7375
}
@@ -78,7 +80,7 @@ class FSFile : public Stream {
7880
class FSClass {
7981

8082
private:
81-
bool _mounted;
83+
bool _mounted = false;
8284

8385
public:
8486
bool mount();

cores/esp8266/core_esp8266_wiring.c

+1
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,5 @@ void init() {
7878
timer1_isr_init();
7979
os_timer_setfn(&micros_overflow_timer, (os_timer_func_t*) &micros_overflow_tick, 0);
8080
os_timer_arm(&micros_overflow_timer, 60000, REPEAT);
81+
spiffs_mount();
8182
}

cores/esp8266/spiffs/spiffs_config.h

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "stddef.h"
2121
#include "osapi.h"
2222
#include "ets_sys.h"
23-
#include <user_config.h>
2423
// ----------- >8 ------------
2524
#define IRAM_ATTR __attribute__((section(".iram.text")))
2625
#define STORE_TYPEDEF_ATTR __attribute__((aligned(4),packed))

cores/esp8266/spiffs/spiffs_flashmem.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "flashmem.h"
2+
#include "esp8266_peri.h"
23

34
// Based on NodeMCU platform_flash
45
// https://github.com/nodemcu/nodemcu-firmware
@@ -184,7 +185,7 @@ uint32_t flashmem_write_internal( const void *from, uint32_t toaddr, uint32_t si
184185
return 0;
185186
os_memcpy(apbuf, from, size);
186187
}
187-
WRITE_PERI_REG(0x60000914, 0x73);
188+
WDT_RESET();
188189
r = spi_flash_write(toaddr, apbuf?(uint32 *)apbuf:(uint32 *)from, size);
189190
if(apbuf)
190191
os_free(apbuf);
@@ -200,7 +201,7 @@ uint32_t flashmem_read_internal( void *to, uint32_t fromaddr, uint32_t size )
200201
{
201202
fromaddr -= INTERNAL_FLASH_START_ADDRESS;
202203
SpiFlashOpResult r;
203-
WRITE_PERI_REG(0x60000914, 0x73);
204+
WDT_RESET();
204205
r = spi_flash_read(fromaddr, (uint32 *)to, size);
205206
if(SPI_FLASH_RESULT_OK == r)
206207
return size;

libraries/ESP8266WebServer/src/ESP8266WebServer.h

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class ESP8266WebServer
8383
static const char* _responseCodeToString(int code);
8484
void _parseForm(WiFiClient& client, String boundary, uint32_t len);
8585
void _uploadWriteByte(uint8_t b);
86+
uint8_t _uploadReadByte(WiFiClient& client);
8687

8788
struct RequestHandler;
8889
struct RequestArgument {

libraries/ESP8266WebServer/src/Parsing.cpp

+29-17
Original file line numberDiff line numberDiff line change
@@ -214,12 +214,22 @@ void ESP8266WebServer::_uploadWriteByte(uint8_t b){
214214
_currentUpload.buf[_currentUpload.currentSize++] = b;
215215
}
216216

217+
uint8_t ESP8266WebServer::_uploadReadByte(WiFiClient& client){
218+
int res = client.read();
219+
if(res == -1){
220+
while(!client.available())
221+
yield();
222+
res = client.read();
223+
}
224+
return (uint8_t)res;
225+
}
226+
217227
void ESP8266WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t len){
218228

219229
#ifdef DEBUG
220230
DEBUG_OUTPUT.print("Parse Form: Boundary: ");
221231
DEBUG_OUTPUT.print(boundary);
222-
DEBUG_OUTPUT.print("Length: ");
232+
DEBUG_OUTPUT.print(" Length: ");
223233
DEBUG_OUTPUT.println(len);
224234
#endif
225235
String line;
@@ -249,17 +259,17 @@ void ESP8266WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t
249259
argFilename = argName.substring(nameStart+2, argName.length() - 1);
250260
argName = argName.substring(0, argName.indexOf('"'));
251261
argIsFile = true;
252-
#ifdef DEBUG
262+
#ifdef DEBUG
253263
DEBUG_OUTPUT.print("PostArg FileName: ");
254264
DEBUG_OUTPUT.println(argFilename);
255-
#endif
265+
#endif
256266
//use GET to set the filename if uploading using blob
257267
if (argFilename == "blob" && hasArg("filename")) argFilename = arg("filename");
258268
}
259-
#ifdef DEBUG
269+
#ifdef DEBUG
260270
DEBUG_OUTPUT.print("PostArg Name: ");
261271
DEBUG_OUTPUT.println(argName);
262-
#endif
272+
#endif
263273
argType = "text/plain";
264274
line = client.readStringUntil('\r');
265275
client.readStringUntil('\n');
@@ -269,10 +279,10 @@ void ESP8266WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t
269279
client.readStringUntil('\r');
270280
client.readStringUntil('\n');
271281
}
272-
#ifdef DEBUG
282+
#ifdef DEBUG
273283
DEBUG_OUTPUT.print("PostArg Type: ");
274284
DEBUG_OUTPUT.println(argType);
275-
#endif
285+
#endif
276286
if (!argIsFile){
277287
while(1){
278288
line = client.readStringUntil('\r');
@@ -281,20 +291,20 @@ void ESP8266WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t
281291
if (argValue.length() > 0) argValue += "\n";
282292
argValue += line;
283293
}
284-
#ifdef DEBUG
294+
#ifdef DEBUG
285295
DEBUG_OUTPUT.print("PostArg Value: ");
286296
DEBUG_OUTPUT.println(argValue);
287297
DEBUG_OUTPUT.println();
288-
#endif
298+
#endif
289299

290300
RequestArgument& arg = postArgs[postArgsLen++];
291301
arg.key = argName;
292302
arg.value = argValue;
293303

294304
if (line == ("--"+boundary+"--")){
295-
#ifdef DEBUG
305+
#ifdef DEBUG
296306
DEBUG_OUTPUT.println("Done Parsing POST");
297-
#endif
307+
#endif
298308
break;
299309
}
300310
} else {
@@ -312,23 +322,23 @@ void ESP8266WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t
312322
#endif
313323
if (_fileUploadHandler) _fileUploadHandler();
314324
_currentUpload.status = UPLOAD_FILE_WRITE;
315-
uint8_t argByte = client.read();
325+
uint8_t argByte = _uploadReadByte(client);
316326
readfile:
317327
while(argByte != 0x0D){
318328
_uploadWriteByte(argByte);
319-
argByte = client.read();
329+
argByte = _uploadReadByte(client);
320330
}
321331

322-
argByte = client.read();
332+
argByte = _uploadReadByte(client);
323333
if (argByte == 0x0A){
324-
argByte = client.read();
334+
argByte = _uploadReadByte(client);
325335
if ((char)argByte != '-'){
326336
//continue reading the file
327337
_uploadWriteByte(0x0D);
328338
_uploadWriteByte(0x0A);
329339
goto readfile;
330340
} else {
331-
argByte = client.read();
341+
argByte = _uploadReadByte(client);
332342
if ((char)argByte != '-'){
333343
//continue reading the file
334344
_uploadWriteByte(0x0D);
@@ -366,11 +376,13 @@ void ESP8266WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t
366376
} else {
367377
_uploadWriteByte(0x0D);
368378
_uploadWriteByte(0x0A);
379+
_uploadWriteByte((uint8_t)('-'));
380+
_uploadWriteByte((uint8_t)('-'));
369381
uint32_t i = 0;
370382
while(i < boundary.length()){
371383
_uploadWriteByte(endBuf[i++]);
372384
}
373-
argByte = client.read();
385+
argByte = _uploadReadByte(client);
374386
goto readfile;
375387
}
376388
} else {

platform.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ compiler.c.flags=-c -Os -Wpointer-arith -Wno-implicit-function-declaration -Wl,-
2020
compiler.S.cmd=xtensa-lx106-elf-gcc
2121
compiler.S.flags=-c -g -x assembler-with-cpp -MMD
2222

23-
compiler.c.elf.ldscript=eagle.app.v6.ld
24-
compiler.c.elf.flags=-nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" "-T{compiler.c.elf.ldscript}"
23+
compiler.c.elf.flags=-nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-L{compiler.sdk.path}/lib" "-L{compiler.sdk.path}/ld" "-T{build.flash_ld}"
2524
compiler.c.elf.cmd=xtensa-lx106-elf-gcc
2625
compiler.c.elf.libs=-lm -lgcc -lhal -lphy -lnet80211 -llwip -lwpa -lmain -lpp -lsmartconfig
2726

0 commit comments

Comments
 (0)