# Link para a API do quecpython:
# https://python.quectel.com/wiki/#/en-us/api

import utime    # Import timing module # type: ignore

from usr.cmq151Logger    import Cmq151Logger # Import logger module # type: ignore
from usr.cmq151Device    import Cmq151Device # Import Device module # type: ignore
from usr.cmq151IOHandler import Cmq151IOHandler # Import IO Handler module # type: ignore
from usr.cmq151RunMode   import Cmq151RunMode # Import Run module # type: ignore
from usr.cmq151CfgMode   import Cmq151CfgMode # Import Cfg module # type: ignore

import usr.global_config as config # type: ignore

# Nome do projeto (obrigatório para gerar o pacote de firmware)
# Versão do projeto (obrigatório para gerar o pacote de firmware)

PROJECT_NAME    = 'CMQ151'        
PROJECT_VERSION = '1.0.05'  


# - - - - - - - - - - - - - - - - - - - - - 
def run():
    # Cria infra para log
    config.VERSION = PROJECT_VERSION
    config.LOG_NAME = PROJECT_NAME
    
    logger = Cmq151Logger()

    #leitura dos parâmetros de configuração pelo arquivo de configuração
    config.USR_CONFIG_RET_CODE, config.USR_CONFIG = config.loadUserConfigFromFile(logger)

    # cria as threads de comnunicação
    device = Cmq151Device(logger)
    # cria objetos de gerencia dos modos de operação
    run_obj = Cmq151RunMode(device, logger)
    cfg_obj = Cmq151CfgMode(device, logger)
    # cria objeto para leitura do modo de operação
    config.DEV_IO_OBJ = Cmq151IOHandler(run_obj, cfg_obj, logger)
    mode_handler = config.DEV_IO_OBJ.getModeHandler()
    # mantem um contador de tempo para avaliar alteração 
    # do modo de operação a cada 2 segundos 
    start = utime.ticks_ms()
    while True:
        # inclui um tempo para não travar na tarefa principal
        utime.sleep(0.02)
        
        mode_handler.run()   # trata o modo de operação corrente
        
        #chama o método de verificação do pino a cada 500ms
        if utime.ticks_diff(utime.ticks_ms(), start) > 500:
            #print(utime.ticks_diff(utime.ticks_ms(), start))
            mode_handler = config.DEV_IO_OBJ.getModeHandler()
            start = utime.ticks_ms()


if __name__ == "__main__":
    run()



# -------- HIstórico de Liberação --------
# 1.0.05 - 
#  - Incluso parâmetro de configuração Timeout de inatividade
# 1.0.04 - 24/02/2025
#  - Adicionado KEEPALIVE da conexão TCP: firmware de teste para cliente DUO Automação
# 1.0.03 - 22/02/2024
#  - Melhorias e incluso suporte FOTA
# 1.0.02 - 14/02/2024
#  - Incluso infra para conexão SSL
# 1.0.01 - 18/12/2023
#  - Versão inicial do firmware