//
// Created by villuton on 16.09.2025.
//

#ifndef CHARGER_DATAFLASH_H
#define CHARGER_DATAFLASH_H

#include "ChargerConfig.h"
#include <VariablesTable.h>
#include "BaseTypes/Strings.h"


#define DEVICE_DATA_NO_VOLATILE_VERSION 0x10

typedef struct {
    struct {
        tString16 value;
        uint16_t writeAccess;
    } serialNumber;

    /// Значение напряжения, подаваемого на вход АКБ в момент калибровки канала
    float vReference;
    /// Массив калибровочных коэффициентов ждя расчета напряжения на канале
    float chanelCalibrationFactor[STORAGE_CALIB_CHANEL_NUM];
    /// Коэффициент соотношения делителя напряжения,
    /// в случае, если калибровочного значения для канала нет, расчет ведется по нему
    float dividerRatio;

    /// Порог напряжения, при котором мы считаем, что аккумулятор отключен
    float voltageBatteryConnectThreshold;
    /// Порог напряжения, при котором мы считаем, что аккумулятор заряжен
    float voltageBatteryLoadedThreshold;

} tDeviceSettings;

typedef struct {
    uint32_t version;
    tDeviceSettings device;
} tDeviceDataNonVolatile;

void DeviceDataNonVolatile_InitDefaults(tDeviceDataNonVolatile *env);

void DataFlash_AddToVarTab(
        tDeviceDataNonVolatile *env,
        tVariablesTable *variablesTable,
        uint32_t group
);
#endif //CHARGER_DATAFLASH_H
