255 lines
5.3 KiB
C
255 lines
5.3 KiB
C
//
|
||
// 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_МАХ_SPEED_THRESHOLD 0x0266
|
||
#define EGTS_UPDATE_SOFTWARE 0x0204
|
||
|
||
// 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;
|
||
tString32 updateServerInfo;
|
||
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;
|
||
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
|