diff options
Diffstat (limited to 'driver/accelgyro_lsm6dsm.c')
-rw-r--r-- | driver/accelgyro_lsm6dsm.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c index d0ef49b906..683b2ed616 100644 --- a/driver/accelgyro_lsm6dsm.c +++ b/driver/accelgyro_lsm6dsm.c @@ -337,6 +337,14 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd) { int err; uint8_t ctrl_reg, reg_val; + /* + * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data, + * the address of lsm6dsm_data is the same as a_data's. Using this + * fact, we can do the following conversion. This conversion is equal + * to: + * struct lsm6dsm_data *lsm_data = s->drv_data; + * struct stprivate_data *data = &lsm_data->a_data; + */ struct stprivate_data *data = s->drv_data; int newrange = range; @@ -381,6 +389,14 @@ static int set_range(const struct motion_sensor_t *s, int range, int rnd) */ static int get_range(const struct motion_sensor_t *s) { + /* + * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data, + * the address of lsm6dsm_data is the same as a_data's. Using this + * fact, we can do the following conversion. This conversion is equal + * to: + * struct lsm6dsm_data *lsm_data = s->drv_data; + * struct stprivate_data *data = &lsm_data->a_data; + */ struct stprivate_data *data = s->drv_data; if (s->type == MOTIONSENSE_TYPE_ACCEL) @@ -399,6 +415,14 @@ static int get_range(const struct motion_sensor_t *s) static int set_data_rate(const struct motion_sensor_t *s, int rate, int rnd) { int ret, normalized_rate; + /* + * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data, + * the address of lsm6dsm_data is the same as a_data's. Using this + * fact, we can do the following conversion. This conversion is equal + * to: + * struct lsm6dsm_data *lsm_data = s->drv_data; + * struct stprivate_data *data = &lsm_data->a_data; + */ struct stprivate_data *data = s->drv_data; uint8_t ctrl_reg, reg_val; @@ -491,6 +515,14 @@ static int read(const struct motion_sensor_t *s, vector_3_t v) static int init(const struct motion_sensor_t *s) { int ret = 0, tmp; + /* + * Since 'stprivate_data a_data;' is the first member of lsm6dsm_data, + * the address of lsm6dsm_data is the same as a_data's. Using this + * fact, we can do the following conversion. This conversion is equal + * to: + * struct lsm6dsm_data *lsm_data = s->drv_data; + * struct stprivate_data *data = &lsm_data->a_data; + */ struct stprivate_data *data = s->drv_data; ret = st_raw_read8(s->port, s->addr, LSM6DSM_WHO_AM_I_REG, &tmp); |