This commit is contained in:
cfif 2024-12-09 15:46:51 +03:00
parent 786633e012
commit 8c09731d1e
2 changed files with 65 additions and 38 deletions

View File

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

View File

@ -303,12 +303,12 @@ static void Mma_RunSubThreads(tMma *env) {
VarsTabDumpObserver_StartThread(&env->storage.dumpObserver); VarsTabDumpObserver_StartThread(&env->storage.dumpObserver);
Accel_StartThread(&env->accel); Accel_StartThread(&env->accel);
// CrashDetection_StartThread(&env->crashDetect); CrashDetection_StartThread(&env->crashDetect);
/* /*
Cli_StartThread(&env->cli); Cli_StartThread(&env->cli);
Cli_StartThread(&env->cliVrt); Cli_StartThread(&env->cliVrt);
*/ */
// UserInput_StartThread(&env->userInput); UserInput_StartThread(&env->userInput);
ComInt_StartThread(&env->comInt); ComInt_StartThread(&env->comInt);