1 # sat_monitor - zavai satellite monitor
3 # Copyright (C) 2009 Enrico Zini <enrico@enricozini.org>
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 from gettext import gettext as _
27 2: _("signal acquired"),
28 3: _("signal unusable"),
30 5: _("code&carrier lock"),
31 6: _("code&carrier lock"),
32 7: _("receiving data")
35 class SatelliteMonitor(zavai.Applet):
36 def __init__(self, registry, **kw):
37 super(SatelliteMonitor, self).__init__(registry,
38 "menu.main.gps.satellite_monitor",
39 _("Satellite monitor"))
43 self.store = gtk.ListStore(str, str, str, str, str, str, str, str, str, str, str)
44 self.view = gtk.TreeView(self.store)
45 renderer = gtk.CellRendererText()
46 for idx, name in enumerate((_("CH"), _("ID"), _("SN"), _("ELE"), _("AZI"),
47 _("Used"), _("Diff"), _("Alm"), _("Eph"),
48 _("Bad"), _("Status"))):
49 col = gtk.TreeViewColumn(name)
50 col.pack_start(renderer, False)
51 col.add_attribute(renderer, "text", idx)
52 self.view.append_column(col)
56 self.gps = self.zavai_registry.resource("gps")
58 def start(self, *args):
61 self.gps.monitor.connect("satellites", self.on_ubxdebug_packet)
63 def stop(self, *args):
64 self.gps.monitor.disconnect("satellites", self.on_ubxdebug_packet)
66 def on_ubxdebug_packet(self, clid, length, data):
67 # In zhone it is cbUBXDebugPacket
68 #if clid == "NAV-STATUS" and data:
69 # i = ["%s: %d" % (k, data[0][k]) for k in sorted(data[0].keys())]
70 # zavai.info("Status:", " ".join(i))
71 ## if data[0]['TTFF']:
72 ## zavai.info("TTFF: %f", data[0]['TTFF']/1000.0)
73 if clid == "NAV-SVINFO":
74 self.handle_ubx_sat_data(data[1:])
76 # zavai.info("gps got ubxdebug packet", clid)
77 # zavai.info("DATA:", data)
79 def handle_ubx_sat_data(self, ubxinfo):
80 #zavai.info("CH ID SN ELE AZI Used Diff Alm Eph Bad Status")
83 if sv["CNO"] == 0: continue
85 used = sv["Flags"] & 0x01
86 diff = sv["Flags"] & 0x02
87 almoreph = sv["Flags"] & 0x04
88 eph = sv["Flags"] & 0x08
89 bad = sv["Flags"] & 0x10
90 qi = ("%i: " % sv["QI"]) + SAT_QI_NAMES.get(sv["QI"], _("Unknown"))
97 used and "used" or "",
98 diff and "diff" or "",
99 almoreph and "alm" or "",
104 def init(conf = None, registry = None, **kw):
105 registry.register(SatelliteMonitor(registry))