#include "meter.h"

#include "charger_control.h"


METER_t METER;

// Функция для расчета и накопления энергии c дробной частью без счетчиков
void METER_CalculateEnergy() {
    // Проверяем, что индекс находится в пределах массива

	METER.online = 0;

	if(CONN.connState == Charging){
		METER.enable = 1;
	}else{
		METER.enable = 0;
	}

	uint32_t currentTick = HAL_GetTick();    // Получаем текущее время в миллисекундах
	uint32_t elapsedTimeMs = currentTick - METER.lastTick;    // Вычисляем время, прошедшее с последнего вызова в секундах
	METER.lastTick = currentTick;    // Обновляем время последнего вызова для текущего коннектора
	uint32_t energyWs = CONN.Power * elapsedTimeMs / 1000;    // Рассчитываем энергию в ватт-секундах за прошедший промежуток времени

	//Расчет энергии теперь идет всегда, смещение берем суммарное
	METER.EnergyPSU_Ws += energyWs;

	// Абсолютное значение энергии разъема складывается из накопленной дробной части и значения со счетчиков
	METER.AbsoluteEnergy = (uint32_t)METER.EnergyPSU_Ws/3600; //переводим в Вт*час

	if(METER.enable) {
		//enabled state
		CONN.Energy = METER.AbsoluteEnergy - METER.EnergyOffset;//переводим в Вт*час

	}else{
		// Reset statе
		CONN.Energy = 0;

		METER.EnergyOffset = METER.AbsoluteEnergy;

	}


}


