1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
#!/usr/bin/env python
import os
import sys, time
import traceback
import alarmdecoder
def handle_firmware(stage, **kwargs):
if stage == alarmdecoder.util.Firmware.STAGE_START:
handle_firmware.wait_tick = 0
handle_firmware.upload_tick = 0
elif stage == alarmdecoder.util.Firmware.STAGE_WAITING:
if handle_firmware.wait_tick == 0:
sys.stdout.write('Waiting for device.')
handle_firmware.wait_tick += 1
sys.stdout.write('.')
sys.stdout.flush()
elif stage == alarmdecoder.util.Firmware.STAGE_BOOT:
if handle_firmware.wait_tick > 0: print("")
print("Rebooting device..")
elif stage == alarmdecoder.util.Firmware.STAGE_LOAD:
print('Waiting for boot loader..')
elif stage == alarmdecoder.util.Firmware.STAGE_UPLOADING:
if handle_firmware.upload_tick == 0:
sys.stdout.write('Uploading firmware.')
handle_firmware.upload_tick += 1
if handle_firmware.upload_tick % 30 == 0:
sys.stdout.write('.')
sys.stdout.flush()
elif stage == alarmdecoder.util.Firmware.STAGE_DONE:
print("\r\nDone!")
elif stage == alarmdecoder.util.Firmware.STAGE_ERROR:
print("\r\nError: {0}".format(kwargs.get("error", "")))
elif stage == alarmdecoder.util.Firmware.STAGE_DEBUG:
print("\r\nDBG: {0}".format(kwargs.get("data", "")))
def main():
device = '/dev/ttyUSB0'
firmware = None
baudrate = 115200
if len(sys.argv) < 3:
print("Syntax: {0} <firmware> [device path or hostname:port] [baudrate=115200]".format(sys.argv[0]))
sys.exit(1)
firmware = sys.argv[1]
device = sys.argv[2]
if len(sys.argv) > 3:
baudrate = sys.argv[3]
debug = os.environ.get("ALARMDECODER_DEBUG") is not None
print("Flashing device: {0} - {2} baud\r\nFirmware: {1}".format(device, firmware, baudrate))
dev = None
try:
if ':' in device:
hostname, port = device.split(':')
dev = alarmdecoder.devices.SocketDevice(interface=(hostname, int(port)))
else:
dev = alarmdecoder.devices.SerialDevice(interface=device)
dev.open(baudrate=baudrate, no_reader_thread=True)
time.sleep(3)
alarmdecoder.util.Firmware.upload(dev, firmware, handle_firmware, debug=debug)
except alarmdecoder.util.NoDeviceError as ex:
print("Error: Could not find device: {0}".format(ex))
except alarmdecoder.util.UploadError as ex:
print("Error: Error uploading firmware: {0}".format(ex))
except Exception as ex:
print("Error: {0}: {1}".format(ex, traceback.format_exc()))
finally:
if dev is not None:
dev.close()
if __name__ == "__main__":
main()
|