SMART_COMPONENTS_EXTERNAL_T.../ext_telematica.h

299 lines
8.3 KiB
C

//
// Created by cfif on 18.06.2024.
//
#ifndef SMART_COMPONENTS_EXT_TELEMATICA_H
#define SMART_COMPONENTS_EXT_TELEMATICA_H
#include "cmsis_os2.h"
#include "SystemMutexCmsis.h"
#include "LoggerToSerialPort.h"
#include "AtCmdBase.h"
#include "DeviceStorage.h"
#include "Nmea0183Parser.h"
#include "XfcProtTable.h"
#include "GpioPin.h"
#include "DeviceTestsTable.h"
#include "SerialPortFrameIO.h"
#include "AdcIO.h"
#include "CanSerialPortFrame.h"
#include "ReadDataByIdentifier_22.h"
#include "RoutineControl_31.h"
typedef struct {
uint32_t vehicleLatitude;
uint32_t vehicleLongitude;
} tVehicleCoordinates;
typedef struct {
uint8_t SosButtonEvent;
uint8_t crashEvent;
uint8_t RolloverEvent;
} tEmergencyCallCounter;
typedef enum {
CAN_GNSS_NO_MALFUNCTIONS = 0,
CAN_GNSS_SYSTEM_INITIALISATION = 1,
CAN_GNSS_FAILURE = 2
} eCanGnssStatus;
typedef enum {
CAN_GNSS_NO_CALL = 0,
CAN_GNSS_CALL = 1
} eCanGnssCallByButton;
typedef enum {
CAN_GNSS_NO_ROLLOVER_DETECT = 0,
CAN_GNSS_ROLLOVER_DETECT = 1
} eCanGnssCallAuto;
typedef enum {
CAN_GNSS_CALL_TEST_NOT_ACTIVE = 0,
CAN_GNSS_CALL_TEST_ACTIVE = 1
} eCanGnssCallTest;
typedef enum {
LAST_EVENT_NONE = 0,
LAST_EVENT_FLIP = 1,
LAST_EVENT_IMPACT = 2,
LAST_EVENT_MANUAL = 3,
LAST_EVENT_TEST = 4
} eLastEventDevice;
//#pragma scalar_storage_order big-endian
typedef struct __attribute__ ((packed)) {
// eCanGnssCallTest GNSS_Call_Test: 1;
// eCanGnssCallAuto GNSS_Call_Auto: 1;
// eCanGnssCallByButton GNSS_Call_By_button: 1;
// eCanGnssStatus GNSS_Status: 2;
eCanGnssStatus GNSS_Status: 2;
eCanGnssCallByButton GNSS_Call_By_button: 1;
eCanGnssCallAuto GNSS_Call_Auto: 1;
eCanGnssCallTest GNSS_Call_Test: 1;
uint8_t Reserved2: 3;
uint8_t Reserved1: 4;
uint8_t GNSS_LC: 4; // Счетчик от 0..15 по циклу
} tGNSS_General;
//#pragma scalar_storage_order little-endian
typedef struct {
struct {
osThreadId_t (*osThreadNew)(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr);
osStatus_t (*osThreadSuspend)(osThreadId_t thread_id);
osStatus_t (*osThreadTerminate)(osThreadId_t thread_id);
osStatus_t (*osThreadResume)(osThreadId_t thread_id);
osMessageQueueId_t
(*osMessageQueueNew)(uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr);
osMutexId_t (*osMutexNew)(const osMutexAttr_t *attr);
osStatus_t (*osMutexAcquire)(osMutexId_t mutex_id, uint32_t timeout);
osStatus_t (*osMutexRelease)(osMutexId_t mutex_id);
osStatus_t
(*osMessageQueuePut)(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout);
osStatus_t (*osMessageQueueGet)(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout);
osStatus_t (*osMessageQueueReset)(osMessageQueueId_t mq_id);
uint32_t (*osMessageQueueGetSpace)(osMessageQueueId_t mq_id);
uint32_t (*osMessageQueueGetCount)(osMessageQueueId_t mq_id);
void (*SystemDelayMs)(uint32_t ms);
uint64_t (*SystemGetMs)();
void (*nvic_system_reset)(void);
void *(*malloc)(size_t);
void (*free)(void *);
} osFreeRTOS;
void (*CanPort_SetSpeed)(can_type *CANx, eCanBaudRate canBaudRate);
void (*CanPort_GetSpeed)(can_type *CANx, eCanBaudRate *canBaudRate);
void (*CanPort_SetFilter)(can_type *CANx, can_filter_init_type *can_filter0_init_struct,
can_filter_init_type *can_filter1_init_struct);
void *Routine_Can_UDS_env;
void (*Routine_Can_UDS)(void *env,
eUdsRoutineIdentifier udsRoutineIdentifier,
eUdsRoutineModes udsRoutineModes,
eUdsRoutineControlType udsRoutineControlType,
eUdsStartStopRoutineResult *udsStartStopRoutineResult,
eUdsRequestRoutineResult *udsRequestRoutineResult
);
struct {
tNmeaRmc *currentRmc;
osMutexId_t rmcAccess;
} gnss;
tGpioPin *ignition;
tAtCmd *gsmAt;
tRtcIO *rtcIO;
tLoggerToSerialPort *loggerToSerialPort;
struct {
tDeviceDataRuntime *runtime;
tDeviceAdditionalSettings *AdditionalSettings;
tUveosGostSettings *gost;
tDeviceSettings *device;
uint8_t *dataTeledata;
tVariablesTable *publicVariablesTable;
tEraGlonassUveosDumperInterface *uveosDumper;
osMutexId_t accessDumper;
} store;
tDeviceTestsTable *testsTable;
tAdcIO *vccIo;
tSerialPortFrameIO *Can1_IO;
tSerialPortFrameIO *Can2_IO;
tInputStatesRecord_0001 *InputStatesRecord_0001;
tOutputStatesRecord_0002 *OutputStatesRecord_0002;
tSystemStateID_0006 *SystemStateID_0006;
uint8_t *BoardVoltage;
uint8_t *ReserveBatteryCharge;
uint8_t *ReserveBatteryTemperature;
tVehicleCoordinates *VehicleCoordinates;
uint8_t *VehicleCoordinatesReliability;
uint8_t *MDS_FormatVersion;
uint8_t *TCM_working_mode;
uint8_t *TCM_activation_source;
uint8_t *TCM_time_calculation;
uint8_t *GLONASS_and_GLONASS_GPS_groups;
uint8_t *GsmRegistrationState;
uint32_t *TimeStamp;
uint8_t *GsmInnerError;
uint8_t *VehicleCoordinatesReliabilityMem;
uint8_t *GsmRegistartionStateMem;
uint8_t *GsmRegistrationError;
uint8_t *EcallOn;
uint8_t *CrashSignalExternal;
uint16_t *GnssPowerOffTime;
uint8_t *AutomaticActivationProhibition;
uint8_t *ECALLToTest;
uint8_t *NadRegistrationAtStartup;
char *GSMSoftwareVersionNumber; // 20
char *SmsFallbackTestNumber; // 20
uint8_t *SimProfileAmount;
uint8_t *SimProfile;
uint8_t *AudioProfile;
uint8_t *EcallNoAutomaticTriggering;
uint8_t *MiddletState;
char *Vehicle_SW_Version; // 3
char *Midlet_SW_Version; // 3
char *Boot_SW_Version; // 27
uint8_t *SertState;
uint16_t *ApplicationCheckSum;
uint8_t *Audio_HW_Settings;
tEmergencyCallCounter *ECALL_EmergencyCallCounter;
char *Avaialble_Networks_List; //128
uint8_t *SavedMSDAmount;
uint8_t *SentMSDAmount;
char *VehicleManufacturerSparePartNumber; //10
char *ConfigurationFileReferenceLink; //10
char *SystemSupplierIdentifier; //3
char *ECUSerialNumber; //20
char *VehicleManufacturerECUHardwareNumber; //10
char *SystemSupplierECUSoftwareNumber; //2
char *SystemSupplierECUSoftwareVersionNumber; //2
uint8_t *VDIAG;
uint16_t *vBatVoltage; // Напряжение АКБ мили вольт
uint16_t *vBoardVoltage; // Напряжение платы мили вольт
tGNSS_General *GNSS_General;
eDeviceTestingCode *deviceTestingCodeCan; // Код ошибки CAN (работает только в производственном режиме)
eLastEventDevice *LastEventDevice;
void (*SetDeviceFactoryMode)(void *env);
void *SetDeviceFactoryMode_env;
void (*SrandStdLib)(unsigned seed);
int (*RandStdLib)();
tDataToCan *DataToCan;
void *Function_Can_UDS_env;
void (*Function_Can_UDS)(void *env,
eTypeFunctionCanUds typeFunctionCanUds,
void *dataFunctionCanUdsEnv
);
uint8_t reserve[256];
} tMmaTele;
typedef struct __attribute__ ((packed)) {
uint32_t meta_ext_env_tele;
uint32_t meta_tele_func;
} tMetaSectionData;
typedef enum {
TELE_MODULE_INIT = 0,
TELE_MODULE_START = 1,
TELE_MODULE_COM_INT = 2,
TELE_MODULE_COM_INT_DEFAULT = 3,
TELE_MODULE_GSM_URC = 4,
TELE_MODULE_ACCEL_DATA = 5,
TELE_MODULE_ADD_EVENT = 6,
TELE_MODULE_CAN_UDS_START = 7,
TELE_MODULE_SHUTDOWN = 8,
TELE_MODULE_MUTE_ON = 9,
TELE_MODULE_MUTE_OFF = 10,
TELE_MODULE_FUEL_CUT_OFF = 11,
TELE_MODULE_GET_CAN_COM_IO = 12,
TELE_MODULE_COUNTER_1 = 13,
TELE_MODULE_COUNTER_2 = 14,
TELE_MODULE_COUNTER_3 = 15,
TELE_MODULE_COUNTER_4 = 16,
TELE_MODULE_COUNTER_5 = 17,
TELE_MODULE_GNSS = 18,
TELE_MODULE_PRE_INIT = 19,
} eEventTelematica;
typedef void *(*p_tele_func)(void *env, eEventTelematica event);
typedef struct {
uint32_t META_EXT_ENV_TELE;
tString32 FW_NAME;
tString32 HW_NAME;
p_tele_func tele_func;
} tMmaTeleAdr;
extern tMmaTele EXT_ENV_TELE;
extern tMmaTeleAdr EXT_ENV_ADR_TELE;
bool loadMetaTelematica();
#endif //SMART_COMPONENTS_EXT_TELEMATICA_H