import serial

ser = None

def port_verify(port): # Verifica se a porta digitada está ativa no SO
    try:
        testing_port = serial.Serial(porta)
        testing_port.close()
        print('Porta válida\n')
        return port

    except serial.SerialException:
        print('Porta inválida\n')
        return None
        
def main():
    global ser
    port = None
    while True: # Loop para que o usuário digite uma porta até que ela seja válida
        input_porta = str(input('Informe a porta: '))
        port = port_verify(input_porta)
        if port:
            break
    ser = serial.Serial(port,'9600') #Inicia a comunicação serial na velocidade 9600, padrão da OLT
    ser.close() # Fecha qualquer conexão já existente na porta 
    ser.open() # Inicia uma nova conexão na porta
    print('Conectado à porta ' + port)
    aguarda_boot()
    executa_comandos(b'cd datastor\n', 1)
    list_dir = executa_comandos(b'dir\n')
    for x in list_dir:
        print(x)   
    ser.close()

def executa_comandos(comando, lines):
    retorno = []
    ser.write(comando)
    for x in range(lines):
        res = ser.readline()

    return retorno.append(res)
    
    

def aguarda_boot(): # Aguarda pela mensagem de boot e o interrompe
    print('Aguardando o boot da OLT. \nReinicie-a para que o processo inicie.')

    boot_interrupt_msg = 'Prepare to load full image...'

    while True:
        rec = ser.readline()
        print(rec.decode('utf-8'))
        
        for boot_interrupt_msg in rec.decode('utf-8'):
            ser.write(b'zhone\n\n')
            print('zhone')
            return None

if __name__ == "__main__":
    main()
    
    

import serial

ser = None

def port_verify(port): # Verifica se a porta digitada está ativa no SO
    try:
        testing_port = serial.Serial(porta)
        testing_port.close()
        print('Porta válida\n')
        return port

    except serial.SerialException:
        print('Porta inválida\n')
        return None
        
def main():
    global ser
    port = None
    while True: # Loop para que o usuário digite uma porta até que ela seja válida
        input_porta = str(input('Informe a porta: '))
        port = port_verify(input_porta)
        if port:
            break
    ser = serial.Serial(port,'9600') #Inicia a comunicação serial na velocidade 9600, padrão da OLT
    ser.close() # Fecha qualquer conexão já existente na porta 
    ser.open() # Inicia uma nova conexão na porta
    print('Conectado à porta ' + port)
    aguarda_boot()
    executa_comandos(b'cd datastor\n', 1)
    list_dir = executa_comandos(b'dir\n')
    for x in list_dir:
        print(x)   
    ser.close()

def executa_comandos(comando, lines):
    retorno = []
    ser.write(comando)
    for x in range(lines):
        res = ser.readline()

    return retorno.append(res)
    
    

def aguarda_boot(): # Aguarda pela mensagem de boot e o interrompe
    print('Aguardando o boot da OLT. \nReinicie-a para que o processo inicie.')

    boot_interrupt_msg = 'Prepare to load full image...'

    while True:
        rec = ser.readline()
        print(rec.decode('utf-8'))
        
        for boot_interrupt_msg in rec.decode('utf-8'):
            ser.write(b'zhone\n\n')
            print('zhone')
            return None

if __name__ == "__main__":
    main()
    
    

# Verifica se a porta digitada está ativa no SO # Loop para que o usuário digite uma porta até que ela seja válida #Inicia a comunicação serial na velocidade 9600, padrão da OLT # Fecha qualquer conexão já existente na porta # Inicia uma nova conexão na porta # Aguarda pela mensagem de boot e o interrompe