-
Notifications
You must be signed in to change notification settings - Fork 80
/
gns.go
89 lines (85 loc) · 2.73 KB
/
gns.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package nmea
const (
// TypeGNS type for GNS sentences
TypeGNS = "GNS"
)
// GNS mode values. These are same values ans GLL/RMC FAAMode* values.
// Note: there can be other values (proprietary).
const (
// NoFixGNS Character
NoFixGNS = "N"
// AutonomousGNS Character
AutonomousGNS = "A"
// DifferentialGNS Character
DifferentialGNS = "D"
// PreciseGNS Character
PreciseGNS = "P"
// RealTimeKinematicGNS Character
RealTimeKinematicGNS = "R"
// FloatRTKGNS RealTime Kinematic Character
FloatRTKGNS = "F"
// EstimatedGNS Fix Character
EstimatedGNS = "E"
// ManualGNS Fix Character
ManualGNS = "M"
// SimulatorGNS Character
SimulatorGNS = "S"
)
// GNS is standard GNSS sentance that combined multiple constellations
// https://gpsd.gitlab.io/gpsd/NMEA.html#_gns_fix_data
//
// Format: $--GNS,hhmmss.ss,ddmm.mm,a,dddmm.mm,a,c--c,xx,x.x,x.x,x.x,x.x,x.x*hh<CR><LF>
// Example: $GNGNS,014035.00,4332.69262,S,17235.48549,E,RR,13,0.9,25.63,11.24,,*70
// $GPGNS,224749.00,3333.4268304,N,11153.3538273,W,D,19,0.6,406.110,-26.294,6.0,0138,S*6A
type GNS struct {
BaseSentence
Time Time // UTC of position
Latitude float64
Longitude float64
// FAA mode indicator for each satellite navigation system (constellation) supported by device.
//
// May be up to six characters (according to GPSD).
// '1' - GPS
// '2' - GLONASS
// '3' - Galileo
// '4' - BDS
// '5' - QZSS
// '6' - NavIC (IRNSS)
Mode []string
SVs int64 // Total number of satellites in use, 00-99
HDOP float64 // Horizontal Dilution of Precision
Altitude float64 // Antenna altitude, meters, re:mean-sea-level(geoid).
Separation float64 // Geoidal separation meters
Age float64 // Age of differential data
Station int64 // Differential reference station ID
NavStatus string // Navigation status (NMEA 4.1+). See NavStats* (`NavStatusAutonomous` etc) constants for possible values.
}
// newGNS Constructor
func newGNS(s BaseSentence) (Sentence, error) {
p := NewParser(s)
p.AssertType(TypeGNS)
m := GNS{
BaseSentence: s,
Time: p.Time(0, "time"),
Latitude: p.LatLong(1, 2, "latitude"),
Longitude: p.LatLong(3, 4, "longitude"),
Mode: p.EnumChars(5, "mode", NoFixGNS, AutonomousGNS, DifferentialGNS, PreciseGNS, RealTimeKinematicGNS, FloatRTKGNS, EstimatedGNS, ManualGNS, SimulatorGNS),
SVs: p.Int64(6, "SVs"),
HDOP: p.Float64(7, "HDOP"),
Altitude: p.Float64(8, "altitude"),
Separation: p.Float64(9, "separation"),
Age: p.Float64(10, "age"),
Station: p.Int64(11, "station"),
}
if len(p.Fields) >= 13 {
m.NavStatus = p.EnumString(
12,
"navigation status",
NavStatusSafe,
NavStatusCaution,
NavStatusUnsafe,
NavStatusNotValid,
)
}
return m, p.Err()
}