# HG changeset patch # User Windel Bouwman # Date 1358001790 -3600 # Node ID d38729d35c4ddaa75e9622da841c05007037b3b0 # Parent 9f1094b1587aefff93b34db6b899fe1e57b5c22f New implementation of hexfile viewer diff -r 9f1094b1587a -r d38729d35c4d python/hexviewer.py --- a/python/hexviewer.py Sat Jan 12 12:52:18 2013 +0100 +++ b/python/hexviewer.py Sat Jan 12 15:43:10 2013 +0100 @@ -60,11 +60,62 @@ self.hexfile = hf self.update() +class HexFileModel(QAbstractTableModel): + def __init__(self): + super().__init__() + self.hexFile = None + def setHexFile(self, hf): + self.hexFile = hf + self.modelReset.emit() + def getHexFile(self): + return self.hexFile + HexFile = property(getHexFile, setHexFile) + def rowCount(self, parent): + if self.hexFile: + region = self.hexFile.regions[-1] + r = len(region.data) + s = r >> 4 + if r % 16 != 0: + s += 1 + return s + return 0 + def columnCount(self, parent): + return 16 + 1 + def headerData(self, section, orientation, role): + if role == Qt.DisplayRole: + if orientation == Qt.Horizontal: + if section in range(16): + return '{0:X}'.format(section) + elif section == 16: + return 'Ascii' + elif orientation == Qt.Vertical: + region = self.hexFile.regions[-1] + addr = region.address + 16 * section + return '0x{0:X}'.format(addr) + def data(self, index, role): + if index.isValid(): + row = index.row() + col = index.column() + region = self.hexFile.regions[-1] + chunk = region.data[row * 16: row * 16 + 16] + + if role == Qt.DisplayRole: + if col in range(16): + return '{0:02X}'.format(chunk[col]) + else: + s = chunk.decode(encoding='ascii', errors='replace') + return s + class BinViewMain(QMainWindow): def __init__(self): super().__init__() self.bv = BinViewer() - self.setCentralWidget(self.bv) + #self.setCentralWidget(self.bv) + tableView = QTableView() + self.setCentralWidget(tableView) + self.hfm = HexFileModel() + self.hfm.modelReset.connect(tableView.resizeColumnsToContents) + tableView.setModel(self.hfm) mb = self.menuBar() fileMenu = mb.addMenu("File") @@ -86,9 +137,11 @@ app = QApplication(sys.argv) bv = BinViewMain() bv.show() - bv.bv.setHexFile(hexfile.HexFile('audio.hex')) + hf = hexfile.HexFile('audio.hex') + #bv.bv.setHexFile( + bv.hfm.HexFile = hf qpv = QtPropertyViewer() qpv.propertyModel.InspectedWidget = bv - qpv.show() + #qpv.show() app.exec_() diff -r 9f1094b1587a -r d38729d35c4d python/stlink.py --- a/python/stlink.py Sat Jan 12 12:52:18 2013 +0100 +++ b/python/stlink.py Sat Jan 12 15:43:10 2013 +0100 @@ -29,6 +29,7 @@ DEBUG_ENTER_SWD = 0xa3 DEBUG_GETSTATUS = 0x01 DEBUG_RESETSYS = 0x03 +DEBUG_READALLREGS = 0x04 DEBUG_READREG = 0x5 DEBUG_WRITEREG = 0x6 DEBUG_READMEM_32BIT = 0x7 @@ -104,6 +105,7 @@ if len(stlink2s) > 1: print('More then one stlink2 found, picking first one') stlink2 = stlink2s[0] + assert checkDevice(stlink2) self.stlink2 = stlink2 def open(self): self.devHandle = self.stlink2.open() @@ -395,6 +397,12 @@ cmd[0:3] = DEBUG_COMMAND, DEBUG_READREG, reg reply = self.send_recv(cmd, 4) return struct.unpack('