def setProtocol(self, protocolName): global memoryFields, instructionSets self.memoryFieldsKey = protocolName self.memoryInfo = {'fieldNames': [], 'memorySize': 0} if protocolName not in memoryFields: self.log(0, 'Unknown memory structure "%s"' % protocolName) return index = 0 address = 0 converter = DataConverter() for memoryField in memoryFields[protocolName]: fieldBaseType = memoryField['type'].split(' ')[-1] arrayElements = fieldBaseType.split('[') if len(arrayElements) > 1: fieldBaseType = arrayElements[0] arraySize = int(arrayElements[1].split(']')[0]) else: arraySize = 1 typeSize = converter.getByteSize(fieldBaseType) fieldSize = typeSize * arraySize self.memoryInfo['fieldNames'].append(memoryField['name']) self.memoryInfo[address] = { 'name': memoryField['name'], 'size': fieldSize, 'type': memoryField['type'].split('[')[0], 'numElements': arraySize, 'writable': memoryField.get('writable', False), 'address': address, 'index': index, 'makeToolTip': memoryField.get('makeToolTip', repr), } self.memoryInfo[memoryField['name']] = self.memoryInfo[address] index += 1 address += fieldSize self.memoryInfo['memorySize'] = address self.instructionName = {} self.instructionCode = {} self.instructionDescription = {} for instruction in instructionSets.get(protocolName, instructionSets['Default']): self.instructionName[instruction[0]] = instruction[ 1] # code to name self.instructionCode[instruction[1]] = instruction[ 0] # name to code self.instructionDescription[instruction[0]] = instruction[ 2] # code to description self.instructionDescription[instruction[1]] = instruction[ 2] # name to description
def __init__(self, serialProtocol, parent=None): QMainWindow.__init__(self) # setup member variables self.serialProtocol = serialProtocol self.servos = {} self.columns = {} self.updating = False self.listenOnly = False self.timerDataRequest = QTimer(self) self.timerDataRequest.timeout.connect(self.timerDataRequest_timeout) # setup ui self.setupUi(self) self.buttonDataLog.setVisible(False) self.setWindowIcon( QIcon(os.path.join(BASE_PATH, 'res', 'SerialTool.png'))) self.comboProtocolName.addItems( self.serialProtocol.availableProtocolNames) self.restoreGuiSettings() # open configuration file pathToScript = os.path.abspath( os.path.realpath(os.path.dirname(sys.argv[0]))) nameOfScript = os.path.basename(sys.argv[0]) self.configuration = Configuration( os.path.join(pathToScript, '%s.conf' % nameOfScript)) self.converter = DataConverter(bigEndian=False) # restore data from configuration file self.restoreData() # init log view self.logView = LogView(self, self.textLogView) self.spinLogLevel.valueChanged.connect(self.logView.logLevelChanged) self.logView.logLevelChanged.emit(self.spinLogLevel.value( )) # emit signal manually to set initial value # init data plot self.spinDataPlotInterval.valueChanged.connect( self.dataPlotIntervalChanged) self.buttonDataPlotClear.clicked.connect(self.dataPlotClear) self.buttonDataPlotPause.toggled.connect(self.dataPlotTogglePause) self.buttonDataPlotOsciMode.toggled.connect( self.dataPlot.toggleOscilloscopeMode) self.subscribedData = {} self.initTable()