mirror of https://github.com/ARMmbed/mbed-os.git
STM32: I2C: Move up get_i2c_obj
so that it can be used as well in sync modepull/3238/head
parent
0bee69023c
commit
490437ae29
|
@ -84,6 +84,10 @@ struct spi_s {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct i2c_s {
|
struct i2c_s {
|
||||||
|
/* The 1st 2 members I2CName i2c
|
||||||
|
* and I2C_HandleTypeDef handle should
|
||||||
|
* be kept as the first members of this struct
|
||||||
|
*/
|
||||||
I2CName i2c;
|
I2CName i2c;
|
||||||
I2C_HandleTypeDef handle;
|
I2C_HandleTypeDef handle;
|
||||||
IRQn_Type event_i2cIRQ;
|
IRQn_Type event_i2cIRQ;
|
||||||
|
|
|
@ -165,7 +165,20 @@ void i2c_frequency(i2c_t *obj, int hz)
|
||||||
handle->Instance->CR1 |= I2C_CR1_ACK;
|
handle->Instance->CR1 |= I2C_CR1_ACK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_t *get_i2c_obj(I2C_HandleTypeDef *hi2c){
|
||||||
|
|
||||||
|
/* Aim of the function is to get i2c_s pointer using hi2c pointer */
|
||||||
|
/* Highly inspired from magical linux kernel's "container_of" */
|
||||||
|
/* (which was not directly used since not compatible with IAR toolchain) */
|
||||||
|
struct i2c_s *obj_s;
|
||||||
|
i2c_t *obj;
|
||||||
|
|
||||||
|
obj_s = (struct i2c_s *)( (char *)hi2c - offsetof(struct i2c_s,handle));
|
||||||
|
obj = (i2c_t *)( (char *)obj_s - offsetof(i2c_t,i2c));
|
||||||
|
|
||||||
|
return (obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int i2c_start(i2c_t *obj) {
|
inline int i2c_start(i2c_t *obj) {
|
||||||
|
@ -570,21 +583,6 @@ int i2c_slave_write(i2c_t *obj, const char *data, int length) {
|
||||||
|
|
||||||
#if DEVICE_I2C_ASYNCH
|
#if DEVICE_I2C_ASYNCH
|
||||||
|
|
||||||
|
|
||||||
i2c_t *get_i2c_obj(I2C_HandleTypeDef *hi2c){
|
|
||||||
|
|
||||||
/* Aim of the function is to get i2c_s pointer using hi2c pointer */
|
|
||||||
/* Highly inspired from magical linux kernel's "container_of" */
|
|
||||||
/* (which was not directly used since not compatible with IAR toolchain) */
|
|
||||||
struct i2c_s *obj_s;
|
|
||||||
i2c_t *obj;
|
|
||||||
|
|
||||||
obj_s = (struct i2c_s *)( (char *)hi2c - offsetof(struct i2c_s,handle));
|
|
||||||
obj = (i2c_t *)( (char *)obj_s - offsetof(i2c_t,i2c));
|
|
||||||
|
|
||||||
return (obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c){
|
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c){
|
||||||
/* Get object ptr based on handler ptr */
|
/* Get object ptr based on handler ptr */
|
||||||
i2c_t *obj = get_i2c_obj(hi2c);
|
i2c_t *obj = get_i2c_obj(hi2c);
|
||||||
|
|
Loading…
Reference in New Issue