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