#!/usr/bin/python3

from datetime import datetime, timezone
import serial
import time

at_port = '/dev/ttyUSB2'
agps_file = 'RAM:cert.cer'
file = 'cert.cer'
server = 'supl.google.com'

def sendCmd(cmdstring):
    print(cmdstring)
    ser.reset_input_buffer()
    ser.flush()
    ser.write(f"{cmdstring}\r\n".encode('ascii'))
    res =  []
    while True:
        line = ser.readline()
        if (line == b''):
            break
        else:
            res.append(line)
    print(res)
    return res


print('open serial port')
ser = serial.Serial(at_port, timeout=3)
print('Check modem talk to us')
res = sendCmd('AT')

res = sendCmd('AT+QIACT?')

# delete old ssl data
res = sendCmd(f"AT+QFDEL=\"{agps_file}\"")


print('write configuration')
# set TLS1.2
res = sendCmd('AT+QSSLCFG="sslversion",1,3')


print('upload file to the modem')
r = open('cert.crt','rb').read()
res = sendCmd(f"AT+QFUPL=\"{agps_file}\",{len(r)}")
ser.write(r)
res = []
while True:
    line = ser.readline()
    if (line == b''):
        break
    else:
        res.append(line)
print(res)

print('set ssl ca')
res = sendCmd(f'AT+QSSLCFG="cacert",1,"' + agps_file + '"')
res = sendCmd(f'AT+QSSLOPEN=1,1,4,"' + server + '",7275,0')

for x in range(0, 5):
    res = sendCmd(f"AT+QSSLSTATE")
    time.sleep(1)

print('stop SSL connection')    
res = sendCmd(f"AT+QSSLCLOSE=4")

print('close serial port')
if ser.is_open:
    ser.close()
