📄 todo
字号:
$Id: TODO 4671 2008-01-21 15:36:55Z esr $This is the gpsd to-do list. If you're viewing it with Emacs, trydoing Ctl-C Ctl-t and browsing through the outline headers. Ctl-C Ctl-a will unfold them again.For contribution guidelines and internals documentation, please see<http://gpsd.berlios.de/hacking.html>.The list of bugs exposed by gpsd in other software has moved to<http://gpsd.berlios.de/upstream-bugs.html>.** Bugs in gpsd and its clients:*** Support for the True North magnetic compass is currently brokenMassimo Burcheri reported that it broke somewhere between rev 3654 and3722. We think this is a shallow bug, but we can't fix it withouttest hardware. If TNT support is a problem for you, and you can'tfix the driver yourself and send us the patch, contact Bill Powell <bpowell@tntc.com> at True North Technologies and tell him he needsto reverse his refusal to send us an eval unit.** To do:*** libgps should try to automatically try to reconnect when a poll failsPetter Reinholdtsen suggests:At the moment, when a gpsd client using libgps is connected to thegpsd server, and the server is restarted, the client looses theconnection and do not update any more.It would be nice if the gps_poll() and gps_query() would try toreconnect to the server if the read() and write() calls on the tcpsocket fail.To test this, start gpsd first (/etc/init.d/gpsd start), xgps second,and then restart gpsd (/etc/init.d/gpsd restart). The xgps clientwill fail to update any more.I realised how nice this feature would be while comparing the xgpsclient to the roadgps client (part of the roadmap package). Theroadgps client would reconnect to the new server and keep updating assoon as the server was available. :)On second thought, and after discussing this on the gpsd mailing list,I believe the reconnect need to be handled by the applications inaddition to the library. Applications will commonly use the filedescriptor to detect incoming data, and this file descriptor willchange on reconnect.So I rephrase my wish, and ask for reconnect funcionality in xgpsinstead. It will make sure the library support reconnects, and alsoprovide an example for other clients using the library.(ESR thinks maybe this ought to be done at library level anyway, withusers warned that the gps_fd member of the gps_data_t structure maychange on reconnect and shouldn't be cached. This wouldn't be hard toimplement, but it would change gps_data_t and require a libraryversion bump.)This is Berlios FR #3789.*** Optimize the use of gpsd_hexdump and gpsd_reportThese functions still consume a significant (ie. non-zero) fraction ofCPU time at -D0 or -D1. Possible solutions include a wrapper aroundgpsd_hexdump to only dump when the debug level is high enough, ormodifying gpsd_report to handle the hexdump call. This may require (atworst) a library version number increment, or at least changing everyinvocation of gpsd_hexdump. Not something to be done lightly.*** Change O output precision to %.9f for degrees and %.3f for metersThis corresponds to 1mm accuracy, which is better than the horizontalaccuracy of RTK GPS. This will be revisited; receivers are commerciallyavailable that claim to have 0.1mm accuracy*** Full Python wrapper for libgpsdThis would be useful for test code of all kinds.*** New features for xgps.Add J option checkbox. Maybe embed the speedometer widget fromxgpspeed in some of the unused space and nuke xgpsspeed.*** Per-driver restore of changed config settings on exit.This is a solved problem for generic NMEA, EverMore, TripMate,EarthMate, TNTC, Zodiac, and RTCM104 drivers (if only because theydon't configure any device setting).The SiRF driver now restores NMEA when necessary. It also restoressome (but not all) of the things it tweaks in binary mode -- at themoment, just the Navigation Parameters from message 0x13. With morework, we should be able to do a full revert.The TSIP driver changes its per-cycle sentence inventory and thus needs some state-restore logic. This can be done; the same packet 0x35we use to configure it can be sent in a no-argument mode to querythe current sentence mix for later restore.The FV18 changes its per-cycle sentence inventory to include GSAs. Itis possible to query that inventory, though we don't have code to doit yet.Garmin devices are a mess. We reconfigure those heavily, and wedon't know if there's any way to capture their configuration statebefore we do it.The iTrax02 driver sets SYNCMODE to start navigation messages withoutchecking to see if it's already on, and stops navigation methods onwrapup. It also forces the set of sentences issued. There doesn'tseem to be any way to query these settings.*** Merge cgps and xgpsPossibly cgps and xgps should merge into a single test client that honors theGPSD_UNITS environment variable and chooses its UI mode depending onwhether or not it's running under X. There is controversy about this proposal on the dev list.*** send/expect for the NMEA driver initializerWe've had one report of a GPS, the Garmin GPS-10, which gpsd puts in a bad state because the device chokes on having all of our NMEA probe stringsshoved at it without having time to respond. A simple send-expectfunction (ship given string, wait until specified reply arrives or timeout) would solve this problem and might help avoid problems with otherGPSes we haven't encountered yet.*** SiRF firmware uploaderChris Kuethe has shipped a 0.0 pre-alpha version. It is not yet resolved whether SiRF Technology will allow us to ship the binary loader code needed to actually use it.*** uBlox firmware uploaderuBlox does make firmware updates available on their website and a cursoryinspection suggests that their flash process should plug directly in togpsflash - they use the same three stage process as SiRF: send a binarycommand to enter programming mode, send a tiny reflash bootstrap programand then send the actual firmware image.*** Industry-standard format dumping of raw satellite dataIt would be useful to be able to extract RINEX (or some other standard)format data from any GPS device that can report pseudoranges etc. Thisbelongs in the daemon because the device drivers are already doing thepacket-cracking needed to get the data off the chips.Several commodity chipsets (ANTARIS, iTrax3, SiRF and Trimble) readilyoutput enough data to make this a chore, rather than a hard problem.It has been suggested one way to do this is to have a generic structurein memory and corresponding output message with clock, doppler carrierphase and pseudoranges. This message is then reformatted by a clientprogram. There are numerous formats for this information, and it wouldbe easier to adapt to new formats if the formatting and use was handledby something other than the gpsd daemon. Currently the RT-IGS format islooking like the favorite for implementation; it's a fairly lightweightprotocol, flexible enough to handle all the quantities required, and itis actually in use in production reference networks. RT-IGS is also apacket-oriented format, rather than a file-oriented format like RINEX.*** RTCM support.We have an RTCM packet decoder, and untested scratch code to serveRTCM packets to port 2101. Here's the plan for the rest of it:1) Inversion needs to be done somewhere in the encoding logic.2) Wolfgang's decoder-hardening patches.3) Test productions. I have one that tests dumping and one that uses passthrough mode to test that pack() and repack() are inverse. We should have an undumping torture test.4) What about rtcm_output_magnavox() anyway? Should that be made available as an output mode of rtcmdecode and documented?5) Extend the test framework so we can verify RTCM service.6) Generate and broadcast RTCM corrections from an attached device? Might not be possible -- appears to need nanosecond timing.*** Do the research to figure out just what is going on with status bitsNMEA actually has *four* kinds of validity bits: Mode, Status, theActive/Void bit (some sources interpret 'V' as 'Navigation receiverwarning'), and in later versions the FAA indicator mode. Sentencesthat have an Active/Void send V when there is no fix, so the positiondata is no good.Let's look at which sentences send what: GPRMC GPGLL GPGGA GPGSAReturns fix Yes Yes Yes NoReturns status No Yes Yes NoReturns mode No No No YesReturns A/V Yes Yes No NoIn addition, some sentences use empty fields to signify invalid data.My first conclusion from looking at this table is that the designersof NMEA 0183 should be hung for galloping incompetence. But never mind that.What are we to make of this mess?The fact that the FV18 sends GPRMC/GPGLL/GPGGA but not GPGSAargues that GPGSA is optional. I don't see how it can be, since itseems to be the only status bit that applies to altitude. Just how arewe supposed to know when altitude is valid if it doesn't ship GSA? Can a receiver ever ship a non-empty but invalid altitude?Which of these override which other bits? I don't think status is evernonzero when mode is zero. So status overrides mode. What other suchrelationships are there?News flash: it develops that the "Navigation receiver warning" issupposed to indicate a valid fix that has a DOP too high or failsan elevation test.** Future features (?)*** iTalk supportThere is a minimally functional driver for the Fastrax iTalk3 protocol.It is still very much a work in progress. It is now compiled in by defaultso that we can collect bug reports. Version 3 of iTalk is not backwardscompatible; we do not anticipate supporting previous versions unlesssomeone requests it and is able to provide us hardware.*** Navcom supportInitial support for the Navcom binary protocol has been committed toallow for in-tree development. It is compiled in by default.*** UBX supportThere is a minimally functional driver for the uBlox UBX protocol. It isstill very much a work in progress. It is now compiled in by default sothat we can collect bug reports.*** Support for more survey / professional / up-scale receivers.Devices such as the Javad JNSCore, Hemisphere Crescent, SeptentrioAsteRx and PolaRx, NovAtel Superstar2 and OEMV, Thales (MagellanProfessional) AC12 and DG14 would all be welcome. Of course, theseare not $50 usb mice...*** Audio cues in the client when the fix status changesCalum writes:>Is it possible to add functionality (with a switch to enable it to>avoid annoying those that don't want it) so that beeps indicate NO>FIX, FIX, and OFFLINE status changes?>>For example - I run cgps and my laptop battery doesn't always supply>my PS2 port-powered GPS device with enough power, and it goes into>OFFLINE mode. As I can't drive, and check my laptop all the time, if>it emitted 5 1 second beeps when it went OFFLINE, it would be a handy alert.>>Similarly, a PCMCIA "eject" 2 beeps for NO FIX, and a PCMCIA "happy" 2>beeps when it gets a fix again?>>Or something like that.This is a good idea for supporting hands-free operation, e.g. while driving.It would be an easy first project for somebody who wants to get intothe client code.*** Set the system time zone from latitude/longitudeIf we're going to give gpsd the capability to set system time viantpd, why not let it set timezone as well? A good thing for hackerstravelling with laptops!The major issue here is that I have not yet found code, or adatabase, that would allow mapping from lon/lat to timezone.And the rules change from year to year.Actually this should be built as a specialized client, as somepeople won't want it.From <http://www.linuxsa.org.au/tips/time.html>: The timezone under Linux is set by a symbolic link from /etc/localtime[1] to a file in the /usr/share/zoneinfo[2] directory that corresponds with what timezone you are in. For example, since I'm in South Australia, /etc/localtime is a symlink to /usr/share/zoneinfo/Australia/South. To set this link, type: ln -sf ../usr/share/zoneinfo/your/zone /etc/localtime Replace your/zone with something like Australia/NSW or Australia/Perth. Have a look in the directories under /usr/share/zoneinfo to see what timezones are available. [1] This assumes that /usr/share/zoneinfo is linked to /etc/localtime as it is under Red Hat Linux. [2] On older systems, you'll find that /usr/lib/zoneinfo is used instead of /usr/share/zoneinfo.Changing the hardlink will, of course, update the system timezone forall users. If I were designing this feature, I'd ensure that thesystem timezone can be overridden by a user-set TZ, but I don't knowif it actually works that way.If I'm reading the tea leaves correctly, this functionality is actuallyembedded in the GCC library version of tzset(), so the same method willwork on any system that uses that.Problem: system daemons use the timezone set when they start up. Youcan't get them to grok a new one short of rebooting.Sources: Sources for Time Zone and Daylight Saving Time Datahttp://www.twinsun.com/tz/tz-link.htmFree time-zone maps of the U.S.http://www.manifold.net/download/freemaps.htmlLocal variables:mode: outlineparagraph-separate: "[ ]*$"end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -