mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-07-26 10:38:41 +00:00
5df96c8138
* gps: buxfixes and refactoring of API to separate device from parser Signed-off-by: deadprogram <ron@hybridgroup.com> * gps: simplify time parser Signed-off-by: deadprogram <ron@hybridgroup.com> * gps: add support for RMC sentences Signed-off-by: deadprogram <ron@hybridgroup.com> * gps: small renaming to remove reduntant use of word GPS Signed-off-by: deadprogram <ron@hybridgroup.com>
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package gps
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
// flight mode disables the GPS COCOM limits
|
|
var flight_mode_cmd = [...]byte{
|
|
0xB5, 0x62, 0x06, 0x24, 0x24, 0x00, 0xFF, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x00,
|
|
0x00, 0x10, 0x27, 0x00, 0x00, 0x05, 0x00, 0xFA, 0x00, 0xFA, 0x00, 0x64, 0x00,
|
|
0x2C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x16, 0xDC}
|
|
|
|
// Sets CFG-GNSS to disable everything other than GPS GNSS
|
|
// solution. Failure to do this means GPS power saving
|
|
// doesn't work. Not needed for MAX7, needed for MAX8's
|
|
var cfg_gnss_cmd = [...]byte{
|
|
0xB5, 0x62, 0x06, 0x3E, 0x2C, 0x00, 0x00, 0x00,
|
|
0x20, 0x05, 0x00, 0x08, 0x10, 0x00, 0x01, 0x00,
|
|
0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00,
|
|
0x01, 0x01, 0x03, 0x08, 0x10, 0x00, 0x00, 0x00,
|
|
0x01, 0x01, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00,
|
|
0x01, 0x01, 0x06, 0x08, 0x0E, 0x00, 0x00, 0x00,
|
|
0x01, 0x01, 0xFC, 0x11}
|
|
|
|
func FlightMode(d Device) (err error) {
|
|
err = sendCommand(d, flight_mode_cmd[:])
|
|
return err
|
|
}
|
|
|
|
func SetCfgGNSS(d Device) (err error) {
|
|
err = sendCommand(d, cfg_gnss_cmd[:])
|
|
return err
|
|
}
|
|
|
|
func sendCommand(d Device, command []byte) (err error) {
|
|
d.WriteBytes(command)
|
|
start := time.Now()
|
|
for time.Now().Sub(start) < 1000 {
|
|
if d.readNextByte() == '\n' {
|
|
if d.readNextByte() == 0xB5 {
|
|
d.readNextByte()
|
|
if d.readNextByte() == 0x05 {
|
|
if d.readNextByte() == 0x01 {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return errors.New("no ACK to GPS command")
|
|
}
|