Init
This commit is contained in:
commit
d0d4685518
|
|
@ -0,0 +1,164 @@
|
||||||
|
//
|
||||||
|
// 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//конец ---------------------------------Обработка команд-------------------------------------------------------
|
||||||
|
//конец ---------------------------------Обработка команд-------------------------------------------------------
|
||||||
|
//конец ---------------------------------Обработка команд-------------------------------------------------------
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 11.04.2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SMART_COMPONENTS_EGTSINPUTCOMMANDS_H
|
||||||
|
#define SMART_COMPONENTS_EGTSINPUTCOMMANDS_H
|
||||||
|
|
||||||
|
#include "EgtsProcessing.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
EGTS_AURUS_COMMAND_RESULT_OK = 0x00,
|
||||||
|
EGTS_AURUS_COMMAND_RESULT_ERROR = 0x01,
|
||||||
|
|
||||||
|
EGTS_AURUS_COMMAND_RESULT_TIMESTAMP_TELE_STOP_OK = 0xFC,
|
||||||
|
EGTS_AURUS_COMMAND_RESULT_TIMESTAMP_TELE_RUN_OK = 0xFD,
|
||||||
|
|
||||||
|
EGTS_AURUS_COMMAND_RESULT_RESTART_OK = 0xFE,
|
||||||
|
EGTS_AURUS_COMMAND_RESULT_UNKNOWN = 0xFF,
|
||||||
|
} egtsAurusCommandResult;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
EGTS_SET_RESTART = 0x0008,
|
||||||
|
EGTS_SET_TIME = 0xFAC4,
|
||||||
|
|
||||||
|
EGTS_SET_PERMANENT_TELEMATICA = 0xFAD0,
|
||||||
|
|
||||||
|
EGTS_GET_REPORT = 0xFAC2,
|
||||||
|
|
||||||
|
EGTS_GPRS_APN = 0x0203,
|
||||||
|
EGTS_SERVER_ADDRESS = 0x0204,
|
||||||
|
EGTS_SIM_PIN = 0x0205,
|
||||||
|
|
||||||
|
EGTS_GPRS_USER = 0x051A
|
||||||
|
|
||||||
|
|
||||||
|
} egtsAurusCommands;
|
||||||
|
|
||||||
|
|
||||||
|
egtsAurusCommandResult egtsAurusAnalizCommands(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
egtsAurusCommandResult egtsAurusSetTimestamp(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
void addCommandQueue(tEgtsProcessing *env, tEgtsCommand *egtsCommand);
|
||||||
|
|
||||||
|
uint8_t VariablesTable_ExGetVarTypeLength(tVariableDescriptor *var);
|
||||||
|
|
||||||
|
_Noreturn void EgtsProcessing_TransmitterTaskInputCommand(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
#endif //SMART_COMPONENTS_EGTSINPUTCOMMANDS_H
|
||||||
|
|
@ -0,0 +1,604 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 12.04.2024.
|
||||||
|
//
|
||||||
|
#include "EgtsOutputCommands.h"
|
||||||
|
#include "math.h"
|
||||||
|
#include "AsciiStringAssmeblingUtils.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "Rtc.h"
|
||||||
|
#include "egts_commonExt.h"
|
||||||
|
#include "EgtsTimestamp.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "FirmwareMetadataSection.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
|
||||||
|
#define LOG_SIGN "EGTS"
|
||||||
|
#define LOGGER &env->slog->logger
|
||||||
|
|
||||||
|
#define ADD_TO_RESULT(DATA, LEN) memcpy(out + offset, (uint8_t * ) & DATA, LEN); offset+=LEN;
|
||||||
|
#define ADD_TO_RESULT_P(DATA, LEN) memcpy(out + offset, DATA, LEN); offset+=LEN;
|
||||||
|
|
||||||
|
//начало ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
|
||||||
|
uint16_t vEgtsPackAuth(uint8_t *out, tEgtsIdentityDataArgs *args, uint16_t step) {
|
||||||
|
uint16_t offset = 0;
|
||||||
|
|
||||||
|
uint16_t TermIdentityBS = 256;//1400;
|
||||||
|
uint8_t TermIdentityFlags = 0b01000010;
|
||||||
|
|
||||||
|
ADD_TO_RESULT(args->TerminalID, 4);
|
||||||
|
ADD_TO_RESULT(TermIdentityFlags, 1);
|
||||||
|
ADD_TO_RESULT((*args->IMEI), args->IMEI_len);
|
||||||
|
ADD_TO_RESULT(TermIdentityBS, 2);
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t vEgtsPackModuleData(uint8_t *out, tEgtsIdentityModuleDataArgs *args, uint16_t step) {
|
||||||
|
uint16_t offset = 0;
|
||||||
|
|
||||||
|
tString32 fw;
|
||||||
|
fw.length = META_FW_NAME_SIZE;
|
||||||
|
memcpy(&fw.data, (uint8_t *) META_FW_NAME, fw.length);
|
||||||
|
|
||||||
|
uint8_t pos = findDelimiter(&fw, '.') + 1;
|
||||||
|
uint8_t fw_h = atoi(FIRMWARE_VERSION);
|
||||||
|
uint8_t fw_l = atoi(&FIRMWARE_VERSION[pos]);
|
||||||
|
|
||||||
|
tString32 hw;
|
||||||
|
hw.length = META_HW_NAME_SIZE;
|
||||||
|
memcpy(&hw.data, (uint8_t *) META_HW_NAME, hw.length);
|
||||||
|
|
||||||
|
pos = findDelimiter(&hw, '.') + 1;
|
||||||
|
uint8_t hw_h = atoi(HARDWARE_REVISION);
|
||||||
|
uint8_t hw_l = atoi(&HARDWARE_REVISION[pos]);
|
||||||
|
|
||||||
|
uint8_t MT = 1; // Module Туре
|
||||||
|
uint32_t VID = 1; // Vendor Identifier
|
||||||
|
uint16_t FWV = (hw_h << 8) | hw_l; // Firmware Version
|
||||||
|
uint16_t SWV = (fw_h << 8) | fw_l; // Software Version
|
||||||
|
uint8_t MD = 0; // Modification
|
||||||
|
uint8_t ST = 1; // State
|
||||||
|
|
||||||
|
uint8_t Delimiter = 0;
|
||||||
|
|
||||||
|
ADD_TO_RESULT(MT, 1);
|
||||||
|
ADD_TO_RESULT(VID, 4);
|
||||||
|
ADD_TO_RESULT(FWV, 2);
|
||||||
|
ADD_TO_RESULT(SWV, 2);
|
||||||
|
ADD_TO_RESULT(MD, 1);
|
||||||
|
ADD_TO_RESULT(ST, 1);
|
||||||
|
ADD_TO_RESULT(Delimiter, 1);
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
//char auth[15] = "860384067388816";
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendAuth(tEgtsProcessing *env) {
|
||||||
|
|
||||||
|
uint8_t egtsRaw[256];
|
||||||
|
memset(egtsRaw, 0, sizeof(egtsRaw));
|
||||||
|
|
||||||
|
uint16_t authPackLength;
|
||||||
|
|
||||||
|
time_t timestamp;
|
||||||
|
RtcGet(env->gsm->Rtc, ×tamp);
|
||||||
|
|
||||||
|
uint8_t IMEI_len = env->store->nvm.device.cgsmid.length;
|
||||||
|
if (env->store->nvm.device.cgsmid.length >= 2) {
|
||||||
|
if ((env->store->nvm.device.cgsmid.data[IMEI_len - 1] == '\n') &&
|
||||||
|
(env->store->nvm.device.cgsmid.data[IMEI_len - 2] == '\r')) {
|
||||||
|
IMEI_len = env->store->nvm.device.cgsmid.length - 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
env->egtsIdentityDataArgs.IMEI = (uint8_t *) env->store->nvm.device.cgsmid.data;
|
||||||
|
env->egtsIdentityDataArgs.IMEI_len = IMEI_len;
|
||||||
|
env->egtsIdentityDataArgs.TerminalID = env->deviceTeledataStorageData->telematica.EGTS_UNIT_ID;
|
||||||
|
|
||||||
|
++env->egtsPacketId;
|
||||||
|
env->egtsIdentityAdditionalData.idPacked = env->egtsPacketId;
|
||||||
|
env->egtsIdentityAdditionalData.isReceivedResponse = false;
|
||||||
|
env->egtsIdentityAdditionalData.isReceivedResultCode = false;
|
||||||
|
|
||||||
|
authPackLength = vEgtsPackTransportEx2(
|
||||||
|
0,
|
||||||
|
env->egtsIdentityAdditionalData.idPacked,
|
||||||
|
&env->counter,
|
||||||
|
egtsRaw,
|
||||||
|
EGTS_SERVICE_FLAGS_AUTH,
|
||||||
|
EGTS_PT_APPDATA,
|
||||||
|
EGTS_AUTH_SERVICE,
|
||||||
|
EGTS_AUTH_SERVICE,
|
||||||
|
timestamp,
|
||||||
|
|
||||||
|
1,
|
||||||
|
EGTS_SR_TERM_IDENTITY,
|
||||||
|
(tEgtsServiceSubRecordGeneratorEx) vEgtsPackAuth,
|
||||||
|
&env->egtsIdentityDataArgs,
|
||||||
|
|
||||||
|
1,
|
||||||
|
EGTS_SR_MODULE_DATA,
|
||||||
|
(tEgtsServiceSubRecordGeneratorEx) vEgtsPackModuleData,
|
||||||
|
&env->egtsModuleDataArgs
|
||||||
|
);
|
||||||
|
|
||||||
|
LoggerFormatInfo(LOGGER, LOG_SIGN, "Отправка пакета (id: %u) аутентификации:",
|
||||||
|
env->egtsIdentityAdditionalData.idPacked)
|
||||||
|
sendLogHex(env, egtsRaw, authPackLength);
|
||||||
|
|
||||||
|
bool result = EgtsProcessingSend(env, egtsRaw, authPackLength, EGTS_WAIT_2,
|
||||||
|
&env->egtsIdentityAdditionalData.isReceivedResponse,
|
||||||
|
&env->egtsIdentityAdditionalData.isReceivedResultCode);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
LoggerStrInfoStatic(LOGGER, LOG_SIGN, "Истекло время ожидания (EgtsProcessing_SendAuth)");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//конец ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//начало ---------------------------------Теледанные--------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Теледанные--------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Теледанные--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void EgtsProcessing_Default_SendSensorsDig(tEgtsProcessing *env) {
|
||||||
|
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[0].number = 18;
|
||||||
|
|
||||||
|
/*
|
||||||
|
for (int i = 0; i < 20; ++i) {
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[i].number = i;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[i].state = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[0].state = 0; // Vehicle Alarm System activate siren
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[1].state = 0; // Состояние охранной сигнализации
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[2].state = 0; // Статус заряда АКБ
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[3].state = 0; // Статус ПЛ двери
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[4].state = 0; // Статус ПП двери
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[5].state = 0; // Статус ЗЛ двери
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[6].state = 0; // Статус ЗП двери
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[7].state = 0; // Статус капота
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[8].state = 0; // Уровень омывающей жидкости
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[9].state = 0; // Уровень охлаждающей жидкости
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[10].state = 0; // Окно ПЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[11].state = 0; // Окно ПП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[12].state = 0; // Окно ЗЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[13].state = 0; // Окно ЗП
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[14].state = 0; // Состояние батареи датчика давления шины ПЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[15].state = 0; // Состояние батареи датчика давления шины ПП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[16].state = 0; // Состояние батареи датчика давления шины ЗЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[17].state = 0; // Состояние батареи датчика давления шины ЗП
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[18].state = 0; // Статус шины BodyCan
|
||||||
|
env->egtsTeledataEdit.egtsSensorsDigArgs.sensorsDigState[19].state = 0; // Статус шины DiagCan
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[3].number = 106;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[4].number = 111;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[5].number = 112;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[6].number = 113;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[7].number = 131;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[8].number = 132;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[9].number = 133;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[10].number = 134;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[11].number = 3;
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[12].number = 206;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[13].number = 207;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[14].number = 208;
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[15].number = 142;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[16].number = 143;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[17].number = 144;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[18].number = 145;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[19].number = 146;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[20].number = 147;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[21].number = 148;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[22].number = 149;
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[23].number = 150;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[24].number = 151;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 0
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[0].number = 3;
|
||||||
|
|
||||||
|
// 43
|
||||||
|
for (int i = 1; i <= 43; ++i) {
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[i].number = 98 + i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3
|
||||||
|
for (int i = 44; i <= 46; ++i) {
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[i].number = 162 + i;
|
||||||
|
}
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[0].value = 12000;
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[1].value = 0; // Время работы прибора в минутах, после последней перезагрузки/включения
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[2].value = 80 + 40; // 20 Темп. внутри салона (передняя), С
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[3].value = 80 + 60; // 30 Температура внутри салона (задняя), С
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[4].value = 50; // SoH АКБ, %
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[5].value = 60; // SoC АКБ, %
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[6].value = 90; // 5 Внешняя температура, С
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[7].value = 80; // 40 л Уровень топлива, л
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[8].value = 3; // Статус автомобиля
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[9].value = 1; // Статус замков дверей
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[10].value = 3; // Статус багажника (задняя дверь)
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[11].value = 70; // 7 л Ср. расход топлива после БК
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[12].value = 60; // 6 л Ср. расход за поездку
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[13].value = 200; // 20 км Пробег поездки
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[14].value = 600; // 60 км/ч Средняя скорость
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[15].value = 20; // Минут поездки (сборная)
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[16].value = 3; // Положение рычага АКПП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[17].value = 100000 + 50; // Дней до ТО
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[18].value = 100000 + 300; // Пробег до ТО
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[19].value = 80;// Уровень масла в двигателе
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[20].value = 0; // Индикатор уровня масла двигателя
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[21].value = 22;// 2 атм давление в шине ПЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[22].value = 24;// 2 атм давление в шине ПП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[23].value = 26;// 2 атм давление в шине ЗЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[24].value = 20;// 2 атм давление в шине ЗП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[25].value = 2;// Состояние шины ПЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[26].value = 2;// Состояние шины ПП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[27].value = 2;// Состояние шины ЗЛ
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[28].value = 2;// Состояние шины ЗП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[29].value = 20;//26 = 20/10 + 16 Целевая темп. CCU водитель
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[30].value = 20;// Целевая темп. CCU П-П
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[31].value = 20;// Целевая темп. CCU ЗЛ-П
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[32].value = 20;// Целевая темп. CCU ЗП-П
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[33].value = 100;// Моточасы
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[34].value = 250;// Пробег авто после сброса БК
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[35].value = 700;// Средняя скорость после сброса БК
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[36].value = 20;// 20 мин Время после сброса БК
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[37].value = 700;// Пробег на остатке топлива
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[38].value = 50;// SoH HV АКБ, %
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[39].value = 60;// SoC HV АКБ, %
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[40].value = 1;// Занятость кресла водителя
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[41].value = 1;// Занятость кресла ПП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[42].value = 1;// Занятость кресла ЗЛ
|
||||||
|
// Нет Напряжение АКБ 12В
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[43].value = 4;// Занятость кресла ЗП
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[44].value = 3;// Кол-во спутников
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[45].value = 30;// 53 = 113- 30*2 RSSI (GSM Network)
|
||||||
|
env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[46].value = 44;// Network type
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t vEgtsPackSensorsDigData(uint8_t *out, tEgtsSensorsDigDataArgs *args, uint16_t step) {
|
||||||
|
uint16_t offset = 0;
|
||||||
|
ADD_TO_RESULT(args->sensorsDigState[step], 2);
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t vEgtsPackSensorsAnData(uint8_t *out, tEgtsSensorsAnDataArgs *args, uint16_t step) {
|
||||||
|
uint16_t offset = 0;
|
||||||
|
ADD_TO_RESULT(args->sensorsAnState[step], 4);
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t vEgtsPackPositionData(uint8_t *out, tEgtsPositionDataArgs *args, uint16_t step) {
|
||||||
|
|
||||||
|
uint16_t offset = 0;
|
||||||
|
|
||||||
|
ADD_TO_RESULT(args->NTM, 4);
|
||||||
|
ADD_TO_RESULT(args->LAT, 4);
|
||||||
|
ADD_TO_RESULT(args->LONG, 4);
|
||||||
|
ADD_TO_RESULT(args->FLG, 1);
|
||||||
|
ADD_TO_RESULT(args->SPD, 2);
|
||||||
|
ADD_TO_RESULT(args->DIR, 1);
|
||||||
|
ADD_TO_RESULT(args->ODM, 3);
|
||||||
|
ADD_TO_RESULT(args->DIN, 1);
|
||||||
|
ADD_TO_RESULT(args->SRC, 1);
|
||||||
|
ADD_TO_RESULT(args->ALT, 3);
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendSensors(tEgtsProcessing *env, bool isStorage) {
|
||||||
|
|
||||||
|
uint8_t egtsRaw[512];
|
||||||
|
memset(egtsRaw, 0, sizeof(egtsRaw));
|
||||||
|
|
||||||
|
time_t timestamp;
|
||||||
|
RtcGet(env->gsm->Rtc, ×tamp);
|
||||||
|
|
||||||
|
// LoggerStrInfoStatic(LOGGER, LOG_SIGN, "НОВАЯ ТЕЛЕМАТИКА");
|
||||||
|
|
||||||
|
++env->egtsPacketId;
|
||||||
|
env->egtsTeledataAdditionalData.idPacked = env->egtsPacketId;
|
||||||
|
env->egtsTeledataAdditionalData.isReceivedResponse = false;
|
||||||
|
|
||||||
|
uint16_t PackLength;
|
||||||
|
|
||||||
|
PackLength = vEgtsPackTransportEx3(
|
||||||
|
0,
|
||||||
|
env->egtsTeledataAdditionalData.idPacked,
|
||||||
|
&env->counter,
|
||||||
|
egtsRaw,
|
||||||
|
EGTS_SERVICE_FLAGS_TELEDATA,
|
||||||
|
EGTS_PT_APPDATA,
|
||||||
|
EGTS_TELEDATA_SERVICE,
|
||||||
|
EGTS_TELEDATA_SERVICE,
|
||||||
|
timestamp,
|
||||||
|
|
||||||
|
1,
|
||||||
|
EGTS_SR_POS_DATA,
|
||||||
|
(tEgtsServiceSubRecordGeneratorEx) vEgtsPackPositionData,
|
||||||
|
&env->egtsTeledataSent.egtsPosDataArgs,
|
||||||
|
|
||||||
|
//20,
|
||||||
|
1,
|
||||||
|
EGTS_SR_ABS_DIG_SENS_DATA,
|
||||||
|
(tEgtsServiceSubRecordGeneratorEx) vEgtsPackSensorsDigData,
|
||||||
|
&env->egtsTeledataSent.egtsSensorsDigArgs,
|
||||||
|
|
||||||
|
//47,
|
||||||
|
25,
|
||||||
|
EGTS_SR_ABS_AN_SENS_DATA,
|
||||||
|
(tEgtsServiceSubRecordGeneratorEx) vEgtsPackSensorsAnData,
|
||||||
|
&env->egtsTeledataSent.egtsSensorsAnArgs
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
LoggerFormatInfo(LOGGER, LOG_SIGN, "Отправка пакета (id: %u) теледанных (%u байт):",
|
||||||
|
env->egtsTeledataAdditionalData.idPacked, PackLength)
|
||||||
|
// sendLogHex(env, egtsRaw, PackLength);
|
||||||
|
|
||||||
|
bool result = EgtsProcessingSend(env, egtsRaw, PackLength, EGTS_WAIT_1,
|
||||||
|
&env->egtsTeledataAdditionalData.isReceivedResponse, NULL);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
LoggerStrInfoStatic(LOGGER, LOG_SIGN, "Истекло время ожидания (EgtsProcessing_SendSensors)");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//конец ---------------------------------Теледанные---------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Теледанные---------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Теледанные---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
|
||||||
|
uint16_t vEgtsPackFirmware(uint8_t *out, tEgtsFirmwareDataArgs *args, uint16_t step) {
|
||||||
|
uint16_t offset = 0;
|
||||||
|
|
||||||
|
++args->partNumber;
|
||||||
|
|
||||||
|
ADD_TO_RESULT(args->idFirmware, 2);
|
||||||
|
ADD_TO_RESULT(args->partNumber, 2);
|
||||||
|
ADD_TO_RESULT(args->countNumber, 2);
|
||||||
|
|
||||||
|
if (args->partNumber == 1) {
|
||||||
|
|
||||||
|
tOA OA;
|
||||||
|
OA.MT = 0;
|
||||||
|
OA.OT = 1;
|
||||||
|
OA.Reserve = 0;
|
||||||
|
ADD_TO_RESULT(OA, 1);
|
||||||
|
|
||||||
|
uint8_t CMI = 0;
|
||||||
|
ADD_TO_RESULT(CMI, 1);
|
||||||
|
|
||||||
|
uint16_t VER = 0x100;
|
||||||
|
ADD_TO_RESULT(VER, 2);
|
||||||
|
|
||||||
|
uint16_t WOS = CRC16EGTS(args->bufEbu, args->bufLen);
|
||||||
|
ADD_TO_RESULT(WOS, 2);
|
||||||
|
|
||||||
|
char FILENAME[100];
|
||||||
|
sprintf(FILENAME, "DTC_%lu_%s", args->timestamp, args->module);
|
||||||
|
ADD_TO_RESULT(FILENAME, strlen(FILENAME) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ADD_TO_RESULT(args->bufEbu, args->bufLen);
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendFirmware(tEgtsProcessing *env) {
|
||||||
|
uint8_t egtsRaw[1024];
|
||||||
|
memset(egtsRaw, 0, sizeof(egtsRaw));
|
||||||
|
|
||||||
|
uint16_t firmwarePackLength;
|
||||||
|
|
||||||
|
time_t timestamp;
|
||||||
|
RtcGet(env->gsm->Rtc, ×tamp);
|
||||||
|
|
||||||
|
++env->egtsFirmwareDataArgs.idFirmware;
|
||||||
|
env->egtsFirmwareDataArgs.countNumber = 1;
|
||||||
|
env->egtsFirmwareDataArgs.partNumber = 0;
|
||||||
|
env->egtsFirmwareDataArgs.timestamp = timestamp;
|
||||||
|
|
||||||
|
++env->egtsPacketId;
|
||||||
|
env->egtsIdentityAdditionalData.idPacked = env->egtsPacketId;
|
||||||
|
env->egtsIdentityAdditionalData.isReceivedResponse = false;
|
||||||
|
|
||||||
|
firmwarePackLength = vEgtsPackTransportEx1(
|
||||||
|
0,
|
||||||
|
env->egtsIdentityAdditionalData.idPacked,
|
||||||
|
&env->counter,
|
||||||
|
egtsRaw,
|
||||||
|
EGTS_SERVICE_FLAGS_FIRMWARE,
|
||||||
|
EGTS_PT_APPDATA,
|
||||||
|
EGTS_FIRMWARE_SERVICE,
|
||||||
|
EGTS_FIRMWARE_SERVICE,
|
||||||
|
timestamp,
|
||||||
|
1,
|
||||||
|
EGTS_SR_SERVICE_PART_DATA,
|
||||||
|
(tEgtsServiceSubRecordGeneratorEx) vEgtsPackFirmware,
|
||||||
|
&env->egtsFirmwareDataArgs
|
||||||
|
);
|
||||||
|
|
||||||
|
LoggerFormatInfo(LOGGER, LOG_SIGN, "Отправка пакета (id: %u) прошивки:", env->egtsIdentityAdditionalData.idPacked)
|
||||||
|
sendLogHex(env, egtsRaw, firmwarePackLength);
|
||||||
|
|
||||||
|
bool result = EgtsProcessingSend(env, egtsRaw, firmwarePackLength, EGTS_WAIT_1,
|
||||||
|
&env->egtsIdentityAdditionalData.isReceivedResponse, NULL);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
LoggerStrInfoStatic(LOGGER, LOG_SIGN, "Истекло время ожидания (EgtsProcessing_SendFirmware)");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//конец ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//начало ---------------------------------Команды------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Команды------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Команды------------------------------------------------------------------
|
||||||
|
uint16_t vEgtsPackCommandConfirmation(uint8_t *out, tEgtsCommandConfirmationDataArgs *args, uint16_t step) {
|
||||||
|
uint16_t offset = 0;
|
||||||
|
|
||||||
|
uint8_t flag = (args->CT << 0x4) | (args->CCT & 0xF);
|
||||||
|
ADD_TO_RESULT(flag, 1);
|
||||||
|
|
||||||
|
ADD_TO_RESULT(args->CID, 4);
|
||||||
|
ADD_TO_RESULT(args->SID, 4);
|
||||||
|
|
||||||
|
uint8_t hasFlags = (args->ACFE << 0x1) | (args->CHSFE & 0x1);
|
||||||
|
ADD_TO_RESULT(hasFlags, 1);
|
||||||
|
|
||||||
|
if (args->CHSFE) {
|
||||||
|
ADD_TO_RESULT(args->CHS, 1);
|
||||||
|
}
|
||||||
|
if (args->ACFE) {
|
||||||
|
ADD_TO_RESULT(args->ACL, 1);
|
||||||
|
ADD_TO_RESULT(args->AC, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((args->CT == CT_COMCONF) && (args->CCT == CC_OK)) {
|
||||||
|
ADD_TO_RESULT(args->CmdData.ADR, 2);
|
||||||
|
uint8_t flagComData = (args->CmdData.SZ << 0x4) | (args->CmdData.ACT & 0xF);
|
||||||
|
ADD_TO_RESULT(flagComData, 1);
|
||||||
|
ADD_TO_RESULT(args->CmdData.CCD, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args->CmdData.DT_SIZE) {
|
||||||
|
ADD_TO_RESULT_P(args->CmdData.DT, args->CmdData.DT_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendCommandConfirmation(tEgtsProcessing *env,
|
||||||
|
uint8_t cmdType,
|
||||||
|
uint8_t cmdConfirmationType,
|
||||||
|
uint32_t cmdId,
|
||||||
|
uint32_t srcId,
|
||||||
|
|
||||||
|
uint16_t address,
|
||||||
|
uint8_t size,
|
||||||
|
uint8_t act,
|
||||||
|
uint16_t cmd,
|
||||||
|
|
||||||
|
uint8_t *DT,
|
||||||
|
uint16_t DT_SIZE) {
|
||||||
|
uint8_t egtsRaw[256];
|
||||||
|
memset(egtsRaw, 0, sizeof(egtsRaw));
|
||||||
|
|
||||||
|
uint16_t commandConfirmationPackLength;
|
||||||
|
|
||||||
|
time_t timestamp;
|
||||||
|
RtcGet(env->gsm->Rtc, ×tamp);
|
||||||
|
|
||||||
|
bool authCodeExist = false;
|
||||||
|
bool charsetExist = false;
|
||||||
|
|
||||||
|
env->egtsCommandConfirmationDataArgs.CT = cmdType;
|
||||||
|
env->egtsCommandConfirmationDataArgs.CCT = cmdConfirmationType;
|
||||||
|
env->egtsCommandConfirmationDataArgs.CID = cmdId;
|
||||||
|
env->egtsCommandConfirmationDataArgs.SID = srcId;
|
||||||
|
env->egtsCommandConfirmationDataArgs.ACFE = authCodeExist;
|
||||||
|
env->egtsCommandConfirmationDataArgs.CHSFE = charsetExist;
|
||||||
|
|
||||||
|
env->egtsCommandConfirmationDataArgs.CmdData.ADR = address;
|
||||||
|
env->egtsCommandConfirmationDataArgs.CmdData.SZ = size;
|
||||||
|
env->egtsCommandConfirmationDataArgs.CmdData.ACT = act;
|
||||||
|
env->egtsCommandConfirmationDataArgs.CmdData.CCD = cmd;
|
||||||
|
|
||||||
|
env->egtsCommandConfirmationDataArgs.CmdData.DT_SIZE = DT_SIZE;
|
||||||
|
if (DT_SIZE == 0) {
|
||||||
|
env->egtsCommandConfirmationDataArgs.CmdData.DT = NULL;
|
||||||
|
} else {
|
||||||
|
env->egtsCommandConfirmationDataArgs.CmdData.DT = DT;
|
||||||
|
}
|
||||||
|
|
||||||
|
++env->egtsPacketId;
|
||||||
|
env->egtsCommandConfirmationAdditionalData.idPacked = env->egtsPacketId;
|
||||||
|
env->egtsCommandConfirmationAdditionalData.isReceivedResponse = false;
|
||||||
|
|
||||||
|
commandConfirmationPackLength = vEgtsPackTransportEx1(
|
||||||
|
0,
|
||||||
|
env->egtsCommandConfirmationAdditionalData.idPacked,
|
||||||
|
&env->counter,
|
||||||
|
egtsRaw,
|
||||||
|
|
||||||
|
// 0x44,
|
||||||
|
EGTS_SERVICE_FLAGS_COMMAND,
|
||||||
|
EGTS_PT_APPDATA,
|
||||||
|
EGTS_COMMANDS_SERVICE,
|
||||||
|
EGTS_COMMANDS_SERVICE,
|
||||||
|
timestamp,
|
||||||
|
1,
|
||||||
|
EGTS_SR_COMMAND_DATA,
|
||||||
|
(tEgtsServiceSubRecordGeneratorEx) vEgtsPackCommandConfirmation,
|
||||||
|
&env->egtsCommandConfirmationDataArgs
|
||||||
|
);
|
||||||
|
|
||||||
|
LoggerFormatInfo(LOGGER, LOG_SIGN, "Отправка пакета (id: %u) ответа на команду:",
|
||||||
|
env->egtsCommandConfirmationAdditionalData.idPacked)
|
||||||
|
sendLogHex(env, egtsRaw, commandConfirmationPackLength);
|
||||||
|
|
||||||
|
bool result = EgtsProcessingSend(env, egtsRaw, commandConfirmationPackLength, EGTS_WAIT_1,
|
||||||
|
&env->egtsCommandConfirmationAdditionalData.isReceivedResponse, NULL);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
LoggerStrInfoStatic(LOGGER, LOG_SIGN, "Истекло время ожидания (EgtsProcessing_SendCommandConfirmation)");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//конец ---------------------------------Команды------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Команды------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Команды------------------------------------------------------------------
|
||||||
|
|
@ -0,0 +1,145 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 12.04.2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SMART_COMPONENTS_EGTSOUTPUTCOMMANDS_H
|
||||||
|
#define SMART_COMPONENTS_EGTSOUTPUTCOMMANDS_H
|
||||||
|
|
||||||
|
#include "EgtsProcessing.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SENSORS_DIG_BodyCanBusStatus = 0 // Статус шины BodyCan
|
||||||
|
} eSensorsDig;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SENSORS_AN_Uptime = 0, // Время работы прибора в минутах, после последней перезагрузки/включения
|
||||||
|
SENSORS_AN_ExternalTemperature = 1, // Внешняя температура, С
|
||||||
|
SENSORS_AN_FuelLevel = 2, // Уровень топлива, л
|
||||||
|
SENSORS_AN_VehicleStatus = 3, // Статус автомобиля
|
||||||
|
SENSORS_AN_TripMileage = 4,// Пробег поездки
|
||||||
|
SENSORS_AN_AverageSpeed = 5,// Средняя скорость
|
||||||
|
SENSORS_AN_MinutesOfTravel = 6,// Минут поездки (сборная)
|
||||||
|
SENSORS_AN_EngineHours = 7,// Моточасы
|
||||||
|
SENSORS_AN_CarMileageAfterBCReset = 8,// Пробег авто после сброса БК
|
||||||
|
SENSORS_AN_AverageSpeedAfterBCReset = 9,// Средняя скорость после сброса БК
|
||||||
|
SENSORS_AN_TimeAfterBCReset = 10,// Время после сброса БК
|
||||||
|
SENSORS_AN_Voltage12Volts = 11, // Напряжение АКБ 12В
|
||||||
|
SENSORS_AN_NumberOfSatellites = 12,// Кол-во спутников
|
||||||
|
SENSORS_AN_RSSI = 13,// RSSI (GSM Network)
|
||||||
|
SENSORS_AN_NetworkType = 14,// Network type
|
||||||
|
SENSORS_AN_NumberAccelerations = 15, // Количество ускорений за поездку
|
||||||
|
SENSORS_AN_NumberBraking = 16, // Количество торможений за поездку
|
||||||
|
SENSORS_AN_NumberAccelerationsAfterReset = 17, // Количество ускорений после сброса
|
||||||
|
SENSORS_AN_NumberBrakingAfterReset = 18, // Количество торможений после сброса
|
||||||
|
SENSORS_AN_NumberLateralAccelerations = 19, // Количество боковых ускорений за поездку
|
||||||
|
SENSORS_AN_NumberLateralAccelerationsAfterReset = 20, // Количество боковых ускорений после сброса
|
||||||
|
SENSORS_AN_NumberSpeedViolations = 21, // Количество нарушений скорости за поездку
|
||||||
|
SENSORS_AN_NumberSpeedViolationsAfterReset = 22, // Количество нарушений скорости после сброса
|
||||||
|
SENSORS_AN_EngineOXTemperature = 23, // Температура ОХ двигателя
|
||||||
|
SENSORS_AN_EngineOilTemperature = 24 // Температура масла двигателя
|
||||||
|
} eSensorsAn;
|
||||||
|
|
||||||
|
/*
|
||||||
|
typedef enum {
|
||||||
|
SENSORS_DIG_VehicleAlarmSystemActivateSirenOnOff = 0, // Vehicle Alarm System activate siren
|
||||||
|
SENSORS_DIG_VehicleAlarmSystemActivateSirenGuarded = 1, // Состояние охранной сигнализации
|
||||||
|
|
||||||
|
SENSORS_DIG_BatteryChargeStatus = 2, // Статус заряда АКБ
|
||||||
|
|
||||||
|
SENSORS_DIG_PL_DoorStatus = 3, // Статус ПЛ двери
|
||||||
|
SENSORS_DIG_PP_DoorStatus = 4, // Статус ПП двери
|
||||||
|
SENSORS_DIG_ZL_DoorStatus = 5, // Статус ЗЛ двери
|
||||||
|
SENSORS_DIG_ZP_DoorStatus = 6, // Статус ЗП двери
|
||||||
|
SENSORS_DIG_HoodStatus = 7, // Статус капота
|
||||||
|
|
||||||
|
SENSORS_DIG_WasherFluidLevel = 8, // Уровень омывающей жидкости
|
||||||
|
SENSORS_DIG_CoolantLevel = 9, // Уровень охлаждающей жидкости
|
||||||
|
SENSORS_DIG_PL_Window = 10, // Окно ПЛ
|
||||||
|
SENSORS_DIG_PP_Window = 11, // Окно ПП
|
||||||
|
SENSORS_DIG_ZL_Window = 12, // Окно ЗЛ
|
||||||
|
SENSORS_DIG_ZP_Window = 13, // Окно ЗП
|
||||||
|
|
||||||
|
SENSORS_DIG_PL_TirePressureSensorBatteryStatus = 14, // Состояние батареи датчика давления шины ПЛ
|
||||||
|
SENSORS_DIG_PP_TirePressureSensorBatteryStatus = 15, // Состояние батареи датчика давления шины ПП
|
||||||
|
SENSORS_DIG_ZL_TirePressureSensorBatteryStatus = 16, // Состояние батареи датчика давления шины ЗЛ
|
||||||
|
SENSORS_DIG_ZP_TirePressureSensorBatteryStatus = 17, // Состояние батареи датчика давления шины ЗП
|
||||||
|
|
||||||
|
SENSORS_DIG_BodyCanBusStatus = 18, // Статус шины BodyCan
|
||||||
|
SENSORS_DIG_DiagCanBusStatus = 19, // Статус шины DiagCan
|
||||||
|
} eSensorsDig;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SENSORS_AN_BatteryVoltage = 0, // Напряжение АКБ 12В
|
||||||
|
SENSORS_AN_Uptime = 1, // Время работы прибора в минутах, после последней перезагрузки/включения
|
||||||
|
SENSORS_AN_TemperatureInsideCabinFront = 2, // Температура внутри салона (передняя), С
|
||||||
|
SENSORS_AN_TemperatureInsideCabinBack = 3, // Температура внутри салона (задняя), С
|
||||||
|
SENSORS_AN_BatterySoH = 4, // SoH АКБ, %
|
||||||
|
SENSORS_AN_BatterySoC = 5, // SoC АКБ, %
|
||||||
|
SENSORS_AN_ExternalTemperature = 6, // Внешняя температура, С
|
||||||
|
SENSORS_AN_FuelLevel = 7, // Уровень топлива, л
|
||||||
|
SENSORS_AN_VehicleStatus = 8, // Статус автомобиля
|
||||||
|
SENSORS_AN_DoorLockStatus = 9, // Статус замков дверей
|
||||||
|
SENSORS_AN_TrunkStatus = 10, // Статус багажника (задняя дверь)
|
||||||
|
SENSORS_AN_WedFuelConsumptionAfterBK = 11,// Ср. расход топлива после БК
|
||||||
|
SENSORS_AN_WedRipExpense = 12,// Ср. расход за поездку
|
||||||
|
SENSORS_AN_TripMileage = 13,// Пробег поездки
|
||||||
|
SENSORS_AN_AverageSpeed = 14,// Средняя скорость
|
||||||
|
SENSORS_AN_MinutesOfTravel = 15,// Минут поездки (сборная)
|
||||||
|
SENSORS_AN_AutomaticTransmissionLeverPosition = 16, // Положение рычага АКПП
|
||||||
|
SENSORS_AN_DaysUntilMintenance = 17, // Дней до ТО
|
||||||
|
SENSORS_AN_MileageBeforeMaintenance = 18, // Пробег до ТО
|
||||||
|
SENSORS_AN_OilLevelInEngine = 19,// Уровень масла в двигателе
|
||||||
|
SENSORS_AN_EngineOilLevelIndicator = 20, // Индикатор уровня масла двигателя
|
||||||
|
SENSORS_AN_TirePressurePL = 21,// давление в шине ПЛ
|
||||||
|
SENSORS_AN_TirePressurePP = 22,// давление в шине ПП
|
||||||
|
SENSORS_AN_TirePressureZL = 23,// давление в шине ЗЛ
|
||||||
|
SENSORS_AN_TirePressureZP = 24,// давление в шине ЗП
|
||||||
|
SENSORS_AN_PLBusStatus = 25,// Состояние шины ПЛ
|
||||||
|
SENSORS_AN_TireConditionPP = 26,// Состояние шины ПП
|
||||||
|
SENSORS_AN_TireConditionZL = 27,// Состояние шины ЗЛ
|
||||||
|
SENSORS_AN_TireConditionZP = 28,// Состояние шины ЗП
|
||||||
|
SENSORS_AN_TargetTempCCUdriver = 29,// Целевая темп. CCU водитель
|
||||||
|
SENSORS_AN_TargetTempCCUPP = 30,// Целевая темп. CCU П-П
|
||||||
|
SENSORS_AN_TargetTempCCUZLPP = 31,// Целевая темп. CCU ЗЛ-П
|
||||||
|
SENSORS_AN_TargetTempCCUZPPP = 32,// Целевая темп. CCU ЗП-П
|
||||||
|
SENSORS_AN_EngineHours = 33,// Моточасы
|
||||||
|
SENSORS_AN_CarMileageAfterBCReset = 34,// Пробег авто после сброса БК
|
||||||
|
SENSORS_AN_AverageSpeedAfterBCReset = 35,// Средняя скорость после сброса БК
|
||||||
|
SENSORS_AN_TimeAfterBCReset = 36,// Время после сброса БК
|
||||||
|
SENSORS_AN_MileageOnRemainingFuel = 37,// Пробег на остатке топлива
|
||||||
|
SENSORS_AN_SoHHVBattery = 38,// SoH HV АКБ, %
|
||||||
|
SENSORS_AN_SoCHVBattery = 39,// SoC HV АКБ, %
|
||||||
|
SENSORS_AN_DriverSeatOccupancy = 40,// Занятость кресла водителя
|
||||||
|
SENSORS_AN_ChairOccupancyPP = 41,// Занятость кресла ПП
|
||||||
|
SENSORS_AN_ChairOccupancyZL = 42,// Занятость кресла ЗЛ
|
||||||
|
SENSORS_AN_ChairOccupancyZP = 43,// Занятость кресла ЗП
|
||||||
|
SENSORS_AN_NumberOfSatellites = 44,// Кол-во спутников
|
||||||
|
SENSORS_AN_RSSI = 45,// RSSI (GSM Network)
|
||||||
|
SENSORS_AN_NetworkType = 46,// Network type
|
||||||
|
} eSensorsAn;
|
||||||
|
*/
|
||||||
|
bool EgtsProcessing_SendAuth(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendSensors(tEgtsProcessing *env, bool isStorage);
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendFirmware(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
void EgtsProcessing_Default_SendSensorsDig(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
void EgtsProcessing_Default_SendSensorsAn(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendCommandConfirmation(tEgtsProcessing *env,
|
||||||
|
uint8_t cmdType,
|
||||||
|
uint8_t cmdConfirmationType,
|
||||||
|
uint32_t cmdId,
|
||||||
|
uint32_t srcId,
|
||||||
|
|
||||||
|
uint16_t address,
|
||||||
|
uint8_t size,
|
||||||
|
uint8_t act,
|
||||||
|
uint16_t cmd,
|
||||||
|
|
||||||
|
uint8_t *DT,
|
||||||
|
uint16_t DT_SIZE);
|
||||||
|
|
||||||
|
#endif //SMART_COMPONENTS_EGTSOUTPUTCOMMANDS_H
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,450 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 21.05.23.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SMART_COMPONENTS_EGTSPROCESSING_H
|
||||||
|
#define SMART_COMPONENTS_EGTSPROCESSING_H
|
||||||
|
|
||||||
|
#include <RtcIO.h>
|
||||||
|
#include "SocketInterface.h"
|
||||||
|
#include "stdint.h"
|
||||||
|
#include "stddef.h"
|
||||||
|
#include "stdbool.h"
|
||||||
|
#include "CmsisRtosThreadUtils.h"
|
||||||
|
#include "egtsWorker.h"
|
||||||
|
#include "AtCmdBase.h"
|
||||||
|
#include "GsmWithGnss.h"
|
||||||
|
#include "LoggerToSerialPort.h"
|
||||||
|
#include "DeviceStorage.h"
|
||||||
|
#include "Nmea0183Parser.h"
|
||||||
|
#include "PointEvent.h"
|
||||||
|
#include "EraGlonassUveos_Dumper.h"
|
||||||
|
#include "EgtsTelesataTypes.h"
|
||||||
|
#include "GpioPinInterface.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define AURUS_CHECK_CONNECT 15000
|
||||||
|
#define AURUS_CHECK_NAV 5000
|
||||||
|
#define AURUS_CHECK_NETWORK_STATUS 30000
|
||||||
|
|
||||||
|
//начало ---------------------------------ЭБУ-------------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------ЭБУ-------------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------ЭБУ-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define EBU_STATE_UPDATE 0
|
||||||
|
#define EBU_STATE_INIT 0xFFFFFFFF
|
||||||
|
|
||||||
|
#define EBU_COUNT_ITEMS 38
|
||||||
|
#define EBU_COUNT_TEST_ITEMS 20
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
EBU_SDM = 0,
|
||||||
|
EBU_CGW = 1,
|
||||||
|
// Info-CAN
|
||||||
|
EBU_ERAG = 2,
|
||||||
|
EBU_SVU = 3,
|
||||||
|
EBU_IC = 4,
|
||||||
|
EBU_PACU = 5,
|
||||||
|
EBU_HUD = 6,
|
||||||
|
// Body-CAN
|
||||||
|
EBU_PTG = 7,
|
||||||
|
EBU_TMDTM = 8,
|
||||||
|
EBU_DMS = 9,
|
||||||
|
EBU_DMFL = 10,
|
||||||
|
EBU_DMRL = 11,
|
||||||
|
EBU_SMFL = 12,
|
||||||
|
EBU_SMRL = 13,
|
||||||
|
EBU_VAU = 14,
|
||||||
|
EBU_BCM = 15,
|
||||||
|
EBU_APU = 16,
|
||||||
|
EBU_CCU = 17,
|
||||||
|
EBU_DMFR = 18,
|
||||||
|
EBU_DMRR = 19,
|
||||||
|
EBU_SMFR = 20,
|
||||||
|
EBU_SMRR = 21,
|
||||||
|
// DA-CAN
|
||||||
|
EBU_CDA = 22,
|
||||||
|
EBU_FCU = 23,
|
||||||
|
//VMS-CAN
|
||||||
|
EBU_ACU = 24,
|
||||||
|
EBU_EPB = 25,
|
||||||
|
EBU_ESP = 26,
|
||||||
|
EBU_SCU = 27,
|
||||||
|
EBU_OCUFL = 28,
|
||||||
|
EBU_OCURL = 29,
|
||||||
|
EBU_OCUFR = 30,
|
||||||
|
EBU_OCURR = 31,
|
||||||
|
//PT-CAN
|
||||||
|
EBU_ATC = 32,
|
||||||
|
EBU_TCU = 33,
|
||||||
|
EBU_EMS = 34,
|
||||||
|
EBU_INC = 35,
|
||||||
|
EBU_DCDC_INC = 36,
|
||||||
|
EBU_BMS = 37
|
||||||
|
} eEgtsEbu;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
TS_STATUS_DEEP_SLEEP = 0,
|
||||||
|
TS_STATUS_SLEEP = 1,
|
||||||
|
TS_STATUS_STANDBY = 2,
|
||||||
|
TS_STATUS_IGNITION = 3,
|
||||||
|
TS_STATUS_DRIVE = 4,
|
||||||
|
TS_STATUS_REMOTE_START = 5,
|
||||||
|
TS_STATUS_SERVICE_MODE = 6,
|
||||||
|
TS_STATUS_PREHEATING = 8,
|
||||||
|
TS_STATUS_COMFORT = 9,
|
||||||
|
TS_STATUS_MULTIMEDIA = 10,
|
||||||
|
TS_STATUS_UNKNOWN = 15
|
||||||
|
} eEgtsTsStatus;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
eEgtsEbu ebu;
|
||||||
|
const char *ebuName;
|
||||||
|
} tEgtsEbuName;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CERTS_STATUS_LOAD = 0,
|
||||||
|
CERTS_STATUS_UNLOAD = 1,
|
||||||
|
CERTS_STATUS_ERROR = 2
|
||||||
|
} eEgtsCertsStatus;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
TEST_FIRMWARE = 0,
|
||||||
|
TEST_IGNITION = 1,
|
||||||
|
TEST_BAT_CONNECT = 2,
|
||||||
|
TEST_BAT_CHARGE = 3,
|
||||||
|
TEST_BAT_VOLTAGE = 4,
|
||||||
|
TEST_GNSS_ANT = 5,
|
||||||
|
TEST_SPEAKER_CONNECT = 6,
|
||||||
|
TEST_BIP_CONNECT = 7,
|
||||||
|
TEST_ACCEL = 8,
|
||||||
|
TEST_GSM = 9,
|
||||||
|
TEST_AUDIO_CODEC = 10,
|
||||||
|
TEST_VIN = 11,
|
||||||
|
TEST_ACCEL_CALIB = 12,
|
||||||
|
TEST_EOL = 13,
|
||||||
|
TEST_TELE = 14,
|
||||||
|
TEST_MODEM_SOFT_REV = 15,
|
||||||
|
TEST_CERT_REV = 16,
|
||||||
|
TEST_AUDIO_FILE = 17,
|
||||||
|
TEST_AMPLIFIER = 18,
|
||||||
|
TEST_SIM_ERA = 19,
|
||||||
|
TEST_SIM_COMERS = 20,
|
||||||
|
|
||||||
|
} eEgtsTestEbu;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
eEgtsTestEbu ebu;
|
||||||
|
const char *ebuTestName;
|
||||||
|
} tEgtsEbuTestName;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
eEgtsEbu ebu;
|
||||||
|
uint32_t timestamp;
|
||||||
|
} tEgtsEbuItemState;
|
||||||
|
|
||||||
|
#define VERSION_EBU 3
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t version;
|
||||||
|
tEgtsEbuItemState ebuItemState[EBU_COUNT_ITEMS];
|
||||||
|
uint16_t count;
|
||||||
|
uint32_t crc;
|
||||||
|
} tEgtsEbuState;
|
||||||
|
|
||||||
|
//начало ---------------------------------ЭБУ-------------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------ЭБУ-------------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------ЭБУ-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint16_t idPacked;
|
||||||
|
bool isReceivedResponse;
|
||||||
|
} tEgtsFirmwareAdditionalData;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t timestamp;
|
||||||
|
uint16_t idFirmware;
|
||||||
|
uint16_t partNumber;
|
||||||
|
uint16_t countNumber;
|
||||||
|
char module[10];
|
||||||
|
|
||||||
|
uint8_t bufEbu[1024];
|
||||||
|
uint16_t bufLen;
|
||||||
|
} tEgtsFirmwareDataArgs;
|
||||||
|
|
||||||
|
//конец ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//начало ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t *IMEI;
|
||||||
|
uint8_t IMEI_len;
|
||||||
|
uint32_t TerminalID;
|
||||||
|
} tEgtsIdentityDataArgs;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
} tEgtsIdentityModuleDataArgs;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint16_t idPacked;
|
||||||
|
bool isReceivedResponse;
|
||||||
|
bool isReceivedResultCode;
|
||||||
|
uint16_t resultCodeAuth;
|
||||||
|
} tEgtsIdentityAdditionaData;
|
||||||
|
|
||||||
|
//конец ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Аутентификация---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
//начало ---------------------------------Команды-----------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Команды-----------------------------------------------------------------------
|
||||||
|
//начало ---------------------------------Команды-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define COMMAND_QUEUE_SIZE 10
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint16_t ADR;
|
||||||
|
uint8_t SZ;
|
||||||
|
uint8_t ACT;
|
||||||
|
uint16_t CCD;
|
||||||
|
uint8_t *DT;
|
||||||
|
uint8_t DT_SIZE;
|
||||||
|
} tEgtsSrCmdConfirmationExComData;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t CT;
|
||||||
|
uint8_t CCT;
|
||||||
|
uint32_t CID;
|
||||||
|
uint32_t SID;
|
||||||
|
uint8_t ACFE;
|
||||||
|
uint8_t CHSFE;
|
||||||
|
uint8_t CHS;
|
||||||
|
uint8_t ACL;
|
||||||
|
uint16_t AC;
|
||||||
|
tEgtsSrCmdConfirmationExComData CmdData;
|
||||||
|
} tEgtsCommandConfirmationDataArgs;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
osMessageQueueId_t queue;
|
||||||
|
uint16_t idPacked;
|
||||||
|
bool isReceivedResponse;
|
||||||
|
} tEgtsCommandConfirmationAdditionalData;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t cmdType;
|
||||||
|
uint32_t cmdId;
|
||||||
|
uint8_t act;
|
||||||
|
uint16_t cmd;
|
||||||
|
uint8_t commandConfirmationType;
|
||||||
|
uint16_t dataSize;
|
||||||
|
uint8_t data[32];
|
||||||
|
} tEgtsCommand;
|
||||||
|
|
||||||
|
//конец ---------------------------------Команды------------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Команды------------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Команды------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool isEbuData;
|
||||||
|
uint16_t speed;
|
||||||
|
uint32_t dist;
|
||||||
|
} tEgtsCanEnv;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
EGTS_WAIT_0 = 0,
|
||||||
|
EGTS_WAIT_1 = 1,
|
||||||
|
EGTS_WAIT_2 = 2
|
||||||
|
} eEgtsSendWait;
|
||||||
|
|
||||||
|
typedef struct __attribute__ ((packed)) {
|
||||||
|
uint32_t SIZE_ROOT_CA;
|
||||||
|
uint32_t SIZE_CLIENT_KEY;
|
||||||
|
uint32_t SIZE_CLIENT_CRT;
|
||||||
|
uint32_t ENC;
|
||||||
|
} tEgtsCertInfo;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t timeOutCheckTeledata_IGN_TimeUpdate;
|
||||||
|
uint32_t timeOutCheckTeledata_EM_TimeUpdate;
|
||||||
|
|
||||||
|
uint32_t timeOutCheckTeledata_TimeSpeedUpdate;
|
||||||
|
|
||||||
|
bool isUpdatePoints;
|
||||||
|
|
||||||
|
bool isOneNav;
|
||||||
|
|
||||||
|
bool oneOn;
|
||||||
|
bool oneOff;
|
||||||
|
bool isBeginEndNav;
|
||||||
|
|
||||||
|
bool isEVENT_NAVIGATION_START_STOP;
|
||||||
|
bool isEVENT_ROTATE_ANGLE_LIMIT;
|
||||||
|
bool isEVENT_DISTANCE;
|
||||||
|
bool isEVENT_TIMEOUT_ENGINE_OFF;
|
||||||
|
bool isEVENT_TIMEOUT_ENGINE_ON;
|
||||||
|
bool isEVENT_EMERGENCY_TRACKING_TIMEOUT;
|
||||||
|
bool isEVENT_VEH_STATE_CHANGED;
|
||||||
|
bool isEVENT_MOVEMENT_ON;
|
||||||
|
bool isEVENT_MOVEMENT_OFF;
|
||||||
|
|
||||||
|
uint16_t beginAngle;
|
||||||
|
uint16_t beginDist;
|
||||||
|
|
||||||
|
} tEgtsPointEnv;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
|
||||||
|
tSerialPortIO *log;
|
||||||
|
volatile uint16_t egtsPacketId;
|
||||||
|
uint16_t counter;
|
||||||
|
uint8_t socketId;
|
||||||
|
EgtsWorkerEnvironment egtsEnv;
|
||||||
|
tLoggerToSerialPort *slog;
|
||||||
|
|
||||||
|
tGpioPin *ignition;
|
||||||
|
|
||||||
|
tEgtsPointEnv egtsPointEnv;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
uint32_t stopPositionLimitTime;
|
||||||
|
eCarPosition carPosition;
|
||||||
|
|
||||||
|
tNmeaRmc beginPosition;
|
||||||
|
tNmeaRmc movePosition;
|
||||||
|
|
||||||
|
bool isTimerMoving;
|
||||||
|
uint32_t timerMoving;
|
||||||
|
|
||||||
|
uint16_t dataSpeed[4];
|
||||||
|
uint16_t dataSpeedStep;
|
||||||
|
|
||||||
|
} carEventPosition;
|
||||||
|
|
||||||
|
// tStaticThreadBlock(1024) T_processing_Network;
|
||||||
|
tStaticThreadBlock(512) T_processing_input_command;
|
||||||
|
// tStaticThreadBlock(1024) T_processing_ebu;
|
||||||
|
tStaticThreadBlock(512) T_processing_event_teledata;
|
||||||
|
tStaticThreadBlock(512) T_processing_teledata;
|
||||||
|
tStaticThreadBlock(512) T_processing_main;
|
||||||
|
tStaticThreadBlock(512) T_listener;
|
||||||
|
|
||||||
|
tStaticThreadBlock(256) T_processing_urc;
|
||||||
|
|
||||||
|
// uint8_t wb[1024 * 10];
|
||||||
|
uint8_t wb[1024];
|
||||||
|
// uint8_t wb[1024 * 10];
|
||||||
|
|
||||||
|
|
||||||
|
char hexString[1024];
|
||||||
|
|
||||||
|
tLocationPointInDegDouble *bleLoc;
|
||||||
|
tGsmWithGnss *gsm;
|
||||||
|
tRtcIO *rtc;
|
||||||
|
|
||||||
|
// Теледанные
|
||||||
|
volatile tEgtsTeledataAdditionalData egtsTeledataAdditionalData;
|
||||||
|
tEgtsTeledata egtsTeledataUveos; // Состояние по запросу от УВЭОС
|
||||||
|
tEgtsTeledata egtsTeledataSent; // Последнее отправленное состояние
|
||||||
|
tEgtsTeledata egtsTeledataEdit; // Формируемое состояние
|
||||||
|
tEgtsTeledata egtsTeledataFix; // Фиксируемое состояние
|
||||||
|
|
||||||
|
// Прошивка модулей ЭБУ
|
||||||
|
volatile tEgtsFirmwareAdditionalData egtsFirmwareAdditionalData;
|
||||||
|
tEgtsFirmwareDataArgs egtsFirmwareDataArgs;
|
||||||
|
|
||||||
|
// tEgtsEbuState ebuState;
|
||||||
|
// bool ebuReady;
|
||||||
|
|
||||||
|
// Аутентификация
|
||||||
|
volatile tEgtsIdentityAdditionaData egtsIdentityAdditionalData;
|
||||||
|
tEgtsIdentityDataArgs egtsIdentityDataArgs;
|
||||||
|
tEgtsIdentityModuleDataArgs egtsModuleDataArgs;
|
||||||
|
|
||||||
|
// Команды
|
||||||
|
volatile tEgtsCommandConfirmationAdditionalData egtsCommandConfirmationAdditionalData;
|
||||||
|
tEgtsCommandConfirmationDataArgs egtsCommandConfirmationDataArgs;
|
||||||
|
tEgtsCommand egtsCommandSent; // Последняя извлеченная команда
|
||||||
|
|
||||||
|
tString32 srvAddr;
|
||||||
|
uint16_t srvPort;
|
||||||
|
|
||||||
|
tEgtsCanEnv egtsCanEnv;
|
||||||
|
|
||||||
|
uint16_t pPointsStorageSent;
|
||||||
|
|
||||||
|
bool isEnableTelematicaSendPoints;
|
||||||
|
uint32_t firstStartTimeUpdateEBU;
|
||||||
|
bool fl_firstStartTimeUpdateEBU;
|
||||||
|
/*
|
||||||
|
uint16_t firmwareBufCrc;
|
||||||
|
uint32_t firmwareOffset;
|
||||||
|
*/
|
||||||
|
tDeviceTeledataStorageData *deviceTeledataStorageData;
|
||||||
|
tDeviceStorage *store;
|
||||||
|
|
||||||
|
bool rebootFirmware;
|
||||||
|
|
||||||
|
bool isOneEBU;
|
||||||
|
|
||||||
|
/*
|
||||||
|
int32_t x1;
|
||||||
|
int32_t y1;
|
||||||
|
int32_t z1;
|
||||||
|
int32_t x2;
|
||||||
|
int32_t y2;
|
||||||
|
int32_t z2;
|
||||||
|
uint8_t count_shot;
|
||||||
|
uint8_t count_free;
|
||||||
|
uint32_t timeAccelUpdate;
|
||||||
|
*/
|
||||||
|
|
||||||
|
} tEgtsProcessing;
|
||||||
|
|
||||||
|
extern tEgtsProcessing egtsProcessing;
|
||||||
|
|
||||||
|
void EgtsProcessing_Init(
|
||||||
|
tEgtsProcessing *env,
|
||||||
|
tDeviceStorage *deviceStorage,
|
||||||
|
tGpioPin *ignition,
|
||||||
|
tGsmWithGnss *gsm,
|
||||||
|
tRtcIO *rtcIO,
|
||||||
|
tLoggerToSerialPort *slog
|
||||||
|
);
|
||||||
|
|
||||||
|
char *sendLogHex(tEgtsProcessing *env, uint8_t *data, size_t size);
|
||||||
|
|
||||||
|
void EgtsProcessing_Start(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
bool EgtsProcessingSend(tEgtsProcessing *env, uint8_t *egtsRaw, uint16_t egtsRawLength,
|
||||||
|
eEgtsSendWait wait, volatile bool *wait1, volatile bool *wait2);
|
||||||
|
|
||||||
|
void EgtsProcessingCloseConnection(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
bool isAuth(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
uint8_t findDelimiter(tString32 *address, char ch);
|
||||||
|
|
||||||
|
bool EgtsProcessing_SendResponse(tEgtsProcessing *env,
|
||||||
|
eEgtsServiceId sourceServiceId,
|
||||||
|
eEgtsServiceId recipientServiceId,
|
||||||
|
uint8_t srvFlags,
|
||||||
|
uint8_t rst,
|
||||||
|
uint16_t crn);
|
||||||
|
|
||||||
|
bool onOffTelematica(tEgtsProcessing *env, bool *oneOn, bool *oneOff, char *task);
|
||||||
|
|
||||||
|
void receivedUpdateFirmware(tEgtsProcessing *env);
|
||||||
|
|
||||||
|
#endif //SMART_COMPONENTS_EGTSPROCESSING_H
|
||||||
|
|
@ -0,0 +1,796 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 12.06.2024.
|
||||||
|
//
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "EgtsTeledataPoint.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "EgtsOutputCommands.h"
|
||||||
|
#include "EgtsTimestamp.h"
|
||||||
|
#include "math.h"
|
||||||
|
#include "Nmea0183Parser.h"
|
||||||
|
#include "Rtc.h"
|
||||||
|
#include "SystemDelayInterface.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define LOG_SIGN "EGTS TELE"
|
||||||
|
#define LOGGER &env->slog->logger
|
||||||
|
|
||||||
|
const tStringStatic textEgtsEventTetedata[] = {
|
||||||
|
|
||||||
|
StringStaticInit("EVENT_TIMEOUT_ENGINE_ON (0) - Наступление таймера при включенном зажигании\0"),
|
||||||
|
StringStaticInit("EVENT_DISTANCE (1 (Превышение заданного расстояния\0"),
|
||||||
|
StringStaticInit("EVENT_ROTATE_ANGLE_LIMIT (2) - Превышение заданного курсового угла\0"),
|
||||||
|
StringStaticInit("EVENT_RESPONSE (3 (Событие по запросу\0"),
|
||||||
|
StringStaticInit("EVENT_INPUT_CHANGED (4) - Изменение по аналоговым/дискретным входам\0"),
|
||||||
|
StringStaticInit("EVENT_TIMEOUT_ENGINE_OFF (5) - Наступление таймера при выключенном зажигании\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("EVENT_HI_SPEED_LIMIT (7) - Превышение одного из заданных порогов скорости\0"),
|
||||||
|
StringStaticInit("EVENT_CPU_RESTART (8) - Событие при старте прибора после перезагрузки по запросу\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("EVENT_TAMPER (10) - Срабатывание датчика вскрытия корпуса\0"),
|
||||||
|
StringStaticInit("EVENT_EXT_POWER_LOST (11) - Пропадание внешнего питания\0"),
|
||||||
|
StringStaticInit("EVENT_INT_BATTERY_LOW (12) - Низкий заряд встроенного АКБ\0"),
|
||||||
|
StringStaticInit("EVENT_ALARM_BUTTON (13) - Нажата кнопка тревоги\0"),
|
||||||
|
StringStaticInit("EVENT_USER_CALL (14) - Совершен голосовой вызов с устройства\0"),
|
||||||
|
StringStaticInit("EVENT_EMERGENCY_CALL (15) - Экстренный вызов\0"),
|
||||||
|
StringStaticInit("EVENT_DATA_FROM_EXT_SERVICE (16) - Данные с внешнего сервиса (в SDM не используется)\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("EVENT_INT_BATTERY_FAIL (19) - Неисправность внутреннего источника питания\0"),
|
||||||
|
StringStaticInit("EVENT_RAPID_ACCELERATION (20) - Резкий разгон\0"),
|
||||||
|
StringStaticInit("EVENT_RAPID_DECELERATION (21) - Резкое торможение\0"),
|
||||||
|
StringStaticInit("EVENT_NAVIGATION_FAIL (22) - Неисправность навигационного модуля\0"),
|
||||||
|
StringStaticInit("EVENT_ACC_FAIL (23) - Неисправность акселерометра\0"),
|
||||||
|
StringStaticInit("EVENT_GSM_ANTENNA_FAIL (24) - Неисправность антенны сотовой связи\0"),
|
||||||
|
StringStaticInit("EVENT_NAV_ANTENNA_FAIL (25) - Неисправность антенны ГНСС\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("EVENT_LOW_SPEED_LIMIT (27) - Снижение ниже одного из заданных порогов скорости\0"),
|
||||||
|
StringStaticInit("EVENT_MOVEMENT_WITH_ENGINE_OFF (28) - Передвижение при выключенном зажигании\0"),
|
||||||
|
StringStaticInit("EVENT_EMERGENCY_TRACKING_TIMEOUT (29) - Таймер посылки точек при экстренном слежении\0"),
|
||||||
|
StringStaticInit("EVENT_NAVIGATION_START_STOP (30) - Событие при начале/окончании навигационного решения\0"),
|
||||||
|
StringStaticInit("EVENT_NAVIGATION_UNSTABLE (31) - Нестабильная навигация\0"),
|
||||||
|
StringStaticInit("EVENT_TCP_CONNECTION_START (32) - Событие при установлении соединения с сервером\0"),
|
||||||
|
StringStaticInit("EVENT_GSM_UNSTABLE (33) - Нестабильная сотовая связь\0"),
|
||||||
|
StringStaticInit("EVENT_TCP_UNSTABLE (34) - Нестабильное соединение с сервером\0"),
|
||||||
|
StringStaticInit("EVENT_STATE_CHANGED (35) - Изменение состояния устройства\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("-\0"),
|
||||||
|
StringStaticInit("EVENT_FIRMWARE_UPDATE (62) - Событие при старте устройства после обновления ПО\0"),
|
||||||
|
StringStaticInit("EVENT_CHANGE_POS (63) - Событие по изменению местоположения\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"VENT_START_SL_MODE_LOW_LVB (64) - Событие по переходу в режим глубокий сон по низкому напряжению АКБ\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"VENT_START_SL_MODE_ENGINE_OFF (65) - Событие по переходу в режим глубокий сон через заданное время после выключения двигателя\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"EVENT_START_SL_MODE_GSM_OFF (66) - Событие по переходу в глубокий сон при отсутствии связи\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"VENT_EXIT_FROM_SL_MODE_CAN_ON (67) - Событие при выходе из глубокого сна по появлению активности в CAN-шине\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"VENT_EXIT_FROM_SL_MODE_HIGH_POW (68) - Событие при выходе из глубокого сна по появлению высокого напряжения на внешнем АКБ\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"VENT_EXIT_FROM_SL_MODE_TIMEOUT (69) - Событие при выходе из глубокого сна по заданному таймеру\0"),
|
||||||
|
StringStaticInit("EVENT_GSM_CERTS_UPLOAD (70) - Событие по факту загрузки набора сертификатов\0"),
|
||||||
|
StringStaticInit("EVENT_EGTS_CONFIG_UPDATED (71) - Событие по факту загрузки файла конфигурации\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"VENT_EXIT_FROM_SL_MODE_ERS (72) - Событие при выходе из глубокого сна для запуска двигателя по расписанию\0"),
|
||||||
|
StringStaticInit("EVENT_WATCHDOG_RESTART (73) - Событие при старте прибора после перезагрузки по вотчдогу\0"),
|
||||||
|
StringStaticInit("EVENT_VEH_STATE_CHANGED (74) - Изменение статуса автомобиля\0"),
|
||||||
|
StringStaticInit("EVENT_DOORS_LOCK_STATE_CHANGED (75) - Изменение статуса замков дверей\0"),
|
||||||
|
StringStaticInit(
|
||||||
|
"VENT_VAS_ALARM_STATE_CHANGED (76) - Изменения статуса тревоги системы контроля доступа (сигнализация)\0"),
|
||||||
|
StringStaticInit("EVENT_LVB_STATE_CHANGED (77) - Изменения статуса внешнего АКБ\0"),
|
||||||
|
StringStaticInit("EVENT_DOORS_STATE_CHANGED (78) - Изменение статуса дверей и капота\0"),
|
||||||
|
StringStaticInit("EVENT_CCU_STATE_CHANGED (79) - Изменение статуса климат-контроля\0"),
|
||||||
|
StringStaticInit("EVENT_TCU_STATE_CHANGED (80) - Изменение статуса КПП\0"),
|
||||||
|
StringStaticInit("EVENT_REFUELING (81) - Событие заправки топливного бака\0"),
|
||||||
|
StringStaticInit("EVENT_SEATS_STATE_CHANGED (82) - Событие изменения статуса кресел\0"),
|
||||||
|
StringStaticInit("EVENT_EXT_POWER_ON (83) - Событие при старте прибора после появления внешнего питания\0"),
|
||||||
|
StringStaticInit("EVENT_CAN_RECIVE_ON (84) - Событие при появлении активности CAN-шины\0"),
|
||||||
|
StringStaticInit("EVENT_CAN_RECIVE_OFF (85) - Событие при пропадании активности CAN-шины\0"),
|
||||||
|
StringStaticInit("EVENT_MOVEMENT_ON (86) - Событие при начале движения\0"),
|
||||||
|
StringStaticInit("EVENT_MOVEMENT_OFF (87) - Событие при окончании движения\0")
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void addTeledataQueue(tEgtsProcessing *env, tEgtsTeledata *egtsTeledata) {
|
||||||
|
|
||||||
|
if (!isAuth(env)) {
|
||||||
|
if ((egtsTeledata->egtsPosDataArgs.SRC != EVENT_EMERGENCY_CALL) &&
|
||||||
|
(egtsTeledata->egtsPosDataArgs.SRC != EVENT_USER_CALL) &&
|
||||||
|
(egtsTeledata->egtsPosDataArgs.SRC != EVENT_VEH_STATE_CHANGED) &&
|
||||||
|
(egtsTeledata->egtsPosDataArgs.SRC != EVENT_ROTATE_ANGLE_LIMIT) &&
|
||||||
|
(egtsTeledata->egtsPosDataArgs.SRC != EVENT_NAVIGATION_START_STOP)) {
|
||||||
|
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||||||
|
"Соединение с сервером не установлено. Точка не критичная. Сохранение в очередь отменено")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
osStatus_t status = osMessageQueuePut(env->egtsTeledataAdditionalData.queue, egtsTeledata, 0x0, 0U);
|
||||||
|
|
||||||
|
if (status != osOK) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка добавления в очередь addTeledataQueue (1)")
|
||||||
|
|
||||||
|
tEgtsTeledata egtsTeledataStore;
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < 100; ++i) {
|
||||||
|
if (extractTeledataQueue(env, &egtsTeledataStore, 1)) {
|
||||||
|
|
||||||
|
// bool result = dumpPointStorage(env, &egtsTeledataStore, false);
|
||||||
|
// if (!result)
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка при сохранении данных телематики в хранилище (1)")
|
||||||
|
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
status = osMessageQueuePut(env->egtsTeledataAdditionalData.queue, egtsTeledata, 0x0, 0U);
|
||||||
|
if (status != osOK) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка добавления в очередь addTeledataQueue (2)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void addTeledataQueueEvent(tEgtsProcessing *env, eEgtsEventTetedata egtsTeledataEvent) {
|
||||||
|
|
||||||
|
osStatus_t status = osMessageQueuePut(env->egtsTeledataAdditionalData.queueEvent, &egtsTeledataEvent, 0x0, 0U);
|
||||||
|
|
||||||
|
if (status != osOK) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка добавления в очередь addTeledataQueueEvent")
|
||||||
|
} else {
|
||||||
|
if (egtsTeledataEvent < 88) {
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[egtsTeledataEvent].data);
|
||||||
|
} else {
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло неизвестное событие: %u", egtsTeledataEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool extractTeledataQueue(tEgtsProcessing *env, tEgtsTeledata *egtsTeledata, uint32_t timeout) {
|
||||||
|
osStatus_t status = osMessageQueueGet(env->egtsTeledataAdditionalData.queue, egtsTeledata, 0, timeout);
|
||||||
|
|
||||||
|
if ((status != osOK) && (status != osErrorTimeout)) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка извлечения из очереди extractTeledataQueue")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == osOK) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool extractTeledataQueueEvent(tEgtsProcessing *env, eEgtsEventTetedata *egtsTeledataEvent, uint32_t timeout) {
|
||||||
|
osStatus_t status = osMessageQueueGet(env->egtsTeledataAdditionalData.queueEvent, egtsTeledataEvent, 0, timeout);
|
||||||
|
|
||||||
|
if ((status != osOK) && (status != osErrorTimeout)) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка извлечения из очереди extractTeledataQueueEvent")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == osOK) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static double nmeaLocationToDeg(double dec) {
|
||||||
|
double _dec = dec;
|
||||||
|
int deg = (int) (_dec / 100);
|
||||||
|
int min = (int) (_dec) - (deg * 100);
|
||||||
|
|
||||||
|
double sec = (double) (_dec - min - 100 * deg) * 60.0;
|
||||||
|
|
||||||
|
return deg + min / 60.0 + sec / 3600.0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
void addEventFromUveos(tEgtsProcessing *env, const eEgtsEventTetedata *event) {
|
||||||
|
time_t timestamp = 0;
|
||||||
|
|
||||||
|
RtcGet(env->gsm->Rtc, ×tamp);
|
||||||
|
|
||||||
|
tNmeaRmc nmeaRmc;
|
||||||
|
Gnss_GetFullNavData(env->gsm, &nmeaRmc);
|
||||||
|
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.NTM = Egts_EpochTimestampToEgtsTime(timestamp);
|
||||||
|
|
||||||
|
env->egtsTeledataAdditionalData.LAT = nmeaLocationToDeg(nmeaRmc.location.latitude);
|
||||||
|
env->egtsTeledataAdditionalData.LON = nmeaLocationToDeg(nmeaRmc.location.longitude);
|
||||||
|
|
||||||
|
double lat = (fabs(env->egtsTeledataAdditionalData.LAT) / 90) * 0xFFFFFFFF;
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.LAT = (uint32_t) lat;
|
||||||
|
|
||||||
|
double lon = (fabs(env->egtsTeledataAdditionalData.LON) / 180) * 0xFFFFFFFF;
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.LONG = (uint32_t) lon;
|
||||||
|
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.VLD = (nmeaRmc.status == 'A') ? 1
|
||||||
|
: 0; // Битовый флаг, признак «валидности» координатных данных
|
||||||
|
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.FIX = 0; // битовое поле, тип определения координат
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.CS = 0; // битовое поле, тип используемой системы
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.BB = 0; // битовый флаг, признак отправки данных из памяти («черный ящик»)
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.MV = env->carEventPosition.carPosition; // битовый флаг, признак движения
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.LAHS = (nmeaRmc.location.nsIndicator == 'S') ? 1
|
||||||
|
: 0; // битовый флаг определяет полушарие широты
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.LOHS = (nmeaRmc.location.ewIndicator == 'W') ? 1
|
||||||
|
: 0; // битовый флаг определяет полушарие долготы
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.FLG.ALTE = 1; // битовый флаг определяет наличие поля ALT в подзаписи
|
||||||
|
|
||||||
|
uint16_t speed = (uint16_t) (nmeaRmc.knotVelocity * 1.82 * 10);
|
||||||
|
uint16_t dir = (uint16_t) nmeaRmc.headingAngle;
|
||||||
|
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.SPD.SPD = speed &
|
||||||
|
0b0011111111111111; // скорость в км/ч с дискретностью 0,1 км/ч (используется 14 младших бит)
|
||||||
|
|
||||||
|
int32_t alt = GnssGgaGetAlt(env->gsm);
|
||||||
|
|
||||||
|
if (alt >= 0) {
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.SPD.ALTS = 0;
|
||||||
|
} else {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SPD.ALTS = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.SPD.DIRH = dir >> 8; // направление движения
|
||||||
|
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.DIR = dir; // направление движения
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.ODM = 0; // пройденное расстояние (пробег) в км, с дискретностью 0,1 км
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.DIN = 0; // битовые флаги, определяют состояние основных дискретных входов
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.ALT = abs(alt);
|
||||||
|
|
||||||
|
env->egtsTeledataUveos.egtsPosDataArgs.SRC = *event; // определяет источник (событие)
|
||||||
|
|
||||||
|
// Обновление датчиков
|
||||||
|
env->egtsTeledataUveos.egtsSensorsAnArgs = env->egtsTeledataEdit.egtsSensorsAnArgs;
|
||||||
|
env->egtsTeledataUveos.egtsSensorsDigArgs = env->egtsTeledataEdit.egtsSensorsDigArgs;
|
||||||
|
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Сохранение события от УВЭОС")
|
||||||
|
bool result = dumpPointStorage(env, &env->egtsTeledataUveos, true);
|
||||||
|
|
||||||
|
SystemDelayMs(1500);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
_Noreturn void EgtsProcessing_TransmitterTaskTeledata(tEgtsProcessing *env) {
|
||||||
|
bool oneOn = true;
|
||||||
|
bool oneOff = true;
|
||||||
|
|
||||||
|
env->pPointsStorageSent = 0;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
|
||||||
|
if (onOffTelematica(env, &oneOn, &oneOff, "Задача отправки"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//начало ---------------------------------Отправка теледанных---------------------------------------------------
|
||||||
|
//начало ---------------------------------Отправка теледанных---------------------------------------------------
|
||||||
|
//начало ---------------------------------Отправка теледанных---------------------------------------------------
|
||||||
|
|
||||||
|
if (!isAuth(env)) {
|
||||||
|
// LoggerInfoStatic(LOGGER, LOG_SIGN, "Ожидание аутентификации на сервере")
|
||||||
|
SystemDelayMs(1000);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
uint32_t countPoints = 1;
|
||||||
|
|
||||||
|
while (countPoints) {
|
||||||
|
|
||||||
|
getPointStorageCount(env, &countPoints);
|
||||||
|
|
||||||
|
if (loadPointStorage(env, &env->egtsTeledataSent)) {
|
||||||
|
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "В хранилище найдены точки: %d", countPoints)
|
||||||
|
|
||||||
|
if (env->egtsTeledataSent.egtsPosDataArgs.SRC < 88) {
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Событие в хранилище: %s",
|
||||||
|
textEgtsEventTetedata[env->egtsTeledataSent.egtsPosDataArgs.SRC].data);
|
||||||
|
} else {
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Неизвестное событие в хранилище: %d",
|
||||||
|
env->egtsTeledataSent.egtsPosDataArgs.SRC);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Передача теледанных
|
||||||
|
if (EgtsProcessing_SendSensors(env, true) == false) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Передача теледанных не удалась")
|
||||||
|
} else {
|
||||||
|
++env->pPointsStorageSent;
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Теледанные из хранилища отправлены");
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
env->pPointsStorageSent = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isAuth(env) || (EXT_ENV_TELE.store.runtime->EGTS_FLEET_ON == false)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if (!isAuth(env) || (env->store->runtime.EGTS_FLEET_ON == false)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (extractTeledataQueue(env, &env->egtsTeledataSent, 1)) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
// начало --- тест ---
|
||||||
|
for (int j = 0; j < 10000; ++j) {
|
||||||
|
|
||||||
|
for (int i = 0; i < 7000; ++i) {
|
||||||
|
if (dumpPointStorage(env, &env->egtsTeledataSent, false) == false) {
|
||||||
|
asm("nop");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Циклов: %d", j)
|
||||||
|
|
||||||
|
deleteFilePointStorage(env);
|
||||||
|
asm("nop");
|
||||||
|
}
|
||||||
|
// конец --- тест ---
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
if (env->egtsTeledataSent.egtsPosDataArgs.SRC < 88) {
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Отправка события: %s",
|
||||||
|
textEgtsEventTetedata[env->egtsTeledataSent.egtsPosDataArgs.SRC].data);
|
||||||
|
} else {
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Неизвестное событие: %u",
|
||||||
|
env->egtsTeledataSent.egtsPosDataArgs.SRC);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
if (!isAuth(env)) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Нет регистрации в сети или аутентификации на сервере")
|
||||||
|
bool result = dumpPointStorage(env, &env->egtsTeledataSent, false);
|
||||||
|
|
||||||
|
if (!result)
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка при сохранении данных телематики в хранилище")
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
// Передача теледанных
|
||||||
|
if (EgtsProcessing_SendSensors(env, false) == false) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Передача теледанных не удалась")
|
||||||
|
|
||||||
|
|
||||||
|
// bool result = dumpPointStorage(env, &env->egtsTeledataSent, false);
|
||||||
|
// if (!result)
|
||||||
|
// LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка при сохранении данных телематики в хранилище")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//конец ---------------------------------Отправка теледанных---------------------------------------------------
|
||||||
|
//конец ---------------------------------Отправка теледанных---------------------------------------------------
|
||||||
|
//конец ---------------------------------Отправка теледанных---------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t getTotalSpeed(tEgtsProcessing *env, tNmeaRmc *nmeaRmc) {
|
||||||
|
|
||||||
|
uint16_t totalSpeed = 0;
|
||||||
|
|
||||||
|
if (nmeaRmc->status == 'A')
|
||||||
|
totalSpeed = (uint16_t) (nmeaRmc->knotVelocity * 1.82);
|
||||||
|
|
||||||
|
if (env->egtsCanEnv.isEbuData) {
|
||||||
|
totalSpeed = env->egtsCanEnv.speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return totalSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t getTotalDist(tEgtsProcessing *env) {
|
||||||
|
|
||||||
|
return env->egtsCanEnv.dist;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_Noreturn void EgtsProcessing_EventTaskTeledata(tEgtsProcessing *env) {
|
||||||
|
|
||||||
|
bool isTimestamp = true;
|
||||||
|
time_t timestamp = 0;
|
||||||
|
|
||||||
|
uint32_t timeTeleOff = 0;
|
||||||
|
|
||||||
|
env->egtsPointEnv.isUpdatePoints = true;
|
||||||
|
|
||||||
|
env->egtsPointEnv.isOneNav = true;
|
||||||
|
|
||||||
|
env->egtsPointEnv.oneOn = true;
|
||||||
|
env->egtsPointEnv.oneOff = true;
|
||||||
|
env->egtsPointEnv.isBeginEndNav = false;
|
||||||
|
|
||||||
|
env->egtsPointEnv.beginAngle = 0;
|
||||||
|
env->egtsPointEnv.beginDist = 0;
|
||||||
|
|
||||||
|
uint32_t timeTimestamp;
|
||||||
|
|
||||||
|
eEgtsTsStatus egtsTsStatus = TS_STATUS_UNKNOWN;
|
||||||
|
|
||||||
|
bool isOneFixMove = true;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
|
||||||
|
if (onOffTelematica(env, &env->egtsPointEnv.oneOn, &env->egtsPointEnv.oneOff, "Задача формирования точек")) {
|
||||||
|
|
||||||
|
if (GpioPinGet(env->ignition)) {
|
||||||
|
env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate =
|
||||||
|
SystemGetMs() + env->deviceTeledataStorageData->telematica.EGTS_FLEET_IGN_ON_PERIOD * 1000;
|
||||||
|
} else {
|
||||||
|
env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate =
|
||||||
|
SystemGetMs() + env->deviceTeledataStorageData->telematica.EGTS_FLEET_IGN_OFF_PERIOD * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
RtcGet(env->gsm->Rtc, ×tamp);
|
||||||
|
|
||||||
|
if (timestamp < 1718359909) {
|
||||||
|
|
||||||
|
if (timeTimestamp < SystemGetMs()) {
|
||||||
|
timeTimestamp = SystemGetMs() + 10000;
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ожидание получения временной метки")
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemDelayMs(1000);
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
if (isTimestamp) {
|
||||||
|
isTimestamp = false;
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Временная метка получена")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!env->isEnableTelematicaSendPoints) {
|
||||||
|
if (timeTeleOff < SystemGetMs()) {
|
||||||
|
timeTeleOff = SystemGetMs() + 10000;
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ожидание разрешения телематики")
|
||||||
|
}
|
||||||
|
SystemDelayMs(1000);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
env->egtsPointEnv.isEVENT_NAVIGATION_START_STOP = false;
|
||||||
|
env->egtsPointEnv.isEVENT_ROTATE_ANGLE_LIMIT = false;
|
||||||
|
env->egtsPointEnv.isEVENT_DISTANCE = false;
|
||||||
|
env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_OFF = false;
|
||||||
|
env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_ON = false;
|
||||||
|
env->egtsPointEnv.isEVENT_EMERGENCY_TRACKING_TIMEOUT = false;
|
||||||
|
env->egtsPointEnv.isEVENT_VEH_STATE_CHANGED = false;
|
||||||
|
|
||||||
|
env->egtsPointEnv.isEVENT_MOVEMENT_ON = false;
|
||||||
|
env->egtsPointEnv.isEVENT_MOVEMENT_OFF = false;
|
||||||
|
|
||||||
|
|
||||||
|
eEgtsEventTetedata egtsEventTetedata = EVENT_INVALID_STATE;
|
||||||
|
|
||||||
|
if (extractTeledataQueueEvent(env, &egtsEventTetedata, 1)) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
tNmeaRmc nmeaRmc;
|
||||||
|
Gnss_GetFullNavData(env->gsm, &nmeaRmc);
|
||||||
|
|
||||||
|
|
||||||
|
//начало-----------------------------Отслеживание угла поворота и начала и окончания навигации------------------
|
||||||
|
//начало-----------------------------Отслеживание угла поворота и начала и окончания навигации------------------
|
||||||
|
//начало-----------------------------Отслеживание угла поворота и начала и окончания навигации------------------
|
||||||
|
|
||||||
|
uint16_t totalSpeed = getTotalSpeed(env, &nmeaRmc);
|
||||||
|
|
||||||
|
bool isBeginNav = false;
|
||||||
|
if ((env->egtsPointEnv.isBeginEndNav == false) && (nmeaRmc.status == 'A')) {
|
||||||
|
env->egtsPointEnv.isBeginEndNav = true;
|
||||||
|
isBeginNav = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isEndNav = false;
|
||||||
|
if ((env->egtsPointEnv.isBeginEndNav == true) && (nmeaRmc.status != 'A')) {
|
||||||
|
env->egtsPointEnv.isBeginEndNav = false;
|
||||||
|
isEndNav = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((isBeginNav) || (isEndNav)) {
|
||||||
|
env->egtsPointEnv.isEVENT_NAVIGATION_START_STOP = true;
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_NAVIGATION_START_STOP].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t moveAngle = (uint16_t) nmeaRmc.headingAngle;
|
||||||
|
uint16_t angle = abs(moveAngle - env->egtsPointEnv.beginAngle);
|
||||||
|
|
||||||
|
if (angle > env->deviceTeledataStorageData->telematica.EGTS_FLEET_COURSE_THRESHOLD) {
|
||||||
|
|
||||||
|
env->egtsPointEnv.beginAngle = moveAngle;
|
||||||
|
|
||||||
|
if (totalSpeed > env->deviceTeledataStorageData->telematica.EGTS_GNSS_COURSE_SPEED) {
|
||||||
|
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Скорость транспортного средства: %d", totalSpeed);
|
||||||
|
|
||||||
|
env->egtsPointEnv.isEVENT_ROTATE_ANGLE_LIMIT = true;
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_ROTATE_ANGLE_LIMIT].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t moveDist = getTotalDist(env);
|
||||||
|
uint16_t dist = abs(moveDist - env->egtsPointEnv.beginDist);
|
||||||
|
|
||||||
|
if (dist > env->deviceTeledataStorageData->telematica.EGTS_FLEET_DIST_THRESHOLD) {
|
||||||
|
env->egtsPointEnv.beginDist = moveDist;
|
||||||
|
|
||||||
|
env->egtsPointEnv.isEVENT_DISTANCE = true;
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_DISTANCE].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
//конец-----------------------------Отслеживание угла поворота и начала и окончания навигации-------------------
|
||||||
|
//конец-----------------------------Отслеживание угла поворота и начала и окончания навигации-------------------
|
||||||
|
//конец-----------------------------Отслеживание угла поворота и начала и окончания навигации-------------------
|
||||||
|
|
||||||
|
// Отслеживание изменение состояния
|
||||||
|
if (egtsTsStatus != env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_VehicleStatus].value) {
|
||||||
|
egtsTsStatus = env->egtsTeledataEdit.egtsSensorsAnArgs.sensorsAnState[SENSORS_AN_VehicleStatus].value;
|
||||||
|
env->egtsPointEnv.isEVENT_VEH_STATE_CHANGED = true;
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_VEH_STATE_CHANGED].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Сброс события таймера, если было другое событие
|
||||||
|
if (((egtsEventTetedata != EVENT_INVALID_STATE) && (egtsEventTetedata != EVENT_EMERGENCY_TRACKING_TIMEOUT)) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_NAVIGATION_START_STOP) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_ROTATE_ANGLE_LIMIT) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_DISTANCE)) {
|
||||||
|
|
||||||
|
if (GpioPinGet(env->ignition)) {
|
||||||
|
env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate =
|
||||||
|
SystemGetMs() + env->deviceTeledataStorageData->telematica.EGTS_FLEET_IGN_ON_PERIOD * 1000;
|
||||||
|
} else {
|
||||||
|
env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate =
|
||||||
|
SystemGetMs() + env->deviceTeledataStorageData->telematica.EGTS_FLEET_IGN_OFF_PERIOD * 1000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Отслеживание таймеров зажигания
|
||||||
|
if (GpioPinGet(env->ignition)) {
|
||||||
|
if (env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate < SystemGetMs()) {
|
||||||
|
env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate =
|
||||||
|
SystemGetMs() + env->deviceTeledataStorageData->telematica.EGTS_FLEET_IGN_ON_PERIOD * 1000;
|
||||||
|
env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_ON = true;
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_TIMEOUT_ENGINE_ON].data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate < SystemGetMs()) {
|
||||||
|
env->egtsPointEnv.timeOutCheckTeledata_IGN_TimeUpdate =
|
||||||
|
SystemGetMs() + env->deviceTeledataStorageData->telematica.EGTS_FLEET_IGN_OFF_PERIOD * 1000;
|
||||||
|
env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_OFF = true;
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_TIMEOUT_ENGINE_OFF].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Отслеживание движения
|
||||||
|
// CarEventPosition(env, &nmeaRmc, totalSpeed);
|
||||||
|
|
||||||
|
env->egtsPointEnv.isUpdatePoints = false;
|
||||||
|
|
||||||
|
// Если транспортное средство в движении
|
||||||
|
if (env->carEventPosition.carPosition == CAR_POSITION_MOVE) {
|
||||||
|
if (isOneFixMove) {
|
||||||
|
isOneFixMove = false;
|
||||||
|
env->egtsPointEnv.isEVENT_MOVEMENT_ON = true;
|
||||||
|
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_MOVEMENT_ON].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
env->egtsPointEnv.isUpdatePoints = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Отслеживание таймера экстренного слежения
|
||||||
|
if ((env->carEventPosition.carPosition == CAR_POSITION_MOVE) &&
|
||||||
|
(env->deviceTeledataStorageData->telematica.EGTS_FLEET_EM_MON_PERIOD != 0) &&
|
||||||
|
(env->egtsPointEnv.timeOutCheckTeledata_EM_TimeUpdate < SystemGetMs())) {
|
||||||
|
|
||||||
|
env->egtsPointEnv.timeOutCheckTeledata_EM_TimeUpdate =
|
||||||
|
SystemGetMs() + env->deviceTeledataStorageData->telematica.EGTS_FLEET_EM_MON_PERIOD * 1000;
|
||||||
|
env->egtsPointEnv.isEVENT_EMERGENCY_TRACKING_TIMEOUT = true;
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_EMERGENCY_TRACKING_TIMEOUT].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Если транспортное средство не в движении
|
||||||
|
if (env->carEventPosition.carPosition == CAR_POSITION_FIX) {
|
||||||
|
isOneFixMove = true;
|
||||||
|
env->egtsPointEnv.isEVENT_MOVEMENT_OFF = true;
|
||||||
|
env->carEventPosition.carPosition = CAR_POSITION_UNDEFINED;
|
||||||
|
|
||||||
|
LoggerStrFormatInfo(LOGGER, LOG_SIGN, "Возникло событие: %s",
|
||||||
|
textEgtsEventTetedata[EVENT_MOVEMENT_OFF].data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ((egtsEventTetedata != EVENT_INVALID_STATE) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_NAVIGATION_START_STOP) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_ROTATE_ANGLE_LIMIT) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_DISTANCE) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_OFF) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_ON) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_EMERGENCY_TRACKING_TIMEOUT) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_VEH_STATE_CHANGED) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_MOVEMENT_ON) ||
|
||||||
|
(env->egtsPointEnv.isEVENT_MOVEMENT_OFF)
|
||||||
|
) {
|
||||||
|
|
||||||
|
// Первое получение навигации
|
||||||
|
if (env->egtsPointEnv.isEVENT_NAVIGATION_START_STOP) {
|
||||||
|
env->egtsPointEnv.isUpdatePoints = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isUpdatePoints) {
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.NTM = Egts_EpochTimestampToEgtsTime(timestamp);
|
||||||
|
|
||||||
|
env->egtsTeledataAdditionalData.LAT = nmeaLocationToDeg(nmeaRmc.location.latitude);
|
||||||
|
env->egtsTeledataAdditionalData.LON = nmeaLocationToDeg(nmeaRmc.location.longitude);
|
||||||
|
|
||||||
|
double lat = (fabs(env->egtsTeledataAdditionalData.LAT) / 90) * 0xFFFFFFFF;
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.LAT = (uint32_t) lat;
|
||||||
|
|
||||||
|
double lon = (fabs(env->egtsTeledataAdditionalData.LON) / 180) * 0xFFFFFFFF;
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.LONG = (uint32_t) lon;
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.VLD = (nmeaRmc.status == 'A') ? 1
|
||||||
|
: 0; // Битовый флаг, признак «валидности» координатных данных
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.FIX = 0; // битовое поле, тип определения координат
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.CS = 0; // битовое поле, тип используемой системы
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.BB = 0; // битовый флаг, признак отправки данных из памяти («черный ящик»)
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.MV = env->carEventPosition.carPosition; // битовый флаг, признак движения
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.LAHS = (nmeaRmc.location.nsIndicator == 'S') ? 1
|
||||||
|
: 0; // битовый флаг определяет полушарие широты
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.LOHS = (nmeaRmc.location.ewIndicator == 'W') ? 1
|
||||||
|
: 0; // битовый флаг определяет полушарие долготы
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.FLG.ALTE = 1; // битовый флаг определяет наличие поля ALT в подзаписи
|
||||||
|
|
||||||
|
uint16_t speed = (uint16_t) (nmeaRmc.knotVelocity * 1.82 * 10);
|
||||||
|
uint16_t dir = (uint16_t) nmeaRmc.headingAngle;
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SPD.SPD = speed &
|
||||||
|
0b0011111111111111; // скорость в км/ч с дискретностью 0,1 км/ч (используется 14 младших бит)
|
||||||
|
|
||||||
|
// int32_t alt = GnssGgaGetAlt(env->gsm);
|
||||||
|
int32_t alt = 0;
|
||||||
|
|
||||||
|
if (alt >= 0) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SPD.ALTS = 0;
|
||||||
|
} else {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SPD.ALTS = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SPD.DIRH = dir >> 8; // направление движения
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.DIR = dir; // направление движения
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.ODM = 0; // пройденное расстояние (пробег) в км, с дискретностью 0,1 км
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.DIN = 0; // битовые флаги, определяют состояние основных дискретных входов
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.ALT = abs(alt);
|
||||||
|
|
||||||
|
// Обновление фиксированное позиции
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Обновление фиксированной позиции")
|
||||||
|
env->egtsTeledataFix = env->egtsTeledataEdit;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Фиксированные координаты. Движение не зафиксировано")
|
||||||
|
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs = env->egtsTeledataFix.egtsPosDataArgs;
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.NTM = Egts_EpochTimestampToEgtsTime(timestamp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (egtsEventTetedata != EVENT_INVALID_STATE) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = egtsEventTetedata; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_NAVIGATION_START_STOP) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_NAVIGATION_START_STOP; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_ROTATE_ANGLE_LIMIT) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_ROTATE_ANGLE_LIMIT; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_DISTANCE) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_DISTANCE; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_OFF) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_TIMEOUT_ENGINE_OFF; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_TIMEOUT_ENGINE_ON) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_TIMEOUT_ENGINE_ON; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_MOVEMENT_ON) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_MOVEMENT_ON; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_EMERGENCY_TRACKING_TIMEOUT) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_EMERGENCY_TRACKING_TIMEOUT; // определяет источник (событие)
|
||||||
|
|
||||||
|
if (nmeaRmc.status != 'A') {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN,
|
||||||
|
"Посылка точек при экстренном слежении не требуется, навигация не валидна")
|
||||||
|
} else {
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_MOVEMENT_OFF) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_MOVEMENT_OFF; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->egtsPointEnv.isEVENT_VEH_STATE_CHANGED) {
|
||||||
|
env->egtsTeledataEdit.egtsPosDataArgs.SRC = EVENT_VEH_STATE_CHANGED; // определяет источник (событие)
|
||||||
|
addTeledataQueue(env, &env->egtsTeledataEdit);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 12.06.2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SMART_COMPONENTS_EGTSTELEDATAPOINT_H
|
||||||
|
#define SMART_COMPONENTS_EGTSTELEDATAPOINT_H
|
||||||
|
#include "EgtsProcessing.h"
|
||||||
|
|
||||||
|
_Noreturn void EgtsProcessing_TransmitterTaskTeledata(tEgtsProcessing *env);
|
||||||
|
_Noreturn void EgtsProcessing_EventTaskTeledata(tEgtsProcessing *env);
|
||||||
|
void addTeledataQueue(tEgtsProcessing *env, tEgtsTeledata *egtsTeledata);
|
||||||
|
void addTeledataQueueEvent(tEgtsProcessing *env, eEgtsEventTetedata egtsTeledataEvent);
|
||||||
|
bool extractTeledataQueue(tEgtsProcessing *env, tEgtsTeledata *egtsTeledata, uint32_t timeout);
|
||||||
|
void addEventFromUveos(tEgtsProcessing *env, const eEgtsEventTetedata *event);
|
||||||
|
|
||||||
|
#endif //SMART_COMPONENTS_EGTSTELEDATAPOINT_H
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 03.09.2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SMART_COMPONENTS_TELEMATICA_V2_EGTSTELESATATYPES_H
|
||||||
|
#define SMART_COMPONENTS_TELEMATICA_V2_EGTSTELESATATYPES_H
|
||||||
|
|
||||||
|
#include "stdint.h"
|
||||||
|
#include "CmsisRtosThreadUtils.h"
|
||||||
|
#include "stdbool.h"
|
||||||
|
|
||||||
|
#define TELEDATA_QUEUE_SIZE 20
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CAR_POSITION_UNDEFINED = 0,
|
||||||
|
CAR_POSITION_FIX = 1,
|
||||||
|
CAR_POSITION_MOVE = 2
|
||||||
|
} eCarPosition;
|
||||||
|
|
||||||
|
typedef struct __attribute__ ((packed)) {
|
||||||
|
uint16_t SPD: 14;
|
||||||
|
uint8_t ALTS: 1;
|
||||||
|
uint8_t DIRH: 1;
|
||||||
|
} tSPD;
|
||||||
|
|
||||||
|
typedef struct __attribute__ ((packed)) {
|
||||||
|
uint8_t VLD: 1;
|
||||||
|
uint8_t CS: 1;
|
||||||
|
uint8_t FIX: 1;
|
||||||
|
uint8_t BB: 1;
|
||||||
|
uint8_t MV: 1;
|
||||||
|
uint8_t LAHS: 1;
|
||||||
|
uint8_t LOHS: 1;
|
||||||
|
uint8_t ALTE: 1;
|
||||||
|
} tFLG;
|
||||||
|
|
||||||
|
typedef struct __attribute__ ((packed)) {
|
||||||
|
uint8_t state: 4;
|
||||||
|
uint16_t number: 12;
|
||||||
|
} tEgtsSensorsDigState;
|
||||||
|
|
||||||
|
typedef struct __attribute__ ((packed)) {
|
||||||
|
uint8_t number;
|
||||||
|
uint32_t value: 24;
|
||||||
|
} tEgtsSensorsAnState;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
tEgtsSensorsDigState sensorsDigState[1];
|
||||||
|
// tEgtsSensorsDigState sensorsDigState[20];
|
||||||
|
} tEgtsSensorsDigDataArgs;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
tEgtsSensorsAnState sensorsAnState[1];
|
||||||
|
// tEgtsSensorsAnState sensorsAnState[25];
|
||||||
|
// tEgtsSensorsAnState sensorsAnState[47];
|
||||||
|
} tEgtsSensorsAnDataArgs;
|
||||||
|
|
||||||
|
typedef struct __attribute__ ((packed)) {
|
||||||
|
uint32_t NTM;
|
||||||
|
uint32_t LAT;
|
||||||
|
uint32_t LONG;
|
||||||
|
tFLG FLG;
|
||||||
|
tSPD SPD;
|
||||||
|
uint8_t DIR;
|
||||||
|
uint32_t ODM;
|
||||||
|
uint8_t DIN;
|
||||||
|
uint32_t ALT;
|
||||||
|
uint16_t SRC;
|
||||||
|
} tEgtsPositionDataArgs;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
osMessageQueueId_t queue;
|
||||||
|
osMessageQueueId_t queueEvent;
|
||||||
|
uint16_t idPacked;
|
||||||
|
bool isReceivedResponse;
|
||||||
|
double LAT;
|
||||||
|
double LON;
|
||||||
|
} tEgtsTeledataAdditionalData;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
tEgtsPositionDataArgs egtsPosDataArgs;
|
||||||
|
tEgtsSensorsDigDataArgs egtsSensorsDigArgs;
|
||||||
|
tEgtsSensorsAnDataArgs egtsSensorsAnArgs;
|
||||||
|
uint32_t isValid;
|
||||||
|
uint32_t crc;
|
||||||
|
} tEgtsStorageTeledata;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
tEgtsPositionDataArgs egtsPosDataArgs;
|
||||||
|
tEgtsSensorsDigDataArgs egtsSensorsDigArgs;
|
||||||
|
tEgtsSensorsAnDataArgs egtsSensorsAnArgs;
|
||||||
|
} tEgtsTeledata;
|
||||||
|
|
||||||
|
//конец ---------------------------------Теледанные---------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Теледанные---------------------------------------------------------------------
|
||||||
|
//конец ---------------------------------Теледанные---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#endif //SMART_COMPONENTS_TELEMATICA_V2_EGTSTELESATATYPES_H
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
//
|
||||||
|
// Created by cfif on 03.08.2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SMART_COMPONENTS_TELEMATICA_POINTEVENT_H
|
||||||
|
#define SMART_COMPONENTS_TELEMATICA_POINTEVENT_H
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
EVENT_TIMEOUT_ENGINE_ON = 0,
|
||||||
|
EVENT_DISTANCE = 1,
|
||||||
|
EVENT_ROTATE_ANGLE_LIMIT = 2,
|
||||||
|
EVENT_RESPONSE = 3,
|
||||||
|
EVENT_INPUT_CHANGED = 4,
|
||||||
|
EVENT_TIMEOUT_ENGINE_OFF = 5,
|
||||||
|
EVENT_HI_SPEED_LIMIT = 7,
|
||||||
|
EVENT_CPU_RESTART = 8,
|
||||||
|
EVENT_TAMPER = 10,
|
||||||
|
EVENT_EXT_POWER_LOST = 11,
|
||||||
|
EVENT_INT_BATTERY_LOW = 12,
|
||||||
|
EVENT_ALARM_BUTTON = 13,
|
||||||
|
EVENT_USER_CALL = 14,
|
||||||
|
EVENT_EMERGENCY_CALL = 15,
|
||||||
|
EVENT_DATA_FROM_EXT_SERVICE = 16,
|
||||||
|
EVENT_INT_BATTERY_FAIL = 17,
|
||||||
|
EVENT_RAPID_ACCELERATION = 20,
|
||||||
|
EVENT_RAPID_DECELERATION = 21,
|
||||||
|
EVENT_NAVIGATION_FAIL = 22,
|
||||||
|
EVENT_ACC_FAIL = 23,
|
||||||
|
EVENT_GSM_ANTENNA_FAIL = 24,
|
||||||
|
EVENT_NAV_ANTENNA_FAIL = 25,
|
||||||
|
EVENT_LOW_SPEED_LIMIT = 26,
|
||||||
|
EVENT_MOVEMENT_WITH_ENGINE_OFF = 28,
|
||||||
|
EVENT_EMERGENCY_TRACKING_TIMEOUT = 29,
|
||||||
|
EVENT_NAVIGATION_START_STOP = 30,
|
||||||
|
EVENT_NAVIGATION_UNSTABLE = 31,
|
||||||
|
EVENT_TCP_CONNECTION_START = 32,
|
||||||
|
EVENT_GSM_UNSTABLE = 33,
|
||||||
|
EVENT_TCP_UNSTABLE = 34,
|
||||||
|
EVENT_STATE_CHANGED = 35,
|
||||||
|
EVENT_FIRMWARE_UPDATE = 62,
|
||||||
|
EVENT_CHANGE_POS = 63,
|
||||||
|
EVENT_START_SL_MODE_LOW_LVB = 64,
|
||||||
|
EVENT_START_SL_MODE_ENGINE_OFF = 65,
|
||||||
|
EVENT_START_SL_MODE_GSM_OFF = 66,
|
||||||
|
EVENT_EXIT_FROM_SL_MODE_CAN_ON = 67,
|
||||||
|
EVENT_EXIT_FROM_SL_MODE_HIGH_POW = 68,
|
||||||
|
EVENT_EXIT_FROM_SL_MODE_TIMEOUT = 69,
|
||||||
|
EVENT_GSM_CERTS_UPLOAD = 70,
|
||||||
|
EVENT_EGTS_CONFIG_UPDATED = 71,
|
||||||
|
EVENT_EXIT_FROM_SL_MODE_ERS = 72,
|
||||||
|
EVENT_WATCHDOG_RESTART = 73,
|
||||||
|
EVENT_VEH_STATE_CHANGED = 74,
|
||||||
|
EVENT_DOORS_LOCK_STATE_CHANGED = 75,
|
||||||
|
EVENT_VAS_ALARM_STATE_CHANGED = 76,
|
||||||
|
EVENT_LVB_STATE_CHANGED = 77,
|
||||||
|
EVENT_DOORS_STATE_CHANGED = 78,
|
||||||
|
EVENT_CCU_STATE_CHANGED = 79,
|
||||||
|
EVENT_TCU_STATE_CHANGED = 80,
|
||||||
|
EVENT_REFUELING = 81,
|
||||||
|
EVENT_SEATS_STATE_CHANGED = 82,
|
||||||
|
EVENT_EXT_POWER_ON = 83,
|
||||||
|
EVENT_CAN_RECIVE_ON = 84,
|
||||||
|
EVENT_CAN_RECIVE_OFF = 85,
|
||||||
|
EVENT_MOVEMENT_ON = 86,
|
||||||
|
EVENT_MOVEMENT_OFF = 87,
|
||||||
|
|
||||||
|
EVENT_INVALID_STATE = 255
|
||||||
|
|
||||||
|
} eEgtsEventTetedata;
|
||||||
|
|
||||||
|
#endif //SMART_COMPONENTS_TELEMATICA_POINTEVENT_H
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"dep": [
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
|
||||||
|
"repo": "Legacy_EgtsEncoderDecoder"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cmake": {
|
||||||
|
"inc_dirs": [
|
||||||
|
"./"
|
||||||
|
],
|
||||||
|
"srcs": [
|
||||||
|
"./**.c"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue