/* * egts.h * * Created on: Jun 4, 2021 * Author: zemon */ #ifndef EGTS_INC_EGTS_H_ #define EGTS_INC_EGTS_H_ #include #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_ */