# Link para a API do quecpython:
# https://python.quectel.com/wiki/#/en-us/api

import utime    # Import timing module

from usr.cmq151Logger    import Cmq151Logger # Import logger module
from usr.cmq151Device    import Cmq151Device # Import Device module
from usr.cmq151IOHandler import Cmq151IOHandler # Import IO Handler module
from usr.cmq151RunMode   import Cmq151RunMode # Import Run module
from usr.cmq151CfgMode   import Cmq151CfgMode # Import Cfg module

import usr.global_config as config

# 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.04'  


# - - - - - - - - - - - - - - - - - - - - - 
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()
