Added service checks. Some refactoring.
This commit is contained in:
37
api/modem/utils/service.go
Normal file
37
api/modem/utils/service.go
Normal file
@ -0,0 +1,37 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"gitea.unprism.ru/KRBL/sim-modem/api/modem/at"
|
||||
)
|
||||
|
||||
func CheckService(port at.Port, logger *log.Logger) (bool, error) {
|
||||
srv, err := getService(port)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("get service: %w", err)
|
||||
}
|
||||
if srv == "NO SERVICE" {
|
||||
return false, nil
|
||||
}
|
||||
logger.Println("Current service:", srv)
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// Returns service
|
||||
func getService(port at.Port) (string, error) {
|
||||
resp, err := port.Send("AT+CPSI?")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if !resp.Check() || !resp.CheckFront("+CPSI: ") {
|
||||
return "", fmt.Errorf("error response: %s", resp)
|
||||
}
|
||||
values := strings.Split(strings.ReplaceAll(strings.Split(resp.RmFront("+CPSI: ").String(), "\n")[0], "\r", ""), ",")
|
||||
if len(values) < 2 {
|
||||
return "", fmt.Errorf("invalid values(len): [% s]", values)
|
||||
}
|
||||
return values[0], nil
|
||||
}
|
@ -9,19 +9,19 @@ import (
|
||||
"gitea.unprism.ru/KRBL/sim-modem/api/modem/at"
|
||||
)
|
||||
|
||||
func CheckSignal(port at.Port, logger *log.Logger) error {
|
||||
func CheckSignal(port at.Port, logger *log.Logger) (bool, error) {
|
||||
rssi, ber, err := getSignalQuality(port)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get signal quality: %w", err)
|
||||
return false, fmt.Errorf("get signal quality: %w", err)
|
||||
}
|
||||
logger.Printf("check signal: rssi=%d ber=%d\n", rssi, ber)
|
||||
if err := checkRssi(rssi); err != nil {
|
||||
return fmt.Errorf("rssi: %w", err)
|
||||
return false, nil
|
||||
}
|
||||
if err := checkBer(ber); err != nil {
|
||||
logger.Printf("bad ber(not critical): %s", err.Error()) // Happened not to be critical
|
||||
}
|
||||
return nil
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func checkRssi(rssi int) error {
|
||||
@ -84,6 +84,7 @@ func checkBer(ber int) error {
|
||||
return fmt.Errorf("invalid code %d", ber)
|
||||
}
|
||||
|
||||
// Returns rssi and ber(look above)
|
||||
func getSignalQuality(port at.Port) (int, int, error) {
|
||||
resp, err := port.Send("AT+CSQ")
|
||||
if err != nil {
|
||||
|
26
api/modem/utils/sim.go
Normal file
26
api/modem/utils/sim.go
Normal file
@ -0,0 +1,26 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"gitea.unprism.ru/KRBL/sim-modem/api/modem/at"
|
||||
)
|
||||
|
||||
func CheckPIN(port at.Port, logger *log.Logger) error {
|
||||
// Get code
|
||||
resp, err := port.Send("AT+CPIN?")
|
||||
if err != nil {
|
||||
return fmt.Errorf("AT+CPIN? request: %w", err)
|
||||
}
|
||||
if !resp.Check() || !resp.CheckFront("+CPIN:") {
|
||||
return fmt.Errorf("AT+CPIN? error response: %s", resp)
|
||||
}
|
||||
code := strings.ReplaceAll(strings.ReplaceAll(strings.Split(resp.RmFront("+CPIN:").String(), "\n")[0], "\r", ""), " ", "")
|
||||
if code != "READY" {
|
||||
return fmt.Errorf("not READY code: %s", code)
|
||||
}
|
||||
logger.Println("PIN is ready")
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user