Legacy_EgtsEncoderDecoder/Inc/egtsWorker.h

254 lines
5.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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