#include <stdint.h>
#include "stm32g4xx_hal.h"
#include "i2c_eeprom.h"
#include "bassofono.h"

// HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

void i2c_eeprom_scrivi_pagina(uint16_t indirizzo, uint8_t * dati){
        while (HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)(EEPROM_INDIRIZZO_I2C), 3, 100) != HAL_OK) { }
        HAL_I2C_Mem_Write(&hi2c1, (uint16_t)(EEPROM_INDIRIZZO_I2C), indirizzo, I2C_MEMADD_SIZE_16BIT, dati, EEPROM_BYTES_PER_PAGINA, 100);
}

uint8_t i2c_eeprom_leggi_pagina(uint16_t indirizzo, uint8_t * dati){
	HAL_StatusTypeDef status = HAL_OK;
        while (HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)(EEPROM_INDIRIZZO_I2C), 3, 100) != HAL_OK) { }
        status = HAL_I2C_Mem_Read(&hi2c1, (uint16_t)(EEPROM_INDIRIZZO_I2C), indirizzo, I2C_MEMADD_SIZE_8BIT, dati, EEPROM_BYTES_PER_PAGINA, 100);
	return status;
}

void salva_canale(uint8_t numero){
	i2c_eeprom_scrivi_pagina((EEPROM_OFFSET_CANALE + numero) * EEPROM_BYTES_PER_PAGINA, (uint8_t)&canale);
}

void leggi_canale(uint8_t numero){
	i2c_eeprom_leggi_pagina((EEPROM_OFFSET_CANALE + numero) * EEPROM_BYTES_PER_PAGINA, (uint8_t)&canale);
}

void salva_stato(void){
	i2c_eeprom_scrivi_pagina(EEPROM_INDIRIZZO_STATO * EEPROM_BYTES_PER_PAGINA, (uint8_t)&stato);
}

void leggi_stato(void){
	i2c_eeprom_leggi_pagina(EEPROM_INDIRIZZO_STATO * EEPROM_BYTES_PER_PAGINA, (uint8_t)&stato);
}
