Перенос на новую организацию GONEC

This commit is contained in:
cfif 2025-01-24 13:22:32 +03:00
commit 5a831f8e29
3 changed files with 365 additions and 0 deletions

45
Inc/DeviceStorageIni.h Normal file
View File

@ -0,0 +1,45 @@
//
// Created by cfif on 18.04.23.
//
#ifndef GONEC_GSM_DEVICESTORAGEINI_H
#define GONEC_GSM_DEVICESTORAGEINI_H
#include "DeviceDataNonVolatile.h"
#include "DeviceDataRuntime.h"
//#include "JSONSettings.h"
#include "minIni.h"
#include "fs_interface.h"
#include "Settings.h"
typedef struct {
tLoggerInterface *logger;
tDeviceDataRuntime runtime;
tDeviceDataNonVolatile nvm;
int settingsCount;
const tSettings *settings;
osMutexId_t writeAccess;
tFs *fs;
const TCHAR *file_name_setup;
const TCHAR *file_name_counter;
} tDeviceStorageIni;
void DeviceStorageIni_Init(tDeviceStorageIni *env, const TCHAR *file_setup, const TCHAR *file_counter, tFs *fs, const tSettings *Settings, int SettingsCount);
void DeviceStorageSetupIni_Dump(tDeviceStorageIni *env);
void DeviceStorageSetupIni_Load(tDeviceStorageIni *env);
void DeviceStorageCounterIni_Dump(tDeviceStorageIni *env);
void DeviceStorageCounterIni_DumpRouting(tDeviceStorageIni *env);
void DeviceStorageCounterIni_DumpDist(tDeviceStorageIni *env);
void DeviceStorageCounterIni_DumpSos(tDeviceStorageIni *env);
void DeviceStorageCounterIni_Load(tDeviceStorageIni *env);
// Сохранение настроек во временные
void Nvm_To_RuntimeSettings(tDeviceStorageIni *env);
// Загрузка настроек из временных
void Runtime_To_NvmSettings(tDeviceStorageIni *env);
#endif //GONEC_GSM_DEVICESTORAGEINI_H

297
Src/DeviceStorageIni.c Normal file
View File

@ -0,0 +1,297 @@
//
// Created by cfif on 18.04.23.
//
#include "DeviceStorageIni.h"
#include "string.h"
#include "base64_encode_decode.h"
// Сохранение настроек во временные
void Nvm_To_RuntimeSettings(tDeviceStorageIni *env) {
memcpy(&env->runtime.Settings_General, &env->nvm.Settings_General, sizeof(env->nvm.Settings_General));
memcpy(&env->runtime.Settings_Basic_Access, &env->nvm.Settings_Basic_Access,
sizeof(env->nvm.Settings_Basic_Access));
memcpy(&env->runtime.Settings_Frequency_Speed, &env->nvm.Settings_Frequency_Speed,
sizeof(env->nvm.Settings_Frequency_Speed));
memcpy(&env->runtime.Settings_Network, &env->nvm.Settings_Network, sizeof(env->nvm.Settings_Network));
memcpy(&env->runtime.Settings_Tracert, &env->nvm.Settings_Tracert, sizeof(env->nvm.Settings_Tracert));
memcpy(&env->runtime.Settings_Transceiver, &env->nvm.Settings_Transceiver, sizeof(env->nvm.Settings_Transceiver));
memcpy(&env->runtime.Settings_GSM, &env->nvm.Settings_GSM, sizeof(env->nvm.Settings_GSM));
memcpy(&env->runtime.Settings_RS485_Bluetooth, &env->nvm.Settings_RS485_Bluetooth,
sizeof(env->nvm.Settings_RS485_Bluetooth));
memcpy(&env->runtime.Settings_Transmitter, &env->nvm.Settings_Transmitter,
sizeof(env->nvm.Settings_Transmitter));
memcpy(&env->runtime.Settings_Msd, &env->nvm.Settings_Msd,
sizeof(env->nvm.Settings_Msd));
memcpy(&env->runtime.Settings_AmsRadar, &env->nvm.Settings_AmsRadar,
sizeof(env->nvm.Settings_AmsRadar));
memcpy(&env->runtime.Settings_LoRaWan, &env->nvm.Settings_LoRaWan,
sizeof(env->nvm.Settings_LoRaWan));
}
// Загрузка настроек из временных
void Runtime_To_NvmSettings(tDeviceStorageIni *env) {
memcpy(&env->nvm.Settings_General, &env->runtime.Settings_General, sizeof(env->runtime.Settings_General));
memcpy(&env->nvm.Settings_Basic_Access, &env->runtime.Settings_Basic_Access,
sizeof(env->runtime.Settings_Basic_Access));
memcpy(&env->nvm.Settings_Frequency_Speed, &env->runtime.Settings_Frequency_Speed,
sizeof(env->runtime.Settings_Frequency_Speed));
memcpy(&env->nvm.Settings_Network, &env->runtime.Settings_Network, sizeof(env->runtime.Settings_Network));
memcpy(&env->nvm.Settings_Tracert, &env->runtime.Settings_Tracert, sizeof(env->runtime.Settings_Tracert));
memcpy(&env->nvm.Settings_Transceiver, &env->runtime.Settings_Transceiver,
sizeof(env->runtime.Settings_Transceiver));
memcpy(&env->nvm.Settings_GSM, &env->runtime.Settings_GSM, sizeof(env->runtime.Settings_GSM));
memcpy(&env->nvm.Settings_RS485_Bluetooth, &env->runtime.Settings_RS485_Bluetooth,
sizeof(env->runtime.Settings_RS485_Bluetooth));
memcpy(&env->nvm.Settings_Transmitter, &env->runtime.Settings_Transmitter,
sizeof(env->runtime.Settings_Transmitter));
memcpy(&env->nvm.Settings_Msd, &env->runtime.Settings_Msd,
sizeof(env->runtime.Settings_Msd));
memcpy(&env->nvm.Settings_AmsRadar, &env->runtime.Settings_AmsRadar,
sizeof(env->runtime.Settings_AmsRadar));
memcpy(&env->nvm.Settings_LoRaWan, &env->runtime.Settings_LoRaWan,
sizeof(env->runtime.Settings_LoRaWan));
}
void DeviceDataNonVolatile_Setup_Init_Defaults(tDeviceDataNonVolatile *env) {
vSettings_Basic_AccessInitDefaults(&env->Settings_Basic_Access);
vSettings_Settings_Date_TimeInitDefaults(&env->Settings_Date_Time);
vSettings_Frequency_SpeedInitDefaults(&env->Settings_Frequency_Speed);
vSettings_GeneralInitDefaults(&env->Settings_General);
vSettings_NetworkInitDefaults(&env->Settings_Network);
vSettings_RS485_BluetoothInitDefaults(&env->Settings_RS485_Bluetooth);
vSettings_TracertInitDefaults(&env->Settings_Tracert);
vSettings_TransceiverInitDefaults(&env->Settings_Transceiver);
vSettings_GSMInitDefaults(&env->Settings_GSM);
vSettings_TransmitterInitDefaults(&env->Settings_Transmitter);
vSettings_MsdInitDefaults(&env->Settings_Msd);
vSettings_AmsRadarInitDefaults(&env->Settings_AmsRadar);
vSettings_LoRaWanInitDefaults(&env->Settings_LoRaWan);
}
void DeviceDataNonVolatile_Counter_Init_Defaults(tDeviceDataNonVolatile *env) {
env->maxId_OutBox = 0;
env->maxId_InBox = 0;
env->routing = 0;
env->dist = 2000;
env->timeZoneInSat = 5;
env->flagSos = 0;
}
void DeviceStorageCounterIni_Dump(tDeviceStorageIni *env) {
if (osMutexAcquire(env->writeAccess, 2000) == osOK) {
int result = ini_putl("CounterId", "IdOutBox", env->nvm.maxId_OutBox, env->file_name_counter);
result = ini_putl("CounterId", "IdInBox", env->nvm.maxId_InBox, env->file_name_counter);
osMutexRelease(env->writeAccess);
}
}
void DeviceStorageCounterIni_DumpDist(tDeviceStorageIni *env) {
if (osMutexAcquire(env->writeAccess, 2000) == osOK) {
int result = ini_putl("Alm", "dist", env->nvm.dist, env->file_name_counter);
osMutexRelease(env->writeAccess);
}
}
void DeviceStorageCounterIni_DumpRouting(tDeviceStorageIni *env) {
if (osMutexAcquire(env->writeAccess, 2000) == osOK) {
int result = ini_putl("Alm", "routing", env->nvm.routing, env->file_name_counter);
result = ini_putl("Alm", "timeZoneInSat", env->nvm.timeZoneInSat, env->file_name_counter);
osMutexRelease(env->writeAccess);
}
}
void DeviceStorageCounterIni_DumpSos(tDeviceStorageIni *env) {
if (osMutexAcquire(env->writeAccess, 2000) == osOK) {
int result = ini_putl("Alm", "sos", env->nvm.flagSos, env->file_name_counter);
osMutexRelease(env->writeAccess);
}
}
void DeviceStorageCounterIni_Load(tDeviceStorageIni *env) {
env->nvm.maxId_OutBox = ini_getl("CounterId", "IdOutBox", 0, env->file_name_counter);
env->nvm.maxId_InBox = ini_getl("CounterId", "IdInBox", 0, env->file_name_counter);
env->nvm.routing = ini_getl("Alm", "routing", 0, env->file_name_counter);
env->nvm.dist = ini_getl("Alm", "dist", 2000, env->file_name_counter);
env->nvm.timeZoneInSat = ini_getl("Alm", "timeZoneInSat", 5, env->file_name_counter);
env->nvm.flagSos = ini_getl("Alm", "sos", 0, env->file_name_counter);
}
static void delCharNoChar(char *str) {
uint8_t ch = '\n';
while ((ch == '\n') || (ch == '\r')) {
if (strlen(str) == 0)
break;
if (strlen(str) >= 255)
break;
uint8_t index = strlen(str) - 1;
ch = str[index];
if ((ch == '\n') || (ch == '\r')) {
str[index] = 0;
}
}
}
void DeviceStorageSetupIni_Dump(tDeviceStorageIni *env) {
if (osMutexAcquire(env->writeAccess, 2000) == osOK) {
for (int i = 0; i < env->settingsCount; ++i) {
if (strcmp(env->settings[i].typ, "dec") == 0) {
int result = ini_putl(env->settings[i].section, env->settings[i].hlp,
*(uint32_t *) env->settings[i].val,
env->file_name_setup);
}
if (strcmp(env->settings[i].typ, "sel") == 0) {
int result = ini_putl(env->settings[i].section, env->settings[i].hlp, *(uint8_t *) env->settings[i].cur,
env->file_name_setup);
}
if (strcmp(env->settings[i].typ, "txt") == 0) {
delCharNoChar(env->settings[i].val);
int result = ini_puts(env->settings[i].section, env->settings[i].hlp, env->settings[i].val,
env->file_name_setup);
}
if (strcmp(env->settings[i].typ, "psw") == 0) {
delCharNoChar(env->settings[i].val);
char pswBuf[128];
memset(pswBuf, 0, sizeof(pswBuf));
base64_encode(pswBuf, sizeof(pswBuf), env->settings[i].val, strlen(env->settings[i].val));
int result = ini_puts(env->settings[i].section, env->settings[i].hlp, pswBuf,
env->file_name_setup);
// int result = ini_puts(env->settings[i].section, env->settings[i].hlp, env->settings[i].val,
// env->file_name_setup);
}
}
osMutexRelease(env->writeAccess);
}
}
void DeviceStorageSetupIni_Load(tDeviceStorageIni *env) {
for (int i = 0; i < env->settingsCount; ++i) {
if (strcmp(env->settings[i].typ, "dec") == 0) {
*(uint32_t *) env->settings[i].val = ini_getl(env->settings[i].section, env->settings[i].hlp, 0,
env->file_name_setup);
}
if (strcmp(env->settings[i].typ, "sel") == 0) {
*(uint8_t *) env->settings[i].cur = ini_getl(env->settings[i].section, env->settings[i].hlp, 0,
env->file_name_setup);
}
if (strcmp(env->settings[i].typ, "txt") == 0) {
int result = ini_gets(env->settings[i].section, env->settings[i].hlp, "", env->settings[i].val, 128,
env->file_name_setup);
}
if (strcmp(env->settings[i].typ, "psw") == 0) {
char pswBuf[128];
memset(pswBuf, 0, sizeof(pswBuf));
int result = ini_gets(env->settings[i].section, env->settings[i].hlp, "", pswBuf, 128,
env->file_name_setup);
b64_decode(pswBuf, env->settings[i].val, 128);
// int result = ini_gets(env->settings[i].section, env->settings[i].hlp, "", env->settings[i].val, 128,
// env->file_name_setup);
}
}
}
void
DeviceStorageIni_Init(tDeviceStorageIni *env, const TCHAR *file_name_setup, const TCHAR *file_name_counter, tFs *fs,
const tSettings *Settings, int SettingsCount) {
env->settings = Settings;
env->settingsCount = SettingsCount;
env->fs = fs;
env->writeAccess = osMutexNew(NULL);
env->file_name_setup = file_name_setup;
env->file_name_counter = file_name_counter;
// Если файл не найден, восстанавливаем данные по умолчанию
FILINFO fnoInf;
FRESULT frInf;
frInf = f_stat(file_name_setup, &fnoInf);
if (frInf) {
DeviceDataNonVolatile_Setup_Init_Defaults(&env->nvm);
Nvm_To_RuntimeSettings(env);
DeviceStorageSetupIni_Dump(env);
} else {
DeviceStorageSetupIni_Load(env);
Runtime_To_NvmSettings(env);
}
// Если файл не найден, восстанавливаем данные по умолчанию
frInf = f_stat(file_name_counter, &fnoInf);
if (frInf) {
DeviceDataNonVolatile_Counter_Init_Defaults(&env->nvm);
DeviceStorageCounterIni_Dump(env);
DeviceStorageCounterIni_DumpRouting(env);
DeviceStorageCounterIni_DumpDist(env);
DeviceStorageCounterIni_DumpSos(env);
} else {
DeviceStorageCounterIni_Load(env);
}
//DeviceDataNonVolatile_Setup_Init_Defaults(&env->nvm);
}

23
modular.json Normal file
View File

@ -0,0 +1,23 @@
{
"dep": [
{
"type": "git",
"provider": "GONEC",
"repo": "GONEC_ARTERY_DataNonVolatile"
},
{
"type": "git",
"provider": "GONEC",
"repo": "GONEC_ARTERY_DataRuntime"
}
],
"cmake": {
"inc_dirs": [
"Inc/"
],
"srcs": [
"Src/**.c",
"Src_InitDefaults/**.c"
]
}
}