Add .tft file uploader.
This commit is contained in:
parent
87987acbcb
commit
09a16a37a6
1 changed files with 120 additions and 0 deletions
120
Nextion/nextion.py
Normal file
120
Nextion/nextion.py
Normal file
|
@ -0,0 +1,120 @@
|
|||
#!/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()
|
||||
|
Loading…
Reference in a new issue