From c26d6e52c87f3d4ee942ef425ad2c2344e36573e Mon Sep 17 00:00:00 2001 From: cfif Date: Thu, 5 Dec 2024 13:32:44 +0300 Subject: [PATCH] Fix --- EgtsProcessing.c | 88 +++++++++++++++++++++++++++++++++++++----------- EgtsProcessing.h | 3 ++ 2 files changed, 72 insertions(+), 19 deletions(-) diff --git a/EgtsProcessing.c b/EgtsProcessing.c index 60b2cdc..3c74632 100644 --- a/EgtsProcessing.c +++ b/EgtsProcessing.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "EgtsProcessing.h" #include "stddef.h" #include "AtGsm_GetTime.h" @@ -111,6 +112,8 @@ _Noreturn void Processing_URC(tEgtsProcessing *env) { } +const char LOG_TASK_GSM_SOCKET[] = "GSM SOCKET"; + void EgtsProcessing_Init( tEgtsProcessing *env, tDeviceStorage *deviceStorage, @@ -153,6 +156,22 @@ void EgtsProcessing_Init( env->egtsCommandConfirmationAdditionalData.queue = osMessageQueueNew(COMMAND_QUEUE_SIZE, sizeof(tEgtsCommand), NULL); + env->deviceTeledataStorageData->telematica.EGTS_SERVER_ADDRESS.data[env->deviceTeledataStorageData->telematica.EGTS_SERVER_ADDRESS.length] = '\0'; + uint8_t pos = findDelimiter(&env->deviceTeledataStorageData->telematica.EGTS_SERVER_ADDRESS, ':'); + String32Copy(&env->srvAddr, + env->deviceTeledataStorageData->telematica.EGTS_SERVER_ADDRESS.data, + pos); + env->srvPort = atoi(&env->deviceTeledataStorageData->telematica.EGTS_SERVER_ADDRESS.data[pos + 1]); + + LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Установка сервера: %s", + env->deviceTeledataStorageData->telematica.EGTS_SERVER_ADDRESS.data); + + SocketSocketGsm_Init(&env->gsm->socketGsm, &env->gsm->gsmAt, + &env->srvAddr, env->srvPort, + env->gsm->gsmAt.access); + + env->gsm->socketGsm.logger = &slog->logger; + env->gsm->socketGsm.loggerTaskName = (char *) LOG_TASK_GSM_SOCKET; // InitThreadBlock(env->T_processing_Network, "Network", osPriorityNormal); InitThreadBlock(env->T_processing_input_command, "EgtsPrcInputCom", osPriorityNormal); @@ -184,7 +203,6 @@ void EgtsProcessing_Start(tEgtsProcessing *env) { void EgtsProcessingCloseConnection(tEgtsProcessing *env) { SocketInterface_close(&env->gsm->socketGsm.socketIO, env->socketId); - env->gsm->slots[0].addr.length = 0; } bool EgtsProcessingSend(tEgtsProcessing *env, uint8_t *egtsRaw, uint16_t egtsRawLength, @@ -426,6 +444,43 @@ bool Gsm_ActivateApn(tEgtsProcessing *env) { return res == AT_OK; } +bool Gsm_SetProfileERA(tEgtsProcessing *env) { + AtCommandResult res = AT_ERROR; + if (osMutexAcquire(env->gsm->gsmAt.access, 1000) == osOK) { + + AtGsmTelitLe910_SimProfileSelect(&env->gsm->gsmAt, + &env->store->nvm.deviceTeledataStorageData.telematica.EGTS_PROFILE_SIM_ERA); + + AtGsmTelitLe910_SIMCardNoDetect(&env->gsm->gsmAt); + AtGsmTelitLe910_SIMCardDetect(&env->gsm->gsmAt); + SystemDelayMs(1000); + + osMutexRelease(env->gsm->gsmAt.access); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка доступа (Gsm_SetProfileERA)") + } + + return res == AT_OK; +} + +bool Gsm_SetProfileINTERNET(tEgtsProcessing *env) { + AtCommandResult res = AT_ERROR; + if (osMutexAcquire(env->gsm->gsmAt.access, 1000) == osOK) { + + AtGsmTelitLe910_SimProfileSelect(&env->gsm->gsmAt, + &env->store->nvm.deviceTeledataStorageData.telematica.EGTS_PROFILE_SIM_INTERNET); + + AtGsmTelitLe910_SIMCardNoDetect(&env->gsm->gsmAt); + AtGsmTelitLe910_SIMCardDetect(&env->gsm->gsmAt); + SystemDelayMs(1000); + + osMutexRelease(env->gsm->gsmAt.access); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка доступа (Gsm_SetProfileINTERNET)") + } + + return res == AT_OK; +} _Noreturn void EgtsProcessing_TransmitterTaskMain(tEgtsProcessing *env) { @@ -458,23 +513,6 @@ _Noreturn void EgtsProcessing_TransmitterTaskMain(tEgtsProcessing *env) { uint8_t socketId = SOCKET_WRONG_CONTEXT; eSocketStatus socketStatus = eSocketStatus_Disconnected; - eEgtsCertsStatus isLoad; - - while (1) { - - if (env->store->runtime.EGTS_FLEET_ON) { - - Gsm_ActivatePdp(env); - Gsm_ActivateApn(env); - - break; - - } else { - SystemDelayMs(1000); - } - - } - uint32_t timeOutCheckConnect = 0; uint32_t timeIsNetworkRegistration = 0; uint32_t timeOutCheckNav = AURUS_CHECK_NAV; @@ -489,7 +527,17 @@ _Noreturn void EgtsProcessing_TransmitterTaskMain(tEgtsProcessing *env) { env->store->runtime.telematicaCloseConnect = false; - isFirstStart = true; + if (!isFirstStart) { + isFirstStart = true; + + LoggerInfoStatic(LOGGER, LOG_SIGN, "Настройка телематики") + + Gsm_SetProfileINTERNET(env); + + Gsm_ActivateApn(env); + Gsm_ActivatePdp(env); + + } if (env->deviceTeledataStorageData->telematica.telematicaIsActive) { env->isEnableTelematicaSendPoints = true; @@ -503,6 +551,8 @@ _Noreturn void EgtsProcessing_TransmitterTaskMain(tEgtsProcessing *env) { isFirstStart = false; EgtsProcessingCloseConnection(env); LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Соединение с сервером разорвано, ИД: %d", socketId); + + Gsm_SetProfileERA(env); } env->egtsIdentityAdditionalData.isReceivedResultCode = false; diff --git a/EgtsProcessing.h b/EgtsProcessing.h index 1d408ef..c7083bc 100644 --- a/EgtsProcessing.h +++ b/EgtsProcessing.h @@ -414,6 +414,9 @@ typedef struct { extern tEgtsProcessing egtsProcessing; +bool Gsm_SetProfileERA(tEgtsProcessing *env); +bool Gsm_SetProfileINTERNET(tEgtsProcessing *env); + void EgtsProcessing_Init( tEgtsProcessing *env, tDeviceStorage *deviceStorage,