From f1cc8379e749af2c292a9fa4180115d6a824dc70 Mon Sep 17 00:00:00 2001
From: Deomid Ryabkov <rojer@cesanta.com>
Date: Mon, 21 Mar 2016 22:44:27 +0000
Subject: [PATCH] ESP8266_RTOS example tweaks

PUBLISHED_FROM=11096f272afc0716e0677c68d58ebf4d4e001a47
---
 examples/ESP8266_RTOS/Makefile                |  2 +-
 examples/ESP8266_RTOS/README.md               | 16 +++------------
 .../ld/eagle.app.v6.512.compact.ld            | 20 -------------------
 examples/ESP8266_RTOS/user/Makefile           |  1 -
 examples/ESP8266_RTOS/user/esp_libc.c         | 18 +++++++++++++----
 examples/ESP8266_RTOS/user/user_main.c        | 10 +++++++++-
 6 files changed, 27 insertions(+), 40 deletions(-)
 delete mode 100644 examples/ESP8266_RTOS/ld/eagle.app.v6.512.compact.ld

diff --git a/examples/ESP8266_RTOS/Makefile b/examples/ESP8266_RTOS/Makefile
index 592c54e93..0317ff878 100644
--- a/examples/ESP8266_RTOS/Makefile
+++ b/examples/ESP8266_RTOS/Makefile
@@ -55,7 +55,7 @@ LINKFLAGS_eagle.app.v6 = \
     -u call_user_start	\
 	-Wl,-static						\
 	-Wl,--start-group					\
-	-lc \
+	-lcirom \
 	-lgcc					\
 	-lhal					\
 	-lphy	\
diff --git a/examples/ESP8266_RTOS/README.md b/examples/ESP8266_RTOS/README.md
index 1ec54992c..e59529588 100644
--- a/examples/ESP8266_RTOS/README.md
+++ b/examples/ESP8266_RTOS/README.md
@@ -17,20 +17,10 @@ $ make clean; make BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=6
 Flash (using [esptool](https://github.com/themadinventor/esptool)):
 
 ```
-$ esptool.py --port /dev/ttyUSB0 --baud 230400 \
-    write_flash --flash_mode=dio --flash_size=32m \
-    0x00000 ${SDK_PATH}/bin/boot_v1.4\(b1\).bin \
-    0x01000 ${BIN_PATH}/upgrade/user1.4096.new.6.bin
-```
-
-
-The output can be made to fit in 512KB (4Mb), but stock linker scripts do not reserve enough space for code.
-Custom linker script is provided for that, so you can use it for smaller devices like so (example that will work with ESP-01):
-
-```
-  $ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=qio SPI_SIZE_MAP=0 LD_FILE=ld/eagle.app.v6.512.compact.ld
+  $ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=qio SPI_SIZE_MAP=0
   $ esptool.py --port /dev/ttyUSB0 --baud 230400 \
       write_flash --flash_mode=qio --flash_size=4m \
       0x00000 ${BIN_PATH}/eagle.flash.bin \
-      0x10000 ${BIN_PATH}/eagle.irom0text.bin
+      0x20000 ${BIN_PATH}/eagle.irom0text.bin \
+      0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin
 ```
diff --git a/examples/ESP8266_RTOS/ld/eagle.app.v6.512.compact.ld b/examples/ESP8266_RTOS/ld/eagle.app.v6.512.compact.ld
deleted file mode 100644
index 480c0e3ee..000000000
--- a/examples/ESP8266_RTOS/ld/eagle.app.v6.512.compact.ld
+++ /dev/null
@@ -1,20 +0,0 @@
-/* eagle.flash.bin     @ 0x00000 */
-/* eagle.irom0text.bin @ 0x10000 */
-
-/*
- * Flash map for 512KB flash.
- *
- * There is 0x8000 (32KB) available between 0x8000 and 0x10000.
- *
- * Note: IROM images starts at 0x10000 (ignore Makefile output which says 0x40000.
- */
-
-MEMORY
-{
-  dport0_0_seg :                      	org = 0x3FF00000, len = 0x10
-  dram0_0_seg :                       	org = 0x3FFE8000, len = 0x18000
-  iram1_0_seg :                       	org = 0x40100000, len = 0x8000
-  irom0_0_seg :                       	org = 0x40210000, len = 0x6C000
-}
-
-INCLUDE "../ld/eagle.app.v6.common.ld"
diff --git a/examples/ESP8266_RTOS/user/Makefile b/examples/ESP8266_RTOS/user/Makefile
index 5e05c6e13..20c4e882e 100644
--- a/examples/ESP8266_RTOS/user/Makefile
+++ b/examples/ESP8266_RTOS/user/Makefile
@@ -26,7 +26,6 @@ endif
 DEFINES += -DCS_PLATFORM=3 \
            -DMG_NO_BSD_SOCKETS \
            -DMG_DISABLE_FILESYSTEM \
-           -DMG_DISABLE_STDIO \
            -DMG_MAX_HTTP_HEADERS=20 -DMG_MAX_HTTP_REQUEST_SIZE=1024 \
            -DMG_MAX_PATH=40 -DMG_MAX_HTTP_SEND_MBUF=1024 \
            -DRTOS_SDK -DMG_LWIP -DLWIP_TIMEVAL_PRIVATE=0 \
diff --git a/examples/ESP8266_RTOS/user/esp_libc.c b/examples/ESP8266_RTOS/user/esp_libc.c
index e13b3b17a..823627659 100644
--- a/examples/ESP8266_RTOS/user/esp_libc.c
+++ b/examples/ESP8266_RTOS/user/esp_libc.c
@@ -16,7 +16,6 @@
 #include "esp_common.h"
 
 /* Makes fprintf(stdout) and stderr work. */
-/*
 _ssize_t _write_r(struct _reent *r, int fd, void *buf, size_t len) {
   if (fd == 1 || fd == 2) {
     size_t i;
@@ -27,7 +26,6 @@ _ssize_t _write_r(struct _reent *r, int fd, void *buf, size_t len) {
   }
   return -1;
 }
-*/
 
 /*
  * You'll need to implement _open_r and friends if you want file operations. See
@@ -47,9 +45,21 @@ void _exit(int status) {
   abort();
 }
 
+/*
+ * This will prevent counter wrap if time is read regularly.
+ * At least Mongoose poll queries time, so we're covered.
+ */
 int _gettimeofday_r(struct _reent *r, struct timeval *tp, void *tzp) {
+  static uint32_t prev_time = 0;
+  static uint32_t num_overflows = 0;
   uint32_t time = system_get_time();
-  tp->tv_sec = time / 1000000;
-  tp->tv_usec = time % 1000000;
+  uint64_t time64 = time;
+  if (prev_time > 0 && time < prev_time) num_overflows++;
+  time64 += (((uint64_t) num_overflows) * (1ULL << 32));
+  tp->tv_sec = time64 / 1000000ULL;
+  tp->tv_usec = time64 % 1000000ULL;
+  prev_time = time;
   return 0;
+  (void) r;
+  (void) tzp;
 }
diff --git a/examples/ESP8266_RTOS/user/user_main.c b/examples/ESP8266_RTOS/user/user_main.c
index 0fee30766..a5d5188e2 100644
--- a/examples/ESP8266_RTOS/user/user_main.c
+++ b/examples/ESP8266_RTOS/user/user_main.c
@@ -12,7 +12,7 @@
 #define AP_CHAN 9
 #define MG_LISTEN_ADDR "80"
 
-#define MG_TASK_STACK_SIZE 2048
+#define MG_TASK_STACK_SIZE 4096
 #define MG_TASK_PRIORITY 1
 
 void uart_div_modify(int uart_no, unsigned int freq);
@@ -55,6 +55,8 @@ void ev_handler(struct mg_connection *nc, int ev, void *p) {
 }
 
 void setup_ap() {
+  int off = 0;
+  struct ip_info info;
   struct softap_config cfg;
 
   wifi_set_opmode_current(SOFTAP_MODE);
@@ -71,6 +73,12 @@ void setup_ap() {
 
   LOG(LL_INFO, ("Setting up AP '%s' on channel %d", cfg.ssid, cfg.channel));
   wifi_softap_set_config_current(&cfg);
+  wifi_softap_dhcps_stop();
+  wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &off);
+  wifi_softap_dhcps_start();
+  wifi_get_ip_info(SOFTAP_IF, &info);
+  LOG(LL_INFO, ("WiFi AP: SSID %s, channel %d, IP " IPSTR "", cfg.ssid,
+                cfg.channel, IP2STR(&info.ip)));
 }
 
 static void mg_task(void *arg) {
-- 
GitLab