Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
dde1411b18 | |||
6c110b9a8b | |||
cb07b6ac62 |
@ -12,6 +12,10 @@ func (resp Resp) RmFront(str string) Resp {
|
|||||||
return Resp(string(resp)[len(str):])
|
return Resp(string(resp)[len(str):])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (resp Resp) CheckFront(str string) bool {
|
||||||
|
return len(resp) >= len(str) && resp[:len(str)].String() == str
|
||||||
|
}
|
||||||
|
|
||||||
func (resp Resp) String() string {
|
func (resp Resp) String() string {
|
||||||
return string(resp)
|
return string(resp)
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ package gps
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -44,14 +46,18 @@ func (gps *Data) decode(str string) error {
|
|||||||
var err error
|
var err error
|
||||||
newGpsInfo := Data{}
|
newGpsInfo := Data{}
|
||||||
strs := strings.Split(strings.Split(strings.Replace(str, " ", "", -1), "\n")[0], ",")
|
strs := strings.Split(strings.Split(strings.Replace(str, " ", "", -1), "\n")[0], ",")
|
||||||
|
logger := log.New(io.Discard, "modem-gps", log.LstdFlags)
|
||||||
|
|
||||||
|
if len(strs) < 7 {
|
||||||
|
return fmt.Errorf("ERROR: too small msg: %s", strs)
|
||||||
|
}
|
||||||
newGpsInfo.Latitude, err = strconv.ParseFloat(strs[0], 64)
|
newGpsInfo.Latitude, err = strconv.ParseFloat(strs[0], 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parse latitude: %w", err)
|
logger.Println("ERROR parse latitude:", err.Error())
|
||||||
}
|
}
|
||||||
newGpsInfo.Longitude, err = strconv.ParseFloat(strs[2], 64)
|
newGpsInfo.Longitude, err = strconv.ParseFloat(strs[2], 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parse longitude: %w", err)
|
logger.Println("ERROR parse longitude:", err.Error())
|
||||||
}
|
}
|
||||||
newGpsInfo.Latitude /= 100
|
newGpsInfo.Latitude /= 100
|
||||||
newGpsInfo.Longitude /= 100
|
newGpsInfo.Longitude /= 100
|
||||||
@ -61,17 +67,17 @@ func (gps *Data) decode(str string) error {
|
|||||||
newGpsInfo.Time = strs[5]
|
newGpsInfo.Time = strs[5]
|
||||||
newGpsInfo.Altitude, err = strconv.ParseFloat(strs[6], 64)
|
newGpsInfo.Altitude, err = strconv.ParseFloat(strs[6], 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parse altitude: %w", err)
|
logger.Println("ERROR parse altitude:", err.Error())
|
||||||
}
|
}
|
||||||
newGpsInfo.Speed, err = strconv.ParseFloat(strs[7], 64)
|
newGpsInfo.Speed, err = strconv.ParseFloat(strs[7], 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parse speed: %w", err)
|
logger.Println("ERROR parse speed:", err.Error())
|
||||||
}
|
}
|
||||||
// Course sometimes may be null
|
// Course sometimes may be null
|
||||||
if len(strs[8]) > 0 {
|
if len(strs[8]) > 0 {
|
||||||
newGpsInfo.Course, err = strconv.ParseFloat(strs[8], 64)
|
newGpsInfo.Course, err = strconv.ParseFloat(strs[8], 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parse course: %w", err)
|
logger.Println("ERROR parse course:", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*gps = newGpsInfo
|
*gps = newGpsInfo
|
||||||
|
@ -49,9 +49,10 @@ func (g *gps) Update() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("receive GPS data: %w", err)
|
return fmt.Errorf("receive GPS data: %w", err)
|
||||||
}
|
}
|
||||||
if !resp.Check() {
|
if !resp.Check() || !resp.CheckFront("+CGPSINFO:") {
|
||||||
return fmt.Errorf("get GPS info: error response: %s", resp)
|
return fmt.Errorf("get GPS info: error response: %s", resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := g.data.decode(strings.Split(strings.Replace(resp.RmFront("+CGPSINFO:").String(), "\r", "", -1), "\n")[0]); err != nil {
|
if err := g.data.decode(strings.Split(strings.Replace(resp.RmFront("+CGPSINFO:").String(), "\r", "", -1), "\n")[0]); err != nil {
|
||||||
g.logger.Printf("error decode: %s\n", err.Error())
|
g.logger.Printf("error decode: %s\n", err.Error())
|
||||||
}
|
}
|
||||||
@ -86,7 +87,7 @@ func (g *gps) switchGpsMode(on bool) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("make at ask: %w", err)
|
return fmt.Errorf("make at ask: %w", err)
|
||||||
}
|
}
|
||||||
if !resp.Check() {
|
if !resp.Check() || !resp.CheckFront("+CGPS:") {
|
||||||
return fmt.Errorf("get GPS mode: error response: %s", resp)
|
return fmt.Errorf("get GPS mode: error response: %s", resp)
|
||||||
}
|
}
|
||||||
ans := strings.Replace(strings.Split(strings.Split(resp.RmFront("+CGPS:").String(), "\n")[0], ",")[0], " ", "", -1)
|
ans := strings.Replace(strings.Split(strings.Split(resp.RmFront("+CGPS:").String(), "\n")[0], ",")[0], " ", "", -1)
|
||||||
|
5
main.go
5
main.go
@ -18,6 +18,7 @@ func main() {
|
|||||||
func mainE() error {
|
func mainE() error {
|
||||||
logger := log.New(os.Stdout, "main : ", log.LstdFlags)
|
logger := log.New(os.Stdout, "main : ", log.LstdFlags)
|
||||||
m := modem.New(log.New(logger.Writer(), "modem : ", log.LstdFlags))
|
m := modem.New(log.New(logger.Writer(), "modem : ", log.LstdFlags))
|
||||||
|
|
||||||
logger.Println("||||||||||||||||| INIT |||||||||||||||")
|
logger.Println("||||||||||||||||| INIT |||||||||||||||")
|
||||||
if err := m.Init(); err != nil {
|
if err := m.Init(); err != nil {
|
||||||
logger.Println("Init ended with error:", err.Error())
|
logger.Println("Init ended with error:", err.Error())
|
||||||
@ -34,6 +35,10 @@ func mainE() error {
|
|||||||
logger.Println("AAAAAAAAAAAAAAA Modem is not connected")
|
logger.Println("AAAAAAAAAAAAAAA Modem is not connected")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
// m.PowerOff()
|
||||||
|
// time.Sleep(10 * time.Second)
|
||||||
|
// m.PowerOn()
|
||||||
|
|
||||||
logger.Println("||||||||||||||||| GET INFO |||||||||||||||||")
|
logger.Println("||||||||||||||||| GET INFO |||||||||||||||||")
|
||||||
logger.Println(m.Update())
|
logger.Println(m.Update())
|
||||||
logger.Printf("DATA: %+v\n", m.GetData())
|
logger.Printf("DATA: %+v\n", m.GetData())
|
||||||
|
Reference in New Issue
Block a user