diff --git a/MainModesArbiter.c b/MainModesArbiter.c index 7869aec..606f71f 100644 --- a/MainModesArbiter.c +++ b/MainModesArbiter.c @@ -16,6 +16,7 @@ #define LOG_SIGN "Главн." #define LOGGER &env->slog.logger +#ifdef UVEOS_ADD_TELEMATICA void TELEMATICA_START(tMma *env) { env->storage.runtime.EGTS_FLEET_ON = true; } @@ -35,6 +36,8 @@ void TELEMATICA_STOP(tMma *env) { } } +#endif + size_t str_len = 0; char step[5]; @@ -101,8 +104,12 @@ void Mma_CheckShutdown(tMma *env, bool fastBlackOut) { if (statShutdown && (!statStandUp)) { Mma_Shutdown(env); } else { + +#ifdef UVEOS_ADD_TELEMATICA if (env->storage.runtime.EGTS_FLEET_ON == false) TELEMATICA_START(env); +#endif + } Mma_CheckShutdownIsBattary(env); @@ -391,6 +398,47 @@ void Mma_TestingThread(tMma *env) { } } +static void checkLastInMemTransmit(tMma *env) { + + if (env->uveos.timings.lastInMemTransmit < SystemGetMs()) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Периодическая проверка необходимости повторной отправки МНД"); + + volatile uint32_t noSendMsdCount = EraGlonassMsdTable_GetNoSendDataCount(env->uveos.msdTable); + if (noSendMsdCount > 0) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Проверка регистрации в сети"); + if (GsmWithGnss_WaitNetworkRegistration(&env->gsmWithGnss, 2000)) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть присутствует"); + EraGlonassUveos_ProcessingCheckNoSendMSD(&env->uveos); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление всех СМС..."); + AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); + SystemDelayMs(500); + AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление СМС выполнено"); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть или сим-чип отсутствует, попытка регистрации..."); + if (GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 5, 40000) == AT_OK) { + LoggerTraceStatic(LOGGER, LOG_SIGN, "Сеть присутствует") + EraGlonassUveos_ProcessingCheckNoSendMSD(&env->uveos); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление всех СМС..."); + AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); + SystemDelayMs(500); + AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление СМС выполнено"); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, + "Периодическая проверка необходимости повторной отправки МНД не выполнена"); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть или сим-чип отсутствует"); + } + } + LoggerTraceStatic(LOGGER, LOG_SIGN, "Обработка не отправленных МНД выполнена") + } + + env->uveos.timings.lastInMemTransmit = + SystemGetMs() + (env->uveos.settings->INT_MEM_TRANSMIT_INTERVAL * 60 * 1000); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Время периодическая проверки повторной отправки МНД обновлено"); + } +} + static _Noreturn void Mma_Thread(tMma *env) { RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE); PWR_BackupAccessEnable(ENABLE); @@ -399,6 +447,7 @@ static _Noreturn void Mma_Thread(tMma *env) { //Запуск устройства Mma_InitStage(env); +#ifdef UVEOS_ADD_TELEMATICA EgtsProcessing_Init( &env->egtsProcessing, &env->storage, @@ -409,6 +458,7 @@ static _Noreturn void Mma_Thread(tMma *env) { ); EgtsProcessing_Start(&env->egtsProcessing); +#endif volatile size_t size = xPortGetMinimumEverFreeHeapSize(); uint32_t sizeStorage = sizeof(tDeviceDataNonVolatile); @@ -469,21 +519,24 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть или сим-чип отсутствует"); } } else { + +#ifdef UVEOS_ADD_TELEMATICA TELEMATICA_START(env); +#endif + } Pwm_AudioDisable(&env->power); LoggerTraceStatic(LOGGER, LOG_SIGN, "Звуковой усилитель отключён") - SystemDelayMs(100); - // Mma_StartTestThreadStart(env); for (;;) { Mma_ColorBip(env); +#ifdef UVEOS_ADD_TELEMATICA if (env->storage.runtime.EGTS_FLEET_ON == false) { if (osMutexAcquire(env->gsmWithGnss.gsmAt.access, 1000) == osOK) { @@ -502,7 +555,17 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerTraceStatic(LOGGER, LOG_SIGN, "Ошибка доступа (2)") } } +#endif +#ifndef UVEOS_ADD_TELEMATICA + if (osMutexAcquire(env->gsmWithGnss.gsmAt.access, 1000) == osOK) { + AtGsm_Gsnss_GetNMEA_Pack(&env->gsmWithGnss, 400); + osMutexRelease(env->gsmWithGnss.gsmAt.access); + SystemDelayMs(1000); + } else { + LoggerTraceStatic(LOGGER, LOG_SIGN, "Ошибка доступа (2)") + } +#endif LoggerTraceStatic(LOGGER, LOG_SIGN, "Начало итерации главного цикла") LoggerTraceStatic(LOGGER, LOG_SIGN, "Проверяем нужна ли сеть...") @@ -550,46 +613,15 @@ static _Noreturn void Mma_Thread(tMma *env) { // } -//+++CFIF +#ifdef UVEOS_ADD_TELEMATICA if (env->storage.runtime.EGTS_FLEET_ON == false) { - if (env->uveos.timings.lastInMemTransmit < SystemGetMs()) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Периодическая проверка необходимости повторной отправки МНД"); - - noSendMsdCount = EraGlonassMsdTable_GetNoSendDataCount(env->uveos.msdTable); - if (noSendMsdCount > 0) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Проверка регистрации в сети"); - if (GsmWithGnss_WaitNetworkRegistration(&env->gsmWithGnss, 2000)) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть присутствует"); - EraGlonassUveos_ProcessingCheckNoSendMSD(&env->uveos); - LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление всех СМС..."); - AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); - SystemDelayMs(500); - AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); - LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление СМС выполнено"); - } else { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть или сим-чип отсутствует, попытка регистрации..."); - if (GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 5, 40000) == AT_OK) { - LoggerTraceStatic(LOGGER, LOG_SIGN, "Сеть присутствует") - EraGlonassUveos_ProcessingCheckNoSendMSD(&env->uveos); - LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление всех СМС..."); - AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); - SystemDelayMs(500); - AtGsmSms_DeleteAll(&env->gsmWithGnss.gsmAt); - LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление СМС выполнено"); - } else { - LoggerInfoStatic(LOGGER, LOG_SIGN, - "Периодическая проверка необходимости повторной отправки МНД не выполнена"); - LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть или сим-чип отсутствует"); - } - } - LoggerTraceStatic(LOGGER, LOG_SIGN, "Обработка не отправленных МНД выполнена") - } - - env->uveos.timings.lastInMemTransmit = - SystemGetMs() + (env->uveos.settings->INT_MEM_TRANSMIT_INTERVAL * 60 * 1000); - LoggerInfoStatic(LOGGER, LOG_SIGN, "Время периодическая проверки повторной отправки МНД обновлено"); - } + checkLastInMemTransmit(env); } +#endif + +#ifndef UVEOS_ADD_TELEMATICA + checkLastInMemTransmit(env); +#endif // LoggerTraceStatic(LOGGER, LOG_SIGN, "Проверяем экстренное событие") // if (UveosEmergencyEvent_GetNext(&env->crashDetect.emergencyEvents, &emergencyEvent, 0)) { @@ -617,7 +649,10 @@ static _Noreturn void Mma_Thread(tMma *env) { buttonEvent, UI_BUTTON_EMERGENCY, RAISE, env->storage.nvm.gost.SOS_BUTTON_TIME, 0xFFFF )) { +#ifdef UVEOS_ADD_TELEMATICA TELEMATICA_STOP(env); +#endif + LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова KZ 1") uint32_t tmt = SystemGetMs() + 10000; UserButtons_Clear(&env->userInput.buttonsInterface); @@ -627,7 +662,10 @@ static _Noreturn void Mma_Thread(tMma *env) { buttonEvent, UI_BUTTON_EMERGENCY, RAISE, env->storage.nvm.gost.SOS_BUTTON_TIME, 0xFFFF )) { + +#ifdef UVEOS_ADD_TELEMATICA TELEMATICA_STOP(env); +#endif LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова KZ 2") EraGlonassUveos_SetTimings(&env->uveos); Mma_SetMode(env, DEVICE_MODE_UVEOS_CALL_INITIATE); @@ -648,7 +686,11 @@ static _Noreturn void Mma_Thread(tMma *env) { SystemDelayMs(10); } if (env->kzModeBloc == false) { + +#ifdef UVEOS_ADD_TELEMATICA TELEMATICA_STOP(env); +#endif + LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова_1") Mma_EcallManual(env); } @@ -657,11 +699,18 @@ static _Noreturn void Mma_Thread(tMma *env) { } else if (UserInputButtonEventIsBetween( buttonEvent, UI_BUTTON_EMERGENCY, RAISE, env->storage.nvm.gost.SOS_BUTTON_TIME, 0xFFFF )) { + +#ifdef UVEOS_ADD_TELEMATICA TELEMATICA_STOP(env); +#endif + LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова_2") Mma_EcallManual(env); } else if (UserInputButtonEventIsBetween(buttonEvent, UI_BUTTON_ADDITIONAL, RAISE, 3000, 10000)) { + +#ifdef UVEOS_ADD_TELEMATICA TELEMATICA_STOP(env); +#endif vAsciiStringInit(step, &str_len, 5); vAsciiStringAddDecimalInt64(step, &str_len, env->uveos.doNothing.movDist, 5); @@ -699,12 +748,22 @@ static _Noreturn void Mma_Thread(tMma *env) { } + +#ifdef UVEOS_ADD_TELEMATICA if (env->storage.runtime.EGTS_FLEET_ON == false) { if (EraGlonassUveos_IsAllowInCall(&env->uveos) && GsmWithGnss_IsRing(&env->gsmWithGnss)) { Mma_ProcessCallAnswer(env); } Mma_CheckIncomingSms(env); } +#endif + +#ifndef UVEOS_ADD_TELEMATICA + if (EraGlonassUveos_IsAllowInCall(&env->uveos) && GsmWithGnss_IsRing(&env->gsmWithGnss)) { + Mma_ProcessCallAnswer(env); + } + Mma_CheckIncomingSms(env); +#endif Mma_CheckShutdown(env, false); diff --git a/MainModesArbiter.h b/MainModesArbiter.h index 12bc5fc..ac1aefa 100644 --- a/MainModesArbiter.h +++ b/MainModesArbiter.h @@ -9,7 +9,11 @@ #include "PeripheralInterfaces.h" #include "DevRtc.h" #include "RtcIO.h" + +#ifdef UVEOS_ADD_TELEMATICA #include "EgtsProcessing.h" +#endif + //Переферийные устройства #include #include @@ -62,8 +66,8 @@ typedef struct { tUserInput userInput; tUserIndication indication; tComInt comInt; -// tCli cli; -// tCli cliVrt; + tCli cli; + tCli cliVrt; tDeviceTesting testing; @@ -74,8 +78,7 @@ typedef struct { struct { osThreadId_t id; - // ++++++CFIF - uint32_t stack[2500]; //4048 6072 + uint32_t stack[4048]; //4048 6072 StaticTask_t controlBlock; osThreadAttr_t attr; } thread; @@ -86,7 +89,10 @@ typedef struct { volatile bool kzModeBloc; // tSignPack signature; +#ifdef UVEOS_ADD_TELEMATICA tEgtsProcessing egtsProcessing; +#endif + } tMma; void Mma_Init( diff --git a/MainModesArbiter_InitStage.c b/MainModesArbiter_InitStage.c index ff2b8de..5b31fb1 100644 --- a/MainModesArbiter_InitStage.c +++ b/MainModesArbiter_InitStage.c @@ -260,7 +260,7 @@ static void Mma_InitSubSystems(tMma *env) { &env->storage.nvm.device.useInternalAnt, &env->power.pins->telit.ring ); -/* + Cli_Init( &env->cliVrt, &env->serialPorts->cliVirtualInIo, @@ -293,7 +293,7 @@ static void Mma_InitSubSystems(tMma *env) { &env->gsmWithGnss, &env->uveos ); -*/ + Mma_InitComInt(env, &env->storage.nvm.device.serialNumber.value, &env->storage.publicVariablesTable); LoggerInfoStatic(LOGGER, LOG_SIGN, "Инициализация подсистем завершена") } @@ -304,10 +304,10 @@ static void Mma_RunSubThreads(tMma *env) { VarsTabDumpObserver_StartThread(&env->storage.dumpObserver); Accel_StartThread(&env->accel); CrashDetection_StartThread(&env->crashDetect); -/* + Cli_StartThread(&env->cli); Cli_StartThread(&env->cliVrt); - */ + UserInput_StartThread(&env->userInput); ComInt_StartThread(&env->comInt);