97 lines
2.2 KiB
Python
Executable file
97 lines
2.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import asyncio
|
|
import serial_asyncio
|
|
import sys
|
|
import time
|
|
import threading
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("input", help="input filename")
|
|
parser.add_argument("--port", help="serial port to interface with")
|
|
parser.add_argument("--start",
|
|
help="auto start the clock",
|
|
const=True,
|
|
type=bool, nargs='?', default=False
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
try:
|
|
in_file = open(args.input, "rb")
|
|
|
|
except IOError:
|
|
print("Could not open file")
|
|
in_file.close()
|
|
sys.exit(2)
|
|
|
|
class SerialHandler(asyncio.Protocol):
|
|
def connection_made(self, transport):
|
|
print('connection made')
|
|
self.transport = transport
|
|
self.buf = bytes()
|
|
self.init_done = False
|
|
|
|
# clear any incoming data
|
|
transport.serial.flushInput()
|
|
|
|
transport.serial.write(b'1')
|
|
time.sleep(.1)
|
|
transport.serial.write(b'5')
|
|
time.sleep(.1)
|
|
transport.serial.write(b'6')
|
|
time.sleep(.1)
|
|
|
|
content = in_file.read()
|
|
length = len(content)
|
|
written = 0
|
|
|
|
print("file size " + str(length))
|
|
|
|
transport.serial.write(b'l')
|
|
|
|
while (length - written > 0):
|
|
written += transport.serial.write(content[length - (length - written):])
|
|
|
|
print("wrote {} bytes of rom".format(written))
|
|
|
|
if args.start:
|
|
transport.serial.write(b'4')
|
|
time.sleep(.1)
|
|
transport.serial.write(b'0')
|
|
|
|
def connection_lost(self, exc):
|
|
pass
|
|
|
|
def data_received(self, data):
|
|
self.buf += data
|
|
|
|
if b'\r\n' in self.buf:
|
|
lines = self.buf.split(b'\r\n')
|
|
|
|
self.buf = lines[-1]
|
|
|
|
for line in lines[:-1]:
|
|
s = line.decode('utf-8')
|
|
|
|
print(s)
|
|
|
|
loop = asyncio.get_event_loop()
|
|
|
|
try:
|
|
handler = SerialHandler
|
|
coro = serial_asyncio.create_serial_connection(loop, handler, args.port, baudrate=115200)
|
|
loop.run_until_complete(coro)
|
|
except Exception as E:
|
|
print(E)
|
|
print('failed to open serial port')
|
|
|
|
except Exception as E:
|
|
print(E)
|
|
print('failed to open port')
|
|
port.close()
|
|
|
|
sys.exit(1)
|
|
|
|
loop.run_forever()
|