1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-21 10:26:06 +03:00

lwip2: fix static address management (#4677)

+ interactive example (for debugging)
This commit is contained in:
david gauchard 2018-05-02 01:20:55 +02:00 committed by GitHub
parent 758b0bd124
commit 76a14b1f63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 131 additions and 6 deletions

View File

@ -0,0 +1,91 @@
/*
Interactive script meant for debugging only
Run it on serial console and keep this source file opened for the list of commands
Please configure SSID, PSK and IPAddresses below to fit with your network
Released to public domain
*/
#include "ESP8266WiFi.h"
#include "user_interface.h"
const char SSID[] = "open";
const char PSK[] = "";
IPAddress staticip(192, 168, 1, 123);
IPAddress gateway(192, 168, 1, 254);
IPAddress subnet(255, 255, 255, 0);
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PSK);
Serial.println("connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println(WiFi.localIP());
Serial.print(
"WL_IDLE_STATUS = 0\n"
"WL_NO_SSID_AVAIL = 1\n"
"WL_SCAN_COMPLETED = 2\n"
"WL_CONNECTED = 3\n"
"WL_CONNECT_FAILED = 4\n"
"WL_CONNECTION_LOST = 5\n"
"WL_DISCONNECTED = 6\n"
);
}
void WiFiOn() {
wifi_fpm_do_wakeup();
wifi_fpm_close();
wifi_set_opmode(STATION_MODE);
wifi_station_connect();
}
void WiFiOff() {
wifi_station_disconnect();
wifi_set_opmode(NULL_MODE);
wifi_set_sleep_type(MODEM_SLEEP_T);
wifi_fpm_open();
wifi_fpm_do_sleep(0xFFFFFFF);
}
void loop() {
#define TEST(name, var, varinit, func) \
static decltype(func) var = (varinit); \
if ((var) != (func)) { var = (func); Serial.printf("**** %s: ", name); Serial.println(var); }
#define DO(x...) Serial.println(F( #x )); x; break
TEST("Free Heap", freeHeap, 0, ESP.getFreeHeap());
TEST("WiFiStatus", status, WL_IDLE_STATUS, WiFi.status());
TEST("STA-IP", localIp, (uint32_t)0, WiFi.localIP());
TEST("AP-IP", apIp, (uint32_t)0, WiFi.softAPIP());
switch (Serial.read()) {
case 'F': DO(WiFiOff());
case 'N': DO(WiFiOn());
case '1': DO(WiFi.mode(WIFI_AP));
case '2': DO(WiFi.mode(WIFI_AP_STA));
case '3': DO(WiFi.mode(WIFI_STA));
case 'R': DO(if (((GPI >> 16) & 0xf) == 1) ESP.reset() /* else must hard reset */);
case 'd': DO(WiFi.disconnect());
case 'b': DO(WiFi.begin());
case 'B': DO(WiFi.begin(SSID, PSK));
case 'r': DO(WiFi.reconnect());
case 'c': DO(wifi_station_connect());
case 'a': DO(WiFi.setAutoReconnect(false));
case 'A': DO(WiFi.setAutoReconnect(true));
case 'n': DO(WiFi.setSleepMode(WIFI_NONE_SLEEP));
case 'l': DO(WiFi.setSleepMode(WIFI_LIGHT_SLEEP));
case 'm': DO(WiFi.setSleepMode(WIFI_MODEM_SLEEP));
case 's': DO(WiFi.config(staticip, gateway, subnet));
case 'D': DO(wifi_station_dhcpc_start());
}
}

Binary file not shown.

Binary file not shown.

View File

@ -2,6 +2,16 @@
all install clean: builder/lwip2-src/README
make -C builder -f Makefile.arduino $@
latestmaster: downloadmaster install
latestupstream: downloadupstream install
downloadupstream: downloadmaster
cd builder/lwip2-src; git checkout master
downloadmaster: download
cd builder; git checkout master
download: builder/lwip2-src/README
builder/lwip2-src/README:

View File

@ -1,5 +1,9 @@
```make install```: download, compile, install lwip2
```make latestmaster```: download latest lwip2, compile, install
```make latestupstream```: download latest lwip2 and latest upstream lwIP, compile, install
```make download```: download lwIP-2 builder
```make clean```: clean builder only
@ -10,4 +14,4 @@ MSS values are in builder/Makefile.arduino
MSS values in boards.txt are only informative
current lwip2 submodule repository: https://github.com/d-a-v/esp82xx-nonos-linklayer/tree/arduino-2.4.0
current lwip2 submodule repository: https://github.com/d-a-v/esp82xx-nonos-linklayer/tree/arduino-2.4.1

@ -1 +1 @@
Subproject commit a376280e3567dff7d494d6fe3e54146f6125f5c6
Subproject commit 2b827f842925b2daf12b67ab1ae498e58174124e

View File

@ -2,6 +2,7 @@
#ifndef __GLUE_DEBUG_H
#define __GLUE_DEBUG_H
// this file is commonly included by both sides of the glue
/////////////////////////////////////////////////////////////////////////////
// user-definable
@ -27,6 +28,15 @@
#define LWIP_DBG_TYPES_ON (LWIP_DBG_ON)
#endif
/////////////////////////////////////////////////////////////////////////////
// packet capture callback from esp side
#include <stdlib.h>
#ifdef __cplusplus
extern "C"
#endif
void (*phy_capture) (int netif_idx, const char* data, size_t len, int out, int success);
/////////////////////////////////////////////////////////////////////////////
#if UDEBUG && UDEBUGSTORE

View File

@ -1,5 +1,5 @@
// generated by makefiles/make-lwip2-hash
#ifndef LWIP_HASH_H
#define LWIP_HASH_H
#define LWIP_HASH_STR "STABLE-2_0_3_RELEASE/glue:arduino-2.4.1"
#define LWIP_HASH_STR "STABLE-2_0_3_RELEASE/glue:arduino-2.4.1-7-g2b827f8"
#endif // LWIP_HASH_H

View File

@ -2688,9 +2688,11 @@
* Return ERR_OK if packet is accepted, any error code otherwise.
* Payload points to ethernet header!
*/
#ifdef __DOXYGEN__
#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif)
#endif
//#ifdef __DOXYGEN__
//#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif)
//#endif
#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif) lwip_unhandled_packet((pbuf), (netif))
/**
* @}
*/
@ -3003,4 +3005,12 @@
#include "lwip-git-hash.h"
#include <sys/time.h> // settimeofday() + struct timeval
// allow to handle special packets (user redefinable)
struct pbuf;
struct netif;
#ifndef LWIP_ERR_T
#define LWIP_ERR_T s8
#endif
LWIP_ERR_T lwip_unhandled_packet (struct pbuf* pbuf, struct netif* netif) __attribute__((weak));
#endif // MYLWIPOPTS_H