/*
 * FRToSI2C.hpp
 *
 *  Created on: 14Apr.,2018
 *      Author: Ralim
 */

#ifndef FRTOSI2C_HPP_
#define FRTOSI2C_HPP_
#include "stm32f1xx_hal.h"
#include "cmsis_os.h"

class FRToSI2C {
public:

	static void init(I2C_HandleTypeDef *i2chandle) {i2c=i2chandle;
		I2CSemaphore=nullptr;}

	static void FRToSInit() {
		I2CSemaphore = xSemaphoreCreateBinary();
		xSemaphoreGive(I2CSemaphore);
	}

	static void CpltCallback(); //Normal Tx Callback

	static void Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize,
			uint8_t *pData, uint16_t Size);
	static void Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
			uint16_t MemAddSize, uint8_t *pData, uint16_t Size);

	static void Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);
	static void I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data);
	static uint8_t I2C_RegisterRead(uint8_t address, uint8_t reg);

private:
	static I2C_HandleTypeDef *i2c;
	static SemaphoreHandle_t I2CSemaphore;
};

#endif /* FRTOSI2C_HPP_ */
