#ifndef __IIC_H
#define __IIC_H


#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"


#define IIC_SCL_GPIO_PORT                 GPIOA
#define IIC_SCL_GPIO_PIN                  GPIO_PIN_5
#define IIC_SCL_GPIO_CLK_ENABLE()         __HAL_RCC_GPIOA_CLK_ENABLE()

#define IIC_SDA_GPIO_PORT                 GPIOA
#define IIC_SDA_GPIO_PIN                  GPIO_PIN_6
#define IIC_SDA_GPIO_CLK_ENABLE()         __HAL_RCC_GPIOA_CLK_ENABLE()

#define IIC_SCL(x)                        do{ x ? \
                                            HAL_GPIO_WritePin(IIC_SCL_GPIO_PORT, IIC_SCL_GPIO_PIN, GPIO_PIN_SET) : \
                                            HAL_GPIO_WritePin(IIC_SCL_GPIO_PORT, IIC_SCL_GPIO_PIN, GPIO_PIN_RESET); \
                                            }while(0)       /* SCL */
#define IIC_SDA(x)                        do{x? \
                                             HAL_GPIO_WritePin(IIC_SDA_GPIO_PORT,IIC_SDA_GPIO_PIN,GPIO_PIN_SET): \
                                             HAL_GPIO_WritePin(IIC_SDA_GPIO_PORT,IIC_SDA_GPIO_PIN,GPIO_PIN_RESET); \
                                            }while(0);
#define IIC_READ_SDA                       HAL_GPIO_ReadPin(IIC_SDA_GPIO_PORT,IIC_SDA_GPIO_PIN)
                                            




void iic_init(void);
void iic_start(void);
uint8_t iic_read_byte(uint8_t ack);
void iic_send_byte(uint8_t data);
void iic_stop(void);
uint8_t iic_wait_ack(void);
void iic_ack(void);
void iic_nack(void);
#endif

