Skip to content

Commit e34ded1

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents c85f582 + 95cf055 commit e34ded1

28 files changed

+221
-42
lines changed

boards.txt

+16-16
Original file line numberDiff line numberDiff line change
@@ -177,16 +177,16 @@ generic.menu.Debug.Serial.build.debug_port=-DDEBUG_ESP_PORT=Serial
177177
generic.menu.Debug.Serial1=Serial1
178178
generic.menu.Debug.Serial1.build.debug_port=-DDEBUG_ESP_PORT=Serial1
179179

180-
generic.menu.DebugLevel.None=None
181-
generic.menu.DebugLevel.None.build.debug_level=
182-
generic.menu.DebugLevel.Core=Core
183-
generic.menu.DebugLevel.Core.build.debug_level=-DDEBUG_ESP_CORE
184-
generic.menu.DebugLevel.SSL=Core + SSL
185-
generic.menu.DebugLevel.SSL.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_SSL
186-
generic.menu.DebugLevel.WiFic=Core + WiFi
187-
generic.menu.DebugLevel.WiFic.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI
188-
generic.menu.DebugLevel.WiFi=WiFi
189-
generic.menu.DebugLevel.WiFi.build.debug_level=-DDEBUG_ESP_WIFI
180+
generic.menu.DebugLevel.None____=None
181+
generic.menu.DebugLevel.None____.build.debug_level=
182+
generic.menu.DebugLevel.Core____=Core
183+
generic.menu.DebugLevel.Core____.build.debug_level=-DDEBUG_ESP_CORE
184+
generic.menu.DebugLevel.SSL_____=Core + SSL
185+
generic.menu.DebugLevel.SSL_____.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_SSL
186+
generic.menu.DebugLevel.WiFic___=Core + WiFi
187+
generic.menu.DebugLevel.WiFic___.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI
188+
generic.menu.DebugLevel.WiFi____=WiFi
189+
generic.menu.DebugLevel.WiFi____.build.debug_level=-DDEBUG_ESP_WIFI
190190
generic.menu.DebugLevel.HTTPClient=HTTPClient
191191
generic.menu.DebugLevel.HTTPClient.build.debug_level=-DDEBUG_ESP_HTTP_CLIENT
192192
generic.menu.DebugLevel.HTTPClient2=HTTPClient + SSL
@@ -201,12 +201,12 @@ generic.menu.DebugLevel.HTTPServer=HTTPServer
201201
generic.menu.DebugLevel.HTTPServer.build.debug_level=-DDEBUG_ESP_HTTP_SERVER
202202
generic.menu.DebugLevel.UPDATER=Updater
203203
generic.menu.DebugLevel.UPDATER.build.debug_level=-DDEBUG_ESP_UPDATER
204-
generic.menu.DebugLevel.OTA=OTA
205-
generic.menu.DebugLevel.OTA.build.debug_level=-DDEBUG_ESP_OTA
206-
generic.menu.DebugLevel.OTA2=OTA + Updater
207-
generic.menu.DebugLevel.OTA2.build.debug_level=-DDEBUG_ESP_OTA -DDEBUG_ESP_UPDATER
208-
generic.menu.DebugLevel.all=All
209-
generic.menu.DebugLevel.all.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_SSL -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA
204+
generic.menu.DebugLevel.OTA_____=OTA
205+
generic.menu.DebugLevel.OTA_____.build.debug_level=-DDEBUG_ESP_OTA
206+
generic.menu.DebugLevel.OTA2____=OTA + Updater
207+
generic.menu.DebugLevel.OTA2____.build.debug_level=-DDEBUG_ESP_OTA -DDEBUG_ESP_UPDATER
208+
generic.menu.DebugLevel.all_____=All
209+
generic.menu.DebugLevel.all_____.build.debug_level=-DDEBUG_ESP_CORE -DDEBUG_ESP_SSL -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA
210210

211211
# disabled because espressif's bootloader refuses to write above 4M
212212
# generic.menu.FlashSize.8M=8M (7M SPIFFS)

cores/esp8266/FS.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ class File : public Stream
5959
int read() override;
6060
int peek() override;
6161
void flush() override;
62-
62+
size_t readBytes(char *buffer, size_t length) override {
63+
return read((uint8_t*)buffer, length);
64+
}
6365
size_t read(uint8_t* buf, size_t size);
6466
bool seek(uint32_t pos, SeekMode mode);
6567
size_t position() const;

cores/esp8266/MD5Builder.cpp

+40
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,46 @@ void MD5Builder::addHexString(const char * data){
2323
free(tmp);
2424
}
2525

26+
bool MD5Builder::addStream(Stream & stream, const size_t total_len) {
27+
const int buf_size = 512;
28+
int bytesleft = total_len;
29+
uint8_t * buf = (uint8_t*) malloc(buf_size);
30+
if(buf) {
31+
while((stream.available() > -1) && (bytesleft > 0)) {
32+
33+
// get available data size
34+
int sizeAvailable = stream.available();
35+
if(sizeAvailable) {
36+
int readBytes = sizeAvailable;
37+
38+
// read only the asked bytes
39+
if(readBytes > bytesleft) {
40+
readBytes = bytesleft ;
41+
}
42+
43+
// not read more the buffer can handle
44+
if(readBytes > buf_size) {
45+
readBytes = buf_size;
46+
}
47+
48+
// read data
49+
int bytesread = stream.readBytes(buf, readBytes);
50+
bytesleft -= bytesread;
51+
if(bytesread > 0) {
52+
MD5Update(&_ctx, buf, bytesread);
53+
}
54+
}
55+
// time for network streams
56+
delay(0);
57+
}
58+
// not free null ptr
59+
free(buf);
60+
return (bytesleft == 0);
61+
} else {
62+
return false;
63+
}
64+
}
65+
2666
void MD5Builder::calculate(void){
2767
MD5Final(_buf, &_ctx);
2868
}

cores/esp8266/MD5Builder.h

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class MD5Builder {
3737
void addHexString(const char * data);
3838
void addHexString(char * data){ addHexString((const char*)data); }
3939
void addHexString(String data){ addHexString(data.c_str()); }
40+
bool addStream(Stream & stream, const size_t total_len);
4041
void calculate(void);
4142
void getBytes(uint8_t * output);
4243
void getChars(char * output);

cores/esp8266/Stream.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ class Stream: public Print {
8787

8888
float parseFloat(); // float version of parseInt
8989

90-
size_t readBytes(char *buffer, size_t length); // read chars from stream into buffer
91-
size_t readBytes(uint8_t *buffer, size_t length) {
90+
virtual size_t readBytes(char *buffer, size_t length); // read chars from stream into buffer
91+
virtual size_t readBytes(uint8_t *buffer, size_t length) {
9292
return readBytes((char *) buffer, length);
9393
}
9494
// terminates if length characters have been read or timeout (see setTimeout)

cores/esp8266/core_esp8266_wiring_pwm.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ void ICACHE_RAM_ATTR pwm_timer_isr(){
103103
current_step = 0;
104104
stepcount = 0;
105105
if(pwm_mask == 0) return;
106-
T1L = (pwm_steps[current_step+1] * pwm_multiplier);
106+
T1L = (pwm_steps[current_step] * pwm_multiplier);
107107
TEIE |= TEIE1;
108108
if(pwm_mask & 0xFFFF) GPOS = pwm_mask & 0xFFFF;
109109
if(pwm_mask & 0x10000) GP16O = 1;

libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ void HTTPClient::begin(String url, String httpsFingerprint) {
107107
int index = url.indexOf(':');
108108
//int index2;
109109
bool hasPort = false;
110-
if(index) {
110+
if(index >= 0) {
111111
protocol = url.substring(0, index);
112112
url.remove(0, (index + 3)); // remove http:// or https://
113113

libraries/ESP8266WiFi/src/ESP8266WiFi.h

+11
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,17 @@ extern "C" {
4040
#include "WiFiServer.h"
4141
#include "WiFiClientSecure.h"
4242

43+
#ifdef DEBUG_ESP_WIFI
44+
#ifdef DEBUG_ESP_PORT
45+
#define DEBUG_WIFI(...) DEBUG_ESP_PORT.printf( __VA_ARGS__ )
46+
#endif
47+
#endif
48+
49+
#ifndef DEBUG_WIFI
50+
#define DEBUG_WIFI(...)
51+
#endif
52+
53+
4354
class ESP8266WiFiClass : public ESP8266WiFiGenericClass, public ESP8266WiFiSTAClass, public ESP8266WiFiScanClass, public ESP8266WiFiAPClass {
4455
public:
4556

libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp

+108-14
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,24 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* passphrase, int ch
8585

8686
if(!WiFi.enableAP(true)) {
8787
// enable AP failed
88+
DEBUG_WIFI("[AP] enableAP failed!\n");
8889
return false;
8990
}
9091

9192
if(!ssid || *ssid == 0 || strlen(ssid) > 31) {
9293
// fail SSID too long or missing!
94+
DEBUG_WIFI("[AP] SSID too long or missing!\n");
9395
return false;
9496
}
9597

9698
if(passphrase && (strlen(passphrase) > 63 || strlen(passphrase) < 8)) {
9799
// fail passphrase to long or short!
100+
DEBUG_WIFI("[AP] fail passphrase to long or short!\n");
98101
return false;
99102
}
100103

104+
bool ret = true;
105+
101106
struct softap_config conf;
102107
strcpy(reinterpret_cast<char*>(conf.ssid), ssid);
103108
conf.channel = channel;
@@ -116,20 +121,50 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* passphrase, int ch
116121

117122
struct softap_config conf_current;
118123
wifi_softap_get_config(&conf_current);
119-
if(softap_config_equal(conf, conf_current)) {
120-
DEBUGV("softap config unchanged");
121-
return true;
124+
if(!softap_config_equal(conf, conf_current)) {
125+
126+
ETS_UART_INTR_DISABLE();
127+
if(WiFi._persistent) {
128+
ret = wifi_softap_set_config(&conf);
129+
} else {
130+
ret = wifi_softap_set_config_current(&conf);
131+
}
132+
ETS_UART_INTR_ENABLE();
133+
134+
if(!ret) {
135+
DEBUG_WIFI("[AP] set_config failed!\n");
136+
return false;
137+
}
138+
139+
} else {
140+
DEBUG_WIFI("[AP] softap config unchanged\n");
122141
}
123142

124-
bool ret;
143+
if(wifi_softap_dhcps_status() != DHCP_STARTED) {
144+
DEBUG_WIFI("[AP] DHCP not started, starting...\n");
145+
if(!wifi_softap_dhcps_start()) {
146+
DEBUG_WIFI("[AP] wifi_softap_dhcps_start failed!\n");
147+
ret = false;
148+
}
149+
}
125150

126-
ETS_UART_INTR_DISABLE();
127-
if(WiFi._persistent) {
128-
ret = wifi_softap_set_config(&conf);
151+
// check IP config
152+
struct ip_info ip;
153+
if(wifi_get_ip_info(SOFTAP_IF, &ip)) {
154+
if(ip.ip.addr == 0x00000000) {
155+
// Invalid config
156+
DEBUG_WIFI("[AP] IP config Invalid resetting...\n");
157+
//192.168.244.1 , 192.168.244.1 , 255.255.255.0
158+
ret = softAPConfig(0x01F4A8C0, 0x01F4A8C0, 0x00FFFFFF);
159+
if(!ret) {
160+
DEBUG_WIFI("[AP] softAPConfig failed!\n");
161+
ret = false;
162+
}
163+
}
129164
} else {
130-
ret = wifi_softap_set_config_current(&conf);
165+
DEBUG_WIFI("[AP] wifi_get_ip_info failed!\n");
166+
ret = false;
131167
}
132-
ETS_UART_INTR_ENABLE();
133168

134169
return ret;
135170
}
@@ -142,21 +177,76 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* passphrase, int ch
142177
* @param subnet subnet mask
143178
*/
144179
bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet) {
145-
180+
DEBUG_WIFI("[APConfig] local_ip: %s gateway: %s subnet: %s\n", local_ip.toString().c_str(), gateway.toString().c_str(), subnet.toString().c_str());
146181
if(!WiFi.enableAP(true)) {
147182
// enable AP failed
183+
DEBUG_WIFI("[APConfig] enableAP failed!\n");
148184
return false;
149185
}
186+
bool ret = true;
150187

151188
struct ip_info info;
152189
info.ip.addr = static_cast<uint32_t>(local_ip);
153190
info.gw.addr = static_cast<uint32_t>(gateway);
154191
info.netmask.addr = static_cast<uint32_t>(subnet);
155-
wifi_softap_dhcps_stop();
156-
if(wifi_set_ip_info(SOFTAP_IF, &info)) {
157-
return wifi_softap_dhcps_start();
192+
193+
if(!wifi_softap_dhcps_stop()) {
194+
DEBUG_WIFI("[APConfig] wifi_softap_dhcps_stop failed!\n");
195+
}
196+
197+
if(!wifi_set_ip_info(SOFTAP_IF, &info)) {
198+
DEBUG_WIFI("[APConfig] wifi_set_ip_info failed!\n");
199+
ret = false;
158200
}
159-
return false;
201+
202+
struct dhcps_lease dhcp_lease;
203+
IPAddress ip = local_ip;
204+
ip[3] += 99;
205+
dhcp_lease.start_ip.addr = static_cast<uint32_t>(ip);
206+
DEBUG_WIFI("[APConfig] DHCP IP start: %s\n", ip.toString().c_str());
207+
208+
ip[3] += 100;
209+
dhcp_lease.end_ip.addr = static_cast<uint32_t>(ip);
210+
DEBUG_WIFI("[APConfig] DHCP IP end: %s\n", ip.toString().c_str());
211+
212+
if(!wifi_softap_set_dhcps_lease(&dhcp_lease)) {
213+
DEBUG_WIFI("[APConfig] wifi_set_ip_info failed!\n");
214+
ret = false;
215+
}
216+
217+
// set lease time to 720min --> 12h
218+
if(!wifi_softap_set_dhcps_lease_time(720)) {
219+
DEBUG_WIFI("[APConfig] wifi_softap_set_dhcps_lease_time failed!\n");
220+
ret = false;
221+
}
222+
223+
uint8 mode = 1;
224+
if(!wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &mode)) {
225+
DEBUG_WIFI("[APConfig] wifi_softap_set_dhcps_offer_option failed!\n");
226+
ret = false;
227+
}
228+
229+
if(!wifi_softap_dhcps_start()) {
230+
DEBUG_WIFI("[APConfig] wifi_softap_dhcps_start failed!\n");
231+
ret = false;
232+
}
233+
234+
// check config
235+
if(wifi_get_ip_info(SOFTAP_IF, &info)) {
236+
if(info.ip.addr == 0x00000000) {
237+
DEBUG_WIFI("[APConfig] IP config Invalid?!\n");
238+
ret = false;
239+
} else if(local_ip != info.ip.addr) {
240+
ip = info.ip.addr;
241+
DEBUG_WIFI("[APConfig] IP config not set correct?! new IP: %s\n", ip.toString().c_str());
242+
ret = false;
243+
}
244+
} else {
245+
DEBUG_WIFI("[APConfig] wifi_get_ip_info failed!\n");
246+
ret = false;
247+
}
248+
249+
return ret;
160250
}
161251

162252

@@ -179,6 +269,10 @@ bool ESP8266WiFiAPClass::softAPdisconnect(bool wifioff) {
179269
}
180270
ETS_UART_INTR_ENABLE();
181271

272+
if(!ret) {
273+
DEBUG_WIFI("[APdisconnect] set_config failed!\n");
274+
}
275+
182276
if(wifioff) {
183277
ret = WiFi.enableAP(false);
184278
}

libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ void ESP8266WiFiGenericClass::removeEvent(WiFiEventCb cbEvent, WiFiEvent_t event
103103
*/
104104
void ESP8266WiFiGenericClass::_eventCallback(void* arg) {
105105
System_Event_t* event = reinterpret_cast<System_Event_t*>(arg);
106-
DEBUGV("wifi evt: %d\n", event->event);
106+
DEBUG_WIFI("wifi evt: %d\n", event->event);
107107

108108
if(event->event == EVENT_STAMODE_DISCONNECTED) {
109-
DEBUGV("STA disconnect: %d\n", event->event_info.disconnected.reason);
109+
DEBUG_WIFI("STA disconnect: %d\n", event->event_info.disconnected.reason);
110110
WiFiClient::stopAll();
111111
}
112112

libraries/ESP8266WiFi/src/lwip/mem_manager.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include "c_types.h"
55

6-
/*------------------------±äÁ¿¶¨Òå------------------------*/
6+
/*------------------------��������------------------------*/
77

88
#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
99
#ifndef IOT_SIP_MODE
@@ -61,17 +61,17 @@ static const unsigned short heapSTRUCT_SIZE = ( sizeof( xBlockLink ) + portBYTE_
6161
//static size_t xFreeBytesRemaining = ( ( size_t ) configADJUSTED_HEAP_SIZE ) & ( ( size_t ) ~portBYTE_ALIGNMENT_MASK );
6262

6363

64-
/*------------------------º¯ÊýÉùÃ÷-----------------------------------*/
64+
/*------------------------��������-----------------------------------*/
6565

6666
//static void prvInsertBlockIntoFreeList( xBlockLink *pxBlockToInsert ) ;//ICACHE_FLASH_ATTR;
6767

6868
//static void prvHeapInit( void ) ;//ICACHE_FLASH_ATTR;
6969

7070
void vApplicationMallocFailedHook( void ) ;//ICACHE_FLASH_ATTR;
7171

72-
void *pvPortMalloc( size_t xWantedSize ) ;//ICACHE_FLASH_ATTR;
72+
void *pvPortMalloc( size_t xWantedSize, const char* file, int line ) __attribute__((malloc, alloc_size(1)));//ICACHE_FLASH_ATTR;
7373

74-
void vPortFree( void *pv ) ;//ICACHE_FLASH_ATTR;
74+
void vPortFree( void *pv, const char* file, int line ) ;//ICACHE_FLASH_ATTR;
7575

7676
size_t xPortGetFreeHeapSize( void ) ;//ICACHE_FLASH_ATTR;
7777

0 commit comments

Comments
 (0)