// // 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