SMART_COMPONENTS_SystemSele.../SystemSelector.c

112 lines
5.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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")
}
}