Commit ff733369 authored by Armando Visconti's avatar Armando Visconti Committed by Maureen Helm
Browse files

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: default avatarArmando Visconti <armando.visconti@st.com>
parent 214c2e79
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -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>
+1 −1
Original line number Diff line number Diff line
@@ -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
+46 −0
Original line number Diff line number Diff line
@@ -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