/* * Copyright (C) 2015-2017 Alibaba Group Holding Limited */ #ifndef HAL_I2C_H #define HAL_I2C_H #define I2C_MODE_MASTER 1 /* i2c communication is master mode */ #define I2C_MODE_SLAVE 2 /* i2c communication is slave mode */ #define I2C_MEM_ADDR_SIZE_8BIT 1 /* i2c menory address size 8bit */ #define I2C_MEM_ADDR_SIZE_16BIT 2 /* i2c menory address size 16bit */ typedef struct { uint32_t address_width; uint32_t freq; uint8_t mode; uint16_t dev_addr; } i2c_config_t; typedef struct { uint8_t port; /* i2c port */ i2c_config_t config; /* i2c config */ void *priv; /* priv data */ } i2c_dev_t; /** * Initialises an I2C interface * Prepares an I2C hardware interface for communication as a master or slave * * @param[in] i2c the device for which the i2c port should be initialised * * @return 0 : on success, EIO : if an error occurred during initialisation */ int32_t hal_i2c_init(i2c_dev_t *i2c); /** * I2c master send * * @param[in] i2c the i2c device * @param[in] dev_addr device address * @param[in] data i2c send data * @param[in] size i2c send data size * @param[in] timeout timeout in ms * * @return 0 : on success, EIO : if an error occurred during initialisation */ int32_t hal_i2c_master_send(i2c_dev_t *i2c, uint16_t dev_addr, const uint8_t *data, uint16_t size, uint32_t timeout); /** * I2c master recv * * @param[in] i2c the i2c device * @param[in] dev_addr device address * @param[out] data i2c receive data * @param[in] size i2c receive data size * @param[in] timeout timeout in ms * * @return 0 : on success, EIO : if an error occurred during initialisation */ int32_t hal_i2c_master_recv(i2c_dev_t *i2c, uint16_t dev_addr, uint8_t *data, uint16_t size, uint32_t timeout); /** * I2c slave send * * @param[in] i2c the i2c device * @param[in] data i2c slave send data * @param[in] size i2c slave send data size * @param[in] timeout timeout in ms * * @return 0 : on success, EIO : if an error occurred during initialisation */ int32_t hal_i2c_slave_send(i2c_dev_t *i2c, const uint8_t *data, uint16_t size, uint32_t timeout); /** * I2c slave receive * * @param[in] i2c tthe i2c device * @param[out] data i2c slave receive data * @param[in] size i2c slave receive data size * @param[in] timeout timeout in ms * * @return 0 : on success, EIO : if an error occurred during initialisation */ int32_t hal_i2c_slave_recv(i2c_dev_t *i2c, uint8_t *data, uint16_t size, uint32_t timeout); /** * I2c mem write * * @param[in] i2c the i2c device * @param[in] dev_addr device address * @param[in] mem_addr mem address * @param[in] mem_addr_size mem address * @param[in] data i2c master send data * @param[in] size i2c master send data size * @param[in] timeout timeout in ms * * @return 0 : on success, EIO : if an error occurred during initialisation */ int32_t hal_i2c_mem_write(i2c_dev_t *i2c, uint16_t dev_addr, uint16_t mem_addr, uint16_t mem_addr_size, const uint8_t *data, uint16_t size, uint32_t timeout); /** * I2c master mem read * * @param[in] i2c the i2c device * @param[in] dev_addr device address * @param[in] mem_addr mem address * @param[in] mem_addr_size mem address * @param[out] data i2c master send data * @param[in] size i2c master send data size * @param[in] timeout timeout in ms * * @return 0 : on success, EIO : if an error occurred during initialisation */ int32_t hal_i2c_mem_read(i2c_dev_t *i2c, uint16_t dev_addr, uint16_t mem_addr, uint16_t mem_addr_size, uint8_t *data, uint16_t size, uint32_t timeout); /** * Deinitialises an I2C device * * @param[in] i2c the i2c device * * @return 0 : on success, EIO : if an error occurred during deinitialisation */ int32_t hal_i2c_finalize(i2c_dev_t *i2c); #endif /* HAL_I2C_H */