From 12a1772a92856ac163214e0f13661f01293c28d5 Mon Sep 17 00:00:00 2001 From: cfif Date: Tue, 21 Oct 2025 12:05:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataNonVolatatile_Private.h | 11 ++++ DataNonVolatile.c | 14 +++++ DataNonVolatile.h | 89 +++++++++++++++++++++++++++++ DataNonVolatile_AddToVarTab.c | 84 +++++++++++++++++++++++++++ DataNonVolatile_InitDeviceSetting.c | 36 ++++++++++++ modular.json | 17 ++++++ 6 files changed, 251 insertions(+) create mode 100644 DataNonVolatatile_Private.h create mode 100644 DataNonVolatile.c create mode 100644 DataNonVolatile.h create mode 100644 DataNonVolatile_AddToVarTab.c create mode 100644 DataNonVolatile_InitDeviceSetting.c create mode 100644 modular.json diff --git a/DataNonVolatatile_Private.h b/DataNonVolatatile_Private.h new file mode 100644 index 0000000..de0d39d --- /dev/null +++ b/DataNonVolatatile_Private.h @@ -0,0 +1,11 @@ +// +// Created by CFIF on 20.10.25. +// + +#ifndef HVAC_DATANONVOLATATILE_PRIVATE_H +#define HVAC_DATANONVOLATATILE_PRIVATE_H +#include "DataNonVolatile.h" + +void DeviceStorageInitDeviceSettings(tDeviceSettings *env); + +#endif //HVAC_DATANONVOLATATILE_PRIVATE_H diff --git a/DataNonVolatile.c b/DataNonVolatile.c new file mode 100644 index 0000000..fcb0f30 --- /dev/null +++ b/DataNonVolatile.c @@ -0,0 +1,14 @@ +// +// Created by CFIF on 05.04.24. +// +#include +#include "DataNonVolatatile_Private.h" + + +void DeviceDataNonVolatile_InitDefaults(tDeviceDataNonVolatile *env) { + + DeviceStorageInitDeviceSettings(&env->device); + + env->version = DEVICE_DATA_NO_VOLATILE_VERSION; + +} \ No newline at end of file diff --git a/DataNonVolatile.h b/DataNonVolatile.h new file mode 100644 index 0000000..55f1a20 --- /dev/null +++ b/DataNonVolatile.h @@ -0,0 +1,89 @@ +// +// Created by CFIF on 20.10.25. +// + +#ifndef HVAC_DEVICEDATANONVOLATILE_H +#define HVAC_DEVICEDATANONVOLATILE_H + +#include +#include "DataRuntime.h" + +#define DEVICE_DATA_NO_VOLATILE_VERSION 0x01 + +// BCD в двоичное число +#define bcd_to_binary(bcd) (((bcd >> 4) * 10) + (bcd & 0x0F)) + +// Двоичное число в BCD +#define binary_to_bcd(binary) (((binary / 10) << 4) | (binary % 10)) + +#pragma scalar_storage_order big-endian +typedef struct __attribute__ ((packed)) { + uint8_t year; // BCD: 0x18 = 2018 год + uint8_t month; // BCD: 0x10 = октябрь + uint8_t day; // BCD: 0x16 = 16 число + char tester_serial[9]; // ASCII: "123456789" +} reverse_tester_info_t; +#pragma scalar_storage_order little-endian + +#pragma scalar_storage_order big-endian +typedef struct __attribute__ ((packed)) { + uint32_t software_crc; // CRC программного обеспечения + uint16_t major_version; // Старшая версия + uint16_t minor_version; // Младшая версия + uint16_t patch_version; // Патч-версия + uint8_t build_number; // Номер сборки + uint8_t checksum; // Контрольная сумма структуры +} reverse_app_boot_info_t; +#pragma scalar_storage_order little-endian + +typedef struct __attribute__ ((packed)) { + uint8_t year; // BCD: 0x18 = 2018 год + uint8_t month; // BCD: 0x10 = октябрь + uint8_t day; // BCD: 0x16 = 16 число + tString16 tester_serial; // ASCII: "123456789" +} tester_info_t; + +typedef struct __attribute__ ((packed)) { + uint32_t software_crc; // CRC программного обеспечения + uint16_t major_version; // Старшая версия + uint16_t minor_version; // Младшая версия + uint16_t patch_version; // Патч-версия + uint8_t build_number; // Номер сборки + uint8_t checksum; // Контрольная сумма структуры +} app_boot_info_t; + +typedef struct { + tString16 software_classification; + tester_info_t tester_fingerprint; + app_boot_info_t bootloader_info; + app_boot_info_t application_info; + tString32 spare_part_number; + tString32 serial_number; + tString32 vin; + tString32 hardware_nami; + tString16 hardware_estra; + tString8 software_estra; + tString8 boot_version; +} ecu_identification_t; + +typedef struct { + ecu_identification_t identification; +} tDeviceSettings; + + +typedef struct { + uint32_t version; + + tDeviceSettings device; + +} tDeviceDataNonVolatile; + +void DeviceDataNonVolatile_InitDefaults(tDeviceDataNonVolatile *env); + +void DeviceDataNonVolatile_AddToVarTab( + tDeviceDataNonVolatile *env, + tVariablesTable *variablesTable, + uint32_t VARIABLES_GROUP +); + +#endif //HVAC_DEVICEDATANONVOLATILE_H diff --git a/DataNonVolatile_AddToVarTab.c b/DataNonVolatile_AddToVarTab.c new file mode 100644 index 0000000..a511b91 --- /dev/null +++ b/DataNonVolatile_AddToVarTab.c @@ -0,0 +1,84 @@ +// +// Created by CFIF on 20.10.25. +// + +#include "DataNonVolatatile_Private.h" + +#define ADD_VAR_SIZE(TYPE, NAME, VALUE, LEN, GROUP) \ + VariablesTableAdd( \ + variablesTable, \ + #NAME, \ + sizeof (#NAME)-1, \ + VARIABLE_TYPE_##TYPE, \ + (VALUE), \ + (LEN), \ + 0, \ + GROUP \ + ) + +#define ADD_VAR(TYPE, NAME, VALUE) ADD_VAR_SIZE(TYPE, NAME, VALUE, 0, group) +#define ADD_VAR_STR_OBJ(TYPE, NAME, VALUE) ADD_VAR_SIZE(TYPE, NAME, &(VALUE).data, &(VALUE).length,group) + + +#define ADD_VAR_WITH_ID_SIZE(TYPE, NAME, VALUE, LEN, ID, LIMIT, GROUP) \ + VariablesTableWithIdAdd( \ + variablesTable, \ + #NAME, \ + sizeof (#NAME)-1, \ + VARIABLE_TYPE_##TYPE, \ + (VALUE), \ + (LEN), \ + (ID), \ + (LIMIT), \ + 0, \ + GROUP \ + ) + +#define ADD_WITH_ID_VAR(TYPE, NAME, VALUE, ID) ADD_VAR_WITH_ID_SIZE(TYPE, NAME, VALUE, 0, ID, 0, group) +#define ADD_WITH_ID_VAR_STR_OBJ(TYPE, NAME, VALUE, ID, LIMIT) ADD_VAR_WITH_ID_SIZE(TYPE, NAME, &(VALUE).data, &(VALUE).length, ID, LIMIT, group) +#define ADD_WITH_ID_LEN_VAR_STR_OBJ(TYPE, NAME, VALUE, LEN, ID, LIMIT) ADD_VAR_WITH_ID_SIZE(TYPE, NAME, VALUE, LEN, ID, LIMIT, group) + +// Добавление переменных в таблицу +void DeviceDataNonVolatile_AddToVarTab( + tDeviceDataNonVolatile *env, + tVariablesTable *variablesTable, + uint32_t group +) { + + +//Devices + + ADD_WITH_ID_VAR_STR_OBJ(STRING, SOFTWARE_CLASS_ID, env->device.identification.software_classification, 0xF151, 15); + + ADD_WITH_ID_VAR(UINT32, APP_FINGERPRINT_SOTWARE_CRC, &env->device.identification.application_info.software_crc, 0xF184); + ADD_WITH_ID_VAR(UINT16, APP_FINGERPRINT_MAJOR_VER, &env->device.identification.application_info.major_version, 0xF184); + ADD_WITH_ID_VAR(UINT16, APP_FINGERPRINT_MINOR_VER, &env->device.identification.application_info.minor_version, 0xF184); + ADD_WITH_ID_VAR(UINT16, APP_FINGERPRINT_PATH_VER, &env->device.identification.application_info.patch_version, 0xF184); + ADD_WITH_ID_VAR(UINT8, APP_FINGERPRINT_BUILD_NUM, &env->device.identification.application_info.build_number, 0xF184); + ADD_WITH_ID_VAR(UINT8, APP_FINGERPRINT_STRUCT_CRC, &env->device.identification.application_info.checksum, 0xF184); + + ADD_WITH_ID_VAR(UINT32, BOOT_FINGERPRINT_SOTWARE_CRC, &env->device.identification.bootloader_info.software_crc, 0xF1F4); + ADD_WITH_ID_VAR(UINT16, BOOT_FINGERPRINT_MAJOR_VER, &env->device.identification.bootloader_info.major_version, 0xF1F4); + ADD_WITH_ID_VAR(UINT16, BOOT_FINGERPRINT_MINOR_VER, &env->device.identification.bootloader_info.minor_version, 0xF1F4); + ADD_WITH_ID_VAR(UINT16, BOOT_FINGERPRINT_PATH_VER, &env->device.identification.bootloader_info.patch_version, 0xF1F4); + ADD_WITH_ID_VAR(UINT8, BOOT_FINGERPRINT_BUILD_NUM, &env->device.identification.bootloader_info.build_number, 0xF1F4); + ADD_WITH_ID_VAR(UINT8, BOOT_FINGERPRINT_STRUCT_CRC, &env->device.identification.bootloader_info.checksum, 0xF1F4); + + ADD_WITH_ID_VAR(UINT8, TESTER_FINGERPRINT_YEAR, &env->device.identification.tester_fingerprint.year, 0xF15A); + ADD_WITH_ID_VAR(UINT8, TESTER_FINGERPRINT_MONTH, &env->device.identification.tester_fingerprint.month, 0xF15A); + ADD_WITH_ID_VAR(UINT8, TESTER_FINGERPRINT_DAY, &env->device.identification.tester_fingerprint.day, 0xF15A); + ADD_WITH_ID_VAR_STR_OBJ(STRING, TESTER_FINGERPRINT_SERIAL, env->device.identification.tester_fingerprint.tester_serial, 0xF15A, 9); + + ADD_WITH_ID_VAR_STR_OBJ(STRING, SPARE_PART_NUMBER, env->device.identification.spare_part_number, 0xF187, 27); + ADD_WITH_ID_VAR_STR_OBJ(STRING, SERIAL_NUMBER, env->device.identification.serial_number, 0xF18C, 26); + ADD_WITH_ID_VAR_STR_OBJ(STRING, VIN, env->device.identification.vin, 0xF190, 17); + ADD_WITH_ID_VAR_STR_OBJ(STRING, HARDWARE_NAMI, env->device.identification.hardware_nami, 0xF191, 27); + ADD_WITH_ID_VAR_STR_OBJ(STRING, HARDWARE_ESTRA, env->device.identification.hardware_estra, 0xF192, 13); + ADD_WITH_ID_VAR_STR_OBJ(STRING, SOFTWARE_ESTRA, env->device.identification.software_estra, 0xF194, 2); + ADD_WITH_ID_VAR_STR_OBJ(STRING, BOOT_SOFTWARE_ESTRA, env->device.identification.boot_version, 0xF1F4, 2); + +} + +#undef ADD_VAR_SIZE +#undef ADD_VAR +#undef ADD_VAR_STR_OBJ \ No newline at end of file diff --git a/DataNonVolatile_InitDeviceSetting.c b/DataNonVolatile_InitDeviceSetting.c new file mode 100644 index 0000000..39d5247 --- /dev/null +++ b/DataNonVolatile_InitDeviceSetting.c @@ -0,0 +1,36 @@ +// +// Created by CFIF on 05.04.24. +// +#include "DataNonVolatatile_Private.h" +#include "memory.h" + +void DeviceStorageInitDeviceSettings(tDeviceSettings *env) { + String16CopyStatic(&env->identification.software_classification, " "); + + env->identification.tester_fingerprint.year = 0x18; + env->identification.tester_fingerprint.month = 0x10; + env->identification.tester_fingerprint.day = 0x16; + String16CopyStatic(&env->identification.tester_fingerprint.tester_serial, "123456789"); + + env->identification.bootloader_info.software_crc = 0; // CRC программного обеспечения + env->identification.bootloader_info.major_version = 0; // Старшая версия + env->identification.bootloader_info.minor_version = 0; // Младшая версия + env->identification.bootloader_info.patch_version = 0; // Патч-версия + env->identification.bootloader_info.build_number = 0; // Номер сборки + env->identification.bootloader_info.checksum = 0; // Контрольная сумма структуры + + env->identification.application_info.software_crc = 0; // CRC программного обеспечения + env->identification.application_info.major_version = 0; // Старшая версия + env->identification.application_info.minor_version = 0; // Младшая версия + env->identification.application_info.patch_version = 0; // Патч-версия + env->identification.application_info.build_number = 0; // Номер сборки + env->identification.application_info.checksum = 0; // Контрольная сумма структуры + + String32CopyStatic(&env->identification.spare_part_number, " "); + String32CopyStatic(&env->identification.serial_number, " "); + String32CopyStatic(&env->identification.vin, " "); + String32CopyStatic(&env->identification.hardware_nami, " "); + String16CopyStatic(&env->identification.hardware_estra, " "); + String8CopyStatic(&env->identification.software_estra, " "); + String8CopyStatic(&env->identification.boot_version, " "); +} diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..cc78241 --- /dev/null +++ b/modular.json @@ -0,0 +1,17 @@ +{ + "dep": [ + { + "type": "git", + "provider": "HVAC_M7", + "repo": "VariablesTable" + } + ], + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +} \ No newline at end of file