Beispiel #1
0
class GPSPoller(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)
        self.session = None
        self.current_value = Location()
        self._stopped = False
        self._skipped = 0

    def connect(self):
        if self.session:
            return
        try:
            self.session = GPS(mode=WATCH_ENABLE)
        except OSError:
            return

    def get_location(self):
        return self.current_value

    def stop(self):
        self._stopped = True

    def run(self):
        while not self._stopped:
            self.current_value.check()
            self.connect()
            if not self.session:
                time.sleep(1)
                continue
            try:
                v = self.session.next()
                if 'lat' in dict(v):
                    alt = None
                    if 'alt' in dict(v):
                        alt = v['alt']
                    self.current_value.set(v['lat'], v['lon'], v['speed'], alt)
                self._skipped = 0
            except StopIteration:
                self._skipped += 1
                if self._skipped > 20:
                    self.session = None
                time.sleep(0.5)
            except client:
                logger.exception("Client exception")
                time.sleep(0.5)
            except Exception:
                logger.exception("Unknown exception")
                time.sleep(0.5)
Beispiel #2
0
class GPSPoller(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.session = None
        self.current_value = Location()
        self._stopped = False
        self._skipped = 0

    def connect(self):
        if self.session:
            return
        try:
            self.session = GPS(mode=WATCH_ENABLE)
        except OSError:
            return

    def get_location(self):
        return self.current_value

    def stop(self):
        self._stopped = True

    def run(self):
        while not self._stopped:
            self.current_value.check()
            self.connect()
            if not self.session:
                time.sleep(1)
                continue
            try:
                v = self.session.next()
                if 'lat' in dict(v):
                    alt = None
                    if 'alt' in dict(v):
                        alt = v['alt']
                    self.current_value.set(v['lat'], v['lon'], v['speed'], alt)
                self._skipped = 0
            except StopIteration:
                self._skipped += 1
                if self._skipped > 20:
                    self.session = None
                time.sleep(0.5)
            except client:
                logger.exception("Client exception")
                time.sleep(0.5)
            except Exception:
                logger.exception("Unknown exception")
                time.sleep(0.5)