diff --git a/src/omv/cambus.c b/src/omv/cambus.c index 7c9d15e8b..f3cd957eb 100644 --- a/src/omv/cambus.c +++ b/src/omv/cambus.c @@ -38,6 +38,16 @@ int cambus_init(I2C_HandleTypeDef *i2c, I2C_TypeDef *instance, uint32_t timing) /* Initialization Error */ return -1; } + + return 0; +} + +int cambus_deinit(I2C_HandleTypeDef *i2c) +{ + if (i2c->Instance) { + HAL_I2C_DeInit(i2c); + } + i2c->Instance = NULL; return 0; } @@ -156,3 +166,51 @@ int cambus_writew2(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint16_t reg_addr, __enable_irq(); return ret; } + +int cambus_read_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint8_t reg_addr, uint8_t *buf, int len) +{ + int ret=0; + __disable_irq(); + if (HAL_I2C_Mem_Read(i2c, slv_addr, reg_addr, + I2C_MEMADD_SIZE_8BIT, buf, len, I2C_TIMEOUT) != HAL_OK) { + ret = -1; + } + __enable_irq(); + return ret; +} + +int cambus_write_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint8_t reg_addr, uint8_t *buf, int len) +{ + int ret=0; + __disable_irq(); + if (HAL_I2C_Mem_Write(i2c, slv_addr, reg_addr, + I2C_MEMADD_SIZE_8BIT, buf, len, I2C_TIMEOUT) != HAL_OK) { + ret = -1; + } + __enable_irq(); + return ret; +} + +int cambus_readw_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint16_t reg_addr, uint8_t *buf, int len) +{ + int ret=0; + __disable_irq(); + if (HAL_I2C_Mem_Read(i2c, slv_addr, reg_addr, + I2C_MEMADD_SIZE_16BIT, buf, len, I2C_TIMEOUT) != HAL_OK) { + ret = -1; + } + __enable_irq(); + return ret; +} + +int cambus_writew_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint16_t reg_addr, uint8_t *buf, int len) +{ + int ret=0; + __disable_irq(); + if (HAL_I2C_Mem_Write(i2c, slv_addr, reg_addr, + I2C_MEMADD_SIZE_16BIT, buf, len, I2C_TIMEOUT) != HAL_OK) { + ret = -1; + } + __enable_irq(); + return ret; +} diff --git a/src/omv/cambus.h b/src/omv/cambus.h index 126e556b9..5504083bf 100644 --- a/src/omv/cambus.h +++ b/src/omv/cambus.h @@ -41,4 +41,8 @@ int cambus_readw(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint8_t reg_addr, ui int cambus_writew(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint8_t reg_addr, uint16_t reg_data); int cambus_readw2(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint16_t reg_addr, uint16_t *reg_data); int cambus_writew2(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint16_t reg_addr, uint16_t reg_data); +int cambus_read_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint8_t reg_addr, uint8_t *buf, int len); +int cambus_write_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint8_t reg_addr, uint8_t *buf, int len); +int cambus_readw_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint16_t reg_addr, uint8_t *buf, int len); +int cambus_writew_bytes(I2C_HandleTypeDef *i2c, uint8_t slv_addr, uint16_t reg_addr, uint8_t *buf, int len); #endif // __CAMBUS_H__