Added RMS.
This commit is contained in:
parent
59bd2c5db3
commit
0b76884112
@ -30,7 +30,7 @@ const (
|
|||||||
|
|
||||||
nmeaFlagsMask = (1 << 18) - 1
|
nmeaFlagsMask = (1 << 18) - 1
|
||||||
|
|
||||||
collectTimeout = 2 * time.Second
|
collectTimeout = 1 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
func secondCountDownTimer(title string, logger *log.Logger, t time.Duration) {
|
func secondCountDownTimer(title string, logger *log.Logger, t time.Duration) {
|
||||||
|
@ -7,10 +7,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Status struct {
|
type Status struct {
|
||||||
GotResponses bool `json:"gotResponses"`
|
GotResponses bool `json:"gotResponses"`
|
||||||
IsValidData bool `json:"isValidData"`
|
IsValidData bool `json:"isValidData"`
|
||||||
FoundSatelitesCount int `json:"foundSatelitesCount"`
|
FoundSatelitesCount int `json:"foundSatelitesCount"`
|
||||||
ActiveSatelitesCount int `json:"activeSatelitesCount"`
|
ActiveSatelitesCount int `json:"activeSatelitesCount"`
|
||||||
|
Rms float32 `json:"rms"` // Root mean square
|
||||||
}
|
}
|
||||||
|
|
||||||
var StatusNil = Status{
|
var StatusNil = Status{
|
||||||
@ -18,6 +19,7 @@ var StatusNil = Status{
|
|||||||
IsValidData: false,
|
IsValidData: false,
|
||||||
FoundSatelitesCount: 0,
|
FoundSatelitesCount: 0,
|
||||||
ActiveSatelitesCount: 0,
|
ActiveSatelitesCount: 0,
|
||||||
|
Rms: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gps) GetStatus() (Status, error) {
|
func (g *gps) GetStatus() (Status, error) {
|
||||||
@ -46,7 +48,7 @@ checkLoop:
|
|||||||
return StatusNil, fmt.Errorf("nmea invalid sentence: %s", s)
|
return StatusNil, fmt.Errorf("nmea invalid sentence: %s", s)
|
||||||
}
|
}
|
||||||
switch values[0][3:] { // Switch by content
|
switch values[0][3:] { // Switch by content
|
||||||
case "GSV":
|
case "GSV": // Any satelites
|
||||||
g.logger.Println("check GSV")
|
g.logger.Println("check GSV")
|
||||||
// Check len
|
// Check len
|
||||||
if len(values) < 17 {
|
if len(values) < 17 {
|
||||||
@ -80,7 +82,7 @@ checkLoop:
|
|||||||
continue checkLoop
|
continue checkLoop
|
||||||
}
|
}
|
||||||
st.FoundSatelitesCount = satCount
|
st.FoundSatelitesCount = satCount
|
||||||
case "GSA":
|
case "GSA": // Active satelites
|
||||||
g.logger.Println("check GSA")
|
g.logger.Println("check GSA")
|
||||||
|
|
||||||
// Check len
|
// Check len
|
||||||
@ -104,7 +106,7 @@ checkLoop:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
st.ActiveSatelitesCount = max(st.ActiveSatelitesCount, count)
|
st.ActiveSatelitesCount = max(st.ActiveSatelitesCount, count)
|
||||||
case "RMC":
|
case "RMC": // Minimum GPS data
|
||||||
g.logger.Println("check RMC")
|
g.logger.Println("check RMC")
|
||||||
// Check len
|
// Check len
|
||||||
if len(values) < 12 {
|
if len(values) < 12 {
|
||||||
@ -118,10 +120,30 @@ checkLoop:
|
|||||||
// 2 - is data valid or not
|
// 2 - is data valid or not
|
||||||
// 3: - other data
|
// 3: - other data
|
||||||
|
|
||||||
// Msg index
|
// Is valid value
|
||||||
if values[2] == "A" {
|
if values[2] == "A" {
|
||||||
st.IsValidData = true
|
st.IsValidData = true
|
||||||
}
|
}
|
||||||
|
case "GST":
|
||||||
|
g.logger.Println("check GST")
|
||||||
|
// Check len
|
||||||
|
if len(values) < 8 {
|
||||||
|
g.logger.Println("GST too small values")
|
||||||
|
continue checkLoop
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decode
|
||||||
|
// 0 - msg type
|
||||||
|
// 1 - time
|
||||||
|
// 2 - Root Mean Square
|
||||||
|
// 3: - other data
|
||||||
|
|
||||||
|
rms, err := strconv.ParseFloat(values[2], 32)
|
||||||
|
if err != nil {
|
||||||
|
g.logger.Println("RMS decode:", err.Error())
|
||||||
|
continue checkLoop
|
||||||
|
}
|
||||||
|
st.Rms = float32(rms)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,6 +54,9 @@ type Modem interface {
|
|||||||
Update() error
|
Update() error
|
||||||
GetData() ModemData
|
GetData() ModemData
|
||||||
|
|
||||||
|
PowerOn() error
|
||||||
|
PowerOff() error
|
||||||
|
|
||||||
// Access to SMS, GPS, AT interfaces mostly for debug
|
// Access to SMS, GPS, AT interfaces mostly for debug
|
||||||
At() at.Port // Send
|
At() at.Port // Send
|
||||||
Gps() gps.Gps // Update, GetData, GetStatus
|
Gps() gps.Gps // Update, GetData, GetStatus
|
||||||
@ -81,8 +84,6 @@ func (m *modem) Init() error {
|
|||||||
if err := m.onOffPin.Init(); err != nil {
|
if err := m.onOffPin.Init(); err != nil {
|
||||||
return fmt.Errorf("gpio pin init: %w", err)
|
return fmt.Errorf("gpio pin init: %w", err)
|
||||||
}
|
}
|
||||||
m.logger.Println("TURNING ON IS COMMENTED NOW!!!")
|
|
||||||
// m.onOffPin.PowerOn() // DEBUG do not want to wait 30 seconds
|
|
||||||
|
|
||||||
// Search
|
// Search
|
||||||
m.logger.Println("=============================== Search")
|
m.logger.Println("=============================== Search")
|
||||||
@ -169,6 +170,16 @@ func (m *modem) GetData() ModemData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *modem) PowerOn() error {
|
||||||
|
m.onOffPin.PowerOn() // DEBUG do not want to wait 30 seconds
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *modem) PowerOff() error {
|
||||||
|
_, err := m.At().Send("AT+CPOF")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (m *modem) Sms() sms.Sms {
|
func (m *modem) Sms() sms.Sms {
|
||||||
return m.sms
|
return m.sms
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ func (d *dialer) Init() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ensure text format
|
// Ensure text format
|
||||||
|
d.logger.Println(d.port.Send("AT+CMGF"))
|
||||||
if resp, err := d.port.Send("AT+CMGF=1"); err != nil || !resp.Check() {
|
if resp, err := d.port.Send("AT+CMGF=1"); err != nil || !resp.Check() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("set to text format request: %w", err)
|
return fmt.Errorf("set to text format request: %w", err)
|
||||||
@ -74,7 +75,7 @@ func (d *dialer) Send(number, msg string) error {
|
|||||||
|
|
||||||
// Reads all new messages
|
// Reads all new messages
|
||||||
func (d *dialer) ReadNew() ([]string, error) {
|
func (d *dialer) ReadNew() ([]string, error) {
|
||||||
resp, err := d.port.Send("AT+CMGL=\"ALL\"")
|
resp, err := d.port.Send("AT+CMGL=\"UNREAD\"")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("AT+CMGL request: %w", err)
|
return nil, fmt.Errorf("AT+CMGL request: %w", err)
|
||||||
}
|
}
|
||||||
|
27
main.go
27
main.go
@ -20,25 +20,34 @@ func mainE() error {
|
|||||||
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 {
|
||||||
return err
|
logger.Println("Init ended with error:", err.Error())
|
||||||
|
logger.Println("Try to turn on")
|
||||||
|
if err := m.PowerOn(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
logger.Println("Reinit")
|
||||||
|
if err := m.Init(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if !m.IsConnected() {
|
if !m.IsConnected() {
|
||||||
logger.Println("AAAAAAAAAAAAAAA Modem is not connected")
|
logger.Println("AAAAAAAAAAAAAAA Modem is not connected")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
logger.Println("||||||||||||||||| GET INFO |||||||||||||||||")
|
logger.Println("||||||||||||||||| GET INFO |||||||||||||||||")
|
||||||
|
logger.Println(m.Update())
|
||||||
logger.Printf("DATA: %+v\n", m.GetData())
|
logger.Printf("DATA: %+v\n", m.GetData())
|
||||||
|
|
||||||
// logger.Println("||||||||||||||||| SEND SMS |||||||||||||||||")
|
logger.Println("||||||||||||||||| SEND SMS |||||||||||||||||")
|
||||||
// logger.Println(m.At().Send("AT+CNUM"))
|
logger.Println(m.At().Send("AT+CNUM"))
|
||||||
// if err := m.Sms().Send("+79218937173", "CGSG forever"); err != nil {
|
// if err := m.Sms().Send("+79218937173", "CGSG forever"); err != nil {
|
||||||
// return err
|
// return err
|
||||||
// }
|
// }
|
||||||
// if ms, err := m.Sms().ReadNew(); err != nil {
|
if ms, err := m.Sms().ReadNew(); err != nil {
|
||||||
// return err
|
return err
|
||||||
// } else {
|
} else {
|
||||||
// logger.Println("NEW:", ms)
|
logger.Println("NEW:", ms)
|
||||||
// }
|
}
|
||||||
logger.Println("||||||||||||||||| Checking gps status |||||||||||||||||")
|
logger.Println("||||||||||||||||| Checking gps status |||||||||||||||||")
|
||||||
st, err := m.Gps().GetStatus()
|
st, err := m.Gps().GetStatus()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -46,5 +55,7 @@ func mainE() error {
|
|||||||
}
|
}
|
||||||
logger.Printf("GPS Status:%+v\n", st)
|
logger.Printf("GPS Status:%+v\n", st)
|
||||||
|
|
||||||
|
// logger.Println("Turn off", m.PowerOff())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user