EraGlonassUveos/Src/EraGlonassUveos_EmergencyMo...

562 lines
24 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by xemon on 30.11.22.
//
#include "EraGlonassUveos_Private.h"
//#include "UserInput.h"
#include "AsciiStringParsingUtils.h"
#include "egtsWorker.h"
#include "Rtc.h"
#define LOGGER env->logger
#define LOG_SIGN "УВЭОС,ЭВ"
#define DEVTST_PLAY_SAMPLE(SAMPLE) \
SystemDelayMs(150); \
AudioPlayer_PlayStatic(env->audioPlayerIO, SAMPLE, 25*1000);
#define DEVTST_PLAY_TONE(COUNT) \
AudioPlayer_PlayStaticTone(env->audioPlayerIO,COUNT);
eEraGlonassUveos_EcallProcessingResult smsTransmitFl = ERA_GLONASS_UVEOS_SEND_FAIL;
void EraGlonassUveos_UpdateMsd(tEraGlonassUveos *env, eEcallTimeSourse timeSourse) {
EraGlonassUveosNavData nav;
time_t time;
if (timeSourse == GNSS_TIME_SOURSE) {
NavDataProvider_GetTime(env->navDataProvider, (uint32_t*) &time);
}
if (timeSourse == RTC_TIME_SOURSE) {
RtcGet(env->timings.rtcIo, &time);
}
if (timeSourse == NOT_CHANGE_TIME) {
time = env->currentMsd->msd.MSD_Data.timestamp;
}
NavDataProvider_GetNavData(env->navDataProvider, &nav, true);
EraGlonassMsdSetTimeStamp(&env->currentMsd->msd, time);
if (nav.valid != 0) {
EraGlonassMsdSetPositionValue(&env->currentMsd->msd, nav.longitude, nav.latitude, nav.direction, nav.valid);
} else {
EraGlonassMsdNoGnssSetDefaults(&env->currentMsd->msd);
}
}
static void EraGlonassUveos_SignMsd(tEraGlonassUveos *env, eEcallActivationType type, bool test) {
EraGlonassMsdSetDataEmergencySituationFlags(
&env->currentMsd->msd,
env->currentMsd->msd.MSD_Data.msgId,
type,
test ? TEST_CALL : EMERGENCY_CALL
);
}
void EraGlonassUveos_CompileMsd(tEraGlonassUveos *env, tEraGlonassMsd *msd, tMsdEncoded *msdEncoded) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Собираем бинарный пакет МНД")
msdEncoded->len = EraGlonassMsdEncode(msd, MSD_V_2, msdEncoded->data);
char asciiMsd[msdEncoded->len * 2];
size_t asciiMsdLen = 0;
vAsciiStringAddBytesAsHex(asciiMsd, &asciiMsdLen, msdEncoded->data, msdEncoded->len);
LoggerCnInfoStatic(LOGGER, LOG_SIGN, "Бинарный пакет МНД сформирован: ")
LoggerInfo(LOGGER, LOG_SIGN, asciiMsd, asciiMsdLen)
}
eEraGlonassUveos_EcallProcessingResult EraGlonassUveos_ProcessingSms(
tEraGlonassUveos *env,
tMsdEncoded *msdEncoded
) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Отправка смс...")
if (EraGlonassUveos_EmergencySendMsdSmsTry(env, msdEncoded)) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "МНД отправленно по средствам СМС")
env->currentMsd->attemptsLeft = 0;
EraGlonassUveosDumper_ForceDump(env->dumper);
EraGlonassUveos_Indicate(env, UVEOS_STATUS_SMS_TRANSMIT);
return ERA_GLONASS_UVEOS_SMS_SENT;
} else {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Неудалось отпаравить МНД по средствам СМС")
return ERA_GLONASS_UVEOS_SEND_FAIL;
}
}
void reSetMsdToPull(tEraGlonassUveos *env, const bool *wasNewSetMsd, const bool *wasResent, tMsdEncoded *msdEncoded) {
if (
(*wasNewSetMsd == true) &&
(*wasResent == false) &&
(env->currentMsd->msd.MSD_Data.msgId > 1)
) {
env->currentMsd->msd.MSD_Data.msgId--;
EraGlonassUveos_UpdateMsd(env, RTC_TIME_SOURSE);
EraGlonassUveos_CompileMsd(env, &env->currentMsd->msd, msdEncoded);
EraGlonassEcallProvider_SettingNewMsd(env->ecallProvider, msdEncoded->data, msdEncoded->len);
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Переотправка МНД по PULL запросу от оператора НЕ была выполнена, не получен URC об отправке")
}
}
void setMsdToPull(tEraGlonassUveos *env, const bool *mndSendFlag, bool *wasNewSetMsd, bool *wasResent,
tMsdEncoded *msdEncoded) {
if (
(*mndSendFlag == true) &&
(*wasNewSetMsd == false)
) {
env->currentMsd->msd.MSD_Data.msgId++;
EraGlonassUveos_UpdateMsd(env, RTC_TIME_SOURSE);
EraGlonassUveos_CompileMsd(env, &env->currentMsd->msd, msdEncoded);
EraGlonassEcallProvider_SettingNewMsd(env->ecallProvider, msdEncoded->data, msdEncoded->len);
*wasNewSetMsd = true;
} else if (EraGlonassEcallProvider_IsMsdReSent(env->ecallProvider)) {
*wasNewSetMsd = false;
*wasResent = true;
LoggerInfoStatic(LOGGER, LOG_SIGN,
"Была выполнена переотправка МНД по PULL запросу от оператора, будет установлен новый МНД")
}
}
static eEraGlonassUveos_EcallProcessingResult EraGlonassUveos_EmergencyCallTry(
tEraGlonassUveos *env,
tMsdEncoded *msdEncoded,
eEcallActivationType activationType,
eEcallTestMode testMode,
uint32_t dialTimeoutEnd,
bool *mndSendFlag,
bool debugMode
) {
eEraGlonassUveos_EcallProcessingResult callResult = ERA_GLONASS_UVEOS_CALL_FAIL;
LoggerInfoStatic(LOGGER, LOG_SIGN, "Пробуем совершить экстренный вызов")
// if(testMode != TEST_CALL) {
// EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_INITIATE);
// }
EraGlonassUveos_CompileMsd(env, &env->currentMsd->msd, msdEncoded);
if (!EraGlonassEcallProvider_Ecall(
env->ecallProvider,
msdEncoded->data,
msdEncoded->len,
env->settings->ECALL_TEST_NUMBER.data,
env->settings->ECALL_TEST_NUMBER.length,
activationType,
testMode
)) {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Неудалось инициировать экстренный вызов")
if(testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_FAILURE);
}
env->currentMsd->attemptsLeft--;
return ERA_GLONASS_UVEOS_CALL_FAIL;
}
LoggerInfoStatic(LOGGER, LOG_SIGN, "Экстренный вызов успешно инициирован")
tUserInputButtonEvent buttonEvent = {0};
LoggerCnInfoStatic(LOGGER, LOG_SIGN, "Дозвон")
while (EraGlonassEcallProvider_IsDialing(env->ecallProvider)) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_INITIATE);
LoggerCnInfoStatic(LOGGER, LOG_SIGN, ".")
if (env->settings->ECALL_MANUAL_CAN_CANCEL) {
while (UserButtons_GetNext(env->buttons, &buttonEvent, 0)) {
if (UserInputButtonEventIsBetween(buttonEvent, env->buttonsIds.emergensy, RAISE, 500, 4000)) {
EraGlonassEcallProvider_HangupEcl(env->ecallProvider);
LoggerInfoStatic(LOGGER, LOG_SIGN, ".")
LoggerInfoStatic(LOGGER, LOG_SIGN, "Звонок прерван пользователем")
return ERA_GLONASS_UVEOS_CALL_USER_BREAK;
}
}
}
SystemDelayMs(500);
if (SystemGetMs() > dialTimeoutEnd) {
EraGlonassEcallProvider_HangupEcl(env->ecallProvider);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Звонок прерван, превышена общая продолжительность дозвона")
if(testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_FAILURE);
}
return ERA_GLONASS_UVEOS_CALL_FAIL;
}
}
LoggerInfoStatic(LOGGER, LOG_SIGN, ".")
if(testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_MSD_TRANSMIT);
}
uint32_t msdSendTimeout = SystemGetMs() + (env->settings->MSD_MAX_TRANSMISSION_TIME * 1000);
if (EraGlonassEcallProvider_IsActiveOut(env->ecallProvider)) {
#if (AURUS_CAR_UI == 0)
DEVTST_PLAY_SAMPLE("audio_on.mp3")
#endif
}
bool fl = false;
LoggerCnInfoStatic(LOGGER, LOG_SIGN, "Попытка отправки МНД...")
#if (AURUS_CAR_UI == 1)
DEVTST_PLAY_TONE(1)
#endif
#if (AURUS_CAR_UI == 0)
DEVTST_PLAY_SAMPLE("msd_send.mp3")
#endif
EraGlonassUveos_Indicate(env, UVEOS_STATUS_MSD_TRANSMIT);
while (!EraGlonassEcallProvider_IsMsdSent(env->ecallProvider) &&
EraGlonassEcallProvider_IsActiveOut(env->ecallProvider) &&
(msdSendTimeout > SystemGetMs())) {
LoggerCnInfoStatic(LOGGER, LOG_SIGN, ".")
SystemDelayMs(500);
if(fl == false){
SystemDelayMs(4500);
fl = true;
}
}
if(!debugMode) {
if (EraGlonassEcallProvider_IsMsdSent(env->ecallProvider)) {
env->currentMsd->attemptsLeft = 0;
*mndSendFlag = true;
callResult = ERA_GLONASS_UVEOS_CALL_SUCCESS;
LoggerInfoStatic(LOGGER, LOG_SIGN, "МНД передан по средствам тонального модема")
} else {
if (!EraGlonassEcallProvider_IsActiveOut(env->ecallProvider)) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Вызов завершен принимающей стороной")
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Превышено время передачи МНД тональным модемом")
callResult = ERA_GLONASS_UVEOS_SEND_FAIL;
}
if (testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_FAILURE);
}
}
if ((callResult == ERA_GLONASS_UVEOS_CALL_FAIL) && (*mndSendFlag == false)) {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Не удалось отправить МНД (цикл вызовов) ошибка установки соединения")
LoggerErrorStatic(LOGGER, LOG_SIGN,
"Производиться проверка сети для передачи МНД по альтернативному каналу связи")
if (EraGlonassEcallProvider_CheckNetState(env->ecallProvider, 20000) == true) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть присутствует, попытка отправки МНД по средствам СМС")
EraGlonassUveos_CompileMsd(env, &env->currentMsd->msd, msdEncoded);
if (EraGlonassUveos_ProcessingSms(env, msdEncoded) == ERA_GLONASS_UVEOS_SMS_SENT) {
*mndSendFlag = true;
callResult = ERA_GLONASS_UVEOS_CALL_SUCCESS;
LoggerInfoStatic(LOGGER, LOG_SIGN, "МНД отправлен по средствам СМС")
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Не удалось выполнить отправку СМС")
*mndSendFlag = false;
callResult = ERA_GLONASS_UVEOS_CALL_FAIL;
}
EraGlonassEcallProvider_DelSms(env->ecallProvider);
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть отсутствует")
}
}
if ((callResult == ERA_GLONASS_UVEOS_SEND_FAIL) && (*mndSendFlag == false)) {
LoggerErrorStatic(LOGGER, LOG_SIGN,
"Не удалось отправить МНД (цикл вызовов) ошибка передачи МНД по средствам тональной связи")
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть присутствует, попытка отправки МНД по средсвам СМС")
EraGlonassUveos_CompileMsd(env, &env->currentMsd->msd, msdEncoded);
if (EraGlonassUveos_ProcessingSms(env, msdEncoded) == ERA_GLONASS_UVEOS_SMS_SENT) {
EraGlonassEcallProvider_DelSms(env->ecallProvider);
*mndSendFlag = true;
callResult = ERA_GLONASS_UVEOS_CALL_SUCCESS;
LoggerInfoStatic(LOGGER, LOG_SIGN, "МНД отправлен по средствам СМС")
} else {
EraGlonassEcallProvider_DelSms(env->ecallProvider);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Не удалось выполнить отправку СМС")
*mndSendFlag = false;
callResult = ERA_GLONASS_UVEOS_SEND_FAIL;
}
}
}
bool wasNewSetMsd = false;
bool wasResent = false;
LoggerCnInfoStatic(LOGGER, LOG_SIGN, "Звонок")
uint64_t times = SystemGetMs();
if(EraGlonassEcallProvider_IsActiveOut(env->ecallProvider)){
#if (AURUS_CAR_UI == 1)
DEVTST_PLAY_TONE(2)
if(testMode == TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_TESTING_BEGIN);
} else {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_ACTIVE);
}
#endif
#if (AURUS_CAR_UI == 0)
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_ACTIVE);
#endif
}
while (EraGlonassEcallProvider_IsActiveOut(env->ecallProvider)) {
EraGlonassEcallProvider_CheckSms(env->ecallProvider);
LoggerCnInfoStatic(LOGGER, LOG_SIGN, ".")
if (times < SystemGetMs() && (wasNewSetMsd == true)) {
setMsdToPull(env, mndSendFlag, &wasNewSetMsd, &wasResent, msdEncoded);
times = SystemGetMs() + 5000;
LoggerCnInfoStatic(LOGGER, LOG_SIGN, "Установлен новый пакет МНД для PUL запроса")
}
SystemDelayMs(500);
}
reSetMsdToPull(env, &wasNewSetMsd, &wasResent, msdEncoded);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Звонок завершен")
return callResult;
}
///=====================================================================================================================
///=====================================================================================================================
///=====================================================================================================================
///=====================================================================================================================
///=====================================================================================================================
bool EraGlonassUveos_ResentMsdTry(tEraGlonassUveos *env, tEraGlonassMsdTableItem *msdItem) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Переотправка МНД...")
tMsdEncoded msdEncoded;
EraGlonassUveos_CompileMsd(env, &msdItem->msd, &msdEncoded);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Отправка смс...")
if (EraGlonassUveos_EmergencySendMsdSmsTry(env, &msdEncoded)) {
EraGlonassEcallProvider_DelSms(env->ecallProvider);
LoggerInfoStatic(LOGGER, LOG_SIGN, "МНД отправлено по средствам СМС")
EraGlonassUveosDumper_ForceDump(env->dumper);
return true;
} else {
EraGlonassEcallProvider_DelSms(env->ecallProvider);
LoggerErrorStatic(LOGGER, LOG_SIGN, "Не удалось отправить МНД по средствам СМС PERIODICAL")
EraGlonassUveosDumper_ForceDump(env->dumper);
return false;
}
}
void EraGlonassUveos_UpdateCurrentSettingsMsd(tEraGlonassUveos *env, eEcallTimeSourse timeSourse) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Обнавляем настройки...")
EraGlonassUveos_InvalidateSettings(env);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Обновляем МНД...")
EraGlonassUveos_UpdateMsd(env, timeSourse);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сохраняем изменения в ПЗУ")
EraGlonassUveosDumper_ForceDump(env->dumper);
}
void EraGlonassUveos_GenCurrentMsd(tEraGlonassUveos *env,
eEcallActivationType activationType,
eEcallTestMode testMode,
eEcallTimeSourse timeSourse) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Обнавляем настройки...")
EraGlonassUveos_InvalidateSettings(env);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Обновляем МНД...")
EraGlonassUveos_UpdateMsd(env, timeSourse);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Выделяем МНД ID в таблице")
EraGlonassUveos_SignMsd(env, activationType, testMode);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сохраняем изменения в ПЗУ")
EraGlonassUveosDumper_ForceDump(env->dumper);
}
void EraGlonassUveos_ClearSms(tEraGlonassUveos *env){
uint32_t t = SystemGetMs() + 1252;
while (t > SystemGetMs()){
EraGlonassEcallProvider_DelSms(env->ecallProvider);
SystemDelayMs(50);
}
}
uint16_t getAttemptsLeft(tEraGlonassUveos *env, eEcallActivationType activationType){
if(activationType == AUTOMATIC_ACTIVATION){
return env->settings->ECALL_AUTO_DIAL_ATTEMPTS;
} else if(activationType == MANUAL_ACTIVATION){
return env->settings->ECALL_MANUAL_DIAL_ATTEMPTS;
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "==== ВНИМАНИЕ, КОЛИЧЕСТВО ПОПЫТОК ВЫЗОВОВ НЕ СКОНВИГУРИРОВАНО, БУДЕТ ВЫПОЛНЕНА 1 ПОПЫТКА!!! ====")
return 1;
}
}
eEraGlonassUveos_EcallProcessingResult EraGlonassUveos_ProcessingEmergency(
tEraGlonassUveos *env,
eEcallActivationType activationType,
eEcallTestMode testMode,
bool debugMode
) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Обработка экстреной ситуации...")
env->currentMsd->msd.MSD_Data.msgId = 1;
tMsdEncoded msdEncoded;
EraGlonassUveos_GenCurrentMsd(env, activationType, testMode, RTC_TIME_SOURSE);
uint16_t attemptsLeft = getAttemptsLeft(env, activationType);
env->currentMsd->attemptsLeft = env->settings->INT_MEM_TRANSMIT_ATTEMPTS;
uint32_t dialTimeout = SystemGetMs() + (env->settings->ECALL_DIAL_DURATION * 60 * 1000);
// if(testMode != TEST_CALL) {
// EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_INITIATE);
// }
eEraGlonassUveos_EcallProcessingResult resultSendEmergy = ERA_GLONASS_UVEOS_CALL_FAIL;
bool pr_mndSendFlag = false;
bool fl_audio = false;
while (((SystemGetMs() < dialTimeout)) && (attemptsLeft > 0)) {
if(fl_audio == true) {
#if (AURUS_CAR_UI == 1)
if(testMode != TEST_CALL) {
DEVTST_PLAY_SAMPLE("emerCool_aurus.mp3")
}
#endif
#if (AURUS_CAR_UI == 0)
DEVTST_PLAY_SAMPLE("ecall_on.mp3")
#endif
}
fl_audio = true;
// if(testMode != TEST_CALL) {
// EraGlonassUveos_Indicate(env, UVEOS_STATUS_DIALING);
// }
// EraGlonassUveos_Indicate(env, UVEOS_STATUS_WAIT_NETWORK);
// bool isReg = EraGlonassEcallProvider_NetRegistration(env->ecallProvider,1);
// if(isReg == false)
// {
// EraGlonassEcallProvider_NetRegistration(env->ecallProvider,1);
// SystemDelayMs(2000);
// }
resultSendEmergy = EraGlonassUveos_EmergencyCallTry(
env,
&msdEncoded,
activationType,
testMode,
dialTimeout,
&pr_mndSendFlag,
debugMode
);
EraGlonassEcallProvider_HangupEcl(env->ecallProvider);
if(debugMode) {
return resultSendEmergy;
}
if (resultSendEmergy == ERA_GLONASS_UVEOS_CALL_USER_BREAK) {
return resultSendEmergy;
}
if ((pr_mndSendFlag) && (resultSendEmergy == ERA_GLONASS_UVEOS_CALL_SUCCESS)) {
--attemptsLeft;
break;
}
--attemptsLeft;
EraGlonassEcallProvider_HangupEcl(env->ecallProvider);
EraGlonassUveosDumper_ForceDump(env->dumper);
env->currentMsd->msd.MSD_Data.msgId++;
if(env->currentMsd->msd.MSD_Data.msgId == (getAttemptsLeft(env, activationType)) +1 ) {
env->currentMsd->msd.MSD_Data.msgId = getAttemptsLeft(env, activationType);
}
dialTimeout = SystemGetMs() + (env->settings->ECALL_DIAL_DURATION * 60 * 1000);
}
if(debugMode) {
return resultSendEmergy;
}
if (resultSendEmergy == ERA_GLONASS_UVEOS_CALL_SUCCESS) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Произведен успешный экстренный вызов")
EraGlonassUveos_ClearSms(env);
LoggerInfoStatic(LOGGER, LOG_SIGN, "СМС пакеты очищены из памяти коммуникационного модуля")
env->currentMsd->attemptsLeft = 0;
if(testMode != TEST_CALL) {
EraGlonassUveosDumper_ForceDump(env->dumper);
}
env->currentMsd = EraGlonassMsdTable_GetNextFree(env->msdTable);
return resultSendEmergy;
} else if ((resultSendEmergy == ERA_GLONASS_UVEOS_CALL_FAIL) || (resultSendEmergy == ERA_GLONASS_UVEOS_SEND_FAIL)) {
LoggerErrorStatic(LOGGER, LOG_SIGN,
"Не удалось совершить отправку МНД, производиться проверка сети и попытка отправки МНД по средствам СМС")
// bool isReg = EraGlonassEcallProvider_NetRegistration(env->ecallProvider,1);
if (EraGlonassEcallProvider_CheckNetState(env->ecallProvider, 5) == true) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть присутствует")
#if (AURUS_CAR_UI == 1)
DEVTST_PLAY_TONE(1)
#endif
#if (AURUS_CAR_UI == 0)
DEVTST_PLAY_SAMPLE("msd_send.mp3")
#endif
if(testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_FAILURE);
}
EraGlonassUveos_Indicate(env, UVEOS_STATUS_MSD_TRANSMIT);
EraGlonassUveos_CompileMsd(env, &env->currentMsd->msd, &msdEncoded);
resultSendEmergy = EraGlonassUveos_ProcessingSms(env, &msdEncoded);
} else {
bool isReg = EraGlonassEcallProvider_NetRegistration(env->ecallProvider,1);
if(isReg){
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть присутствует")
#if (AURUS_CAR_UI == 1)
DEVTST_PLAY_TONE(1)
#endif
#if (AURUS_CAR_UI == 0)
DEVTST_PLAY_SAMPLE("msd_send.mp3")
#endif
if(testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_FAILURE);
}
EraGlonassUveos_Indicate(env, UVEOS_STATUS_MSD_TRANSMIT);
EraGlonassUveos_CompileMsd(env, &env->currentMsd->msd, &msdEncoded);
resultSendEmergy = EraGlonassUveos_ProcessingSms(env, &msdEncoded);
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сеть отсутствует")
}
}
}
if ((pr_mndSendFlag) || ((int) resultSendEmergy == ERA_GLONASS_UVEOS_SMS_SENT)) {
LoggerInfoStatic(LOGGER, LOG_SIGN, "МНД отправлено по средствам СМС")
env->currentMsd->msd.MSD_Data.msgId ++;
if(testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_MSD_TRANSMIT);
}
}
if ((!pr_mndSendFlag) || ((int) resultSendEmergy == ERA_GLONASS_UVEOS_SEND_FAIL)) {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Не удалось отправить МНД по средствам СМС ECALL")
if(testMode != TEST_CALL) {
EraGlonassUveos_Indicate(env, UVEOS_STATUS_CALL_FAILURE);
}
}
if ((resultSendEmergy == ERA_GLONASS_UVEOS_SEND_FAIL) || (resultSendEmergy == ERA_GLONASS_UVEOS_CALL_FAIL)) {
env->currentMsd->attemptsLeft = env->settings->INT_MEM_TRANSMIT_ATTEMPTS;
} else {
env->currentMsd->attemptsLeft = 0;
}
EraGlonassUveos_ClearSms(env);
if(testMode != TEST_CALL) {
EraGlonassUveosDumper_ForceDump(env->dumper);
}
env->currentMsd = EraGlonassMsdTable_GetNextFree(env->msdTable);
return resultSendEmergy;
}