// // Created by zemon on 05.01.23. // #ifndef UVEOS_ON_NATION_EGTSWORKER_H #define UVEOS_ON_NATION_EGTSWORKER_H #include "stdint.h" #include "stdbool.h" #include "stddef.h" #include "stdbool.h" #include "egts.h" #include "BaseTypes/Strings.h" #define EGTS_WORKING_BUFFER_LENGTH 512 //#define EGTS_SR_COMMAND_DATA 0x04 #define EGTS_FLEET_GET_POS_DATA 0x000C //CMDS // AURUS #define EGTS_AURUS_SET_TIME 0xFAC4 //#define EGTS_RAW_DATA 0x0000 #define EGTS_ECALL_MSD_REQ 0x0113 #define EGTS_START_SEND_READY 0x510A #define EGTS_STOP_SEND_READY 0x510B #define EGTS_SEND_ACCIDENT_DATA 0x060C #define EGTS_ECALL_REQ 0x0112 #define EGTS_ECALL_TEST_NUMBER 0x020d #define EGTS_ECALL_SMS_FALLBACK_NUMBER 0x0223 #define EGTS_FLEET_MAX_SPEED_THRESHOLD 0x0266 // Command Туре #define CT_COMCONF 0b0001 #define CT_MSGCONF 0b0010 #define CT_MSGFROM 0b0011 #define CT_MSGTO 0b0100 #define CT_COM 0b0101 #define CT_DELCOM 0b0110 #define CT_SUBREQ 0b0111 #define CT_DELIV 0b1000 // Command Confirmation Type #define CC_OK 0b0000 #define CC_ERROR 0b0001 #define CC_ILL 0b0010 #define CC_DEL 0b0011 #define CC_NFOUND 0b0100 #define CC_NCONF 0b0101 #define CC_INPROG 0b0110 // Command Codes #define EGTS_RAW_DATA 0b0000 #define EGTS_TEST_MODE 0b0001 #define EGTS_CONFIG_RESET 0b0006 #define EGTS_SET_AUTH_CODE 0b0007 #define EGTS_RESTART 0b0108 //SR #define EGTS_SR_COMMAND_DATA_CMD_OFFSET 13 #define EGTS_SR_NOTIFICATION_DATA 3 #define EGTS_SR_NOTIFICATION_PART_DATA 4 #define EGTS_SR_NOTIFICATION_FULL_DATA 5 //EGTS_ECALL_REQ_TYPE #define EGTS_ECALL_REQ_MANUAL 0 #define EGTS_ECALL_REQ_AUTOMATIC 1 //EGTS_ECALL_MSD_REQ_TRANSPORT_TYPE #define EGTS_ECALL_MSD_REQ_TRANSPORT_ANY 0 #define EGTS_ECALL_MSD_REQ_TRANSPORT_SMS 2 typedef struct { uint8_t flags; uint8_t count; uint16_t notifications[128]; uint8_t storeHours; uint8_t repeatCount; uint8_t repeatIntervalMin; } EgtsSrNotificationData; typedef struct { uint8_t headerLength; uint8_t *header; uint8_t mandatory; uint8_t expiration; uint8_t storeHours; uint8_t repeatCount; uint8_t repeatIntervalMin; } EgtsSrNotificationFullData; typedef struct { uint16_t reqType; } tEgtsEcallReq; typedef struct { int32_t mid; uint8_t transport; } tEgtsEcallMsdReq; typedef struct { uint32_t profile; bool enabled; } tEgtsNextCmd; typedef union { tEgtsEcallReq ecallReq; tEgtsEcallMsdReq msdReq; tEgtsNextCmd next; tString32 newFallbackNumber; int32_t arr[5]; } uEgtsSrCommandData; typedef struct { uint8_t cmdType; uint8_t cmdConfirmationType; uint32_t cmdId; uint32_t srcId; bool hasAuth; bool hasCharset; uint8_t charset; uint8_t authLen; uint8_t auth[255]; uint16_t address; uint8_t size; uint8_t act; uint16_t cmd; uEgtsSrCommandData data; void *dataPointer; } EgtsSrCommand; typedef struct __attribute__ ((packed)) { uint8_t MT: 2; uint8_t OT: 2; uint8_t Reserve: 4; } tOA; typedef struct { uint16_t Identity; uint16_t PartNumber; uint16_t ExpectedPartsQuantity; tOA ObjectAttribute; uint8_t ComponentOrModuleIdentifier; uint16_t Version; uint16_t WholeObjectSignature; char FileName[65]; void *dataPointer; uint16_t dataLength; } EgtsFirmware; typedef union { EgtsFirmware firmware; EgtsSrCommand cmd; EgtsSrNotificationData notificationData; } EgtsSubRecMemAlloc; typedef struct { uint8_t protocol; uint8_t SecKeyID; uint8_t flags; uint8_t headerLength; uint16_t frameDataLength; uint16_t packetId; uint8_t encoding; uint8_t type; uint8_t crc; } EgtsHeader; typedef struct { uint16_t responsePacketId; uint8_t status; } EgtsPtResponse; typedef struct { size_t (*readData)(void *env, uint8_t *data, size_t size); void *readDataEnv; EgtsHeader header; EgtsPtResponse ptResponse; uint8_t *workingBuffer; uint16_t workingBufferLength; uint32_t workingBufferLimit; uint8_t headerLength; uint16_t frameDataLength; uint8_t frameDataSrcLength; uint8_t *frameData; uint8_t *record; uint16_t recordLength; uint16_t recordNumber; uint8_t recordFlags; bool recHasTime; bool recHasEvent; bool recHasObj; eEgtsServiceId recSourceService; eEgtsServiceId recRecipientService; uint8_t *recordData; uint8_t subRecType; uint16_t subRecLength; uint8_t *subRecData; EgtsSubRecMemAlloc subRecMemAlloc; EgtsSrNotificationData *srNotificationData; EgtsSrCommand *srCommand; EgtsFirmware *firmware; } EgtsWorkerEnvironment; //void EgtsWorkerLoadPreBuffer(EgtsWorkerEnvironment *env, uint8_t *data, uint16_t dataLength); //bool EgtsWorkerReadPreBuffer(EgtsWorkerEnvironment *env, uint8_t *data); bool EgtsCompleteTransport(EgtsWorkerEnvironment *env); bool EgtsIsTransportComplete(EgtsWorkerEnvironment *env); void EgtsParseHeader(EgtsWorkerEnvironment *env); void EgtsParseFrameData(EgtsWorkerEnvironment *env); void EgtsParseSrvRecord(EgtsWorkerEnvironment *env); void EgtsResetBuffer(EgtsWorkerEnvironment *env); uint16_t EgtsGetTransportFullLength(EgtsWorkerEnvironment *env); void EgtsParseSrvNotificationData(uint8_t *rec, EgtsSrNotificationData *notificationData); void EgtsParseSrvSubRecord(EgtsWorkerEnvironment *env, uint8_t *subRecRaw); #endif //UVEOS_ON_NATION_EGTSWORKER_H