Legacy_EgtsEncoderDecoder/Inc/egts.h

297 lines
6.9 KiB
C

/*
* egts.h
*
* Created on: Jun 4, 2021
* Author: zemon
*/
#ifndef EGTS_INC_EGTS_H_
#define EGTS_INC_EGTS_H_
#include <stdint.h>
#include "stdbool.h"
#define TRANSPORT_HEADER_LENGTH 11
#define EGTS_SERVICE_FLAGS_MSD 0x94
#define EGTS_SERVICE_FLAGS_POS 0x04
#define EGTS_SERVICE_FLAGS_AUTH 0x9c
#define EGTS_SERVICE_FLAGS_COMMAND 0x9c
#define EGTS_SERVICE_FLAGS_TELEDATA 0x9c
#define EGTS_SERVICE_FLAGS_FIRMWARE 0x9c
#define EGTS_SERVICE_FLAGS_COMMAND 0x9c
typedef enum {
EGTS_SR_RECORD_RESPONSE = 0x00,
//EGTS_AUTH_SERVICE
EGTS_SR_TERM_IDENTITY = 0x01,
EGTS_SR_MODULE_DATA = 0x02,
//EGTS_COMMANDS_SERVICE
EGTS_SR_COMMAND_DATA = 0x33,
//EGTS_TELEDATA_SERVICE
EGTS_SR_POS_DATA = 0x10,
//EGTS_TELEDATA_SERVICE
EGTS_SR_AD_SENSORS_DATA = 0x12,
//EGTS_ECALL_SERVICE
EGTS_SR_RAW_MSD_DATA = 0x28,
//EGTS_EUROPROTOCOL_SERVICE
EGTS_SR_EP_MAIN_DATA = 0x01,
EGTS_SR_EP_TRACK_DATA = 0x02,
EGTS_SR_EP_ACCEL_DATA = 0x03,
EGTS_SR_ABS_DIG_SENS_DATA = 0x17,
EGTS_SR_ABS_AN_SENS_DATA = 0x18,
EGTS_SR_SERVICE_PART_DATA = 0x21,
EGTS_SR_RESULT_CODE = 0x09,
} eEgtsSubRecordId;
typedef enum {
EGTS_AUTH_SERVICE = 0x01,
EGTS_TELEDATA_SERVICE = 0x02,
EGTS_COMMANDS_SERVICE = 0x04,
EGTS_FIRMWARE_SERVICE = 0x09,
EGTS_ECALL_SERVICE = 0x0A,
EGTS_EUROPROTOCOL_SERVICE = 0x16,
EGTS_NOTIFICATION_SERVICE = 0x28,
} eEgtsServiceId;
typedef enum {
EGTS_PT_RESPONSE = 0x00,//(подтверждение на пакет транспортного уровня);
EGTS_PT_APPDATA = 0x01, //(пакет, содержащий данные протокола уровня поддержки услуг);
EGTS_PT_SIGNED_APPDATA = 0x02,
} eEgtsPacketTypeId;
typedef uint16_t(*tEgtsServiceSubRecordGenerator)(uint8_t *out, void *args);
uint32_t toEgtsTimestamp(uint32_t ts);
////TERM_IDENTITY##########
typedef struct {
uint8_t *IMEI;
uint8_t IMEI_len;
uint32_t TerminalID;
// uint32_t epochTimestamp;
} tEgtsTermIdentityArgs;
#define vEgtsPackTermIdentityGen (tEgtsServiceSubRecordGenerator) vEgtsPackTermIdentity
uint16_t vEgtsPackTermIdentity(uint8_t *out, tEgtsTermIdentityArgs *args);
////##################
////CMD CONFIRMATION DATA ##########
typedef struct {
uint16_t ADR;
uint8_t SZ;
uint8_t ACT;
uint16_t CCD;
uint16_t DT;
} tEgtsSrCmdConfirmationComData;
////CMD CONFIRMATION ##########
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;
tEgtsSrCmdConfirmationComData CmdData;
} tEgtsSrCmdConfirmation;
uint16_t vEgtsPacSrCommandDataResponse(uint8_t *out, tEgtsSrCmdConfirmation *args);
#define vEgtsPacSrCommandDataResponseGen (tEgtsServiceSubRecordGenerator) vEgtsPacSrCommandDataResponse
////##################
////RESPONSE ##########
typedef struct {
uint16_t CRN;
uint8_t RST;
} tEgtsRecordResponseData;
uint16_t vEgtsPackResponse(uint8_t *out, tEgtsRecordResponseData *args);
#define vEgtsPackResponseGen (tEgtsServiceSubRecordGenerator) vEgtsPackResponse
////##################
////POS DATA##########
typedef struct {
double latitude;
double longitude;
uint16_t velocity;
uint32_t epochTimestamp;
} tEgtsPosDataArgs;
#define vEgtsPackPosDataGen (tEgtsServiceSubRecordGenerator) vEgtsPackPosData
uint16_t vEgtsPackPosData(uint8_t *out, tEgtsPosDataArgs *args);
////##################
#define SENSOR_NO (0x00)
#define SENSOR_1 (0x01)
#define SENSOR_2 (0x01<<1)
#define SENSOR_3 (0x01<<2)
#define SENSOR_4 (0x01<<3)
#define SENSOR_5 (0x01<<4)
#define SENSOR_6 (0x01<<5)
#define SENSOR_7 (0x01<<6)
#define SENSOR_8 (0x01<<7)
////SENSORS DATA##########
typedef struct {
uint8_t digitalInPresent;
uint8_t digitalOutPresent;
uint8_t analogInPresent;
uint8_t digitalIn[8];
uint32_t analogIn[8];
} tEgtsSensorsDataArgs;
#define vEgtsPackSensorsDataGen (tEgtsServiceSubRecordGenerator) vEgtsPackSensorsData
uint16_t vEgtsPackSensorsData(uint8_t *out, tEgtsSensorsDataArgs *args);
////##################
////MSD DATA##########
typedef struct {
uint8_t *msd;
uint8_t msdLength;
} tEgtsMsdDataArgs;
#define vEgtsPackMsdDataGen (tEgtsServiceSubRecordGenerator) vEgtsPackMsdData
uint16_t vEgtsPackMsdData(uint8_t *out, tEgtsMsdDataArgs *args);
//
//uint16_t vEgtsPackMsdResp(uint8_t *out, tEgtsRecordResponseData *args);
////##################
////MSD DATA##########
typedef struct {
bool LOHS;
bool LAHS;
uint16_t speed;
bool TrackDataExist;
uint32_t Latitude;
uint32_t Longitude;
bool AltitudeDirection;
uint16_t Altitude;
uint16_t Direction;
} tEgtsTrackData;
typedef struct {
bool DataValid;
uint8_t TimeShift;
bool type;
} tEgtsRelativeTrackData;
typedef struct {
uint16_t blockNumber;
uint32_t absoluteTime;
uint8_t relativeAmount;
uint8_t timeShift;
bool CoordinateSystem;
bool RTU;
tEgtsTrackData originPoint;
} tEgtsSrEpTrackDataArgs;
uint16_t vEgtsPackSrEpTrackData(uint8_t *out, tEgtsSrEpTrackDataArgs *args);
#define vEgtsPackSrEpTrackDataGen (tEgtsServiceSubRecordGenerator) vEgtsPackSrEpTrackData
////##################
uint16_t vEgtsPackSrv(
uint8_t *out,
uint8_t flags,
eEgtsServiceId sourceServiceId,
eEgtsServiceId recipientServiceId,
uint32_t timestamp,
eEgtsSubRecordId subRecordType,
tEgtsServiceSubRecordGenerator subRecGen,
void *subRecArgs
);
uint16_t vEgtsPackTransport(
uint16_t cid,
uint16_t packetId,
uint8_t *out,
uint8_t srvFlags,
eEgtsPacketTypeId packetTypeId,
eEgtsServiceId sourceServiceId,
eEgtsServiceId recipientServiceId,
uint32_t timestamp,
eEgtsSubRecordId subRecordType,
tEgtsServiceSubRecordGenerator subRecGen,
void *subRecArgs
);
uint16_t vEgtsPackMsdTransport(uint16_t packetId, uint8_t *out, uint8_t *msd, uint8_t msdLength, uint32_t timestamp);
uint16_t
vEgtsPackEgtsResponse(uint16_t packetId, uint8_t *out, uint8_t rst, uint16_t crn, uint16_t cid, uint32_t timestamp);
uint16_t vEgtsPackSrCmdConfirmation(
uint8_t *out,
uint16_t packetId,
uint16_t cmdType,
uint16_t cmdConfirType,
uint16_t cid,
uint16_t sid,
uint16_t acfe,
uint16_t chsfe,
uint16_t adr,
uint8_t sz,
uint8_t act,
uint16_t ccd,
uint32_t dt
);
uint16_t vEgtsPackTeledataTransport(
uint16_t packetId,
uint8_t *out,
double Latitude,
double Longitude,
uint16_t velocity,
uint32_t timestamp
);
uint16_t vEgtsPackTermIdentityTransport(
uint16_t packetId, uint8_t *out, uint8_t *IMEI, uint8_t IMEI_len, uint32_t TerminalID, uint32_t timestamp
);
uint16_t vEgtsPackSensorsTransport(
uint16_t packetId,
uint8_t *out,
uint32_t epochTimestamp,
tEgtsSensorsDataArgs *sensors
);
#endif /* EGTS_INC_EGTS_H_ */