GPSD client for Go.
# go get github.com/LdDl/go-gpsdgo-gpsd has no external dependencies.
go-gpsd is a streaming client for GPSD's JSON service and as such can be used only in async manner unlike clients for other languages which support both async and sync modes.
import ("github.com/LdDl/go-gpsd")
func main() {
gps := gpsd.Dial("localhost:2947")
}
After Dialing the server, you should install stream filters. Stream filters allow you to capture only certain types of GPSD reports.
gps.AddFilter("TPV", tpvFilter)Filter functions have a type of gps.Filter and should receive one argument of type interface{}.
tpvFilter := func(r interface{}) {
report := r.(*gpsd.TPVReport)
fmt.Println("Location updated", report.Lat, report.Lon)
}Due to the nature of GPSD reports your filter will manually have to cast the type of the argument it received to a proper *gpsd.Report struct pointer.
After installing all needed filters, call the Watch method to start observing reports. Please note that at this time installed filters can't be removed.
done := gps.Watch()
<-doneWatch() will span a new goroutine in which all data processing will happen, done channel won't send anything.
VERSION(gpsd.VERSIONReport)TPV(gpsd.TPVReport)SKY(gpsd.SKYReport)ATT(gpsd.ATTReport)GST(gpsd.GSTReport)PPS(gpsd.PPSReport)Devices(gpsd.DEVICESReport)DEVICE(gpsd.DEVICEReport)ERROR(gpsd.ERRORReport)
For complete library docs, visit GoDoc.org or take a look at the gpsd.go file in this repository.
GPSD's documentation on their JSON protocol can be found at http://catb.org/gpsd/gpsd_json.html