// // Created by cfif on 21.05.23. // #ifndef SMART_COMPONENTS_EGTSPROCESSING_H #define SMART_COMPONENTS_EGTSPROCESSING_H #include #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