Init
This commit is contained in:
commit
257821733a
|
|
@ -0,0 +1,72 @@
|
|||
//
|
||||
// Created by cfif on 24.06.2024.
|
||||
//
|
||||
#include "ext_telematica.h"
|
||||
//#include "FirmwareMetadataSection.h"
|
||||
#include "string.h"
|
||||
#include "ld_adr.h"
|
||||
|
||||
tMmaTeleAdr EXT_ENV_ADR_TELE;
|
||||
|
||||
|
||||
bool loadMetaTelematica() {
|
||||
tMetaSectionData *metaSectionData;
|
||||
|
||||
uint32_t offsetMeta = 0x08000000 + BOOT_AREA_LENGTH + FIRMWARE_MAIN_AREA_LENGTH + FIRMWARE_MAIN_UPDATE_AREA_LENGTH +
|
||||
FIRMWARE_TELE_AREA_LENGTH - 256;
|
||||
uint32_t offsetTele = 0x08000000 + BOOT_AREA_LENGTH + FIRMWARE_MAIN_AREA_LENGTH + FIRMWARE_MAIN_UPDATE_AREA_LENGTH;
|
||||
|
||||
|
||||
uint32_t pos = offsetMeta;
|
||||
uint32_t offsetMetaCrc = (*(uint32_t *) pos);
|
||||
pos += 4;
|
||||
uint32_t offsetMetaSize = (*(uint32_t *) (pos));
|
||||
pos += 4;
|
||||
|
||||
|
||||
EXT_ENV_ADR_TELE.FW_NAME.length = (*(uint8_t *) (pos));
|
||||
pos += 1;
|
||||
|
||||
if (EXT_ENV_ADR_TELE.FW_NAME.length > 32) {
|
||||
EXT_ENV_ADR_TELE.FW_NAME.length = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(EXT_ENV_ADR_TELE.FW_NAME.data, (uint8_t *) (pos), EXT_ENV_ADR_TELE.FW_NAME.length);
|
||||
pos += EXT_ENV_ADR_TELE.FW_NAME.length;
|
||||
|
||||
|
||||
EXT_ENV_ADR_TELE.HW_NAME.length = (*(uint8_t *) (pos));
|
||||
pos += 1;
|
||||
|
||||
if (EXT_ENV_ADR_TELE.HW_NAME.length > 32) {
|
||||
EXT_ENV_ADR_TELE.HW_NAME.length = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(EXT_ENV_ADR_TELE.HW_NAME.data, (uint8_t *) (pos), EXT_ENV_ADR_TELE.HW_NAME.length);
|
||||
pos += EXT_ENV_ADR_TELE.HW_NAME.length;
|
||||
|
||||
|
||||
uint32_t crc32 = 0;
|
||||
for (uint32_t i = 0; i < FIRMWARE_TELE_AREA_LENGTH - 256; ++i) {
|
||||
crc32 += ((uint8_t *) offsetTele)[i];
|
||||
}
|
||||
|
||||
if (offsetMetaSize != FIRMWARE_TELE_AREA_LENGTH - 256)
|
||||
return false;
|
||||
|
||||
if ((crc32 != offsetMetaCrc) && (offsetMetaCrc != 0))
|
||||
return false;
|
||||
|
||||
uint32_t offset =
|
||||
offsetMeta + sizeof(offsetMetaCrc) + sizeof(offsetMetaSize) + 1 + EXT_ENV_ADR_TELE.FW_NAME.length + 1 + EXT_ENV_ADR_TELE.HW_NAME.length;
|
||||
|
||||
metaSectionData = (tMetaSectionData *) offset;
|
||||
|
||||
EXT_ENV_ADR_TELE.META_EXT_ENV_TELE = metaSectionData->meta_ext_env_tele;
|
||||
EXT_ENV_ADR_TELE.tele_func = (p_tele_func) metaSectionData->meta_tele_func;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -0,0 +1,298 @@
|
|||
//
|
||||
// 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
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"cmake": {
|
||||
"inc_dirs": [
|
||||
"./"
|
||||
],
|
||||
"srcs": [
|
||||
"./**.c"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue