120 lines
2.8 KiB
Python
120 lines
2.8 KiB
Python
#!/usr/bin/python
|
|
# coding=utf-8
|
|
|
|
import threading
|
|
import time
|
|
import os
|
|
import sys
|
|
import serial
|
|
|
|
|
|
PORT = '/dev/ttyAMA0'
|
|
BAUDCOMM = 9600
|
|
BAUDUPLOAD = 115200
|
|
CHECK_MODEL = 'NX3224T024'
|
|
|
|
if len(sys.argv) != 2:
|
|
print 'usage: python %s file_to_upload.tft' % sys.argv[0]
|
|
exit(-2)
|
|
|
|
file_path = sys.argv[1]
|
|
|
|
if os.path.isfile(file_path):
|
|
print 'uploading %s (%i bytes)...' % (file_path, os.path.getsize(file_path))
|
|
else:
|
|
print 'file not found'
|
|
exit(-1)
|
|
|
|
fsize = os.path.getsize(file_path)
|
|
print('Filesize: ' + str(fsize))
|
|
|
|
ser = serial.Serial(PORT, BAUDCOMM, timeout=.1, )
|
|
|
|
acked = threading.Event()
|
|
stop_thread = threading.Event()
|
|
|
|
def reader():
|
|
global acked
|
|
global ser
|
|
while stop_thread.is_set() == False:
|
|
r = ser.read(1)
|
|
if r == '':
|
|
continue
|
|
elif '\x05' in r:
|
|
acked.set()
|
|
continue
|
|
else:
|
|
print '<%r>' % r
|
|
continue
|
|
|
|
|
|
def upload():
|
|
global acked
|
|
global ser
|
|
global stop_thread
|
|
ser.write('tjchmi-wri %i,%i,0' % (fsize, BAUDUPLOAD))
|
|
ser.write("\xff\xff\xff")
|
|
ser.flush()
|
|
acked.clear()
|
|
ser.baudrate = BAUDUPLOAD
|
|
ser.timeout = 0.1
|
|
threader.start()
|
|
print 'Waiting for ACK...'
|
|
acked.wait()
|
|
print 'Uploading...'
|
|
with open(file_path, 'rb') as hmif:
|
|
dcount = 0
|
|
while True:
|
|
#time.sleep(.1)
|
|
data = hmif.read(4096)
|
|
if len(data) == 0: break
|
|
dcount += len(data)
|
|
#print 'writing %i...' % len(data)
|
|
ser.write(data)
|
|
acked.clear()
|
|
sys.stdout.write('\rDownloading, %3.1f%%...' % (dcount/ float(fsize)*100.0))
|
|
sys.stdout.flush()
|
|
#print 'waiting for hmi...'
|
|
acked.wait()
|
|
print('')
|
|
stop_thread.set()
|
|
threader.join(1)
|
|
|
|
|
|
threader = threading.Thread(target = reader)
|
|
threader.daemon = True
|
|
|
|
no_connect = True
|
|
for baudrate in (2400, 4800, 9600, 19200, 38400, 57600, 115200):
|
|
ser.baudrate = baudrate
|
|
ser.timeout = 3000/baudrate + 0.2
|
|
print('Trying with ' + str(baudrate) + '...')
|
|
ser.write("\xff\xff\xff")
|
|
ser.write('connect')
|
|
ser.write("\xff\xff\xff")
|
|
r = ser.read(128)
|
|
if 'comok' in r:
|
|
print('Connected with ' + str(baudrate) + '!')
|
|
no_connect = False
|
|
status, unknown1, model, unknown2, version, serial, flash_size = r.strip("\xff\x00").split(',')
|
|
print('Status: ' + status)
|
|
print('Model: ' + model)
|
|
print('Version: ' + version)
|
|
print('Serial: ' + serial)
|
|
print('Flash size: ' + flash_size)
|
|
if fsize > flash_size:
|
|
print('File too big!')
|
|
break
|
|
if not CHECK_MODEL in model:
|
|
print('Wrong Display!')
|
|
break
|
|
upload()
|
|
break
|
|
|
|
if no_connect:
|
|
print('No connection!')
|
|
else:
|
|
print('File written to Display!')
|
|
|
|
ser.close()
|
|
|