Example #1
0
def main(args: argparse.Namespace):
    brtype = args.branch_type
    hexfile = args.hexfile

    # Pad a numeric string with zeros
    brtype = brtype.zfill(BRANCH_TYPE_BYTES * 2)

    # Split string data into bytes (e.g. "AABBCCDD" -> b'\xaa\xbb\xcc\xdd'
    bytes_brtype = bytes.fromhex(brtype)

    '''
    # for debug
    print("bytes_brtype=", end='')
    print(bytes_brtype)
    '''

    ih = IntelHex()

    # Write out user defined data
    global csvFilePath
    csvFilePath = args.user_data
    if csvFilePath is not None:
        # if csvFilePath is given
        if os.path.exists(csvFilePath):
            with open(csvFilePath, 'r') as fp:
                csvList = list(csv.reader(fp))
                if len(csvList) > 0:
                    print("csvList has some contents")
                    flatList = [item for subList in csvList for item in subList]
                    print(flatList)
                    bytes_data = strlist_to_bytes(flatList)
                    if len(bytes_data) > 0:
                        ih.puts(USER_DATA_ADDR, bytes_data)
                else:
                    print(csvFilePath + " is empty")
                    ErrorMsg()
        else:
            print(csvFilePath + " not found. Skip user defined EEPROM data flash.")
            print()
    else:
        print("Skip user defined EEPROM data flash.")
        print()

    # Write out branchType
    ih.puts(SYSTEM_RESERVED_ADDR, bytes_brtype)

    hex_file_name = os.path.join(os.path.dirname(os.path.abspath(__file__)), hexfile)

    ih.dump()
    ih.write_hex_file(hex_file_name)
Example #2
0
class IHexFile:
    def __init__(self):
        self.ihex = IntelHex()
        self.fileName = "None Loaded"
        self.fileLoaded = False
        self.faultList = {}

    def loadFromFile(self, infilename):
        self.ihex.fromfile(infilename, format='hex')
        self.fileName = infilename
        self.fileLoaded = True
        self.minAddress = self.ihex.minaddr()
        self.maxAddress = self.ihex.maxaddr()
        return "OK"

    def writeToFile(self, outfilename):
        if not self.fileLoaded:
            return "No File Loaded"
        else:
            self.ihex.write_hex_file(outfilename)
            return "OK"

    def writeHexDump(self, fname):
        if not self.fileLoaded:
            return "No File Loaded"
        else:
            f = open(fname, 'w')
            self.ihex.dump(f)
            f.close()
            return "Wrote " + fname

    def faultInjection(self, address, value):
        if not self.fileLoaded:
            return "No Hex File Loaded"
        elif address > self.maxAddress or address < self.minAddress:
            return "Address out of Range"
        else:
            self.ihex[address] = value
            self.ihex[address + 1] = value
            self.faultList[address] = value
            #How to handle Low and High Byte!!!
            return "OK"

    def viewFaults(self):
        if not self.fileLoaded:
            return "No Hex File Loaded"
        else:
            return self.faultList
Example #3
0
def _bytes_to_pretty_hex(data, offset=0x0000):
    """Convert a list of bytes to a nicely formatted ASCII decoded hex string.

    :param data: List of integers, each representing a single byte.
    :param offset: Start address offset.
    :return: A string with the formatted hex data.
    """
    i_hex = IntelHex()
    i_hex.frombytes(data, offset)

    fake_file = StringIO()
    try:
        i_hex.dump(tofile=fake_file, width=16, withpadding=False)
    except IOError as e:
        sys.stderr.write("ERROR: File write: {}\n{}".format(fake_file, str(e)))
        return

    pretty_hex_str = fake_file.getvalue()
    fake_file.close()
    return pretty_hex_str
Example #4
0
class RomMemory:
    """docstring for RomMemory"""
    pagesize = 256
    numpages = 128
    size = pagesize * numpages

    def __init__(self):
        self.rom = IntelHex()
        self.size = 0

    def OpenHex(self, filename):
        self.rom = IntelHex()
        try:
            self.rom.fromfile(filename, format='hex')
        except:
            return None

        self.size = len(self.rom.tobinarray())
        return True

    def OpenBin(self, filename):
        self.rom = IntelHex()

        try:
            self.rom = fromfile(filename, format='bin')
        except:
            return None

        self.size = len(self.rom.tobinarray())

        return True

    def Print(self):
        self.rom.dump()

    def ReadPage(self, numpage):
        return self.rom.tobinarray(start=numpage * self.pagesize,
                                   size=self.pagesize)

    def ReadBytes(self, address, count):
        return self.rom.tobinarray(start=address, size=count)
Example #5
0
    #a = input('Programming done. Do you wish to verify? y/n: ')
    #if  a == 'Y' or a == 'y':
    print('Reading...')
    #err = False
    conta = 0
    for i in range(0x0, 0x7FF):
        #addr = ih.addresses()[i]
        if conta == 256:
            conta = 0
            print(hex(i))
        conta += 1
        ser.write(b'\x54')
        ser.write(bytes([i // 256]))  # high address byte
        ser.write(bytes([i % 256]))  # low address byte
        k = int(ser.readline().decode('utf-8'), 16)
        ih[i] = k
        #print(k);
        #     if k != ih[addr]:
        #         print('Error at address' + hex(addr))
        #         print('Got %d, was %d' % (k, ih[addr]))
        #         err = True
        # if not err:
        #     print('Verification complete.')
        #
    ser.write(b'\x40')  # End programming
    print(ser.readline().decode('utf-8'))
    ih.dump()
    ih.write_hex_file(f)
    print('Done.')
Example #6
0
def decode(record):
    h = IntelHex()
    f = StringIO(record)
    h.loadhex(f)
    h.dump()
Example #7
0
            if cfgDic['secchar'] != 0 and cfgDic['seccharnum'] != 0:
                for i in range(cfgDic['secchar'], cfgDic['secchar'] + cfgDic['seccharnum']):
                    if SetWidth(ih, i) == -1:
                        print('Error, char not in range=>' + hex(i))
                        finish_flag = 0
                        break
            else:
                print('Second char range not present.')
            if finish_flag == 0: break
            if 'CopyCharTbl' in cfgDic:
                print('---Copy char From Table---')
                for i in range(len(cfgDic['CopyCharTbl'])):
                    print(hex(cfgDic['CopyCharTbl'][i][0]) + '=>' + hex(cfgDic['CopyCharTbl'][i][1]))
                    if charCopy(ih, cfgDic['CopyCharTbl'][i][0], cfgDic['CopyCharTbl'][i][1]) == -1:
                        break
        else:
            print('Error size font datain file: ' + cfgDic['asmfile'])
            break
        if cfgLine == 0: break
    if finish_flag == 1:
        if cfgDic['hexoutfile'] != '':
            ih.write_hex_file(cfgDic['hexoutfile'], False)
            print('Hex File wrote.')
        if cfgDic['txtoutfile'] != '':
            outFile = open(cfgDic['txtoutfile'], 'w')
            ih.dump(outFile)
            outFile.close()
            print('Txt File wrote.')
else:
    print("Error can't open file font2hex.cfg!")
Example #8
0
      name = self._name_of_address_thunk(address)
    return name, address

  def _adjust(self, op, args, addr):
    return (ibv(args[0] - addr - 1),)


if __name__ == '__main__':
  aa = AVRAssembly()
  aa.assemble_file('asm.py')

##  print ; print ; print
##  pprint.pprint(dict(aa.context))
##  print ; print ; print
##  pprint.pprint(dict(aa.data))
##  print ; print ; print
##  pprint.pprint(aa.pass2())
  data = aa.pass2()
  print ; print ; print
  pprint.pprint(data)
  from intelhex import IntelHex
  ih = IntelHex()
  for addr, val in data.iteritems():
    addr = int(addr, 16)
    if isinstance(val, str):
      ih.puts(addr, val)
    else:
      print 'non-str', addr, repr(val)
##  ih.dump(tofile=open('pavr.hex', 'w'))
  ih.dump()
Example #9
0
#!/usr/bin/python

import sys
from intelhex import IntelHex

print('Number of arguments:', len(sys.argv), 'arguments.')
print('Argument List:', str(sys.argv))
if (len(sys.argv) > 2):
    print(
        'Too many arguments, use this instead: python dump_hex.py <hex_file>.hex'
    )
    exit(-1)

hex_file = IntelHex()
hex_file.loadfile(sys.argv[1], format='hex')

file = open((str(sys.argv[1]) + ".txt"), 'w')

print('Dumping hex file contents into: ' + (str(sys.argv[1]) + ".txt"))
hex_file.dump(file)

file.close()
Example #10
0
#!/usr/bin/env python
#coding: utf-8

from intelhex import IntelHex
import sys

filename = sys.argv[1]

data = IntelHex()
data.loadhex(filename)
data.dump()
Example #11
0
def hexFilePayloadtoHumanReadableforDebugging(filename, format='hex'):
    ih = IntelHex()
    ih.fromfile(filename, format)
    ih.dump()
Example #12
0
#!/usr/bin/python

import sys
from intelhex import IntelHex

hexFile = IntelHex(sys.argv[1])

hexFile.dump()