summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am3
-rw-r--r--gpscap.ini21
-rw-r--r--gpscap.py52
3 files changed, 67 insertions, 9 deletions
diff --git a/Makefile.am b/Makefile.am
index 6307aa23..da3b00d5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -333,7 +333,8 @@ EXTRA_DIST = \
setup.py \
packet_states.h \
libgps.pc.in \
- libgpsd.pc.in
+ libgpsd.pc.in \
+ gpscap.ini
CLEANFILES = $(BUILT_SOURCES) floattest *.core $(PYEXTENSIONS)
diff --git a/gpscap.ini b/gpscap.ini
index f70364b2..7f0fb147 100644
--- a/gpscap.ini
+++ b/gpscap.ini
@@ -78,21 +78,23 @@ tested = 2.34
[SiRF-2]
type = engine
description = Version 2 of the SiRF GPS engine
-uses = SiRF-2
-nmea = 2.2 # Later versions may do 2.3
+engine = SiRF-2
+# Later versions may do 2.3
+nmea = 2.2
uses = GenericSiRF
tested = 2.37
[SiRF-3]
type = engine
description = Version 3 of the SiRF GPS engine
-uses = SiRF-3
+engine = SiRF-3
nmea = 3.01
uses = GenericSiRF
tested = 2.37
[Garmin]
type = engine
+engine = Garmin
description = There are several versions; the differences are not clear.
reference = http://www.garmin.com/support/commProtocol.html
@@ -255,7 +257,7 @@ vendor_site = http://www.unitraq.com/
[GBT709]
type = device
vendor = Altina
-description = handset
+packaging = handset
reference = http://www.altina.com/produkty.php?destCatId=&mainCatId=13&subCatId=&prId=19
interfaces = Bluetooth
btglitch = yes
@@ -299,6 +301,7 @@ type = device
vendor = Billionton
packaging = GPS mouse
reference = http://www.billionton.com/english/product/CF-GPS.htm
+uses = SiRF-2
interfaces = CF
tested = 2.16
notes = Uses SiRF firmware version 220.006.000ES. Accepts WAAS Mode Disable
@@ -315,8 +318,9 @@ packaging = GPS mouse
reference = http://www.cpit.com/en/GP-27.html
uses = Nemerix
interfaces = Bluetooth
+tested = 2.28
btglitch = True
-notes = <td> Reported by Tobias Minich &lt;belgabor&#x40;gmx.de&gt; <ul>
+notes = Reported by Tobias Minich &lt;belgabor&#x40;gmx.de&gt; <ul>
<li>There are proprietary PNMRX{30[0124],603} sentences that are only sent
on change or by request</li>
<li>Several sentences can be sent to the device to change settings or
@@ -428,6 +432,7 @@ notes = The 17N has been discontinued and replaced by the 17HVS.
[Garmin GPS-17HVS]
type = device
vendor = Garmin
+packaging = GPS mouse
reference = https://buy.garmin.com/shop/shop.do?cID=158&pID=8630
engine = Unknown
interfaces = RS232
@@ -484,6 +489,7 @@ reference = http://au.geocities.com/glennbaddeley/gps/data/GPS38_OwnersManualAnd
uses = Garmin
interfaces = RS232
tested = regression
+nmea = 2.0
discontinued = True
notes = Reported by Pascal F. Martin &lt;pascal.martin&#x40;cox.net&gt;
@@ -567,6 +573,7 @@ notes = This device does not have real-time data output, and is incompatible wit
[BC-307]
type = device
vendor = GlobalSat
+packaging = GPS mouse
reference = http://www.usglobalsat.com/item.asp?itemid=12
uses = SiRF-2
interfaces = CF
@@ -736,7 +743,7 @@ notes = 4 color LED showing: Bluetooth, Navigation Update and Battery
[GPSlim 236]
type = device
vendor = Holux
-oackaging = GPS mouse
+packaging = GPS mouse
reference = http://en.holux.com.cn/product/search.htm?filename=gpsreceiver_bluetooth_gpslim2+36.htm&target=bluetooth00&level=grandsonson
uses = SiRF-3
interfaces = Bluetooth
@@ -1188,7 +1195,7 @@ reference = http://www.trimble.com/lasseniq.shtml
engine = Colossus RF ASIC, IO-C33 (Epson C33 RISC)
interfaces = USB
usbchip = Silicon Labs CP2102
-tested = regresssion
+tested = regression
nmea = 3.0
notes = Reported by Chris Kuethe &lt;chris.kuethe&#x40;gmail.com&gt;
diff --git a/gpscap.py b/gpscap.py
index 7cb44812..9ebe8db8 100644
--- a/gpscap.py
+++ b/gpscap.py
@@ -37,11 +37,14 @@ class GPSDictionary(ConfigParser.RawConfigParser):
elif self.get(section, "type") not in ("engine", "vendor", "device"):
raise ConfigParser.Error("%s has invalid type" % section)
# Sanity check: All devices must point at a vendor object.
- # Side effect: build the list of vendors.
+ # Side effect: build the lists of vendors and devices.
self.vendors = []
+ self.devices = []
for section in self.sections():
if self.get(section, "type") == "vendor":
self.vendors.append(section)
+ if self.get(section, "type") == "device":
+ self.devices.append(section)
self.vendors.sort()
for section in self.sections():
if self.get(section, "type") == "device":
@@ -49,5 +52,52 @@ class GPSDictionary(ConfigParser.RawConfigParser):
raise ConfigParser.Error("%s has no vendor" % section)
if self.get(section, "vendor") not in self.vendors:
raise ConfigParser.Error("%s has invalid vendor" % section)
+
+ def HTMLDump(self, ofp):
+ thead = """<table border='1' style='font-size:small;'>
+<tr>
+<th>Name</th>
+<th>Packaging</th>
+<th>Engine</th>
+<th>Interface</th>
+<th>Tested with</th>
+<th>NMEA version</th>
+<th width='50%'>Notes</th>
+</tr>
+"""
+ vhead = "<tr><td style='text-align:center;' colspan='7'><a href='%s'>%s</a></td></tr>\n"
+ ofp.write(thead)
+ for vendor in self.vendors:
+ ofp.write(vhead % (self.get(vendor, "vendor_site"), vendor))
+ relevant = []
+ for dev in self.devices:
+ if self.get(dev, "vendor") == vendor:
+ relevant.append(dev)
+ relevant.sort()
+ for dev in relevant:
+ ofp.write("<tr>\n")
+ ofp.write("<td>%s</td>\n" % dev)
+ ofp.write("<td>%s</td>\n" % self.get(dev, "packaging"))
+ ofp.write("<td>%s</td>\n" % self.get(dev, "engine"))
+ ofp.write("<td>%s</td>\n" % self.get(dev, "interfaces"))
+ tested = ""
+ if self.has_option(dev, "broken"):
+ tested = "Broken"
+ elif self.get(dev, "tested") == "regression":
+ tested = "*"
+ else:
+ tested = self.get(dev, "tested")
+ ofp.write("<td>%s</td>\n" % tested)
+ nmea = "&nbsp;"
+ if self.has_option(dev, "nmea"):
+ nmea = self.get(dev, "nmea")
+ ofp.write("<td>%s</td>\n" % nmea)
+ ofp.write("<td>%s</td>\n" % self.get(dev, "notes"))
+ ofp.write("</tr>\n")
+ ofp.write("</table>\n")
+
+
if __name__ == "__main__":
+ import sys
d = GPSDictionary()
+ d.HTMLDump(sys.stdout)