/**
 * @file    flash_manager.h
 * @brief     Interface para gerenciamento de memória não volátil (Flash)
 */

#ifndef INC_FLASH_MANAGER_H_
#define INC_FLASH_MANAGER_H_

/**
 * @file    flash_storage.h
 */

#ifndef FLASH_STORAGE_H
#define FLASH_STORAGE_H

#include "stm32f1xx_hal.h"
#include <stdint.h>
#include <string.h>

/* Endereço da página (Ex: última página do F103C8) */
#define FLASH_PAGE_ADDR     ((uint32_t)0x0800FC00)

/**
 * @brief Estrutura de 1KB alinhada e preenchida.
 * O uso de padding manual garante que não haja surpresas com o compilador.
 */
typedef struct __attribute__((packed, aligned(4)))
{
	uint32_t magic_number; 		// 4 bytes (Validação)
	float ph4_mV;				// 4 bytes
	float ph7_mV;				// 4 bytes
	float ph_temperature;		// 4 bytes
	float ph_slope_mV;			// 4 bytes
	float ph7_real;				// 4 bytes
	float ec1413_mag;			// 4 bytes
	float ec0_mag;				// 4 bytes
	float ec_factor;			// 4 bytes
	uint8_t PT100_PT1000_switch; // 1 byte
	uint8_t EC10mS_EC5mS_switch; // 1 byte
	uint8_t reserved[986];    	// Preenchimento para completar 1024 bytes (1KB)
} FlashPage_t;

extern FlashPage_t flash_data;

/* Protótipos */
HAL_StatusTypeDef Flash_Save_Page(FlashPage_t *pPage);
HAL_StatusTypeDef Flash_Load_Page(FlashPage_t *pDest);

#endif



#endif /* INC_FLASH_MANAGER_H_ */
