Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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()