go-gpsd
go-gpsd copied to clipboard
🛰️ GPSD client for Go.
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.