Init
This commit is contained in:
commit
c1069c547c
|
|
@ -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
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"dep": [
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "GONEC_NEW",
|
||||||
|
"repo": "GONEC_ARTERY_DataNonVolatile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "GONEC_NEW",
|
||||||
|
"repo": "GONEC_ARTERY_DataRuntime"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cmake": {
|
||||||
|
"inc_dirs": [
|
||||||
|
"Inc/"
|
||||||
|
],
|
||||||
|
"srcs": [
|
||||||
|
"Src/**.c",
|
||||||
|
"Src_InitDefaults/**.c"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue