Added draft GPS checks though NMEA reports.

This commit is contained in:
2024-07-31 22:18:44 +03:00
parent b831d44294
commit 6498d20378
5 changed files with 195 additions and 11 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt"
"io"
"log"
"sync"
"time"
"go.bug.st/serial"
@ -18,6 +19,8 @@ const (
type atPort struct {
logger *log.Logger
mutex sync.Mutex // Mutex for all operation with serial port
baudrate int
portName string
port serial.Port
@ -27,7 +30,8 @@ type atPort struct {
type Port interface {
GetName() string
GetBaudrate() int
GetSerialPort() serial.Port // For extra need
SerialPort() serial.Port // For extra need
Mutex() sync.Locker // retruns pointer to mutex for advanced use like readign NMEA reports
Connect() error
Disconnect() error
@ -56,11 +60,18 @@ func (p *atPort) GetBaudrate() int {
return p.baudrate
}
func (p *atPort) GetSerialPort() serial.Port {
func (p *atPort) SerialPort() serial.Port {
return p.port
}
func (p *atPort) Mutex() sync.Locker {
return &p.mutex
}
func (p *atPort) Connect() error {
p.mutex.Lock()
defer p.mutex.Unlock()
p.logger.Println("Connecting to", p.portName, "...")
s, err := serial.Open(p.portName, &serial.Mode{BaudRate: p.baudrate})
if err != nil {
@ -76,8 +87,10 @@ func (p *atPort) Connect() error {
}
func (p *atPort) Disconnect() error {
p.mutex.Lock()
defer func() {
p.port = nil
p.mutex.Unlock()
}()
if err := p.port.Close(); err != nil {
return fmt.Errorf("close port: %w", err)
@ -86,16 +99,22 @@ func (p *atPort) Disconnect() error {
}
func (p *atPort) IsConnected() bool {
p.mutex.Lock()
defer p.mutex.Unlock()
return p.port != nil
}
// Low level write/read function
func (p *atPort) RawSend(msg string) (string, error) {
p.mutex.Lock()
defer p.mutex.Unlock()
// Write
if _, err := p.port.Write([]byte(msg)); err != nil {
return "", fmt.Errorf("serial port write: %w", err)
}
time.Sleep(time.Millisecond)
// time.Sleep(time.Millisecond)
// Read
readLen, err := p.port.Read(p.inputBuf)
// p.logger.Println(msg, "\x1b[38;2;150;150;150mRAWREAD:", string(p.inputBuf[:readLen]), "\x1b[38;2;255;255;255m")
@ -121,5 +140,8 @@ func (p *atPort) Send(cmd string) (Resp, error) {
}
func (p *atPort) Close() error {
p.mutex.Lock()
defer p.mutex.Unlock()
return p.port.Close()
}