178 lines
6.6 KiB
C
178 lines
6.6 KiB
C
/*
|
|
* msd.h
|
|
*
|
|
* Created on: Oct 20, 2020
|
|
* Author: FICOM-IT LTD
|
|
*/
|
|
|
|
#ifndef INC_MSD_H_
|
|
#define INC_MSD_H_
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <UveosGostSettingsTypes.h>
|
|
#include "EcallTypes.h"
|
|
|
|
|
|
#define ERA_GLONASS_MSD_ENCODED_BUFFER_LENGTH 128
|
|
|
|
|
|
typedef enum {
|
|
MSD_V_1 = 1,
|
|
MSD_V_2 = 2,
|
|
} eEraGlonassMsd_Version;
|
|
|
|
|
|
// @brief Control and status data
|
|
typedef struct {
|
|
uint16_t extraData; // 000 - additional data excluded, 010 - additional data included
|
|
uint16_t recentPos1; // True if previous location is available
|
|
uint16_t recentPos2; // True if previous location is available
|
|
uint16_t passengers; // True if passangers' number is available
|
|
uint16_t activation; // True if Automatic, False if manual eCall activation
|
|
uint16_t testCall; // True if test eCall, Flase if not test eCall
|
|
uint16_t posStatus; // True if GPS position can be trusted
|
|
uint16_t vehicleType; // Vehicle identification according to 2007/46/EC, 2002/24/EC
|
|
uint16_t includedTanks; // if True include status data (present/not present) for the relevant tank
|
|
} tEraGlonassMsd_Control;
|
|
|
|
// @brief Vehicle location stored in milli-arc-second
|
|
typedef struct {
|
|
int32_t lat; // Position latitude
|
|
int32_t lon; // Position longitude
|
|
} tEraGlonassMsd_GpsPos;
|
|
|
|
// @brief Vehicle location difference with the previous location stored in milli-arc-second
|
|
typedef struct {
|
|
uint16_t lat;
|
|
uint16_t lon;
|
|
} tEraGlonassMsd_PosDelta;
|
|
|
|
typedef enum {
|
|
ERA_GLONASS_MSD_OPTIONAL_FLAG_ABSENT = 0,
|
|
ERA_GLONASS_MSD_OPTIONAL_FLAG_PRESENT_TRUE = 1,
|
|
ERA_GLONASS_MSD_OPTIONAL_FLAG_PRESENT_FALSE = 2,
|
|
} tEraGlonassMsd_OptionalFlagState;
|
|
|
|
typedef uint8_t tEraGlonassMsd_OptionalFlag;
|
|
|
|
#define EraGlonassMsd_OptionalFlagClear(FLAG) (GLAG) = ERA_GLONASS_MSD_OPTIONAL_FLAG_ABSENT
|
|
#define EraGlonassMsd_OptionalFlagSet(FLAG, VALUE) (FLAG) = (VALUE) ? ERA_GLONASS_MSD_OPTIONAL_FLAG_PRESENT_TRUE : ERA_GLONASS_MSD_OPTIONAL_FLAG_PRESENT_FALSE
|
|
|
|
typedef struct {
|
|
tEraGlonassMsd_OptionalFlag CrashFront;
|
|
tEraGlonassMsd_OptionalFlag CrashLeftSide;
|
|
tEraGlonassMsd_OptionalFlag CrashRightSide;
|
|
tEraGlonassMsd_OptionalFlag CrashRear;
|
|
tEraGlonassMsd_OptionalFlag CrashWithRollover;
|
|
tEraGlonassMsd_OptionalFlag CrashSide;
|
|
tEraGlonassMsd_OptionalFlag CrashFrontOrSide;
|
|
tEraGlonassMsd_OptionalFlag CrashOtherType;
|
|
} tMSD_CrashInfo;
|
|
|
|
#define EraGlonassMsd_CrashInfoClear(ENV) memset(ENV, 0, sizeof(tMSD_CrashInfo))
|
|
|
|
typedef struct {
|
|
tEraGlonassMsd_OptionalFlag micConnectionFailure;
|
|
tEraGlonassMsd_OptionalFlag micFailure;
|
|
tEraGlonassMsd_OptionalFlag rightSpeakerFailure;
|
|
tEraGlonassMsd_OptionalFlag leftSpeakerFailure;
|
|
tEraGlonassMsd_OptionalFlag speakersFailure;
|
|
tEraGlonassMsd_OptionalFlag ignitionLineFailure;
|
|
tEraGlonassMsd_OptionalFlag uimFailure;
|
|
tEraGlonassMsd_OptionalFlag statusIndicatorFailure;
|
|
tEraGlonassMsd_OptionalFlag batteryFailure;
|
|
tEraGlonassMsd_OptionalFlag batteryVoltageLow;
|
|
tEraGlonassMsd_OptionalFlag crashSensorFailure;
|
|
tEraGlonassMsd_OptionalFlag firmwareImageCorruption;
|
|
tEraGlonassMsd_OptionalFlag commModuleInterfaceFailure;
|
|
tEraGlonassMsd_OptionalFlag gnssReceiverFailure;
|
|
tEraGlonassMsd_OptionalFlag raimProblem;
|
|
tEraGlonassMsd_OptionalFlag gnssAntennaFailure;
|
|
tEraGlonassMsd_OptionalFlag commModuleFailure;
|
|
tEraGlonassMsd_OptionalFlag eventsMemoryOverflow;
|
|
tEraGlonassMsd_OptionalFlag crashProfileMemoryOverflow;
|
|
tEraGlonassMsd_OptionalFlag otherCriticalFailures;
|
|
tEraGlonassMsd_OptionalFlag otherNotCriticalFailures;
|
|
} tMSD_DiagnosticResult;
|
|
|
|
typedef enum {
|
|
ERA_GLONASS_MSD_COORDINATE_SYSTEM_TYPE_WGS84 = 0x01,
|
|
ERA_GLONASS_MSD_COORDINATE_SYSTEM_TYPE_PZ90 = 0x02,
|
|
} eEraGlonassMsd_CoordinateSystemType;
|
|
|
|
typedef struct {
|
|
bool asi15Present;
|
|
bool crashInfoPresent;
|
|
|
|
uint16_t asi15;
|
|
tMSD_CrashInfo crashInfo;
|
|
eEraGlonassMsd_CoordinateSystemType coordSystem;
|
|
tMSD_DiagnosticResult *diagnosticResult;
|
|
} tEraGlonassMsd_AdditionalData;
|
|
|
|
|
|
// @brief MSD data structure
|
|
typedef struct {
|
|
uint16_t msdId; // MSD format version set to 1
|
|
uint16_t msgId; // Message identifier, starting with 1 for each new eCall session
|
|
tEraGlonassMsd_Control MSD_Control; // Control flags and data
|
|
uint16_t vin[18]; // VIN
|
|
uint16_t propulsion; // Vehicle propulsion storage type
|
|
uint32_t timestamp; // Timestamp
|
|
tEraGlonassMsd_GpsPos pos; // Vehicle position
|
|
uint8_t direction; // Vehicle heading, course over ground, course over north
|
|
tEraGlonassMsd_PosDelta MSD_PosDelta[2]; // Previous position delta
|
|
|
|
bool additionalDataPresent;
|
|
tEraGlonassMsd_AdditionalData additionalData; // Additional data
|
|
} tEraGlonassMsd_DataTypedef;
|
|
|
|
|
|
typedef struct {
|
|
tEraGlonassMsd_DataTypedef MSD_Data;
|
|
// tEraGlonassMsd_GpsPos lastPos;
|
|
} tEraGlonassMsd;
|
|
|
|
|
|
//Must be called on create
|
|
void EraGlonassMsdInit(tEraGlonassMsd *env);
|
|
|
|
void EraGlonassMsd_ClearDiagnostic(tMSD_DiagnosticResult *env);
|
|
|
|
//Must be called when settings changed
|
|
void EraGlonassMsdSetPassengersNumber(tEraGlonassMsd *env, uint16_t value);
|
|
|
|
void EraGlonassMsdSetVehicleType(tEraGlonassMsd *env, eUveosGostVehicleType value);
|
|
|
|
void EraGlonassMsdSetVIN(tEraGlonassMsd *env, char *vin, uint8_t vinLen);
|
|
|
|
void EraGlonassMsdSetPropulsionStorageType(tEraGlonassMsd *env, eUveosGostVehiclePropulsionStorageType value);
|
|
|
|
//Must be called when gnss data changed
|
|
void EraGlonassMsdSetTimeStamp(tEraGlonassMsd *env, uint32_t timestamp);
|
|
|
|
void EraGlonassMsdSetPositionValue(
|
|
tEraGlonassMsd *env,
|
|
int32_t lonArc,
|
|
int32_t latArc,
|
|
uint16_t track,
|
|
uint8_t valid
|
|
);
|
|
|
|
void EraGlonassMsdNoGnssSetDefaults(tEraGlonassMsd *env);
|
|
|
|
|
|
//Called on emergency situation
|
|
void EraGlonassMsdSetDataEmergencySituationFlags(
|
|
tEraGlonassMsd *env,
|
|
int MSD_MSG_ID,
|
|
eEcallActivationType eCallType,
|
|
eEcallTestMode eCallTestMode
|
|
);
|
|
|
|
uint16_t EraGlonassMsdEncode(tEraGlonassMsd *env, eEraGlonassMsd_Version msdVersion, uint8_t *encoded);
|
|
|
|
|
|
#endif /* INC_MSD_H_ */
|