diff --git a/VarTabDumpObserver.c b/VarTabDumpObserver.c index fecb364..0b40871 100644 --- a/VarTabDumpObserver.c +++ b/VarTabDumpObserver.c @@ -1,5 +1,5 @@ // -// Created by xemon on 19.12.22. +// Created by cfif on 19.12.22. // #include @@ -13,19 +13,27 @@ void VarsTabDumpObserver_Init( tVarsTabDumpObserver *env, - tStorageInterface *interface, + tStorageInterface *storageCalibInterface, + tStorageInterface *storageParamInterface, uint32_t delay, - void *data, - size_t size, + void *dataCalib, + void *dataParam, + size_t sizeCalib, + size_t sizeParam, tVariablesTable *VarsTab, uint32_t trackableGroup ) { - env->interface = interface; + env->interfaceCalib = storageCalibInterface; + env->interfaceParam = storageParamInterface; + env->trackableVarsTab = VarsTab; env->trackableGroup = trackableGroup; - env->data = data; - env->size = size; + env->dataCalib = dataCalib; + env->sizeCalib = sizeCalib; + + env->dataParam = dataParam; + env->sizeParam = sizeParam; env->delay = delay; 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) { - eStorageStatus dumpStatus = StorageLoad(env->interface, env->data, env->size); + eStorageStatus dumpStatus = StorageLoad(env->interfaceCalib, env->dataCalib, env->sizeCalib); osMutexRelease(env->accessDumper); if (dumpStatus == STORAGE_ERR_DEVICE) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка ПЗУ") + LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка ПЗУ") env->health = false; return false; } else if (dumpStatus == STORAGE_OK) { env->health = true; - LoggerInfoStatic(LOGGER, LOG_SIGN, "Данные успешно загружены из ПЗУ") + LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Данные успешно загружены из ПЗУ") return true; } - LoggerInfoStatic(LOGGER, LOG_SIGN, "Ошибка данных при загрузке из ПЗУ") + LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка данных при загрузке из ПЗУ") return false; } else { - LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка чтения ПЗУ!!!") - LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка параллельного доступа") + LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка чтения ПЗУ!!!") + LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка параллельного доступа") return false; } } -bool VarsTabDumpObserver_Dump(tVarsTabDumpObserver *env) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Попытка записи в ПЗУ...") +bool VarsTabDumpObserverParam_Load(tVarsTabDumpObserver *env) { + + 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) { env->logger->logging( - env->logger->env, "Хран.Наб.", - sizeof("Хран.Наб.") - 1, + env->logger->env, "Калибровка. Хран.Наб.", + sizeof("Калибровка. Хран.Наб.") - 1, LOGLEVEL_INFO, - "Запись в ПЗУ...", - sizeof("Запись в ПЗУ...") - 1, true + "Калибровка. Запись в ПЗУ...", + sizeof("Калибровка. Запись в ПЗУ...") - 1, true ); } 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); env->health = (result == STORAGE_OK); if (env->health) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Успешно записано в ПЗУ") + LoggerInfoStatic(LOGGER, LOG_SIGN, "Калибровка. Успешно записано в ПЗУ") return true; } else { - LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка записи в ПЗУ!!!") + LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка записи в ПЗУ!!!") if (result == STORAGE_ERR_DATA) { - LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка контрольной суммы") + LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка контрольной суммы") } else { - LoggerErrorStatic(LOGGER, LOG_SIGN, "Ошибка ПЗУ") + LoggerErrorStatic(LOGGER, LOG_SIGN, "Калибровка. Ошибка ПЗУ") } return false; } } 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; } } @@ -125,7 +201,7 @@ void DeviceStorageProcessing(tVarsTabDumpObserver *env) { if (env->dumpAfter && VarsTabDumpObserver_IsNowDumpRequired(env)) { if (osMutexAcquire(env->access, 1) == osOK) { if (VarsTabDumpObserver_IsNowDumpRequired(env)) { - VarsTabDumpObserver_Dump(env); + VarsTabDumpObserverParam_Dump(env); env->dumpAfter = 0; } osMutexRelease(env->access); @@ -153,7 +229,7 @@ void VarsTabDumpObserver_Flush(tVarsTabDumpObserver *env) { if (env->dumpAfter) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Есть изменения, записываем в ПЗУ") if (osMutexAcquire(env->access, 10000) == osOK) { - VarsTabDumpObserver_Dump(env); + VarsTabDumpObserverParam_Dump(env); env->dumpAfter = 0; osMutexRelease(env->access); } diff --git a/VarsTabDumpObserver.h b/VarsTabDumpObserver.h index 504fac2..a82393e 100644 --- a/VarsTabDumpObserver.h +++ b/VarsTabDumpObserver.h @@ -11,11 +11,14 @@ typedef struct { tLoggerInterface *logger; - tStorageInterface *interface; + tStorageInterface *interfaceCalib; + tStorageInterface *interfaceParam; tVariablesTable *trackableVarsTab; uint32_t trackableGroup; - void *data; - size_t size; + void *dataCalib; + void *dataParam; + size_t sizeCalib; + size_t sizeParam; bool health; @@ -34,17 +37,22 @@ typedef struct { void VarsTabDumpObserver_Init( tVarsTabDumpObserver *env, - tStorageInterface *interface, + tStorageInterface *storageCalibInterface, + tStorageInterface *storageParamInterface, uint32_t delay, - void *data, - size_t size, + void *dataCalib, + void *dataParam, + size_t sizeCalib, + size_t sizeParam, tVariablesTable *VarsTab, 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);