225 lines
12 KiB
C
225 lines
12 KiB
C
#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,
|
||
"=====================================================================")
|
||
}
|
||
}
|
||
} |