gps: revamp validSentence() to avoid heap allocation for errors. This error can occur too frequently to allow for such allocations

Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
deadprogram
2025-12-30 17:56:04 +01:00
committed by Ron Evans
parent 0a41786a77
commit 1513808425
3 changed files with 6 additions and 29 deletions
+2 -25
View File
@@ -20,30 +20,9 @@ var (
errInvalidGLLSentence = errors.New("invalid GLL NMEA sentence")
errGPSCommandRejected = errors.New("GPS command rejected (NAK)")
errNoACKToGPSCommand = errors.New("no ACK to GPS command")
errInvalidNMEASentanceFormat = errors.New("invalid NMEA sentence format")
)
type GPSError struct {
Err error
Info string
Sentence string
}
func newGPSError(err error, sentence string, info string) GPSError {
return GPSError{
Info: info,
Err: err,
Sentence: sentence,
}
}
func (ge GPSError) Error() string {
return ge.Err.Error() + " " + ge.Info + " " + ge.Sentence
}
func (ge GPSError) Unwrap() error {
return ge.Err
}
const (
minimumNMEALength = 7
startingDelimiter = '$'
@@ -182,9 +161,7 @@ func validSentence(sentence string) error {
}
checksum := strings.ToUpper(hex.EncodeToString([]byte{cs}))
if checksum != sentence[len(sentence)-2:len(sentence)] {
return newGPSError(errInvalidNMEAChecksum, sentence,
"expected "+sentence[len(sentence)-2:len(sentence)]+
" got "+checksum)
return errInvalidNMEASentanceFormat
}
return nil