예제 #1
0
class OpenVizslaBackend(ViewSBBackend):
    """ Capture backend that captures packets from OpenVizsla. """
    def __init__(self, capture_speed, suppress_packet_callback=None):
        """ Creates a new OpenVizsla capture backend.

        Args:
            capture_speed -- The speed at which to capture.
        """

        # TODO: validate
        self.capture_speed = capture_speed

        # Create a new OpenVizsla device; but don't yet try to connect to it.
        self.ov_device = OVDevice()

        # And create the packet sink we'll use to get data from the OV device.
        self.packet_sink = ViewSBEventSink(self, suppress_packet_callback)
        self.ov_device.register_sink(self.packet_sink)

    def run(self):
        """ Run an OpenVizsla capture. """

        self.ov_device.open(reconfigure_fpga=True)

        try:
            halt_callback = lambda _: self.termination_event.is_set()
            self.ov_device.run_capture(self.capture_speed,
                                       halt_callback=halt_callback)

        finally:
            self.ov_device.ensure_capture_stopped()
            self.ov_device.close()
예제 #2
0
    def __init__(self, capture_speed, suppress_packet_callback=None):
        """ Creates a new OpenVizsla capture backend.

        Args:
            capture_speed -- The speed at which to capture.
        """

        # TODO: validate
        self.capture_speed = capture_speed

        # Create a new OpenVizsla device; but don't yet try to connect to it.
        self.ov_device = OVDevice()

        # And create the packet sink we'll use to get data from the OV device.
        self.packet_sink = ViewSBEventSink(self, suppress_packet_callback)
        self.ov_device.register_sink(self.packet_sink)
예제 #3
0
    def __init__(self, capture_speed, suppress_packet_callback=None):
        """ Creates a new OpenVizsla capture backend.

        Args:
            capture_speed -- The speed at which to capture.
            suppress_packet_callback -- A callback function that determines
                which packets should be dropped before being submitted to the
                analysis queue.
        """

        # TODO: validate
        self.capture_speed = capture_speed

        # Create a new OpenVizsla device; but don't yet try to connect to it.
        self.ov_device = OVDevice()

        # And create the packet sink we'll use to get data from the OV device.
        self.packet_sink = ViewSBEventSink(self, suppress_packet_callback)
        self.ov_device.register_sink(self.packet_sink)
예제 #4
0
파일: openvizsla.py 프로젝트: zyp/luna
    def toolchain_program(self, products, name):
        """ Programs the OpenVizsla's FPGA. """

        try:
            from openvizsla import OVDevice
            from openvizsla.libov import HW_Init
        except ImportError:
            raise ImportError(
                "pyopenvizsla is required to program OpenVizsla boards")

        # Connect to our OpenVizsla...
        device = OVDevice()
        failed = device.ftdi.open()
        if failed:
            raise IOError("Could not connect to OpenVizsla!")

        # ... and pass it our bitstream.
        try:
            with products.extract(f"{name}.bit") as bitstream_file:
                HW_Init(device.ftdi, bitstream_file.encode('ascii'))
        finally:
            device.ftdi.close()
예제 #5
0
class OpenVizslaBackend(ViewSBBackend):
    """ Capture backend that captures packets from OpenVizsla. """

    UI_NAME = "openvizsla"
    UI_DESCRIPTION = "OpenVizsla hardware analyzers"

    @staticmethod
    def reason_to_be_disabled():
        # The main reason we'd not be available would be that pyopenvizsla
        # isn't importable (and thus likely not installed).
        if not 'ViewSBEventSink' in globals():
            return "pyopenvizsla (openvizsla driver) not available"

        return None

    @staticmethod
    def speed_from_string(string):
        speeds = {
            'high': OVCaptureUSBSpeed.HIGH,
            'full': OVCaptureUSBSpeed.FULL,
            'low': OVCaptureUSBSpeed.LOW
        }

        try:
            return speeds[string]
        except KeyError:
            return None

    @classmethod
    def parse_arguments(cls, args, parent_parser=[]):

        # Parse user input and try to extract our class options.
        parser = argparse.ArgumentParser(parents=parent_parser, add_help=False)
        parser.add_argument(
            '--speed',
            type=cls.speed_from_string,
            default='high',
            help=
            "the speed of the USB data to capture [valid: {high, full, low}]")
        args, leftover_args = parser.parse_known_args()

        if args.speed is None:
            sys.stderr.write("speed must be 'high', 'full', or 'low'\n")
            sys.exit(errno.EINVAL)

        #  Return the class and leftover arguments.
        return (args.speed, ), leftover_args

    def __init__(self, capture_speed, suppress_packet_callback=None):
        """ Creates a new OpenVizsla capture backend.

        Args:
            capture_speed -- The speed at which to capture.
            suppress_packet_callback -- A callback function that determines
                which packets should be dropped before being submitted to the
                analysis queue.
        """

        # TODO: validate
        self.capture_speed = capture_speed

        # Create a new OpenVizsla device; but don't yet try to connect to it.
        self.ov_device = OVDevice()

        # And create the packet sink we'll use to get data from the OV device.
        self.packet_sink = ViewSBEventSink(self, suppress_packet_callback)
        self.ov_device.register_sink(self.packet_sink)

    def run(self):
        """ Run an OpenVizsla capture. """

        self.ov_device.open(reconfigure_fpga=True)

        try:
            halt_callback = lambda _: self.termination_event.is_set()
            self.ov_device.run_capture(self.capture_speed,
                                       halt_callback=halt_callback)

        finally:
            self.ov_device.ensure_capture_stopped()
            self.ov_device.close()
예제 #6
0
class OpenVizslaBackend(ViewSBBackend):
    """ Capture backend that captures packets from OpenVizsla. """

    UI_NAME = "openvizsla"
    UI_DESCRIPTION = "OpenVizsla hardware analyzers"


    @staticmethod
    def reason_to_be_disabled():
        # The main reason we'd not be available would be that pyopenvizsla
        # isn't importable (and thus likely not installed).
        if not 'ViewSBEventSink' in globals():
            return "pyopenvizsla (openvizsla driver) not available"

        return None


    @staticmethod
    def speed_from_string(string):

        try:
            return SPEEDS[string]
        except KeyError:
            return string


    @classmethod
    def add_options(cls, parser):

        parser.add_argument('--speed', default='high', choices=SPEEDS.keys(),
            help="The speed of the USB data to capture.")


    def __init__(self, speed, suppress_packet_callback=None):
        """ Creates a new OpenVizsla capture backend.

        Args:
            capture_speed -- The speed at which to capture.
            suppress_packet_callback -- A callback function that determines
                which packets should be dropped before being submitted to the
                analysis queue.
        """

        super().__init__()

        # TODO: validate
        self.capture_speed = self.speed_from_string(speed)

        # Create a new OpenVizsla device; but don't yet try to connect to it.
        self.ov_device = OVDevice()

        # And create the packet sink we'll use to get data from the OV device.
        self.packet_sink = ViewSBEventSink(self, suppress_packet_callback)
        self.ov_device.register_sink(self.packet_sink)


    def run(self):
        """ Run an OpenVizsla capture. """

        self.ov_device.open(reconfigure_fpga=True)

        try:
            halt_callback = lambda _ : self.termination_event.is_set()
            self.ov_device.run_capture(self.capture_speed, halt_callback=halt_callback)

        finally:
            self.ov_device.ensure_capture_stopped()
            self.ov_device.close()