From b605ab316e31a86cce3f656473c097754c7b8dcb Mon Sep 17 00:00:00 2001
From: John Doe <ficeto@Hristos-Mac-mini.local>
Date: Fri, 10 Jul 2015 22:21:48 +0300
Subject: [PATCH] add synchronous ota

---
 bootloaders/eboot/eboot.elf | Bin 11229 -> 10040 bytes
 cores/esp8266/Updater.cpp   |   6 +++++-
 tools/espota.py             |   4 +++-
 tools/sdk/include/ip_addr.h |   6 ------
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/bootloaders/eboot/eboot.elf b/bootloaders/eboot/eboot.elf
index 08536aa72a4c83c9788ce38dd40d440db9669dc0..36c480fe0ccb399f1bc6e2237fe79c0a97febe80 100755
GIT binary patch
delta 3904
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
A#Q*>R

delta 4910
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
D;ezJ`

diff --git a/cores/esp8266/Updater.cpp b/cores/esp8266/Updater.cpp
index 4d9dca9e2..cfce272a8 100644
--- a/cores/esp8266/Updater.cpp
+++ b/cores/esp8266/Updater.cpp
@@ -114,8 +114,12 @@ bool UpdaterClass::end(bool evenIfRemaining){
 bool UpdaterClass::_writeBuffer(){
   noInterrupts();
   int rc = SPIEraseSector(_currentAddress/FLASH_SECTOR_SIZE);
-  if (!rc) {
+  interrupts();
+  yield();
+  if(!rc){
+    noInterrupts();
     rc = SPIWrite(_currentAddress, _buffer, _bufferLen);
+    interrupts();
   }
   interrupts();
   if (rc) {
diff --git a/tools/espota.py b/tools/espota.py
index dbd22eb45..01d79d558 100755
--- a/tools/espota.py
+++ b/tools/espota.py
@@ -48,12 +48,14 @@ def serve(remoteAddr, remotePort, filename):
     sys.stderr.write('Uploading')
     sys.stderr.flush()
     while True:
-      chunk = f.read(4096)
+      chunk = f.read(1460)
       if not chunk: break
       sys.stderr.write('.')
       sys.stderr.flush()
+      connection.settimeout(10)
       try:
         connection.sendall(chunk)
+        res = connection.recv(4)
       except:
         print('\nError Uploading', file=sys.stderr)
         connection.close()
diff --git a/tools/sdk/include/ip_addr.h b/tools/sdk/include/ip_addr.h
index fc488ea8f..de8a61d16 100644
--- a/tools/sdk/include/ip_addr.h
+++ b/tools/sdk/include/ip_addr.h
@@ -15,12 +15,6 @@ struct ip_info {
     struct ip_addr gw;
 };
 
-#define IP4_ADDR(ipaddr, a,b,c,d) \
-        (ipaddr)->addr = ((uint32)((d) & 0xff) << 24) | \
-                         ((uint32)((c) & 0xff) << 16) | \
-                         ((uint32)((b) & 0xff) << 8)  | \
-                          (uint32)((a) & 0xff)
-
 /**
  * Determine if two address are on the same network.
  *