SMART_COMPONENTS_Egts/EgtsProcessing.h

358 lines
10 KiB
C

//
// 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 "Certs.h"
#include "LittleFsInterface.h"
#include "DeviceStorage.h"
#include "Nmea0183Parser.h"
#include "DataStorage.h"
#include "PointEvent.h"
#include "CanSerialPortFrameTP.h"
#include "CanMain.h"
#include "GetGsmFirmware.h"
#include "EraGlonassUveos_Dumper.h"
#include "ext_telematica.h"
#include "EgtsTelesataTypes.h"
#include "SerialPortCanComInt.h"
#define AURUS_CHECK_CONNECT 15000
#define AURUS_CHECK_NAV 5000
#define AURUS_CHECK_NETWORK_STATUS 30000
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
//начало ---------------------------------Прошивка ЭБУ------------------------------------------------------------------
typedef struct {
uint16_t idPacked;
bool isReceivedResponse;
} tEgtsFirmwareAdditionalData;
typedef struct {
uint32_t timestamp;
uint16_t idFirmware;
uint16_t partNumber;
uint16_t countNumber;
char module[20];
uint8_t bufEbu[2048];
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[512];
} 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;
tLittleFileFs *fs;
tEgtsPointEnv egtsPointEnv;
tCanMain CanMain;
tCanMainAdditional CanMainAdditional;
tSerialPortCanComInt tSerialPortCanComInt;
tSerialPortIO serialPortCanComIntIO;
tCanMainMute CanMainMute;
tCanMainTest CanMainTest;
struct {
uint32_t stopPositionLimitTime;
volatile 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(1024) T_processing_input_command;
tStaticThreadBlock(1024) T_processing_ebu;
tStaticThreadBlock(1024) T_processing_event_teledata;
tStaticThreadBlock(2048) T_processing_teledata;
tStaticThreadBlock(2048) T_processing_main;
tStaticThreadBlock(2048) T_listener;
// uint8_t wb[1024 * 10];
uint8_t wb[1024 * 32];
// uint8_t wb[1024 * 10];
char hexString[2048 + 256];
uint8_t egtsRawFirmware[1024 + 128];
tLocationPointInDegDouble *bleLoc;
tGsmWithGnss *gsm;
tRtcIO *rtc;
// Теледанные
volatile tEgtsTeledataAdditionalData egtsTeledataAdditionalData;
tEgtsTeledata egtsTeledataUveos; // Состояние по запросу от УВЭОС
tEgtsTeledata egtsTeledataSent; // Последнее отправленное состояние
tEgtsTeledata egtsTeledataEdit; // Формируемое состояние
tEgtsTeledata egtsTeledataFix; // Фиксируемое состояние
// Прошивка модулей ЭБУ
volatile tEgtsFirmwareAdditionalData egtsFirmwareAdditionalData;
tEgtsFirmwareDataArgs egtsFirmwareDataArgs;
SystemMutexCmsis accessEbu;
tEgtsEbuState ebuState;
bool ebuReady;
// Аутентификация
volatile tEgtsIdentityAdditionaData egtsIdentityAdditionalData;
tEgtsIdentityDataArgs egtsIdentityDataArgs;
tEgtsIdentityModuleDataArgs egtsModuleDataArgs;
// Команды
volatile tEgtsCommandConfirmationAdditionalData egtsCommandConfirmationAdditionalData;
tEgtsCommandConfirmationDataArgs egtsCommandConfirmationDataArgs;
tEgtsCommand egtsCommandSent; // Последняя извлеченная команда
tString32 srvAddr;
uint16_t srvPort;
eAtGsmSimComA7600_SSL_Type clientType;
tDeviceTeledataStorageData *deviceTeledataStorageData;
tEgtsCanEnv egtsCanEnv;
uint16_t pPointsStorageSent;
bool isEnableTelematicaSendPoints;
uint32_t firstStartTimeUpdateEBU;
bool fl_firstStartTimeUpdateEBU;
uint16_t firmwareBufCrc;
uint32_t firmwareOffset;
bool rebootFirmware;
int32_t x1;
int32_t y1;
int32_t z1;
int32_t x2;
int32_t y2;
int32_t z2;
uint8_t count_shot;
uint16_t count_free;
uint32_t timeAccelUpdate;
uint32_t timeAccelUpdateUds;
uint32_t timeNavUpdate;
uint32_t timeFact;
tGsmFirmware gsmFirmware;
// Буфер для хранений порции
uint8_t firmware_buf[2048];
tFirmwareStats firmwareStats;
tCerts certs;
volatile tRawAccel rawAccel;
bool isOneEBU;
uint32_t TelematicaServerNotActiveWaitTime;
SystemMutexCmsis txCanAccessQueue;
uint16_t totalSpeed;
uint32_t SENSORS_AN_MinutesOfTravel_gl;
uint8_t numberServer;
uint32_t timerUpdate;
bool isTimerUpdate;
} tEgtsProcessing;
extern tEgtsProcessing egtsProcessing;
void EgtsProcessing_Init(
tEgtsProcessing *env,
tGsmWithGnss *gsm,
tRtcIO *rtcIO,
tLittleFileFs *fs,
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