// // Created by cfif on 11.04.2024. // #include "EgtsInputCommands.h" #include "EgtsOutputCommands.h" #include "Rtc.h" #include "string.h" #include "SystemDelayInterface.h" #define LOG_SIGN "EGTS_COM" #define LOGGER &env->slog->logger egtsAurusCommandResult egtsAurusGetReport(tEgtsProcessing *env) { uint16_t command = *((uint16_t *) (env->egtsCommandSent.data + 2)); uint16_t block = *((uint16_t *) env->egtsCommandSent.data); bool isResponseCommand = false; if (command == 101) { LoggerFormatInfo(LOGGER, LOG_SIGN, "Получена команда сброса ошибок, код команды: %u, код блока: %u", command, block) isResponseCommand = true; } if (command == 102) { LoggerFormatInfo(LOGGER, LOG_SIGN, "Получена команда обновления отчета, код команды: %u, код блока: %u", command, block) isResponseCommand = true; } if (!isResponseCommand) { LoggerFormatInfo(LOGGER, LOG_SIGN, "Получена команда, код команды: %u, код блока: %u", command, block) } return EGTS_AURUS_COMMAND_RESULT_OK; } egtsAurusCommandResult egtsAurusSetRestart(tEgtsProcessing *env) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Получена команда перезагрузки устройства") return EGTS_AURUS_COMMAND_RESULT_RESTART_OK; } egtsAurusCommandResult egtsAurusAnalizCommands(tEgtsProcessing *env) { /* env->egtsCommandSent.commandConfirmationType = CC_OK; if (env->egtsCommandSent.cmd == EGTS_SET_TIME) { return egtsAurusSetTimestamp(env); } if (env->egtsCommandSent.cmd == EGTS_SET_PERMANENT_TELEMATICA) { } 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; } void addCommandQueue(tEgtsProcessing *env, tEgtsCommand *egtsCommand) { osStatus_t status = osMessageQueuePut(env->egtsCommandConfirmationAdditionalData.queue, egtsCommand, 0x0, 0U); if (status != osOK) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка добавления в очередь addCommandQueue") } } bool extractCommandQueue(tEgtsProcessing *env, tEgtsCommand *egtsCommandSent, uint32_t timeout) { osStatus_t status = osMessageQueueGet(env->egtsCommandConfirmationAdditionalData.queue, egtsCommandSent, 0, timeout); if ((status != osOK) && (status != osErrorTimeout)) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка извлечения из очереди extractCommandQueue") } if (status == osOK) { return true; } return false; } _Noreturn void EgtsProcessing_TransmitterTaskInputCommand(tEgtsProcessing *env) { bool oneOn = true; bool oneOff = true; for (;;) { if (onOffTelematica(env, &oneOn, &oneOff, "Задача обработки команд")) continue; //начало ---------------------------------Обработка команд------------------------------------------------------ //начало ---------------------------------Обработка команд------------------------------------------------------ //начало ---------------------------------Обработка команд------------------------------------------------------ if (!isAuth(env)) { // LoggerInfoStatic(LOGGER, LOG_SIGN, "Ожидание аутентификации на сервере") SystemDelayMs(1000); continue; } if (extractCommandQueue(env, &env->egtsCommandSent, 1000)) { egtsAurusCommandResult resultCom = egtsAurusAnalizCommands(env); if (env->egtsCommandSent.commandConfirmationType == CC_ILL) { LoggerFormatInfo(LOGGER, LOG_SIGN, "Получен неизвестный код команды: %d", env->egtsCommandSent.cmd); } EgtsProcessing_SendCommandConfirmation(env, CT_COMCONF, env->egtsCommandSent.commandConfirmationType, env->egtsCommandSent.cmdId, 0, 0, 0, 0, env->egtsCommandSent.cmd, env->egtsCommandSent.data, 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_RESTART_OK) { SystemDelayMs(1000); // nvic_system_reset(); } } //конец ---------------------------------Обработка команд------------------------------------------------------- //конец ---------------------------------Обработка команд------------------------------------------------------- //конец ---------------------------------Обработка команд------------------------------------------------------- } }