UveosOnNation_VEGA_Egts/EgtsInputCommands.c

165 lines
6.0 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 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();
}
}
//конец ---------------------------------Обработка команд-------------------------------------------------------
//конец ---------------------------------Обработка команд-------------------------------------------------------
//конец ---------------------------------Обработка команд-------------------------------------------------------
}
}