Skip to content

Commit 892265b

Browse files
committed
gps: export some errors for checking/supression from client
Signed-off-by: deadprogram <[email protected]>
1 parent b390e32 commit 892265b

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

examples/gps/uart/main.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,31 @@ import (
88
)
99

1010
func main() {
11-
println("GPS UART Example")
1211
machine.UART1.Configure(machine.UARTConfig{BaudRate: 9600})
1312
ublox := gps.NewUART(machine.UART1)
1413
parser := gps.NewParser()
1514
var fix gps.Fix
1615
for {
1716
s, err := ublox.NextSentence()
1817
if err != nil {
19-
println(err)
20-
continue
18+
switch err {
19+
case gps.ErrUnknownNMEASentence, gps.ErrInvalidNMEASentence, gps.ErrInvalidNMEASentenceLength:
20+
continue
21+
default:
22+
println("sentence error:", err)
23+
continue
24+
}
2125
}
2226

2327
fix, err = parser.Parse(s)
2428
if err != nil {
25-
println(err)
26-
continue
29+
switch err {
30+
case gps.ErrUnknownNMEASentence, gps.ErrInvalidNMEASentence, gps.ErrInvalidNMEASentenceLength:
31+
continue
32+
default:
33+
println("parse error:", err)
34+
continue
35+
}
2736
}
2837
if fix.Valid {
2938
print(fix.Time.Format("15:04:05"))
@@ -43,7 +52,7 @@ func main() {
4352
}
4453
println()
4554
} else {
46-
println("No fix")
55+
println("Waiting for fix...")
4756
}
4857
time.Sleep(200 * time.Millisecond)
4958
}

gps/gps.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,15 @@ import (
1111
)
1212

1313
var (
14-
errInvalidNMEASentenceLength = errors.New("invalid NMEA sentence length")
15-
errInvalidNMEAChecksum = errors.New("invalid NMEA sentence checksum")
16-
errEmptyNMEASentence = errors.New("cannot parse empty NMEA sentence")
17-
errUnknownNMEASentence = errors.New("unsupported NMEA sentence type")
14+
ErrInvalidNMEASentenceLength = errors.New("invalid NMEA sentence length")
15+
ErrInvalidNMEASentence = errors.New("invalid NMEA sentence format")
16+
ErrEmptyNMEASentence = errors.New("cannot parse empty NMEA sentence")
17+
ErrUnknownNMEASentence = errors.New("unsupported NMEA sentence type")
1818
errInvalidGGASentence = errors.New("invalid GGA NMEA sentence")
1919
errInvalidRMCSentence = errors.New("invalid RMC NMEA sentence")
2020
errInvalidGLLSentence = errors.New("invalid GLL NMEA sentence")
2121
errGPSCommandRejected = errors.New("GPS command rejected (NAK)")
2222
errNoACKToGPSCommand = errors.New("no ACK to GPS command")
23-
errInvalidNMEASentanceFormat = errors.New("invalid NMEA sentence format")
2423
)
2524

2625
const (
@@ -151,15 +150,15 @@ func (gps *Device) WriteBytes(bytes []byte) {
151150
// It has to end with a '*' character following by a checksum.
152151
func validSentence(sentence string) error {
153152
if len(sentence) < minimumNMEALength || sentence[0] != startingDelimiter || sentence[len(sentence)-3] != checksumDelimiter {
154-
return errInvalidNMEASentenceLength
153+
return ErrInvalidNMEASentenceLength
155154
}
156155
var cs byte = 0
157156
for i := 1; i < len(sentence)-3; i++ {
158157
cs ^= sentence[i]
159158
}
160159
checksum := strings.ToUpper(hex.EncodeToString([]byte{cs}))
161-
if checksum != sentence[len(sentence)-2:len(sentence)] {
162-
return errInvalidNMEASentanceFormat
160+
if checksum != sentence[len(sentence)-2:] {
161+
return ErrInvalidNMEASentence
163162
}
164163

165164
return nil

gps/gpsparser.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ func NewParser() Parser {
4646
func (parser *Parser) Parse(sentence string) (Fix, error) {
4747
var fix Fix
4848
if sentence == "" {
49-
return fix, errEmptyNMEASentence
49+
return fix, ErrEmptyNMEASentence
5050
}
5151
if len(sentence) < 6 {
52-
return fix, errInvalidNMEASentenceLength
52+
return fix, ErrInvalidNMEASentenceLength
5353
}
5454
typ := sentence[3:6]
5555
switch typ {
@@ -104,7 +104,7 @@ func (parser *Parser) Parse(sentence string) (Fix, error) {
104104
return fix, nil
105105
}
106106

107-
return fix, errInvalidNMEASentanceFormat
107+
return fix, ErrUnknownNMEASentence
108108
}
109109

110110
// findTime returns the time from an NMEA sentence:

0 commit comments

Comments
 (0)