#!/usr/bin/python # # spreadspace pic utils # # # Copyright (C) 2011 Christian Pointner # # This file is part of spreadspace pic utils. # # spreadspace pic utils is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # spreadspace pic utils is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with spreadspace pic utils. If not, see . # '''spreadspace simple pic downloader.''' VERSION = '0.1' if __name__ == '__main__': import getopt import os import sys import termios import tty from intelhex import IntelHex usage = '''spreadspace simple pic downloader. Usage: python downloader.py [options] INFILE Arguments: INFILE name of hex file for downloading. Use '-' for reading from stdin. Options: -h, --help this help message. -v, --version version info. --device=N the serial port to use (default: /dev/ttyUSB0). ''' device = "/dev/ttyUSB0" try: opts, args = getopt.getopt(sys.argv[1:], "hv", ["help", "version", "device="]) for o, a in opts: if o in ("-h", "--help"): print(usage) sys.exit(0) elif o in ("-v", "--version"): print(VERSION) sys.exit(0) elif o in ("--device"): device = a if not args: raise getopt.GetoptError('Input file is not specified') if len(args) > 1: raise getopt.GetoptError('Too many arguments') except getopt.GetoptError, msg: print "ERROR: %s" % msg print usage sys.exit(2) try: dev = os.open(device, os.O_RDWR | os.O_NOCTTY); tty.setraw(dev, termios.TCSAFLUSH) termios.tcflush(dev, termios.TCIFLUSH) except OSError, msg: print "ERROR: opening device: %s" % msg sys.exit(3) fin = args[0] if fin == '-': fin = sys.stdin elif not os.path.isfile(fin): print "ERROR: File not found: %s" % fin sys.exit(1) data = {} ih = IntelHex(fin) for a in ih.addresses(): if a/2 not in data.keys(): data[a/2] = 0 if a%2 == 0: data[a/2] += ih[a] else: data[a/2] += (ih[a] << 8) addrs = data.keys() addrs.sort() for a in addrs: print "%05d: %04X" % (a, data[a])