358 lines
10 KiB
C
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
|