#include "SystemSelector.h" #include "AtGsmSimcomSim7600_Gnss.h" #include "LoggerInterface.h" #include "PwmSim7600e.h" #include "SystemDelayInterface.h" #include "ModemDataCollector.h" #include "TelematicaConnectStatus.h" #include "ext_telematica.h" #define LOG_SIGN "Селектор подсистем вторичный" #define LOGGER env->logger // // Created by zemon on 29.08.24. // void SystemSelectorInit( tSystemSelector *env, tAtCmd *gsmAt, tLoggerInterface *logger, tSim7600ePower *sim7600ePower ){ env->gsmAt = gsmAt; env->logger = logger; env->sim7600ePower = sim7600ePower; env->timeng = 0; } void ModemDataCollector_SetThisSubSystem(tSystemSelector *env, eSubSystems subSystems) { env->thisSsubSystem = subSystems; } eSubSystems ModemDataCollector_GetThisSubSystem(tSystemSelector *env) { return env->thisSsubSystem; } void ModemDataCollector_SelectionSimChipCoolBack(void *env, uint8_t thisSimChip) { ModemDataCollector_SelectionSimChip(env, thisSimChip); } tThisSimChip ModemDataCollector_GetThisSimChip(tSystemSelector *env) { return env->sim7600ePower->thisSimChip; } void ModemDataCollector_SelectionSimChip(tSystemSelector *env, tThisSimChip thisSimChip) { AtCommandResult res = AT_ERROR; uint8_t count = 0; if (osMutexAcquire(env->gsmAt->access, 10000) == osOK) { while ((res != AT_OK)&&(count<=3)) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Попытка переключения чипов"); if(count != 0){ SystemDelayMs(1000); } count ++; AtGsm_OperatorSelectionDeregister(env->gsmAt); SystemDelayMs(150); LoggerInfoStatic(LOGGER, LOG_SIGN, "Переключение коммуникационного модуля в режим минимального функционирования по каналу GSM"); res = AtGsm_Gsnss_Simcom7600_SetWorkingState(env->gsmAt, SIMCOM_FUNC_MINIMAL); SystemDelayMs(150); if (res == AT_OK) { if (thisSimChip == CHIP_ERA) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа ЭРА..."); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа коммерческого..."); } } else { if (thisSimChip == CHIP_ERA) { LoggerInfoStatic(LOGGER, LOG_SIGN, "ОШИБКА перевода коммуникационного модуля в режим минимального функционирования код 1"); LoggerInfoStatic(LOGGER, LOG_SIGN, "Переключение на SIM чипа ЭРА НЕ ВОЗМОЖЕНО"); continue; } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "ОШИБКА перевода коммуникационного модуля в режим минимального функционирования код 2"); LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа коммерческого НЕ ВОЗМОЖЕНО"); continue; } } PwmSim7600e_SimChipSelector(env->sim7600ePower, thisSimChip); SystemDelayMs(150); LoggerInfoStatic(LOGGER, LOG_SIGN, "Переключение коммуникационного модуля в режим полного функционирования по каналу GSM"); res = AtGsm_Gsnss_Simcom7600_SetWorkingState(env->gsmAt, SIMCOM_FUNC_MAXIMAL); SystemDelayMs(700); if (res == AT_OK) { if (thisSimChip == CHIP_ERA) { LoggerInfoStatic(LOGGER, LOG_SIGN, "SIM чипа ЭРА успешно подключён"); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "SIM чипа коммерческий успешно подключён"); } } else { if (thisSimChip == CHIP_ERA) { LoggerInfoStatic(LOGGER, LOG_SIGN, "ОШИБКА перевода коммуникационного модуля в режим полного функционирования код 1"); LoggerInfoStatic(LOGGER, LOG_SIGN, "Переключение на SIM чипа ЭРА НЕ ВОЗМОЖЕНО"); continue; } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "ОШИБКА перевода коммуникационного модуля в режим полного функционирования код 2"); LoggerInfoStatic(LOGGER, LOG_SIGN, "Подключение SIM чипа коммерческого НЕ ВОЗМОЖЕНО"); continue; } } } osMutexRelease(env->gsmAt->access); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Не возможен захват управления ModemDataCollector_SelectionSimChip") } }