SMART_COMPONENTS_SubsystemS.../SubsystemSwitcher.c

225 lines
12 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 <stdint-gcc.h>
#include "SystemSelector.h"
#include "ModemDataCollector.h"
#include "SystemDelayInterface.h"
#include "SubsystemSwitcher.h"
#include "ext_telematica.h"
#include "TelematicaConnectStatus.h"
#define LOG_SIGN "Селектор подсистем основной"
#define LOGGER env->logger
//
// Created by zemon on 28.08.24.
//
void SystemSwitcherInit(
tSystemSwitcher *env,
tSystemSelector *systemSelector,
tModemDataColl *modemDataCollector,
tLoggerInterface *logger,
tDeviceStorage *storage,
eUveosDoNothing *uveosDoNothingMode,
eTelematicaIsConnect *telematicaIsConnect,
bool *fl_iniSysIsDone
){
env->systemSelector = systemSelector;
env->logger = logger;
env->storage = storage;
env->modemDataCollector = modemDataCollector;
env->uveosDoNothingMode = uveosDoNothingMode;
env->telematicaIsConnect = telematicaIsConnect;
env->fl_iniSysIsDone = fl_iniSysIsDone;
}
void Mma_SystemSelectEra(tSystemSwitcher *env, eSubSystems subSystems) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Инициировано запуск подсистемы УВЭОС")
if (env->storage->runtime.EGTS_FLEET_ON == true) {
uint32_t tm = SystemGetMs() + 4000;
env->storage->runtime.EGTS_FLEET_ON = false;
while (tm > SystemGetMs()) {
if (env->storage->runtime.telematicaCloseConnect == true) {
break;
}
SystemDelayMs(1);
}
}
LoggerInfoStatic(LOGGER, LOG_SIGN, "Отключение телематической системы выполнено")
eSubSystems subSystemsTmp = ModemDataCollector_GetThisSubSystem(env->systemSelector);
if (subSystemsTmp != subSystems) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Инициализировано переключение SIM чипов")
ModemDataCollector_SelectionSimChip(env->systemSelector, CHIP_ERA);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Текущая подсистема установлена УВЭОС")
ModemDataCollector_SetThisSubSystem(env->systemSelector, subSystems);
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Запуск подсистемы УВЭОС не требуется, система в режиме ЭРА")
}
}
void Mma_SystemSelectTelematica(tSystemSwitcher *env, eSubSystems subSystems) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Инициировано запуск подсистемы ТЕЛЕМАТИКА")
*env->uveosDoNothingMode = UVEOS_DO_NOTHING_DISABLED;
ModemDataCollector_SelectionSimChip(env->systemSelector, CHIP_COMERS);
ModemDataCollector_SetThisSubSystem(env->systemSelector, subSystems);
if (env->storage->runtime.EGTS_FLEET_ON == false) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Запуск телематической системы")
env->storage->runtime.EGTS_FLEET_ON = true;
LoggerInfoStatic(LOGGER, LOG_SIGN, "Телематическая система запущена")
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Запуск телематическая системы не проведён, телематика находится в активном состоянии")
}
}
void Mma_SelectorOneSystem(tSystemSwitcher *env, eSubSystems subSystems) {
if (subSystems == UNDEFANDET) {
ModemDataCollector_SetThisSubSystem(env->systemSelector, UNDEFANDET);
return;
}
eSubSystems subSystemsTmp = ModemDataCollector_GetThisSubSystem(env->systemSelector);
if (subSystems == UVEOS) {
if (subSystemsTmp != subSystems) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "ИНИЦИАЛИЗИРОВАНО ПЕРЕКЛЮЧЕНИЕ ПОДСИСТЕМ КОД 1")
if (env->modemDataCollector->modemVersionRevision.valid_CCID == MOD_READY) {
Mma_SystemSelectEra(env, subSystems);
}
if (env->modemDataCollector->modemVersionRevision.valid_CCID == MOD_UNDEFANDED) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сим чип ЭРА не считан, ожидание ответа чипа 10 сек")
uint32_t tm = SystemGetMs() + 10000;
while (tm > SystemGetMs()) {
if (env->modemDataCollector->modemVersionRevision.valid_CCID == MOD_READY) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сим чип ЭРА подключен")
Mma_SystemSelectEra(env, subSystems);
return;
}
}
}
if (env->telematicaIsConnect != TELE_ACSESS_DENATED) {
if (env->modemDataCollector->modemVersionRevision.valid_CCID == MOD_ERROR) {
if (env->systemSelector->timeng < SystemGetMs()) {
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Включение системы УВЭОС не возможно, НЕ ИСПРАВЕН СИМ ЧИП ЭРА")
env->systemSelector->timeng = SystemGetMs() + 10000;
}
if (!env->storage->nvm->device.factoryMode) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Выполняется запуск подсистемы ТЕЛЕМАТИКА")
Mma_SystemSelectTelematica(env, TELEMATICA);
return;
} else {
Mma_SystemSelectEra(env, subSystems);
ModemDataCollector_SelectionSimChip(env->systemSelector, CHIP_COMERS);
return;
}
}
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Запуск подсистемы ТЕЛЕМАТИКА запрещён текущей конфигурацией оборудования код 1")
}
}
} else {
if (subSystemsTmp != subSystems) {
if (env->telematicaIsConnect != TELE_ACSESS_DENATED) {
if ((subSystems == TELEMATICA) && (EXT_ENV_ADR_TELE.META_EXT_ENV_TELE)) {
if (env->modemDataCollector->modemVersionRevision.valid_CCIDComer == MOD_READY) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "ИНИЦИАЛИЗИРОВАНО ПЕРЕКЛЮЧЕНИЕ ПОДСИСТЕМ КОД 2")
Mma_SystemSelectTelematica(env, subSystems);
}
if (env->modemDataCollector->modemVersionRevision.valid_CCIDComer == MOD_UNDEFANDED) {
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Коммерческий сим чип не считан, ожидание ответа чипа 10 сек")
uint32_t tm = SystemGetMs() + 10000;
while (tm > SystemGetMs()) {
if (env->modemDataCollector->modemVersionRevision.valid_CCIDComer == MOD_READY) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "ИНИЦИАЛИЗИРОВАНО ПЕРЕКЛЮЧЕНИЕ ПОДСИСТЕМ КОД 3")
LoggerInfoStatic(LOGGER, LOG_SIGN, "Коммерческий сим чип подключен")
Mma_SystemSelectTelematica(env, subSystems);
return;
}
}
}
if (env->modemDataCollector->modemVersionRevision.valid_CCIDComer == MOD_ERROR) {
if (env->modemDataCollector->systemSelector->thisSsubSystem != UVEOS) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "ИНИЦИАЛИЗИРОВАНО ПЕРЕКЛЮЧЕНИЕ ПОДСИСТЕМ КОД 4")
Mma_SystemSelectEra(env, UVEOS);
} else {
return;
}
LoggerInfoStatic(LOGGER, LOG_SIGN, "Выполнен запуск подсистемы УВЭОС")
if (env->systemSelector->timeng < SystemGetMs()) {
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Включение телематической системы не возможно, НЕ ИСПРАВЕН КОММЕРЧЕСКИЙ СИМ ЧИП")
env->systemSelector->timeng = SystemGetMs() + 10000;
}
}
}
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Запуск подсистемы ТЕЛЕМАТИКА запрещён текущей конфигурацией оборудования код 2")
}
}
SystemDelayMs(500);
}
}
void SelectSubSys(tSystemSwitcher *env, eSubSystems subSystems) {
if(env->systemSelector->thisSsubSystem != subSystems) {
for (uint8_t i = 0; i < 3; i++) {
Mma_SelectorOneSystem(env, subSystems);
env->modemDataCollector->modemVersionRevision.resIsChipSelect = ModemDataCollector_ChekSelectSimChips(env->modemDataCollector, &subSystems);
if (env->modemDataCollector->modemVersionRevision.resIsChipSelect == true) {
break;
}
}
}
if(env->modemDataCollector->modemVersionRevision.resIsChipSelect == false){
if(subSystems == TELEMATICA){
env->modemDataCollector->modemVersionRevision.valid_CCIDComer = MOD_ERROR;
}
if(subSystems == UVEOS){
env->modemDataCollector->modemVersionRevision.valid_CCID = MOD_ERROR;
}
}
}
void SystemSelector(tSystemSwitcher *env, eSubSystems subSystems) {
if (*env->fl_iniSysIsDone == true) {
SelectSubSys(env, subSystems);
} else {
volatile bool fl = false;
uint32_t timeWaitInitSystem = SystemGetMs() + 15000;
while (timeWaitInitSystem > SystemGetMs()){
if (*env->fl_iniSysIsDone == true) {
SelectSubSys(env, subSystems);
fl = true;
break;
}
SystemDelayMs(500);
}
if ((*env->fl_iniSysIsDone == false)&&(fl == false)) {
LoggerTraceStatic(LOGGER, LOG_SIGN,
"=====================================================================")
LoggerTraceStatic(LOGGER, LOG_SIGN,
"=====================================================================")
LoggerTraceStatic(LOGGER, LOG_SIGN, "")
LoggerTraceStatic(LOGGER, LOG_SIGN, "")
LoggerTraceStatic(LOGGER, LOG_SIGN, " ВНИМАНИЕ!")
LoggerTraceStatic(LOGGER, LOG_SIGN,
" БЫЛА ПОПЫТКА ПЕРЕКЛЮЧЕНИЯ РЕЖИМОВ РАБОТЫ (УВЭОС - ТЕЛЕМАТИКА)")
LoggerTraceStatic(LOGGER, LOG_SIGN,
" ДО ТОГО, КАК БЫЛИ ИНИЦИАЛИИЗИРОВАНЫ И ЗАПУЩЕНЫ ВСЕ ДРУГИЕ ПОДСИСТЕМЫ")
LoggerTraceStatic(LOGGER, LOG_SIGN, "")
LoggerTraceStatic(LOGGER, LOG_SIGN, "")
LoggerTraceStatic(LOGGER, LOG_SIGN,
"=====================================================================")
LoggerTraceStatic(LOGGER, LOG_SIGN,
"=====================================================================")
}
}
}