sample/shield: x-nucleo-iks01a3: add trig/temp/cfg support to LIS2MDL
Add support to LIS2MDL trigger, dynamic odr configuration as well as temperature data reading. Signed-off-by: Armando Visconti <armando.visconti@st.com>
This commit is contained in:
parent
214c2e799a
commit
ff733369ec
3 changed files with 52 additions and 4 deletions
|
@ -67,11 +67,13 @@ Sample Output
|
|||
LPS22HH: Pressure:99.150 kpa
|
||||
STTS751: Temperature: 27.6 C
|
||||
LIS2MDL: Magn (gauss): x: -0.445, y: -0.054, z: -0.066
|
||||
LIS2MDL: Temperature: 26.8 C
|
||||
LIS2DW12: Accel (m.s-2): x: -0.413, y: 0.077, z: 10.337
|
||||
LSM6DSO: Accel (m.s-2): x: 0.133, y: -0.133, z: 10.102
|
||||
LSM6DSO: GYro (dps): x: 0.000, y: -0.006, z: -0.058
|
||||
1:: lps22hh trig 200
|
||||
1:: lsm6dso acc trig 200
|
||||
1:: lsm6dso gyr trig 200
|
||||
1:: lis2mdl trig 208
|
||||
1:: lps22hh trig 214
|
||||
1:: lsm6dso acc trig 426
|
||||
1:: lsm6dso gyr trig 426
|
||||
|
||||
<updated endlessly every 2 seconds>
|
||||
|
|
|
@ -11,7 +11,7 @@ CONFIG_LPS22HH_TRIGGER_OWN_THREAD=y
|
|||
CONFIG_STTS751=y
|
||||
CONFIG_STTS751_TRIGGER_NONE=y
|
||||
CONFIG_LIS2MDL=y
|
||||
CONFIG_LIS2MDL_TRIGGER_NONE=y
|
||||
CONFIG_LIS2MDL_TRIGGER_OWN_THREAD=y
|
||||
CONFIG_LIS2DW12=y
|
||||
CONFIG_LIS2DW12_TRIGGER_NONE=y
|
||||
CONFIG_LSM6DSO=y
|
||||
|
|
|
@ -10,6 +10,17 @@
|
|||
#include <stdio.h>
|
||||
#include <sys/util.h>
|
||||
|
||||
#ifdef CONFIG_LIS2MDL_TRIGGER
|
||||
static int lis2mdl_trig_cnt;
|
||||
|
||||
static void lis2mdl_trigger_handler(struct device *dev,
|
||||
struct sensor_trigger *trig)
|
||||
{
|
||||
sensor_sample_fetch_chan(dev, SENSOR_CHAN_ALL);
|
||||
lis2mdl_trig_cnt++;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LPS22HH_TRIGGER
|
||||
static int lps22hh_trig_cnt;
|
||||
|
||||
|
@ -69,6 +80,29 @@ static void lsm6dso_temp_trig_handler(struct device *dev,
|
|||
}
|
||||
#endif
|
||||
|
||||
static void lis2mdl_config(struct device *lis2mdl)
|
||||
{
|
||||
struct sensor_value odr_attr;
|
||||
|
||||
/* set LIS2MDL sampling frequency to 100 Hz */
|
||||
odr_attr.val1 = 100;
|
||||
odr_attr.val2 = 0;
|
||||
|
||||
if (sensor_attr_set(lis2mdl, SENSOR_CHAN_ALL,
|
||||
SENSOR_ATTR_SAMPLING_FREQUENCY, &odr_attr) < 0) {
|
||||
printk("Cannot set sampling frequency for LIS2MDL\n");
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_LIS2MDL_TRIGGER
|
||||
struct sensor_trigger trig;
|
||||
|
||||
trig.type = SENSOR_TRIG_DATA_READY;
|
||||
trig.chan = SENSOR_CHAN_MAGN_XYZ;
|
||||
sensor_trigger_set(lis2mdl, &trig, lis2mdl_trigger_handler);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void lps22hh_config(struct device *lps22hh)
|
||||
{
|
||||
struct sensor_value odr_attr;
|
||||
|
@ -209,6 +243,7 @@ void main(void)
|
|||
#ifdef CONFIG_LSM6DSO_ENABLE_TEMP
|
||||
struct sensor_value die_temp;
|
||||
#endif
|
||||
struct sensor_value die_temp2;
|
||||
struct sensor_value accel1[3], accel2[3];
|
||||
struct sensor_value gyro[3];
|
||||
struct sensor_value magn[3];
|
||||
|
@ -245,6 +280,7 @@ void main(void)
|
|||
return;
|
||||
}
|
||||
|
||||
lis2mdl_config(lis2mdl);
|
||||
lps22hh_config(lps22hh);
|
||||
stts751_config(stts751);
|
||||
lis2dw12_config(lis2dw12);
|
||||
|
@ -268,10 +304,12 @@ void main(void)
|
|||
return;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_LIS2MDL_TRIGGER
|
||||
if (sensor_sample_fetch(lis2mdl) < 0) {
|
||||
printf("LIS2MDL Magn Sensor sample update error\n");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_LIS2DW12_TRIGGER
|
||||
if (sensor_sample_fetch(lis2dw12) < 0) {
|
||||
|
@ -294,6 +332,7 @@ void main(void)
|
|||
sensor_channel_get(lps22hh, SENSOR_CHAN_PRESS, &press);
|
||||
sensor_channel_get(stts751, SENSOR_CHAN_AMBIENT_TEMP, &temp3);
|
||||
sensor_channel_get(lis2mdl, SENSOR_CHAN_MAGN_XYZ, magn);
|
||||
sensor_channel_get(lis2mdl, SENSOR_CHAN_DIE_TEMP, &die_temp2);
|
||||
sensor_channel_get(lis2dw12, SENSOR_CHAN_ACCEL_XYZ, accel2);
|
||||
sensor_channel_get(lsm6dso, SENSOR_CHAN_ACCEL_XYZ, accel1);
|
||||
sensor_channel_get(lsm6dso, SENSOR_CHAN_GYRO_XYZ, gyro);
|
||||
|
@ -334,6 +373,9 @@ void main(void)
|
|||
sensor_value_to_double(&magn[1]),
|
||||
sensor_value_to_double(&magn[2]));
|
||||
|
||||
printf("LIS2MDL: Temperature: %.1f C\n",
|
||||
sensor_value_to_double(&die_temp2));
|
||||
|
||||
printf("LIS2DW12: Accel (m.s-2): x: %.3f, y: %.3f, z: %.3f\n",
|
||||
sensor_value_to_double(&accel2[0]),
|
||||
sensor_value_to_double(&accel2[1]),
|
||||
|
@ -355,6 +397,10 @@ void main(void)
|
|||
sensor_value_to_double(&die_temp));
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LIS2MDL_TRIGGER)
|
||||
printk("%d:: lis2mdl trig %d\n", cnt, lis2mdl_trig_cnt);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LPS22HH_TRIGGER)
|
||||
printk("%d:: lps22hh trig %d\n", cnt, lps22hh_trig_cnt);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue