diff --git a/MainModesArbiter.c b/MainModesArbiter.c index 694e24d..a42157f 100644 --- a/MainModesArbiter.c +++ b/MainModesArbiter.c @@ -16,6 +16,26 @@ #define LOG_SIGN "Главн." #define LOGGER &env->slog.logger +void TELEMATICA_START(tMma *env) { + env->storage.runtime.EGTS_FLEET_ON = true; +} + +void TELEMATICA_STOP(tMma *env) { + + if (env->storage.runtime.EGTS_FLEET_ON == true) { + + env->storage.runtime.EGTS_FLEET_ON = false; + + for (uint8_t i = 0; i < 30; ++i) { + if (env->storage.runtime.telematicaCloseConnect) + break; + + SystemDelayMs(100); + } + } + +} + size_t str_len = 0; char step[5]; @@ -59,9 +79,9 @@ void Mma_Shutdown(tMma *env) { LoggerErrorStatic(LOGGER, LOG_SIGN, "Этой строчки не должно быть! Критическая ошибка!") } -void Mma_CheckShutdownIsBattary(tMma *env){ +void Mma_CheckShutdownIsBattary(tMma *env) { bool statShutdown = Pwm_IsShutdownRequired(&env->power); - if((env->indication.mode != DEVICE_MODE_TESTING) && (env->indication.mode != DEVICE_MODE_UVEOS_GARAG) ) { + if ((env->indication.mode != DEVICE_MODE_TESTING) && (env->indication.mode != DEVICE_MODE_UVEOS_GARAG)) { if (statShutdown) { uint16_t single; float volt; @@ -80,6 +100,9 @@ void Mma_CheckShutdown(tMma *env, bool fastBlackOut) { if (statShutdown && (!statStandUp)) { Mma_Shutdown(env); + } else { + if (env->storage.runtime.EGTS_FLEET_ON == false) + TELEMATICA_START(env); } Mma_CheckShutdownIsBattary(env); @@ -172,6 +195,7 @@ void Mma_GarageMode(tMma *env) { SystemDelayMs(1000); } } + void Mma_NetworkAndAudioRequireKz(tMma *env) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Включаем звук"); Pwm_AudioEnable(&env->power); @@ -205,7 +229,7 @@ static void Mma_NetworkAndAudioRelease(tMma *env) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Выключаем сигнал MUTE"); Pwm_SetMute(&env->power, false); uint32_t t = SystemGetMs() + 200; - while (t > SystemGetMs()){} + while (t > SystemGetMs()) {} } void Mma_EcallManual(tMma *env) { @@ -243,10 +267,10 @@ void Mma_EcallManualKZ(tMma *env) { void Mma_gnssUpdate(tMma *env, eDeviceModes *deviceModes) { LoggerTraceStatic(LOGGER, LOG_SIGN, "Обновление ГНСС") - if (env->storage.runtime.enableGnssUpdate == true){ + if (env->storage.runtime.enableGnssUpdate == true) { EraGlonassUveosNavData location; - if((*deviceModes != DEVICE_MODE_TESTING) && (*deviceModes != DEVICE_MODE_UVEOS_GARAG) ) { + if ((*deviceModes != DEVICE_MODE_TESTING) && (*deviceModes != DEVICE_MODE_UVEOS_GARAG)) { GsmWithGnss_GetNevData(&env->gsmWithGnss, 600); AtGsm_Gsnss_GetLastActualNavData(&env->gsmWithGnss, &location, 1); @@ -316,7 +340,7 @@ static void Mma_ProcessCallAnswer(tMma *env) { Pwm_SetMute(&env->power, true); LoggerInfoStatic(LOGGER, LOG_SIGN, "Получен вызов от оператора"); - AudioPlayer_PlayStatic(&env->gsmWithGnss.audioPlayer, "audio_on", 8*1000); + AudioPlayer_PlayStatic(&env->gsmWithGnss.audioPlayer, "audio_on", 8 * 1000); SystemDelayMs(500); AtGsmAnswer(&env->gsmWithGnss.gsmAt); LoggerInfoStatic(LOGGER, LOG_SIGN, "Вызов от оператора принят"); @@ -368,7 +392,7 @@ void Mma_TestingThread(tMma *env) { } static _Noreturn void Mma_Thread(tMma *env) { - RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR,ENABLE); + RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE); PWR_BackupAccessEnable(ENABLE); RCC_EnableBackupReset(DISABLE); @@ -380,8 +404,8 @@ static _Noreturn void Mma_Thread(tMma *env) { &env->storage, &env->power.pins->main.ignition, &env->gsmWithGnss, - &env->rtc->rtcIo, - &env->slog + &env->rtc->rtcIo, + &env->slog ); EgtsProcessing_Start(&env->egtsProcessing); @@ -444,17 +468,20 @@ static _Noreturn void Mma_Thread(tMma *env) { } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть или сим-чип отсутствует"); } + } else { + TELEMATICA_START(env); } + + Pwm_AudioDisable(&env->power); LoggerTraceStatic(LOGGER, LOG_SIGN, "Звуковой усилитель отключён") - SystemDelayMs(2000); + SystemDelayMs(100); // Mma_StartTestThreadStart(env); for (;;) { - Mma_ColorBip(env); if (env->storage.runtime.EGTS_FLEET_ON == false) { @@ -477,9 +504,6 @@ static _Noreturn void Mma_Thread(tMma *env) { } - -/* - LoggerTraceStatic(LOGGER, LOG_SIGN, "Начало итерации главного цикла") LoggerTraceStatic(LOGGER, LOG_SIGN, "Проверяем нужна ли сеть...") if (EraGlonassUveos_IsRequireNetwork(&env->uveos)) { @@ -524,7 +548,7 @@ static _Noreturn void Mma_Thread(tMma *env) { // env->uveos.timings.lastInMemTransmit = // SystemGetMs() + (env->uveos.settings->INT_MEM_TRANSMIT_INTERVAL * 60 * 1000); // } - if(env->uveos.timings.lastInMemTransmit < SystemGetMs()){ + if (env->uveos.timings.lastInMemTransmit < SystemGetMs()) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Периодическая проверка необходимости повторной отправки МНД"); noSendMsdCount = EraGlonassMsdTable_GetNoSendDataCount(env->uveos.msdTable); @@ -540,7 +564,7 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление СМС выполнено"); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть или сим-чип отсутствует, попытка регистрации..."); - if (GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 5,40000) == AT_OK) { + if (GsmWithGnss_NetworkEnableInnaterups(&env->gsmWithGnss, 5, 40000) == AT_OK) { LoggerTraceStatic(LOGGER, LOG_SIGN, "Сеть присутствует") EraGlonassUveos_ProcessingCheckNoSendMSD(&env->uveos); LoggerInfoStatic(LOGGER, LOG_SIGN, "Удаление всех СМС..."); @@ -573,7 +597,7 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerTraceStatic(LOGGER, LOG_SIGN, "Проверяем экстренное событие") if (UveosEmergencyEvent_GetNext(&env->crashDetect.emergencyEvents, &emergencyEvent, 0)) { - if(env->storage.nvm.gost.CRASH_SIGNAL_INTERNAL == 1) { + if (env->storage.nvm.gost.CRASH_SIGNAL_INTERNAL == 1) { Mma_EcallManualKZ(env); // DeviceTesting_EcallKZ1(&env->testing); LoggerInfoStatic(LOGGER, LOG_SIGN, "Экстренное событие получено"); @@ -584,10 +608,12 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerTraceStatic(LOGGER, LOG_SIGN, "Проверяем нажатия кнопок") if (UserButtons_GetNext(&env->userInput.buttonsInterface, &buttonEvent, 10)) { - if(env->kzModeBloc == false) { + if (env->kzModeBloc == false) { if (UserInputButtonEventIsBetween( buttonEvent, UI_BUTTON_EMERGENCY, RAISE, env->storage.nvm.gost.SOS_BUTTON_TIME, 0xFFFF )) { + + TELEMATICA_STOP(env); LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова KZ 1") uint32_t tmt = SystemGetMs() + 10000; UserButtons_Clear(&env->userInput.buttonsInterface); @@ -597,6 +623,7 @@ static _Noreturn void Mma_Thread(tMma *env) { buttonEvent, UI_BUTTON_EMERGENCY, RAISE, env->storage.nvm.gost.SOS_BUTTON_TIME, 0xFFFF )) { + TELEMATICA_STOP(env); LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова KZ 2") EraGlonassUveos_SetTimings(&env->uveos); Mma_SetMode(env, DEVICE_MODE_UVEOS_CALL_INITIATE); @@ -616,28 +643,29 @@ static _Noreturn void Mma_Thread(tMma *env) { } SystemDelayMs(10); } - if(env->kzModeBloc == false) { + if (env->kzModeBloc == false) { + TELEMATICA_STOP(env); LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова_1") Mma_EcallManual(env); } UserButtons_Clear(&env->userInput.buttonsInterface); } - } else - - if (UserInputButtonEventIsBetween( + } else if (UserInputButtonEventIsBetween( buttonEvent, UI_BUTTON_EMERGENCY, RAISE, env->storage.nvm.gost.SOS_BUTTON_TIME, 0xFFFF )) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова_2") - Mma_EcallManual(env); - } else + TELEMATICA_STOP(env); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Нажата кнопка экстренного вызова_2") + Mma_EcallManual(env); + } else if (UserInputButtonEventIsBetween(buttonEvent, UI_BUTTON_ADDITIONAL, RAISE, 3000, 10000)) { + TELEMATICA_STOP(env); - if (UserInputButtonEventIsBetween(buttonEvent, UI_BUTTON_ADDITIONAL, RAISE, 3000, 10000)) { vAsciiStringInit(step, &str_len, 5); vAsciiStringAddDecimalInt64(step, &str_len, env->uveos.doNothing.movDist, 5); if (env->uveos.doNothing.mode == UVEOS_DO_NOTHING_DISABLED) { Mma_SetMode(env, DEVICE_MODE_TESTING); - LoggerInfoStatic(LOGGER, LOG_SIGN, "Переход в режим пользовательского тестирования, отклонение дистанции = "); + LoggerInfoStatic(LOGGER, LOG_SIGN, + "Переход в режим пользовательского тестирования, отклонение дистанции = "); LoggerInfo(LOGGER, LOG_SIGN, step, str_len); Mma_UserTestMode(env); } else if (env->uveos.doNothing.mode == UVEOS_DO_NOTHING_MOVE_TO) { @@ -657,7 +685,8 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerInfo(LOGGER, LOG_SIGN, step, str_len); Mma_GarageMode(env); } else if (env->uveos.doNothing.mode == UVEOS_DO_NOTHING_MOVE_TO) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Переход в режим Гараж не возможен, Т.С. находится в движении, отклонение дистанции = "); + LoggerInfoStatic(LOGGER, LOG_SIGN, + "Переход в режим Гараж не возможен, Т.С. находится в движении, отклонение дистанции = "); LoggerInfo(LOGGER, LOG_SIGN, step, str_len); } else if (env->uveos.doNothing.movePosition.valid == 0) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Данные GNSS не достоверны!"); @@ -666,24 +695,22 @@ static _Noreturn void Mma_Thread(tMma *env) { } - if (EraGlonassUveos_IsAllowInCall(&env->uveos) && GsmWithGnss_IsRing(&env->gsmWithGnss)) { - Mma_ProcessCallAnswer(env); - } - if (env->storage.runtime.EGTS_FLEET_ON == false) { + if (EraGlonassUveos_IsAllowInCall(&env->uveos) && GsmWithGnss_IsRing(&env->gsmWithGnss)) { + Mma_ProcessCallAnswer(env); + } Mma_CheckIncomingSms(env); } Mma_CheckShutdown(env, false); - */ + SystemDelayMs(10); } } - void Mma_StartTestThreadStart(tMma *env) { - if ( !env->threadTesting.id ) { + if (!env->threadTesting.id) { env->threadTesting.id = osThreadNew( (osThreadFunc_t) (Mma_TestingThread), (void *) (env), @@ -694,7 +721,7 @@ void Mma_StartTestThreadStart(tMma *env) { } void Mma_StopTestThreadStart(tMma *env) { - if(env->threadTesting.id != NULL) { + if (env->threadTesting.id != NULL) { if (osThreadTerminate(env->threadTesting.id) == osOK) { SystemDelayMs(100); env->threadTesting.id = NULL; diff --git a/MainModesArbiter_InitStage.c b/MainModesArbiter_InitStage.c index 6fdc3ef..8a85a0c 100644 --- a/MainModesArbiter_InitStage.c +++ b/MainModesArbiter_InitStage.c @@ -303,12 +303,12 @@ static void Mma_RunSubThreads(tMma *env) { VarsTabDumpObserver_StartThread(&env->storage.dumpObserver); Accel_StartThread(&env->accel); -// CrashDetection_StartThread(&env->crashDetect); + CrashDetection_StartThread(&env->crashDetect); /* Cli_StartThread(&env->cli); Cli_StartThread(&env->cliVrt); */ -// UserInput_StartThread(&env->userInput); + UserInput_StartThread(&env->userInput); ComInt_StartThread(&env->comInt);