class SaleaeEventListener(object):
    def __init__(self,):
        self.analyzer = SquareWaveAnalyzer(CHANNEL_NUMBER)
        self.analyzing = False

    def on_event(self, event, device_id):
        """Called when an event is broadcast from the Saleae API wrapper."""
        if event.id == EVENT_ID_ONCONNECT:
            device = PyDevicesManager.get_device(device_id)
            if device is not None:
                print("Device connected with id %d" % device_id)
                device.set_analyzer(self.analyzer)
                # There is a long-standing issue with the Logic16 device API where the number of channels
                # seems to matter, and also needs to be a power of two. Using 3 channels causes major
                # fluctuations in data, but using 4 channels seems much more stable.
                device.set_active_channels(list(range(4)))
                # Arbitrarily pick 40MHz as the sampling rate
                device.set_sampling_rate_hz(40000000)
                device.set_use_5_volts(False)
                print("Analyzing channel %d with %s" % (CHANNEL_NUMBER, self.analyzer.get_name()))
                device.read_start()
                self.analyzing = True
        elif event.id == EVENT_ID_ONDISCONNECT:
            self.stop()
        elif event.id == EVENT_ID_ONERROR:
            print("\nDevice: %d, Event ID: %d, Event Name: %s, Message: %s" % (device_id, event.id, event.name, event.data))

    def stop(self,):
        self.analyzing = False
        if self.analyzer is not None:
            print("\nShutting down %s" % self.analyzer.get_name())
            iface = self.analyzer.get_interface()
            if iface is not None:
                iface.stop()
 def __init__(self,):
     self.analyzer = SquareWaveAnalyzer(CHANNEL_NUMBER)
     self.analyzing = False