diff --git a/EgtsInputCommands.c b/EgtsInputCommands.c index 35535a0..cae2455 100644 --- a/EgtsInputCommands.c +++ b/EgtsInputCommands.c @@ -6,10 +6,41 @@ #include "Rtc.h" #include "string.h" #include "SystemDelayInterface.h" +#include "n32g45x.h" #define LOG_SIGN "EGTS_COM" #define LOGGER &env->slog->logger +egtsAurusCommandResult egtsAurusSetTimestamp(tEgtsProcessing *env) { + + time_t timestamp = *((uint32_t *) env->egtsCommandSent.data); + + LoggerFormatInfo(LOGGER, LOG_SIGN, "Получена временная метка (1681246800): %u", timestamp) + + timestamp = timestamp + 1681246800 + 3600 * 3; + + RtcSet(env->rtc, ×tamp); + + //1681246800 + + if (env->egtsCommandSent.dataSize >= 5) { + + uint8_t isRunTelematica = env->egtsCommandSent.data[4]; + + LoggerFormatInfo(LOGGER, LOG_SIGN, "Получен статус удаленного включения (не перманентного) телематики: %u", isRunTelematica) + + if (isRunTelematica) { + return EGTS_AURUS_COMMAND_RESULT_TIMESTAMP_TELE_RUN_OK; + + } + + } else { + env->store->runtime.telematicaWaitConnect = true; + } + + return EGTS_AURUS_COMMAND_RESULT_TIMESTAMP_TELE_STOP_OK; +} + egtsAurusCommandResult egtsAurusGetReport(tEgtsProcessing *env) { uint16_t command = *((uint16_t *) (env->egtsCommandSent.data + 2)); @@ -44,7 +75,7 @@ egtsAurusCommandResult egtsAurusSetRestart(tEgtsProcessing *env) { } egtsAurusCommandResult egtsAurusAnalizCommands(tEgtsProcessing *env) { -/* + env->egtsCommandSent.commandConfirmationType = CC_OK; if (env->egtsCommandSent.cmd == EGTS_SET_TIME) { @@ -54,14 +85,14 @@ egtsAurusCommandResult egtsAurusAnalizCommands(tEgtsProcessing *env) { if (env->egtsCommandSent.cmd == EGTS_SET_PERMANENT_TELEMATICA) { } - if (env->egtsCommandSent.cmd == EGTS_GET_REPORT) { - return egtsAurusGetReport(env); - } +// if (env->egtsCommandSent.cmd == EGTS_GET_REPORT) { +// return egtsAurusGetReport(env); +// } if (env->egtsCommandSent.cmd == EGTS_SET_RESTART) { return egtsAurusSetRestart(env); } -*/ + env->egtsCommandSent.commandConfirmationType = CC_ILL; return EGTS_AURUS_COMMAND_RESULT_UNKNOWN; @@ -138,16 +169,16 @@ _Noreturn void EgtsProcessing_TransmitterTaskInputCommand(tEgtsProcessing *env) env->egtsCommandSent.dataSize); -// if (resultCom == EGTS_AURUS_COMMAND_RESULT_ERROR) { -// env->egtsIdentityAdditionalData.isReceivedResultCode = false; -// LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Принудительный разрыв соединения с сервером, ИД: %d", -// env->socketId); -// EgtsProcessingCloseConnection(env); -// } + if (resultCom == EGTS_AURUS_COMMAND_RESULT_ERROR) { + env->egtsIdentityAdditionalData.isReceivedResultCode = false; + LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Принудительный разрыв соединения с сервером, ИД: %d", + env->socketId); + EgtsProcessingCloseConnection(env); + } if (resultCom == EGTS_AURUS_COMMAND_RESULT_RESTART_OK) { SystemDelayMs(1000); -// nvic_system_reset(); + NVIC_SystemReset(); } diff --git a/EgtsOutputCommands.c b/EgtsOutputCommands.c index f19b88e..a1195f5 100644 --- a/EgtsOutputCommands.c +++ b/EgtsOutputCommands.c @@ -95,7 +95,6 @@ uint16_t vEgtsPackModuleData(uint8_t *out, tEgtsIdentityModuleDataArgs *args, ui //char auth[15] = "860384067388816"; bool EgtsProcessing_SendAuth(tEgtsProcessing *env) { - uint8_t egtsRaw[256]; memset(egtsRaw, 0, sizeof(egtsRaw)); @@ -213,8 +212,7 @@ void EgtsProcessing_Default_SendSensorsDig(tEgtsProcessing *env) { void EgtsProcessing_Default_SendSensorsAn(tEgtsProcessing *env) { - env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[0].number = 99; -/* + env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[0].number = 99; env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[1].number = 104; env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[2].number = 105; @@ -243,7 +241,6 @@ void EgtsProcessing_Default_SendSensorsAn(tEgtsProcessing *env) { env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[23].number = 150; env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[24].number = 151; - */ /* // 0 @@ -345,7 +342,7 @@ uint16_t vEgtsPackPositionData(uint8_t *out, tEgtsPositionDataArgs *args, uint16 bool EgtsProcessing_SendSensors(tEgtsProcessing *env, bool isStorage) { - uint8_t egtsRaw[512]; + uint8_t egtsRaw[256]; memset(egtsRaw, 0, sizeof(egtsRaw)); time_t timestamp; diff --git a/EgtsOutputCommands.h b/EgtsOutputCommands.h index 4ea02e7..c4a5238 100644 --- a/EgtsOutputCommands.h +++ b/EgtsOutputCommands.h @@ -7,10 +7,13 @@ #include "EgtsProcessing.h" + + typedef enum { SENSORS_DIG_BodyCanBusStatus = 0 // Статус шины BodyCan } eSensorsDig; + typedef enum { SENSORS_AN_Uptime = 0, // Время работы прибора в минутах, после последней перезагрузки/включения SENSORS_AN_ExternalTemperature = 1, // Внешняя температура, С @@ -39,6 +42,7 @@ typedef enum { SENSORS_AN_EngineOilTemperature = 24 // Температура масла двигателя } eSensorsAn; + /* typedef enum { SENSORS_DIG_VehicleAlarmSystemActivateSirenOnOff = 0, // Vehicle Alarm System activate siren diff --git a/EgtsProcessing.c b/EgtsProcessing.c index b44f18d..c238dc5 100644 --- a/EgtsProcessing.c +++ b/EgtsProcessing.c @@ -60,6 +60,7 @@ void EgtsProcessing_TransmitterTaskMain(tEgtsProcessing *env); void EgtsProcessing_ListenerTask(tEgtsProcessing *env); char *sendLogHex(tEgtsProcessing *env, uint8_t *data, size_t size) { + memset(env->hexString, 0, sizeof(env->hexString)); size_t len = 0; vAsciiStringAddBytesAsHex(env->hexString, &len, data, size); @@ -67,6 +68,7 @@ char *sendLogHex(tEgtsProcessing *env, uint8_t *data, size_t size) { LoggerStrInfo(LOGGER, LOG_SIGN, env->hexString, strlen(env->hexString)); return env->hexString; + } size_t EgtsProcessing_WorkerRead(tEgtsProcessing *env, uint8_t *data, size_t size) { @@ -174,14 +176,13 @@ void EgtsProcessing_Init( env->gsm->socketGsm.loggerTaskName = (char *) LOG_TASK_GSM_SOCKET; // InitThreadBlock(env->T_processing_Network, "Network", osPriorityNormal); - InitThreadBlock(env->T_processing_input_command, "EgtsPrcInputCom", osPriorityNormal); // InitThreadBlock(env->T_processing_ebu, "EgtsPrcEbu", osPriorityNormal); + + InitThreadBlock(env->T_processing_input_command, "EgtsPrcInputCom", osPriorityNormal); InitThreadBlock(env->T_processing_event_teledata, "EgtsPrcEventTel", osPriorityNormal); InitThreadBlock(env->T_processing_teledata, "EgtsPrcTeledata", osPriorityNormal); InitThreadBlock(env->T_processing_main, "EgtsPrcMain", osPriorityNormal); InitThreadBlock(env->T_listener, "EgtsListner", osPriorityNormal); - - InitThreadBlock(env->T_processing_urc, "Urc", osPriorityNormal); } @@ -191,10 +192,8 @@ void EgtsProcessing_Start(tEgtsProcessing *env) { // ThreadBlock_Start(env->T_processing_ebu, env, EgtsProcessing_TransmitterTaskEbu); - - -// ThreadBlock_Start(env->T_processing_input_command, env, EgtsProcessing_TransmitterTaskInputCommand); -// ThreadBlock_Start(env->T_processing_event_teledata, env, EgtsProcessing_EventTaskTeledata); + ThreadBlock_Start(env->T_processing_input_command, env, EgtsProcessing_TransmitterTaskInputCommand); + ThreadBlock_Start(env->T_processing_event_teledata, env, EgtsProcessing_EventTaskTeledata); ThreadBlock_Start(env->T_processing_teledata, env, EgtsProcessing_TransmitterTaskTeledata); ThreadBlock_Start(env->T_processing_main, env, EgtsProcessing_TransmitterTaskMain); ThreadBlock_Start(env->T_listener, env, EgtsProcessing_ListenerTask); @@ -639,15 +638,15 @@ _Noreturn void EgtsProcessing_TransmitterTaskMain(tEgtsProcessing *env) { stepAuth = 1; - if (env->gsm->codeResultOpen == 15) { - LoggerStrInfoStatic(LOGGER, LOG_SIGN, - "Ошибка рукопожатия, переход на альтернативный сервер"); - } - - if (env->gsm->codeResultOpen == 10) { - LoggerStrInfoStatic(LOGGER, LOG_SIGN, - "Ошибка открытия сеанса, переход на альтернативный сервер"); - } +// if (env->gsm->codeResultOpen == 15) { +// LoggerStrInfoStatic(LOGGER, LOG_SIGN, +// "Ошибка рукопожатия, переход на альтернативный сервер"); +// } +// +// if (env->gsm->codeResultOpen == 10) { +// LoggerStrInfoStatic(LOGGER, LOG_SIGN, +// "Ошибка открытия сеанса, переход на альтернативный сервер"); +// } // if (env->gsm->codeResultOpen == 20) { // LoggerStrInfoStatic(LOGGER, LOG_SIGN, @@ -660,17 +659,17 @@ _Noreturn void EgtsProcessing_TransmitterTaskMain(tEgtsProcessing *env) { --stepAuth; - if (env->gsm->codeResultOpen == 15) { - LoggerFormatInfo(LOGGER, LOG_SIGN, - "Ошибка рукопожатия, переход на альтернативный сервер через %u попыток", - stepAuth); - } - - if (env->gsm->codeResultOpen == 10) { - LoggerFormatInfo(LOGGER, LOG_SIGN, - "Ошибка открытия сеанса, переход на альтернативный сервер через %u попыток", - stepAuth); - } +// if (env->gsm->codeResultOpen == 15) { +// LoggerFormatInfo(LOGGER, LOG_SIGN, +// "Ошибка рукопожатия, переход на альтернативный сервер через %u попыток", +// stepAuth); +// } +// +// if (env->gsm->codeResultOpen == 10) { +// LoggerFormatInfo(LOGGER, LOG_SIGN, +// "Ошибка открытия сеанса, переход на альтернативный сервер через %u попыток", +// stepAuth); +// } // if (env->gsm->codeResultOpen == 20) { // LoggerFormatInfo(LOGGER, LOG_SIGN, @@ -879,6 +878,7 @@ void EgtsProcessing_Worker(tEgtsProcessing *env) { //начало ---------------------------------Сервис ПРОШИВКИ----------------------------------------------- //начало ---------------------------------Сервис ПРОШИВКИ----------------------------------------------- //начало ---------------------------------Сервис ПРОШИВКИ----------------------------------------------- +/* if (env->egtsEnv.recSourceService == EGTS_FIRMWARE_SERVICE) { if (env->egtsEnv.subRecType == EGTS_SR_RECORD_RESPONSE) { @@ -907,6 +907,7 @@ void EgtsProcessing_Worker(tEgtsProcessing *env) { } } +*/ //конец ---------------------------------Сервис ПРОШИВКИ------------------------------------------------ //конец ---------------------------------Сервис ПРОШИВКИ------------------------------------------------ //конец ---------------------------------Сервис ПРОШИВКИ------------------------------------------------ diff --git a/EgtsProcessing.h b/EgtsProcessing.h index bb045fa..acf74e8 100644 --- a/EgtsProcessing.h +++ b/EgtsProcessing.h @@ -212,7 +212,7 @@ typedef struct { //начало ---------------------------------Команды----------------------------------------------------------------------- //начало ---------------------------------Команды----------------------------------------------------------------------- -#define COMMAND_QUEUE_SIZE 10 +#define COMMAND_QUEUE_SIZE 5 typedef struct { uint16_t ADR; @@ -257,6 +257,14 @@ typedef struct { //конец ---------------------------------Команды------------------------------------------------------------------------ //конец ---------------------------------Команды------------------------------------------------------------------------ +typedef struct { + int16_t x; + int16_t y; + int16_t z; + uint16_t angle; +} tRawAccel; + + typedef struct { bool isEbuData; uint16_t speed; @@ -334,14 +342,13 @@ typedef struct { } carEventPosition; // tStaticThreadBlock(1024) T_processing_Network; - tStaticThreadBlock(512) T_processing_input_command; // tStaticThreadBlock(1024) T_processing_ebu; + tStaticThreadBlock(512) T_processing_input_command; tStaticThreadBlock(512) T_processing_event_teledata; tStaticThreadBlock(512) T_processing_teledata; tStaticThreadBlock(512) T_processing_main; - tStaticThreadBlock(512) T_listener; - - tStaticThreadBlock(768) T_processing_urc; + tStaticThreadBlock(1024) T_listener; + tStaticThreadBlock(1024) T_processing_urc; // uint8_t wb[1024 * 10]; uint8_t wb[1024]; @@ -385,7 +392,7 @@ typedef struct { uint16_t pPointsStorageSent; - bool isEnableTelematicaSendPoints; + volatile bool isEnableTelematicaSendPoints; uint32_t firstStartTimeUpdateEBU; bool fl_firstStartTimeUpdateEBU; /* @@ -399,7 +406,9 @@ typedef struct { bool isOneEBU; -/* + +// tRawAccel rawAccel; + int32_t x1; int32_t y1; int32_t z1; @@ -409,11 +418,10 @@ typedef struct { uint8_t count_shot; uint8_t count_free; uint32_t timeAccelUpdate; -*/ + } tEgtsProcessing; -extern tEgtsProcessing egtsProcessing; bool Gsm_SetProfileERA(tEgtsProcessing *env); bool Gsm_SetProfileINTERNET(tEgtsProcessing *env); diff --git a/EgtsTeledataPoint.c b/EgtsTeledataPoint.c index ca683e5..ee8285d 100644 --- a/EgtsTeledataPoint.c +++ b/EgtsTeledataPoint.c @@ -705,7 +705,7 @@ _Noreturn void EgtsProcessing_EventTaskTeledata(tEgtsProcessing *env) { 0b0011111111111111; // скорость в км/ч с дискретностью 0,1 км/ч (используется 14 младших бит) // int32_t alt = GnssGgaGetAlt(env->gsm); - int32_t alt = 0; + int32_t alt = (int32_t)nmeaRmc.location.altitude; if (alt >= 0) { env->egtsTeledataEdit.egtsPosDataArgs.SPD.ALTS = 0; diff --git a/EgtsTelesataTypes.h b/EgtsTelesataTypes.h index 6da4677..a9bfe81 100644 --- a/EgtsTelesataTypes.h +++ b/EgtsTelesataTypes.h @@ -9,7 +9,7 @@ #include "CmsisRtosThreadUtils.h" #include "stdbool.h" -#define TELEDATA_QUEUE_SIZE 20 +#define TELEDATA_QUEUE_SIZE 10 typedef enum { CAR_POSITION_UNDEFINED = 0, @@ -51,8 +51,7 @@ typedef struct { typedef struct { - tEgtsSensorsAnState sensorsAnState[1]; -// tEgtsSensorsAnState sensorsAnState[25]; + tEgtsSensorsAnState sensorsAnState[25]; // tEgtsSensorsAnState sensorsAnState[47]; } tEgtsSensorsAnDataArgs;