def test_row_bytes(self): ihex = IHex() self.assertEqual(ihex.write(), ':00000001FF\r\n') ihex.insert_data(6, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuwvxyz') self.assertEqual(ihex.write(), ':100006004142434445464748494A4B4C4D4E4F5062\r\n' \ ':100016005152535455565758595A30313233343554\r\n' \ ':10002600363738396162636465666768696A6B6C1E\r\n' \ ':0E0036006D6E6F707172737475777678797A6B\r\n' \ ':00000001FF\r\n') ihex.set_row_bytes(8) self.assertEqual(ihex.write(), ':080006004142434445464748CE\r\n' \ ':08000E00494A4B4C4D4E4F5086\r\n' \ ':0800160051525354555657583E\r\n' \ ':08001E00595A303132333435F8\r\n' \ ':0800260036373839616263646A\r\n' \ ':08002E0065666768696A6B6C86\r\n' \ ':080036006D6E6F70717273743E\r\n' \ ':06003E0075777678797AEF\r\n' \ ':00000001FF\r\n') ihex.set_row_bytes(32) self.assertEqual(ihex.write(), ':200006004142434445464748494A4B4C4D4E4F505152535455565758595A303132333435CC\r\n' \ ':1E002600363738396162636465666768696A6B6C6D6E6F707172737475777678797ABF\r\n' \ ':00000001FF\r\n')
def opProgram(self, data, addr_start=0): addr_hi_prev = None addr = addr_start while data: addr_hi, addr_lo = divmod(addr, 0x10000) if addr_hi != addr_hi_prev: addr_hi_prev = addr_hi cmd = self._protocol.getCmd('select_memory_page', PPPP=addr_hi) self._opDotCmd(cmd) addr_end = addr_lo + len(data) if addr_end >= 0x10000: addr_end = 0xffff size = addr_end + 1 - addr_lo buf, data = data[:size], data[size:] cmd = self._protocol.getCmd('program_start', PPPP=addr_lo, QQQQ=addr_end) self._opDotCmd(cmd) self._wdelayHack() addr = addr + size # send data ihex = IHex() ihex.insert_data(addr_lo, buf) ihex.set_row_bytes(255) buf = ihex.write() # split to lines, remove, empty strings buf = [b for b in buf.splitlines() if b] # remove hex end if file buf = buf[:-1] for d in buf: self._opDotCmd(str(d, 'ascii').upper()) self._wdelayHack()
def to_ihex(self, as_str=True): self._assemble() ihex = IHex() ihex.insert_data(self.offset, self._code_as_bytes()) if as_str: return ihex.write() else: return ihex