1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-07-27 18:02:17 +03:00

New Update library, example, upload and more

Proper error handling in the uploading python script
Much faster OTA example sketch with better results
New Update class that simplifies updating the firmware from any source
Updated Esp.updateSketch() to use the new class
This commit is contained in:
John Doe
2015-07-03 13:59:11 +03:00
committed by Ivan Grokhotkov
parent 86cf9b2c4f
commit 6f2069deac
7 changed files with 446 additions and 130 deletions

View File

@ -17,48 +17,66 @@ def serve(remoteAddr, remotePort, filename):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverPort = 48266
server_address = ('0.0.0.0', serverPort)
print('starting up on %s port %s' % server_address, file=sys.stderr)
sock.bind(server_address)
sock.listen(1)
print('Starting on %s:%s' % server_address, file=sys.stderr)
try:
sock.bind(server_address)
sock.listen(1)
except:
print('Socket Failed', file=sys.stderr)
return 1
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
remote_address = (remoteAddr, int(remotePort))
content_size = os.path.getsize(filename)
print('upload size: %d' % content_size, file=sys.stderr)
print('Upload size: %d' % content_size, file=sys.stderr)
message = '%d %d %d\n' % (0, serverPort, content_size)
while True:
# Wait for a connection
print('sending invitation', file=sys.stderr)
sent = sock2.sendto(message, remote_address)
# Wait for a connection
print('Sending invitation to:', remoteAddr, file=sys.stderr)
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
remote_address = (remoteAddr, int(remotePort))
sent = sock2.sendto(message, remote_address)
sock2.close()
print('Waiting for device...\n', file=sys.stderr)
try:
sock.settimeout(10)
print('waiting...', file=sys.stderr)
connection, client_address = sock.accept()
sock.settimeout(None)
connection.settimeout(None)
except:
print('No response from device', file=sys.stderr)
sock.close()
return 1
try:
f = open(filename, "rb")
sys.stderr.write('Uploading')
sys.stderr.flush()
while True:
chunk = f.read(4096)
if not chunk: break
sys.stderr.write('.')
sys.stderr.flush()
connection.sendall(chunk)
print('\nWaiting for result...\n', file=sys.stderr)
try:
print('connection from', client_address, file=sys.stderr)
print('sending file %s\n' % filename, file=sys.stderr)
f = open(filename, "rb")
while True:
chunk = f.read(4096)
if not chunk:
break
sys.stderr.write('.')
sys.stderr.flush()
#print('sending %d' % len(chunk), file=sys.stderr)
connection.sendall(chunk)
print('\ndone!', file=sys.stderr)
return 0
finally:
connection.settimeout(60)
data = connection.recv(32)
print('Result: %s' % data, file=sys.stderr)
connection.close()
f.close()
return 1
return 0
except:
print('Result: No Answer!', file=sys.stderr)
connection.close()
f.close()
return 1
finally:
connection.close()
f.close()
sock.close()
return 1
def main(args):
return serve(args[1], args[2], args[3])