Обновление
This commit is contained in:
parent
476236a246
commit
f2e6d6bee1
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Created by xemon on 19.12.22.
|
// Created by cfif on 19.12.22.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <CmsisRtosThreadUtils.h>
|
#include <CmsisRtosThreadUtils.h>
|
||||||
|
|
@ -13,19 +13,27 @@
|
||||||
|
|
||||||
void VarsTabDumpObserver_Init(
|
void VarsTabDumpObserver_Init(
|
||||||
tVarsTabDumpObserver *env,
|
tVarsTabDumpObserver *env,
|
||||||
tStorageInterface *interface,
|
tStorageInterface *storageCalibInterface,
|
||||||
|
tStorageInterface *storageParamInterface,
|
||||||
uint32_t delay,
|
uint32_t delay,
|
||||||
void *data,
|
void *dataCalib,
|
||||||
size_t size,
|
void *dataParam,
|
||||||
|
size_t sizeCalib,
|
||||||
|
size_t sizeParam,
|
||||||
tVariablesTable *VarsTab,
|
tVariablesTable *VarsTab,
|
||||||
uint32_t trackableGroup
|
uint32_t trackableGroup
|
||||||
) {
|
) {
|
||||||
env->interface = interface;
|
env->interfaceCalib = storageCalibInterface;
|
||||||
|
env->interfaceParam = storageParamInterface;
|
||||||
|
|
||||||
env->trackableVarsTab = VarsTab;
|
env->trackableVarsTab = VarsTab;
|
||||||
env->trackableGroup = trackableGroup;
|
env->trackableGroup = trackableGroup;
|
||||||
|
|
||||||
env->data = data;
|
env->dataCalib = dataCalib;
|
||||||
env->size = size;
|
env->sizeCalib = sizeCalib;
|
||||||
|
|
||||||
|
env->dataParam = dataParam;
|
||||||
|
env->sizeParam = sizeParam;
|
||||||
|
|
||||||
env->delay = delay;
|
env->delay = delay;
|
||||||
env->dumpAfter = 0;
|
env->dumpAfter = 0;
|
||||||
|
|
@ -37,69 +45,137 @@ void VarsTabDumpObserver_Init(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool VarsTabDumpObserver_Load(tVarsTabDumpObserver *env) {
|
bool VarsTabDumpObserverCalib_Load(tVarsTabDumpObserver *env) {
|
||||||
|
|
||||||
if (osMutexAcquire(env->accessDumper, 100) == osOK) {
|
if (osMutexAcquire(env->accessDumper, 100) == osOK) {
|
||||||
eStorageStatus dumpStatus = StorageLoad(env->interface, env->data, env->size);
|
eStorageStatus dumpStatus = StorageLoad(env->interfaceCalib, env->dataCalib, env->sizeCalib);
|
||||||
osMutexRelease(env->accessDumper);
|
osMutexRelease(env->accessDumper);
|
||||||
|
|
||||||
if (dumpStatus == STORAGE_ERR_DEVICE) {
|
if (dumpStatus == STORAGE_ERR_DEVICE) {
|
||||||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка ПЗУ")
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка ПЗУ")
|
||||||
env->health = false;
|
env->health = false;
|
||||||
return false;
|
return false;
|
||||||
} else if (dumpStatus == STORAGE_OK) {
|
} else if (dumpStatus == STORAGE_OK) {
|
||||||
env->health = true;
|
env->health = true;
|
||||||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Данные успешно загружены из ПЗУ")
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Данные успешно загружены из ПЗУ")
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка данных при загрузке из ПЗУ")
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка данных при загрузке из ПЗУ")
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка чтения ПЗУ!!!")
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка чтения ПЗУ!!!")
|
||||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка параллельного доступа")
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка параллельного доступа")
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VarsTabDumpObserver_Dump(tVarsTabDumpObserver *env) {
|
bool VarsTabDumpObserverParam_Load(tVarsTabDumpObserver *env) {
|
||||||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Попытка записи в ПЗУ...")
|
|
||||||
|
if (osMutexAcquire(env->accessDumper, 100) == osOK) {
|
||||||
|
eStorageStatus dumpStatus = StorageLoad(env->interfaceParam, env->dataParam, env->sizeParam);
|
||||||
|
osMutexRelease(env->accessDumper);
|
||||||
|
|
||||||
|
if (dumpStatus == STORAGE_ERR_DEVICE) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Параметры. Ошибка ПЗУ")
|
||||||
|
env->health = false;
|
||||||
|
return false;
|
||||||
|
} else if (dumpStatus == STORAGE_OK) {
|
||||||
|
env->health = true;
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Параметры. Данные успешно загружены из ПЗУ")
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Параметры. Ошибка данных при загрузке из ПЗУ")
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Параметры. Ошибка чтения ПЗУ!!!")
|
||||||
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Параметры. Ошибка параллельного доступа")
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool VarsTabDumpObserverCalib_Dump(tVarsTabDumpObserver *env) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Попытка записи в ПЗУ...")
|
||||||
|
|
||||||
|
|
||||||
if (env->logger) {
|
if (env->logger) {
|
||||||
env->logger->logging(
|
env->logger->logging(
|
||||||
env->logger->env, "Хран.Наб.",
|
env->logger->env, "Калибровка. Хран.Наб.",
|
||||||
sizeof("Хран.Наб.") - 1,
|
sizeof("Калибровка. Хран.Наб.") - 1,
|
||||||
LOGLEVEL_INFO,
|
LOGLEVEL_INFO,
|
||||||
"Запись в ПЗУ...",
|
"Калибровка. Запись в ПЗУ...",
|
||||||
sizeof("Запись в ПЗУ...") - 1, true
|
sizeof("Калибровка. Запись в ПЗУ...") - 1, true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (osMutexAcquire(env->accessDumper, 100) == osOK) {
|
if (osMutexAcquire(env->accessDumper, 100) == osOK) {
|
||||||
|
|
||||||
eStorageStatus result = StorageDump(env->interface, env->data, env->size);
|
eStorageStatus result = StorageDump(env->interfaceCalib, env->dataCalib, env->sizeCalib);
|
||||||
|
|
||||||
osMutexRelease(env->accessDumper);
|
osMutexRelease(env->accessDumper);
|
||||||
|
|
||||||
env->health = (result == STORAGE_OK);
|
env->health = (result == STORAGE_OK);
|
||||||
|
|
||||||
if (env->health) {
|
if (env->health) {
|
||||||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Успешно записано в ПЗУ")
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Успешно записано в ПЗУ")
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка записи в ПЗУ!!!")
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка записи в ПЗУ!!!")
|
||||||
if (result == STORAGE_ERR_DATA) {
|
if (result == STORAGE_ERR_DATA) {
|
||||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка контрольной суммы")
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка контрольной суммы")
|
||||||
} else {
|
} else {
|
||||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка ПЗУ")
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка ПЗУ")
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка записи в ПЗУ!!!")
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка записи в ПЗУ!!!")
|
||||||
LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка параллельного доступа")
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка параллельного доступа")
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool VarsTabDumpObserverParam_Dump(tVarsTabDumpObserver *env) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Парамеры. Попытка записи в ПЗУ...")
|
||||||
|
|
||||||
|
|
||||||
|
if (env->logger) {
|
||||||
|
env->logger->logging(
|
||||||
|
env->logger->env, "Парамеры. Хран.Наб.",
|
||||||
|
sizeof("Парамеры. Хран.Наб.") - 1,
|
||||||
|
LOGLEVEL_INFO,
|
||||||
|
"Парамеры. Запись в ПЗУ...",
|
||||||
|
sizeof("Парамеры. Запись в ПЗУ...") - 1, true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (osMutexAcquire(env->accessDumper, 100) == osOK) {
|
||||||
|
|
||||||
|
eStorageStatus result = StorageDump(env->interfaceParam, env->dataParam, env->sizeParam);
|
||||||
|
|
||||||
|
osMutexRelease(env->accessDumper);
|
||||||
|
|
||||||
|
env->health = (result == STORAGE_OK);
|
||||||
|
|
||||||
|
if (env->health) {
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Парамеры. Успешно записано в ПЗУ")
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Парамеры. Ошибка записи в ПЗУ!!!")
|
||||||
|
if (result == STORAGE_ERR_DATA) {
|
||||||
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Парамеры. Ошибка контрольной суммы")
|
||||||
|
} else {
|
||||||
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Парамеры. Ошибка ПЗУ")
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Парамеры. Ошибка записи в ПЗУ!!!")
|
||||||
|
LoggerErrorStatic(LOGGER, LOG_SIGN, "Парамеры. Ошибка параллельного доступа")
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -125,7 +201,7 @@ void DeviceStorageProcessing(tVarsTabDumpObserver *env) {
|
||||||
if (env->dumpAfter && VarsTabDumpObserver_IsNowDumpRequired(env)) {
|
if (env->dumpAfter && VarsTabDumpObserver_IsNowDumpRequired(env)) {
|
||||||
if (osMutexAcquire(env->access, 1) == osOK) {
|
if (osMutexAcquire(env->access, 1) == osOK) {
|
||||||
if (VarsTabDumpObserver_IsNowDumpRequired(env)) {
|
if (VarsTabDumpObserver_IsNowDumpRequired(env)) {
|
||||||
VarsTabDumpObserver_Dump(env);
|
VarsTabDumpObserverParam_Dump(env);
|
||||||
env->dumpAfter = 0;
|
env->dumpAfter = 0;
|
||||||
}
|
}
|
||||||
osMutexRelease(env->access);
|
osMutexRelease(env->access);
|
||||||
|
|
@ -153,7 +229,7 @@ void VarsTabDumpObserver_Flush(tVarsTabDumpObserver *env) {
|
||||||
if (env->dumpAfter) {
|
if (env->dumpAfter) {
|
||||||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Есть изменения, записываем в ПЗУ")
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "Есть изменения, записываем в ПЗУ")
|
||||||
if (osMutexAcquire(env->access, 10000) == osOK) {
|
if (osMutexAcquire(env->access, 10000) == osOK) {
|
||||||
VarsTabDumpObserver_Dump(env);
|
VarsTabDumpObserverParam_Dump(env);
|
||||||
env->dumpAfter = 0;
|
env->dumpAfter = 0;
|
||||||
osMutexRelease(env->access);
|
osMutexRelease(env->access);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,11 +11,14 @@
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
tLoggerInterface *logger;
|
tLoggerInterface *logger;
|
||||||
tStorageInterface *interface;
|
tStorageInterface *interfaceCalib;
|
||||||
|
tStorageInterface *interfaceParam;
|
||||||
tVariablesTable *trackableVarsTab;
|
tVariablesTable *trackableVarsTab;
|
||||||
uint32_t trackableGroup;
|
uint32_t trackableGroup;
|
||||||
void *data;
|
void *dataCalib;
|
||||||
size_t size;
|
void *dataParam;
|
||||||
|
size_t sizeCalib;
|
||||||
|
size_t sizeParam;
|
||||||
|
|
||||||
bool health;
|
bool health;
|
||||||
|
|
||||||
|
|
@ -34,17 +37,22 @@ typedef struct {
|
||||||
|
|
||||||
void VarsTabDumpObserver_Init(
|
void VarsTabDumpObserver_Init(
|
||||||
tVarsTabDumpObserver *env,
|
tVarsTabDumpObserver *env,
|
||||||
tStorageInterface *interface,
|
tStorageInterface *storageCalibInterface,
|
||||||
|
tStorageInterface *storageParamInterface,
|
||||||
uint32_t delay,
|
uint32_t delay,
|
||||||
void *data,
|
void *dataCalib,
|
||||||
size_t size,
|
void *dataParam,
|
||||||
|
size_t sizeCalib,
|
||||||
|
size_t sizeParam,
|
||||||
tVariablesTable *VarsTab,
|
tVariablesTable *VarsTab,
|
||||||
uint32_t trackableGroup
|
uint32_t trackableGroup
|
||||||
);
|
);
|
||||||
|
|
||||||
bool VarsTabDumpObserver_Load(tVarsTabDumpObserver *env);
|
bool VarsTabDumpObserverCalib_Load(tVarsTabDumpObserver *env);
|
||||||
|
bool VarsTabDumpObserverParam_Load(tVarsTabDumpObserver *env);
|
||||||
|
|
||||||
bool VarsTabDumpObserver_Dump(tVarsTabDumpObserver *env);
|
bool VarsTabDumpObserverCalib_Dump(tVarsTabDumpObserver *env);
|
||||||
|
bool VarsTabDumpObserverParam_Dump(tVarsTabDumpObserver *env);
|
||||||
|
|
||||||
void VarsTabDumpObserver_RequireDump(tVarsTabDumpObserver *env);
|
void VarsTabDumpObserver_RequireDump(tVarsTabDumpObserver *env);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue