// SPDX-License-Identifier: Apache-2.0 // Copyright (c) 2012-2024 Scott Penrose and WII5 Buoy contributors // // This file is part of WII5 Buoy firmware. // See LICENSE for full terms. /** * @file WII5Sh3dConfig.cpp * @brief WII5 adapter for the Sh3d shared configuration layer. */ /* TODO 2024 - Sh3dConfig vs Config */ #include #include "WII5Sh3dConfig.h" #include "WII5Sh3dConsole.h" #include /* ---------------------------------------------------------------------- */ // TODO Move this to Start Up void WII5Sh3dConfig::begin() { initialized = true; readConfig(); updateRunCount(); }; void WII5Sh3dConfig::readConfig() { EEPROM.readBlock(configStart, dataConfig); if ( (dataConfig.configType == CONFIG_TYPE) && (dataConfig.configVersion == CONFIG_VERSION) ) { return; } console.log(LOG_ERROR, F("!EEPROM old=%d,%d. new=%d,%d"), dataConfig.configType, dataConfig.configVersion, CONFIG_TYPE, CONFIG_VERSION ); memset(&dataConfig, 0, sizeof(dataConfig)); dataConfig.configType = CONFIG_TYPE; dataConfig.configVersion = CONFIG_VERSION; updateConfig(); } void WII5Sh3dConfig::updateConfig() { EEPROM.updateBlock(configStart, dataConfig); } SH3D_TYPE_UNIQUEID WII5Sh3dConfig::getNodeId() { if ( (dataConfig.nodeId < 10000) || (dataConfig.nodeId > 32000) ) console.safeLog(LOG_ERROR, F("Invalid nodeId")); return dataConfig.nodeId; } // TODO Ways of getting id etc? SH3D_TYPE_UNIQUEID WII5Sh3dConfig::setNodeId(SH3D_TYPE_UNIQUEID newId) { dataConfig.nodeId = newId; updateConfig(); } SH3D_TYPE_COUNTER WII5Sh3dConfig::getRunCount() { return dataConfig.runCount; } SH3D_TYPE_COUNTER WII5Sh3dConfig::updateRunCount() { dataConfig.runCount++; updateConfig(); return dataConfig.runCount; } SH3D_TYPE_COUNTER WII5Sh3dConfig::clearRunCount(SH3D_TYPE_COUNTER setId) { dataConfig.runCount = setId; updateConfig(); return dataConfig.runCount; } SH3D_TYPE_COUNTER WII5Sh3dConfig::getRecordCount() { return dataConfig.recordCount; } SH3D_TYPE_COUNTER WII5Sh3dConfig::updateRecordCount() { dataConfig.recordCount++; updateConfig(); return dataConfig.recordCount; } SH3D_TYPE_COUNTER WII5Sh3dConfig::clearRecordCount(SH3D_TYPE_COUNTER setId) { dataConfig.recordCount = setId; updateConfig(); return dataConfig.recordCount; } SH3D_TYPE_COUNTER WII5Sh3dConfig::getStorageLogLast() { return dataConfig.storageLogLast; } SH3D_TYPE_COUNTER WII5Sh3dConfig::updateStorageLogLast() { dataConfig.storageLogLast++; updateConfig(); return dataConfig.storageLogLast; } SH3D_TYPE_COUNTER WII5Sh3dConfig::clearStorageLogLast(SH3D_TYPE_COUNTER setId) { dataConfig.storageLogLast = setId; updateConfig(); return dataConfig.storageLogLast; } SH3D_TYPE_COUNTER WII5Sh3dConfig::getStorageSensorLast() { return dataConfig.storageSensorLast; } SH3D_TYPE_COUNTER WII5Sh3dConfig::updateStorageSensorLast() { dataConfig.storageSensorLast++; updateConfig(); return dataConfig.storageSensorLast; } SH3D_TYPE_COUNTER WII5Sh3dConfig::clearStorageSensorLast(SH3D_TYPE_COUNTER setId) { dataConfig.storageSensorLast = setId; updateConfig(); return dataConfig.storageSensorLast; } uint16_t sizeExtra() { // TODO return extraLen; return extraLen; } void readExtra(char *data, uint16_t len, uint16_t offset) { // TODO EEPROM.readBlock(data, extraStart + offset, len); } void updateExtra(char *data, uint16_t len, uint16_t offset) { // TODO EEPROM.updateData(data, extraStart + offset, len); // EEPROM.updateBlock(extraStart, dataConfig); } WII5Sh3dConfig sh3dNodeConfig;