4 Commits

Author SHA1 Message Date
b3fb13b7b3 Removed internet and sms temporarily. 2024-08-09 11:42:55 +03:00
dde1411b18 Fixed RmFront panic. 2024-08-09 11:21:02 +03:00
6c110b9a8b Add: check in RmFront 2024-08-08 15:56:23 +03:00
cb07b6ac62 Fixed GPS info parsing. 2024-08-08 15:52:52 +03:00
5 changed files with 44 additions and 28 deletions

View File

@ -12,6 +12,10 @@ func (resp Resp) RmFront(str string) Resp {
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 {
return string(resp)
}

View File

@ -2,6 +2,8 @@ package gps
import (
"fmt"
"io"
"log"
"math"
"strconv"
"strings"
@ -44,14 +46,18 @@ func (gps *Data) decode(str string) error {
var err error
newGpsInfo := Data{}
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)
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)
if err != nil {
return fmt.Errorf("parse longitude: %w", err)
logger.Println("ERROR parse longitude:", err.Error())
}
newGpsInfo.Latitude /= 100
newGpsInfo.Longitude /= 100
@ -61,17 +67,17 @@ func (gps *Data) decode(str string) error {
newGpsInfo.Time = strs[5]
newGpsInfo.Altitude, err = strconv.ParseFloat(strs[6], 64)
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)
if err != nil {
return fmt.Errorf("parse speed: %w", err)
logger.Println("ERROR parse speed:", err.Error())
}
// Course sometimes may be null
if len(strs[8]) > 0 {
newGpsInfo.Course, err = strconv.ParseFloat(strs[8], 64)
if err != nil {
return fmt.Errorf("parse course: %w", err)
logger.Println("ERROR parse course:", err.Error())
}
}
*gps = newGpsInfo

View File

@ -49,9 +49,10 @@ func (g *gps) Update() error {
if err != nil {
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)
}
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())
}
@ -86,7 +87,7 @@ func (g *gps) switchGpsMode(on bool) error {
if err != nil {
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)
}
ans := strings.Replace(strings.Split(strings.Split(resp.RmFront("+CGPS:").String(), "\n")[0], ",")[0], " ", "", -1)

View File

@ -112,19 +112,19 @@ func (m *modem) Init() error {
// submodulesLogger := io.Discard // FOR less logs
m.logger.Println("=============================== Init submodules")
m.ic = internet.New(log.New(submodulesLogger, "modem-internet : ", log.LstdFlags), m.port)
if err := m.ic.Init(); err != nil {
m.logger.Printf("\x1b[38;2;255;0;0mInternet: %s\x1b[38;2;255;255;255m\n", err.Error())
} else {
m.logger.Println("\x1b[38;2;0;255;0mInternet OK\x1b[38;2;255;255;255m")
}
m.sms = sms.New(log.New(submodulesLogger, "modem-sms : ", log.LstdFlags), m.port)
if err := m.sms.Init(); err != nil {
m.logger.Printf("\x1b[38;2;255;0;0mSMS: %s\x1b[38;2;255;255;255m\n", err.Error())
} else {
m.logger.Println("\x1b[38;2;0;255;0mSMS OK\x1b[38;2;255;255;255m")
}
//m.ic = internet.New(log.New(submodulesLogger, "modem-internet : ", log.LstdFlags), m.port)
//if err := m.ic.Init(); err != nil {
// m.logger.Printf("\x1b[38;2;255;0;0mInternet: %s\x1b[38;2;255;255;255m\n", err.Error())
//} else {
// m.logger.Println("\x1b[38;2;0;255;0mInternet OK\x1b[38;2;255;255;255m")
//}
//
//m.sms = sms.New(log.New(submodulesLogger, "modem-sms : ", log.LstdFlags), m.port)
//if err := m.sms.Init(); err != nil {
// m.logger.Printf("\x1b[38;2;255;0;0mSMS: %s\x1b[38;2;255;255;255m\n", err.Error())
//} else {
// m.logger.Println("\x1b[38;2;0;255;0mSMS OK\x1b[38;2;255;255;255m")
//}
m.gps = gps.New(log.New(submodulesLogger, "modem-gps : ", log.LstdFlags), m.port)
if err := m.gps.Init(); err != nil {

21
main.go
View File

@ -18,6 +18,7 @@ func main() {
func mainE() error {
logger := log.New(os.Stdout, "main : ", log.LstdFlags)
m := modem.New(log.New(logger.Writer(), "modem : ", log.LstdFlags))
logger.Println("||||||||||||||||| INIT |||||||||||||||")
if err := m.Init(); err != nil {
logger.Println("Init ended with error:", err.Error())
@ -34,20 +35,24 @@ func mainE() error {
logger.Println("AAAAAAAAAAAAAAA Modem is not connected")
return nil
}
// m.PowerOff()
// time.Sleep(10 * time.Second)
// m.PowerOn()
logger.Println("||||||||||||||||| GET INFO |||||||||||||||||")
logger.Println(m.Update())
logger.Printf("DATA: %+v\n", m.GetData())
logger.Println("||||||||||||||||| SEND SMS |||||||||||||||||")
logger.Println(m.At().Send("AT+CNUM"))
// if err := m.Sms().Send("+79218937173", "CGSG forever"); err != nil {
// logger.Println("||||||||||||||||| SEND SMS |||||||||||||||||")
// logger.Println(m.At().Send("AT+CNUM"))
// // if err := m.Sms().Send("+79218937173", "CGSG forever"); err != nil {
// // return err
// // }
// if ms, err := m.Sms().ReadNew(); err != nil {
// return err
// } else {
// logger.Println("NEW:", ms)
// }
if ms, err := m.Sms().ReadNew(); err != nil {
return err
} else {
logger.Println("NEW:", ms)
}
logger.Println("||||||||||||||||| Checking gps status |||||||||||||||||")
st, err := m.Gps().GetStatus()
if err != nil {