45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import time
|
||
|
import websocket
|
||
|
import argparse
|
||
|
import zlib
|
||
|
|
||
|
parser = argparse.ArgumentParser(description='Update fiatlux firmware via websocket.')
|
||
|
parser.add_argument("binfile")
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
with open(args.binfile, "rb") as f:
|
||
|
try:
|
||
|
ws = websocket.WebSocket()
|
||
|
ws.connect("ws://172.16.0.1")
|
||
|
i = 0
|
||
|
rolling = 0
|
||
|
total = 0
|
||
|
while True:
|
||
|
bytes = f.read(512)
|
||
|
rolling = zlib.crc32(bytes, rolling)
|
||
|
total += len(bytes)
|
||
|
msg = b'F\x00\x00\x00'
|
||
|
msg += i.to_bytes(2, 'big')
|
||
|
msg += len(bytes).to_bytes(2, 'big')
|
||
|
msg += (zlib.crc32(bytes) & 0xffffffff).to_bytes(4, 'big')
|
||
|
msg += bytes
|
||
|
ws.send(msg)
|
||
|
reply = ws.recv()
|
||
|
time.sleep(0.05)
|
||
|
i += 1
|
||
|
if len(bytes) != 512:
|
||
|
break
|
||
|
msg = b'C\x00\x00\x00'
|
||
|
msg += total.to_bytes(4, 'big')
|
||
|
msg += rolling.to_bytes(4, 'big')
|
||
|
ws.send(msg)
|
||
|
print(ws.recv())
|
||
|
ws.close()
|
||
|
except ConnectionResetError:
|
||
|
pass
|
||
|
except KeyboardInterrupt:
|
||
|
pass
|