This commit is contained in:
cfif 2024-12-12 17:25:48 +03:00
parent 05a258305d
commit 6ae01d3fd2
3 changed files with 113 additions and 48 deletions

View File

@ -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, "Периодическая проверка необходимости повторной отправки МНД");
checkLastInMemTransmit(env);
}
#endif
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, "Время периодическая проверки повторной отправки МНД обновлено");
}
}
#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);

View File

@ -9,7 +9,11 @@
#include "PeripheralInterfaces.h"
#include "DevRtc.h"
#include "RtcIO.h"
#ifdef UVEOS_ADD_TELEMATICA
#include "EgtsProcessing.h"
#endif
//Переферийные устройства
#include <DeviceStorage.h>
#include <AudioCodec.h>
@ -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(

View File

@ -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);