package main import ( "context" "log" "os" "os/signal" "syscall" "time" "gitea.unprism.ru/KRBL/sim-modem/api/modem" ) func main() { log.Println("CGSG forever!!!") ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer cancel() // Just for logs go func(ctx context.Context) { <-ctx.Done() log.Println("GOT INTERUPT SIGNAL") }(ctx) if err := mainE(ctx); err != nil { log.Println("MAIN finished with error:", err.Error()) } log.Println("END") } func mainE(ctx context.Context) error { logger := log.New(os.Stdout, "main : ", log.LstdFlags) m := modem.New(log.New(logger.Writer(), "modem : ", log.LstdFlags)) logger.Println("||||||||||||||||| INIT |||||||||||||||") initLoop: for { select { case <-ctx.Done(): logger.Println("Break init loop") return nil default: if err := m.Init(); err != nil { logger.Println("Init ended with error:", err.Error()) // logger.Println("Turn on...") // if err := m.PowerOn(); err != nil { // logger.Println("Turn on error:", err.Error()) // } continue initLoop } break initLoop } } if !m.IsConnected() { logger.Println("Modem is not connected") return nil } defer func() { logger.Println("||||||||||||||||| CLOSE |||||||||||||||") m.Close() }() // Connect to internet // if err := m.Ic().Connect(); err != nil { // return fmt.Errorf("connect to internet: %w", err) // } logger.Println("||||||||||||||||| SMS |||||||||||||||||") Cmd := func(cmd string) { resp, err := m.At().SendWithTimeout(cmd, 50*time.Millisecond) logger.Println(cmd, "===>", resp, err) } _ = Cmd // Select ME PMS // logger.Println("SEND SMS") // logger.Println(m.Sms().Send("+79218937173", "CGSG forever!!!")) // m.At().RawSend("\r\n\x1A\r\n") // Cmd("AT+CREG?") // Cmd("AT+CNMI?") // Cmd("AT+CSQ") // Cmd("AT+CSCA?") // Cmd("AT+CPOL?") // Cmd("AT+COPS?") // // Cmd("AT+COPS=?") // Cmd("AT+CPSI?") // resp, err = m.At().Send("AT+CNMI=2,2") for { select { case <-ctx.Done(): logger.Println("Break main loop") return nil default: // Cmd("AT+CPSI?") // Cmd("AT+CSQ") // Cmd("AT+CCLK?") // logger.Println(m.Gps().GetStatus()) // m.Update() // st, _ := m.Gps().GetStatus() // logger.Printf("GPS STATUS: %+v", st) // logger.Printf("GPS DATA: %+v", m.GetData()) logger.Println(m.GetTime()) time.Sleep(2 * time.Second) } // Cmd("AT+CSQ") // Cmd("AT+COPS?") // if err := m.CheckSignal(); err != nil { // logger.Println(err) // } else { // logger.Println("AAAAAAAAAAA THERE IS SIGNAL") // } // readLen, err := m.At().SerialPort().Read(buf) // if err != nil { // return err // } // if readLen > 0 { // logger.Println(string(buf[:readLen])) // } } // resp, err = m.At().Send("AT+CPMS?") // logger.Println("Prefered mem storage:", resp, err) // resp, err = m.At().Send("AT+CREG?") // logger.Println("Network registration:", resp, err) // resp, err = m.At().Send("AT+CPMS?") // logger.Println("Prefered mem storage:", resp, err) // resp, err = m.At().Send("AT+CPMS=?") // logger.Println("Possible mem storage:", resp, err) // resp, err = m.At().Send("AT+CNMI?") // logger.Println("New message indications:", resp, err) // resp, err = m.At().Send("AT+CMGL=\"REC UNREAD\"") // logger.Println("New messages:", resp, err) // resp, err = m.At().Send("AT+CNMI=2,1") // logger.Println("AT+CNMI=2,1:", resp, err) // resp, err = m.At().Send("AT+CNMI?") // logger.Println("New message indications:", resp, err) // logger.Println("Reading port...") // for { // readLen, err := m.At().SerialPort().Read(buf) // if err != nil { // return err // } // if readLen > 0 { // logger.Println(string(buf[:readLen])) // } // } // for { // resp, err = m.At().Send("AT+CSQ") // logger.Println("AT+CSQ:", resp, err) // time.Sleep(500 * time.Millisecond) // } // logger.Println("||||||||||||||||| Checking gps status |||||||||||||||||") // st, err := m.Gps().GetStatus() // if err != nil { // return err // } // logger.Printf("GPS Status:%+v\n", st) // logger.Println("Turn off", m.PowerOff()) return nil }