diff --git a/MainModesArbiter.c b/MainModesArbiter.c index bb2c452..0d6034e 100644 --- a/MainModesArbiter.c +++ b/MainModesArbiter.c @@ -11,6 +11,7 @@ #include "AsciiStringAssmeblingUtils.h" #include "AtGsmSms_DeleteAll.h" #include "EgtsProcessing.h" +#include "AtGsmTelitLe910_DefinePdpContext.h" //#include "testCan.h" #define LOG_SIGN "Главн." @@ -243,10 +244,10 @@ void Mma_NetworkAndAudioRequire(tMma *env) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Поднимаем сигнал MUTE"); Pwm_SetMute(&env->power, true); - + Gsm_SetProfileERA_mode(env); LoggerInfoStatic(LOGGER, LOG_SIGN, "Включаем регистрацию в сети"); - Mma_EcallPrepare(env); - GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 5, 60000); +// Mma_EcallPrepare(env); + GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 5, 120000); } static void Mma_NetworkAndAudioRelease(tMma *env) { @@ -259,6 +260,7 @@ static void Mma_NetworkAndAudioRelease(tMma *env) { void Mma_EcallManual(tMma *env) { EraGlonassUveos_SetTimings(&env->uveos); + Mma_SetMode(env, DEVICE_MODE_UVEOS_CALL_INITIATE); Mma_NetworkAndAudioRequire(env); GpioPinEnable(&env->power.pins->main.ecall); @@ -328,6 +330,7 @@ void Mma_EcallAutomatic(tMma *env, tUveosEmergencyEvent emergencyEvent) { Pwm_AudioEnable(&env->power); Mma_SetMode(env, DEVICE_MODE_UVEOS_CALL_INITIATE); + Mma_NetworkAndAudioRequire(env); Mma_EcallPrepare(env); GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 5, 250000); Mma_NetworkAndAudioRequire(env); @@ -462,6 +465,25 @@ static void checkLastInMemTransmit(tMma *env) { } } +bool Gsm_SetProfileERA_mode(tMma *env) { + AtCommandResult res = AT_ERROR; + if (osMutexAcquire(env->gsmWithGnss.gsmAt.access, 5000) == osOK) { + +#ifdef UVEOS_ADD_TELEMATICA + AtGsmTelitLe910_SimProfileSelect(&env->gsmWithGnss.gsmAt, + &env->storage.nvm.deviceTeledataStorageData.telematica.EGTS_PROFILE_SIM_ERA); +#endif + + AtGsmTelitLe910_SIMCardNoDetect(&env->gsmWithGnss.gsmAt); + AtGsmTelitLe910_SIMCardDetect(&env->gsmWithGnss.gsmAt); + SystemDelayMs(1000); + + osMutexRelease(env->gsmWithGnss.gsmAt.access); + } + + return res == AT_OK; +} + static _Noreturn void Mma_Thread(tMma *env) { RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE); PWR_BackupAccessEnable(ENABLE); @@ -531,6 +553,11 @@ static _Noreturn void Mma_Thread(tMma *env) { // Mma_SetNetworkRegistration(env, false); volatile uint32_t noSendMsdCount = EraGlonassMsdTable_GetNoSendDataCount(env->uveos.msdTable); if (noSendMsdCount > 0) { +#ifdef UVEOS_ADD_TELEMATICA + TELEMATICA_STOP(env); +#endif + Mma_NetworkAndAudioRequire(env); + Mma_EcallPrepare(env); if (GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 4, 10000) == AT_OK) { LoggerTraceStatic(LOGGER, LOG_SIGN, "Сеть включена") EraGlonassUveos_ProcessingEra(&env->uveos); diff --git a/MainModesArbiter_Private.h b/MainModesArbiter_Private.h index 480b08c..694d930 100644 --- a/MainModesArbiter_Private.h +++ b/MainModesArbiter_Private.h @@ -20,6 +20,8 @@ void Mma_StartupAudioSubsystem(tMma *env); void Mma_StartTestThreadStart(tMma *env); +bool Gsm_SetProfileERA_mode(tMma *env); + void Mma_InitStage(tMma *env); void Mma_CheckShutdown(tMma *env, bool fastBlackOut) ;