#!/usr/bin/python
# install ser2net and configure ser2net.conf to include
# 127.0.0.1,2000:raw:600:/dev/ttySAC0:115200 8DATABITS NONE 1STOPBIT RTSCTS -XONXOFF
import socket
import time

def read_all(s):
    s.settimeout(2)
    ret = ""
    try:
        while True:
            ret += s.recv(1024)
    except socket.timeout:
        return ret

def send(s, msg):
    s.send("\x1a")
    time.sleep(0.6)
    s.send(msg + "\r\n")

def say(s, msg):
    print("%s < %s" % (time.strftime("%H:%M:%S"), msg))
    send(s, msg)
    ret = read_all(s)
    lines = ret.split("\r\n")
    assert lines[0] == ""
    assert lines[-1] == ""
    print("%s > %s" % (time.strftime("%H:%M:%S"), repr(lines[1:-1])))
    return lines[1:-1]

def start(s):
    ret = read_all(s)
    if ret not in ["", 'AT-Command Interpreter ready\r\n']:
        raise AssertionError(repr(ret))

    send(s, "ATE0")
    ret = read_all(s)
    if ret not in ['\r\nOK\r\n', 'ATE0\r\r\nOK\r\n']:
        raise AssertionError(repr(ret))

    assert say(s, "AT+CFUN=1") in (["OK"], ["ERROR"])
    
    assert say(s, "AT+CPIN=\"0000\"") in (["ERROR"], ["OK"])

    assert say(s, "AT+CPIN?") == ['+CPIN: READY', '', 'OK']
        
    assert say(s, "AT+COPS") in ([],["ERROR"])

    ret = say(s, "AT+COPS?")
    assert ret[0] == "OK"
    assert ret[1] == ""
    assert ret[2].startswith("+COPS:")
    assert ret[3] == ""
    assert ret[4] == "OK"

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("localhost", 2000))

    start(s)
    
    while True:
        say(s, "AT+CREG?")
        say(s, "AT+COPS?")
        say(s, "AT+CSQ")
        time.sleep(120)

    s.close()

main()

