示例#1
0
文件: gui.py 项目: wardi/pyrf
 def open_device_dialog(self):
     self.discovery_widget = DiscoveryWidget(open_device_callback=self.open_device, name="Open Device")
     self.discovery_widget.show()
示例#2
0
文件: gui.py 项目: wardi/pyrf
class MainWindow(QtGui.QMainWindow):
    """
    The main window and menus
    """

    def __init__(self, dut_address=None, playback_filename=None):
        super(MainWindow, self).__init__()
        screen = QtGui.QDesktopWidget().screenGeometry()
        WINDOW_WIDTH = max(screen.width() * 0.7, MINIMUM_WIDTH)
        WINDOW_HEIGHT = max(screen.height() * 0.6, MINIMUM_HEIGHT)
        self.resize(WINDOW_WIDTH, WINDOW_HEIGHT)

        self.controller = SpecAController()
        self.init_menu_bar()
        self.initUI(dut_address, playback_filename)

    def initUI(self, dut_address, playback_filename):
        self.mainPanel = MainPanel(self.controller, self)

        self.setWindowTitle("PyRF RTSA")
        self.setCentralWidget(self.mainPanel)
        if dut_address:
            self.open_device(dut_address, True)
        elif playback_filename:
            self.start_playback(playback_filename)
        else:
            self.open_device_dialog()

    def init_menu_bar(self):
        open_action = QtGui.QAction("&Open Device", self)
        open_action.triggered.connect(self.open_device_dialog)
        play_action = QtGui.QAction("&Playback Recording", self)
        play_action.triggered.connect(self.open_playback_dialog)
        self.record_action = QtGui.QAction("Start &Recording", self)
        self.record_action.triggered.connect(self.start_recording)
        self.record_action.setDisabled(True)
        self.stop_action = QtGui.QAction("&Stop Recording", self)
        self.stop_action.triggered.connect(self.stop_recording)
        self.stop_action.setDisabled(True)
        exit_action = QtGui.QAction("&Exit", self)
        exit_action.setShortcut("Ctrl+Q")
        exit_action.triggered.connect(self.close)
        menubar = self.menuBar()
        file_menu = menubar.addMenu("&File")
        file_menu.addAction(open_action)
        file_menu.addAction(play_action)
        file_menu.addSeparator()
        file_menu.addAction(self.record_action)
        file_menu.addAction(self.stop_action)
        file_menu.addSeparator()
        file_menu.addAction(exit_action)

        def checkbox_action(apply_fn, text, option, default):
            action = QtGui.QAction(text, self)
            action.setCheckable(True)
            if default:
                action.toggle()
            action.triggered.connect(lambda: apply_fn(**{option: action.isChecked()}))
            return action

        self.view_menu = menubar.addMenu("&View")
        for text, option, default in VIEW_OPTIONS:
            self.view_menu.addAction(checkbox_action(self.controller.apply_options, text, option, default))

        self.dsp_menu = menubar.addMenu("&DSP Options")
        for text, option, default in DSP_OPTIONS:
            self.dsp_menu.addAction(checkbox_action(self.controller.apply_options, text, option, default))

        self.developer_menu = menubar.addMenu("D&eveloper Options")
        for text, option, default in DEVELOPER_OPTIONS:
            self.developer_menu.addAction(checkbox_action(self.controller.apply_options, text, option, default))

        self.controller.apply_options(
            **dict((option, default) for text, option, default in VIEW_OPTIONS + DSP_OPTIONS + DEVELOPER_OPTIONS)
        )

    def start_recording(self):
        self.stop_action.setDisabled(False)
        self.controller.start_recording()

    def stop_recording(self):
        self.stop_action.setDisabled(True)
        self.controller.stop_recording()

    def open_device_dialog(self):
        self.discovery_widget = DiscoveryWidget(open_device_callback=self.open_device, name="Open Device")
        self.discovery_widget.show()

    def open_playback_dialog(self):
        self.controller.set_device(None)
        playback_filename, file_type = QtGui.QFileDialog.getOpenFileName(
            self, "Play Recording", None, "VRT Packet Capture Files (*.vrt)"
        )
        if playback_filename:
            self.start_playback(playback_filename)

    def start_playback(self, playback_filename):
        self.record_action.setDisabled(True)
        self.stop_action.setDisabled(True)
        self.controller.set_device(playback_filename=playback_filename)
        self.show()

    @inlineCallbacks
    def open_device(self, name, ok):
        if not ok:
            self.show()
            return

        self.show()
        dut = WSA(connector=TwistedConnector(self._get_reactor()))
        yield dut.connect(name)
        self.setWindowTitle("PyRF RTSA Connected To: %s" % name)
        if hasattr(dut.properties, "MINIMUM_FW_VERSION") and parse_version(dut.fw_version) < parse_version(
            dut.properties.MINIMUM_FW_VERSION
        ):
            too_old = QtGui.QMessageBox()
            too_old.setText(
                "Your device firmware version is {0}"
                " but this application is expecting at least version"
                " {1}. Some features may not work properly".format(dut.fw_version, dut.properties.MINIMUM_FW_VERSION)
            )
            too_old.exec_()
        self.controller.set_device(dut)
        self.record_action.setDisabled(False)
        self.stop_action.setDisabled(True)

    def closeEvent(self, event):
        event.accept()
        self.controller.stop_recording()
        self.controller.set_device()
        self._get_reactor().stop()

    def _get_reactor(self):
        # late import because installReactor is being used
        from twisted.internet import reactor

        return reactor
示例#3
0
def main():
    app = QtGui.QApplication(sys.argv)
    ex = DiscoveryWidget()
    ex.show()
    sys.exit(app.exec_())
示例#4
0
文件: qt_discovery.py 项目: Sout/pyrf
def main():
    app = QtGui.QApplication(sys.argv)
    ex = DiscoveryWidget()
    ex.show()
    sys.exit(app.exec_())
示例#5
0
class MainWindow(QtGui.QMainWindow):
    """
    The main window and menus
    """
    def __init__(self,
                 dut_address=None,
                 playback_filename=None,
                 developer_menu=False):
        super(MainWindow, self).__init__()
        screen = QtGui.QDesktopWidget().screenGeometry()
        WINDOW_WIDTH = max(screen.width() * 0.7, MINIMUM_WIDTH)
        WINDOW_HEIGHT = max(screen.height() * 0.6, MINIMUM_HEIGHT)
        self.resize(WINDOW_WIDTH, WINDOW_HEIGHT)

        self.controller = SpecAController(developer_menu)
        self.controller.device_change.connect(self.device_changed)
        self.init_menu_bar(developer_menu)
        self.initUI(dut_address, playback_filename)

    def initUI(self, dut_address, playback_filename):
        self.mainPanel = MainPanel(self.controller, self)

        self.setWindowTitle('PyRF RTSA: ' + __version__)
        self.setCentralWidget(self.mainPanel)
        if dut_address:
            self.open_device(dut_address, True)
        elif playback_filename:
            self.start_playback(playback_filename)
        else:
            self.open_device_dialog()

    def init_menu_bar(self, developer_menu=False):

        open_action = QtGui.QAction('&Open Device', self)
        open_action.triggered.connect(self.open_device_dialog)
        play_action = QtGui.QAction('&Playback Recording', self)
        play_action.triggered.connect(self.open_playback_dialog)
        self.record_action = QtGui.QAction('Start &Recording', self)
        self.record_action.triggered.connect(self.start_recording)
        self.record_action.setDisabled(True)
        self.stop_action = QtGui.QAction('&Stop Recording', self)
        self.stop_action.triggered.connect(self.stop_recording)
        self.stop_action.setDisabled(True)
        self.start_csv_export = QtGui.QAction('&Start Exporting CSV', self)
        self.start_csv_export.triggered.connect(self.start_csv)
        self.stop_csv_export = QtGui.QAction('&Stop Exporting CSV', self)
        self.stop_csv_export.triggered.connect(self.stop_csv)
        self.stop_csv_export.setDisabled(True)
        self.device_info = QtGui.QAction('Device &Information', self)
        self.device_info.triggered.connect(self.get_device_information)
        self.device_info.setDisabled(True)
        exit_action = QtGui.QAction('&Exit', self)
        exit_action.setShortcut('Ctrl+Q')
        exit_action.triggered.connect(self.close)
        menubar = self.menuBar()
        file_menu = menubar.addMenu('&File')
        file_menu.addAction(open_action)
        file_menu.addAction(play_action)
        file_menu.addSeparator()
        file_menu.addAction(self.record_action)
        file_menu.addAction(self.stop_action)
        file_menu.addAction(self.start_csv_export)
        file_menu.addAction(self.stop_csv_export)
        file_menu.addSeparator()
        file_menu.addAction(self.device_info)
        file_menu.addSeparator()
        file_menu.addAction(exit_action)

        def checkbox_action(apply_fn, text, option, default):
            action = QtGui.QAction(text, self)
            action.setCheckable(True)
            if default:
                action.toggle()
            action.triggered.connect(
                lambda: apply_fn(**{option: action.isChecked()}))
            return action

        self.view_menu = menubar.addMenu('&View')
        for text, option, default in VIEW_OPTIONS:
            self.view_menu.addAction(
                checkbox_action(self.controller.apply_options, text, option,
                                default))
        self.view_menu.addSeparator()

        if developer_menu:
            self.developer_menu = menubar.addMenu('D&eveloper Options')
            for text, option, default in DEVELOPER_OPTIONS:
                self.developer_menu.addAction(
                    checkbox_action(self.controller.apply_options, text,
                                    option, default))

        self.controller.apply_options(**dict(
            (option, default)
            for text, option, default in VIEW_OPTIONS + DEVELOPER_OPTIONS))

    def start_recording(self):
        self.stop_action.setDisabled(False)
        filename = time.strftime('recording-%Y-%m-%d-%H%M%S')
        names = glob.glob(filename + '*.vrt')
        if (filename + '.vrt') in names:
            count = names.count(filename)
            filename += '(%d)' % count
        filename += '.vrt'
        record_filename, file_type = QtGui.QFileDialog.getSaveFileName(
            self,
            "Create Recording",
            filename,
            "VRT Packet Capture Files (*.vrt)",
        )
        if record_filename:
            self.controller.start_recording(record_filename)

    def stop_recording(self):
        self.stop_action.setDisabled(True)
        self.controller.stop_recording()

    def open_device_dialog(self):
        self.discovery_widget = DiscoveryWidget(
            open_device_callback=self.open_device, name="Open Device")
        self.discovery_widget.show()

    def open_playback_dialog(self):
        self.controller.set_device(None)
        playback_filename, file_type = QtGui.QFileDialog.getOpenFileName(
            self, "Play Recording", None, "VRT Packet Capture Files (*.vrt)")
        if playback_filename:
            self.start_playback(playback_filename)

    def start_csv(self):
        filename = time.strftime('csv-%Y-%m-%d-%H%M%S')
        names = glob.glob(filename + '*.csv')

        if (filename + '.csv') in names:
            count = names.count(filename)
            filename += '(%d)' % count
        filename += '.csv'
        playback_filename, file_type = QtGui.QFileDialog.getSaveFileName(
            self, "CSV File", filename, "CSV File (*.csv)")

        if playback_filename:
            self.controller.start_csv_export(playback_filename)
            self.start_csv_export.setDisabled(True)
            self.stop_csv_export.setDisabled(False)

    def stop_csv(self):
        self.start_csv_export.setDisabled(False)
        self.stop_csv_export.setDisabled(True)
        self.controller.stop_csv_export()

    def start_playback(self, playback_filename):
        self.record_action.setDisabled(True)
        self.stop_action.setDisabled(True)
        self.device_info.setDisabled(False)
        self._device_address = playback_filename
        self.controller.set_device(playback_filename=playback_filename)
        self.setWindowTitle('PyRF RTSA: ' + __version__ +
                            ' Playback Recording: ' + playback_filename)
        self.show()

    def device_changed(self, dut):
        if not dut:
            self._device_address = None
            self._device_id = None
        self._device_id = dut.device_id

    def get_device_information(self):
        info = QtGui.QMessageBox()
        device_parts = self._device_id.split(',') + ['', '', '']
        hardware, serial, firmware = device_parts[1:4]
        info.setText('''
Connected to: %s

Serial number: %s
Hardware version: %s
Firmware version: %s'''.strip() % (
            self._device_address,
            serial,
            hardware,
            firmware,
        ))
        info.exec_()

    @inlineCallbacks
    def open_device(self, name, ok):
        if not ok:
            self.show()
            return

        self.show()
        dut = WSA(connector=TwistedConnector(self._get_reactor()))
        yield dut.connect(name)
        self._device_address = name
        self.setWindowTitle('PyRF RTSA %s Connected To: %s' %
                            (__version__, name))
        if hasattr(dut.properties, 'MINIMUM_FW_VERSION') and parse_version(
                dut.fw_version) < parse_version(
                    dut.properties.MINIMUM_FW_VERSION):
            too_old = QtGui.QMessageBox()
            too_old.setText(
                'Your device firmware version is {0}'
                ' but this application is expecting at least version'
                ' {1}. Some features may not work properly'.format(
                    dut.fw_version, dut.properties.MINIMUM_FW_VERSION))
            too_old.exec_()
        self.controller.set_device(dut)
        self.record_action.setDisabled(False)
        self.stop_action.setDisabled(True)
        self.device_info.setDisabled(False)

    def closeEvent(self, event):
        event.accept()
        self.controller.stop_recording()
        self.controller.set_device()
        self._get_reactor().stop()

    def _get_reactor(self):
        # late import because installReactor is being used
        from twisted.internet import reactor
        return reactor
示例#6
0
 def open_device_dialog(self):
     self.discovery_widget = DiscoveryWidget(
         open_device_callback=self.open_device, name="Open Device")
     self.discovery_widget.show()
示例#7
0
文件: gui.py 项目: jgobuyan/pyrf
class MainWindow(QtGui.QMainWindow):
    """
    The main window and menus
    """
    def __init__(self, dut_address=None, playback_filename=None,
            developer_menu=False):
        super(MainWindow, self).__init__()
        screen = QtGui.QDesktopWidget().screenGeometry()
        WINDOW_WIDTH = max(screen.width() * 0.7, MINIMUM_WIDTH)
        WINDOW_HEIGHT = max(screen.height() * 0.6, MINIMUM_HEIGHT)
        self.resize(WINDOW_WIDTH,WINDOW_HEIGHT)

        self.controller = SpecAController(developer_menu)
        self.controller.device_change.connect(self.device_changed)
        self.init_menu_bar(developer_menu)
        self.initUI(dut_address, playback_filename)

    def initUI(self, dut_address, playback_filename):
        self.mainPanel = MainPanel(self.controller, self)

        self.setWindowTitle('PyRF RTSA: ' + __version__)
        self.setCentralWidget(self.mainPanel)
        if dut_address:
            self.open_device(dut_address, True)
        elif playback_filename:
            self.start_playback(playback_filename)
        else:
            self.open_device_dialog()

    def init_menu_bar(self, developer_menu=False):

        open_action = QtGui.QAction('&Open Device', self)
        open_action.triggered.connect(self.open_device_dialog)
        play_action = QtGui.QAction('&Playback Recording', self)
        play_action.triggered.connect(self.open_playback_dialog)
        self.record_action = QtGui.QAction('Start &Recording', self)
        self.record_action.triggered.connect(self.start_recording)
        self.record_action.setDisabled(True)
        self.stop_action = QtGui.QAction('&Stop Recording', self)
        self.stop_action.triggered.connect(self.stop_recording)
        self.stop_action.setDisabled(True)
        self.start_csv_export = QtGui.QAction('&Start Exporting CSV', self)
        self.start_csv_export.triggered.connect(self.start_csv)
        self.stop_csv_export = QtGui.QAction('&Stop Exporting CSV', self)
        self.stop_csv_export.triggered.connect(self.stop_csv)
        self.stop_csv_export.setDisabled(True)
        self.device_info = QtGui.QAction('Device &Information', self)
        self.device_info.triggered.connect(self.get_device_information)
        self.device_info.setDisabled(True)
        exit_action = QtGui.QAction('&Exit', self)
        exit_action.setShortcut('Ctrl+Q')
        exit_action.triggered.connect(self.close)
        menubar = self.menuBar()
        file_menu = menubar.addMenu('&File')
        file_menu.addAction(open_action)
        file_menu.addAction(play_action)
        file_menu.addSeparator()
        file_menu.addAction(self.record_action)
        file_menu.addAction(self.stop_action)
        file_menu.addAction(self.start_csv_export)
        file_menu.addAction(self.stop_csv_export)
        file_menu.addSeparator()
        file_menu.addAction(self.device_info)
        file_menu.addSeparator()
        file_menu.addAction(exit_action)

        def checkbox_action(apply_fn, text, option, default):
            action = QtGui.QAction(text, self)
            action.setCheckable(True)
            if default:
                action.toggle()
            action.triggered.connect(lambda:
                apply_fn(**{option: action.isChecked()}))
            return action

        self.view_menu = menubar.addMenu('&View')
        for text, option, default in VIEW_OPTIONS:
            self.view_menu.addAction(checkbox_action(
                self.controller.apply_options, text, option, default))
        self.view_menu.addSeparator()

        if developer_menu:
            self.developer_menu = menubar.addMenu('D&eveloper Options')
            for text, option, default in DEVELOPER_OPTIONS:
                self.developer_menu.addAction(checkbox_action(
                    self.controller.apply_options, text, option, default))

        self.controller.apply_options(
            **dict((option, default) for text, option, default
            in VIEW_OPTIONS + DEVELOPER_OPTIONS))

    def start_recording(self):
        self.stop_action.setDisabled(False)
        filename = time.strftime('recording-%Y-%m-%d-%H%M%S')
        names = glob.glob(filename + '*.vrt')
        if (filename + '.vrt') in names:
            count = names.count(filename)
            filename += '(%d)' % count
        filename += '.vrt'
        record_filename, file_type = QtGui.QFileDialog.getSaveFileName(self,
            "Create Recording",
            filename,
            "VRT Packet Capture Files (*.vrt)",
            )
        if record_filename:
            self.controller.start_recording(record_filename)

    def stop_recording(self):
        self.stop_action.setDisabled(True)
        self.controller.stop_recording()

    def open_device_dialog(self):
        self.discovery_widget = DiscoveryWidget(
            open_device_callback=self.open_device,
            name="Open Device")
        self.discovery_widget.show()

    def open_playback_dialog(self):
        self.controller.set_device(None)
        playback_filename, file_type = QtGui.QFileDialog.getOpenFileName(self,
            "Play Recording", None, "VRT Packet Capture Files (*.vrt)")
        if playback_filename:
            self.start_playback(playback_filename)

    def start_csv(self):
        filename = time.strftime('csv-%Y-%m-%d-%H%M%S')
        names = glob.glob(filename + '*.csv')

        if (filename + '.csv') in names:
            count = names.count(filename)
            filename += '(%d)' % count
        filename += '.csv'
        playback_filename, file_type = QtGui.QFileDialog.getSaveFileName(self,
            "CSV File", filename, "CSV File (*.csv)")

        if playback_filename:
            self.controller.start_csv_export(playback_filename)
            self.start_csv_export.setDisabled(True)
            self.stop_csv_export.setDisabled(False)

    def stop_csv(self):
        self.start_csv_export.setDisabled(False)
        self.stop_csv_export.setDisabled(True)
        self.controller.stop_csv_export()

    def start_playback(self, playback_filename):
        self.record_action.setDisabled(True)
        self.stop_action.setDisabled(True)
        self.device_info.setDisabled(False)
        self._device_address = playback_filename
        self.controller.set_device(playback_filename=playback_filename)
        self.setWindowTitle('PyRF RTSA: ' + __version__ +' Playback Recording: ' + playback_filename)
        self.show()

    def device_changed(self, dut):
        if not dut:
            self._device_address = None
            self._device_id = None
        self._device_id = dut.device_id

    def get_device_information(self):
        info = QtGui.QMessageBox()
        device_parts = self._device_id.split(',') + ['', '', '']
        hardware, serial, firmware = device_parts[1:4]
        info.setText('''
Connected to: %s

Serial number: %s
Hardware version: %s
Firmware version: %s'''.strip() % (
                self._device_address,
                serial,
                hardware,
                firmware,
                ))
        info.exec_()

    @inlineCallbacks
    def open_device(self, name, ok):
        if not ok:
            self.show()
            return

        self.show()
        dut = WSA(connector=TwistedConnector(self._get_reactor()))
        yield dut.connect(name)
        self._device_address = name
        self.setWindowTitle('PyRF RTSA %s Connected To: %s' % (__version__ , name))
        if hasattr(dut.properties, 'MINIMUM_FW_VERSION') and parse_version(
                dut.fw_version) < parse_version(dut.properties.MINIMUM_FW_VERSION):
            too_old = QtGui.QMessageBox()
            too_old.setText('Your device firmware version is {0}'
                ' but this application is expecting at least version'
                ' {1}. Some features may not work properly'.format(
                dut.fw_version, dut.properties.MINIMUM_FW_VERSION))
            too_old.exec_()
        self.controller.set_device(dut)
        self.record_action.setDisabled(False)
        self.stop_action.setDisabled(True)
        self.device_info.setDisabled(False)

    def closeEvent(self, event):
        event.accept()
        self.controller.stop_recording()
        self.controller.set_device()
        self._get_reactor().stop()

    def _get_reactor(self):
        # late import because installReactor is being used
        from twisted.internet import reactor
        return reactor