Awesome
go-gpsd
GPSD client for Go.
Installation
Packages
Linux
- Debian unstable:
apt install golang-github-stratoberry-go-gpsd-dev
From source
# go get github.com/stratoberry/go-gpsd
go-gpsd has no external dependencies.
Usage
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/stratoberry/go-gpsd")
func main() {
gps, err := gpsd.Dial("localhost:2947")
if err != nil { panic(err) }
}
After Dial
ing 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()
<-done
// ...some time later...
gps.Close()
Watch()
spans a new goroutine in which all data processing will happen, done
doesn't send anything.
Currently supported GPSD report types
VERSION
(gpsd.VERSIONReport
)TPV
(gpsd.TPVReport
)SKY
(gpsd.SKYReport
)ATT
(gpsd.ATTReport
)GST
(gpsd.GSTReport
)PPS
(gpsd.PPSReport
)TOFF
(gpsd.TOFFReport
)DEVICES
(gpsd.DEVICESReport
)DEVICE
(gpsd.DEVICEReport
)ERROR
(gpsd.ERRORReport
)
Documentation
For complete library documentation visit Go Reference.
Documentation of GPSD's JSON protocol is available at https://gpsd.gitlab.io/gpsd/gpsd_json.html.
References
This library was originally developed as a part of a student project at FOI/University of Zagreb.