297 lines
6.9 KiB
C
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_ */
|