summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/drivers/include/drivers/sensor.h5
-rw-r--r--components/drivers/sensors/sensor.c13
-rwxr-xr-xcomponents/drivers/sensors/sensor_cmd.c200
3 files changed, 116 insertions, 102 deletions
diff --git a/components/drivers/include/drivers/sensor.h b/components/drivers/include/drivers/sensor.h
index ede8d11c99..ac57a686b1 100644
--- a/components/drivers/include/drivers/sensor.h
+++ b/components/drivers/include/drivers/sensor.h
@@ -50,6 +50,8 @@ extern "C" {
#define RT_SENSOR_CLASS_GNSS (16) /* GPS/GNSS sensor */
#define RT_SENSOR_CLASS_TOF (17) /* TOF sensor */
#define RT_SENSOR_CLASS_SPO2 (18) /* SpO2 sensor */
+#define RT_SENSOR_CLASS_IAQ (19) /* IAQ sensor. */
+#define RT_SENSOR_CLASS_ETOH (20) /* EtOH sensor. */
/* Sensor vendor types */
@@ -90,6 +92,7 @@ extern "C" {
#define RT_SENSOR_UNIT_PPB (15) /* Concentration unit: ppb */
#define RT_SENSOR_UNIT_DMS (16) /* Coordinates unit: DMS */
#define RT_SENSOR_UNIT_DD (17) /* Coordinates unit: DD */
+#define RT_SENSOR_UNIT_MGM3 (18) /* Concentration unit: mg/m3 */
/* Sensor communication interface types */
#define RT_SENSOR_INTF_I2C (1 << 0)
@@ -218,6 +221,8 @@ struct rt_sensor_data
rt_uint32_t dust; /* Dust sensor. unit: ug/m3 */
rt_uint32_t eco2; /* eCO2 sensor. unit: ppm */
rt_uint32_t spo2; /* SpO2 sensor. unit: permillage */
+ rt_uint32_t iaq; /* IAQ sensor. unit: 1 */
+ rt_uint32_t etoh; /* EtOH sensor. unit: ppm */
} data;
};
diff --git a/components/drivers/sensors/sensor.c b/components/drivers/sensors/sensor.c
index 951c0a9a62..b7662cddd6 100644
--- a/components/drivers/sensors/sensor.c
+++ b/components/drivers/sensors/sensor.c
@@ -37,7 +37,9 @@ static char *const sensor_name_str[] =
"eco2_", /* eCO2 sensor */
"gnss_", /* GPS/GNSS sensor */
"tof_", /* TOF sensor */
- "spo2_" /* SpO2 sensor */
+ "spo2_", /* SpO2 sensor */
+ "iaq_", /* IAQ sensor */
+ "etoh_", /* EtOH sensor */
};
/* Sensor interrupt correlation function */
@@ -134,7 +136,8 @@ static rt_err_t local_control(struct rt_sensor_device *sensor, int cmd, void *ar
LOG_D("Undefined control");
return RT_ERROR;
}
-static struct rt_sensor_ops local_ops = {
+static struct rt_sensor_ops local_ops =
+{
.fetch_data = local_fetch_data,
.control = local_control
};
@@ -145,7 +148,7 @@ static rt_err_t rt_sensor_open(rt_device_t dev, rt_uint16_t oflag)
rt_sensor_t sensor = (rt_sensor_t)dev;
RT_ASSERT(dev != RT_NULL);
rt_err_t res = RT_EOK;
- rt_err_t (*local_ctrl)(struct rt_sensor_device *sensor, int cmd, void *arg) = local_control;
+ rt_err_t (*local_ctrl)(struct rt_sensor_device * sensor, int cmd, void *arg) = local_control;
if (sensor->module)
{
@@ -311,7 +314,7 @@ static rt_size_t rt_sensor_read(rt_device_t dev, rt_off_t pos, void *buf, rt_siz
if (sensor->ops->fetch_data != RT_NULL)
{
result = sensor->ops->fetch_data(sensor, buf, len);
- }
+ }
}
if (sensor->module)
@@ -359,7 +362,7 @@ static rt_err_t rt_sensor_control(rt_device_t dev, int cmd, void *args)
{
sensor->config.range = (rt_int32_t)args;
LOG_D("set range %d", sensor->config.range);
- }
+ }
break;
case RT_SENSOR_CTRL_SET_ODR:
/* Configuration data output rate */
diff --git a/components/drivers/sensors/sensor_cmd.c b/components/drivers/sensors/sensor_cmd.c
index 0b82952b2a..83ccde3145 100755
--- a/components/drivers/sensors/sensor_cmd.c
+++ b/components/drivers/sensors/sensor_cmd.c
@@ -74,6 +74,12 @@ static void sensor_show_data(rt_size_t num, rt_sensor_t sensor, struct rt_sensor
case RT_SENSOR_CLASS_ECO2:
LOG_I("num:%3d, eco2:%5d ppm, timestamp:%5d", num, sensor_data->data.eco2, sensor_data->timestamp);
break;
+ case RT_SENSOR_CLASS_IAQ:
+ LOG_I("num:%3d, IAQ:%5d.%d , timestamp:%5d", num, sensor_data->data.iaq / 10, sensor_data->data.iaq % 10, sensor_data->timestamp);
+ break;
+ case RT_SENSOR_CLASS_ETOH:
+ LOG_I("num:%3d, EtOH:%5d.%03d ppm, timestamp:%5d", num, sensor_data->data.etoh / 1000, sensor_data->data.etoh % 1000, sensor_data->timestamp);
+ break;
default:
break;
}
@@ -156,7 +162,7 @@ static void sensor_fifo(int argc, char **argv)
rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)20);
}
#ifdef RT_USING_FINSH
-MSH_CMD_EXPORT(sensor_fifo, Sensor fifo mode test function);
+ MSH_CMD_EXPORT(sensor_fifo, Sensor fifo mode test function);
#endif
static void sensor_irq_rx_entry(void *parameter)
@@ -220,7 +226,7 @@ static void sensor_int(int argc, char **argv)
rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)20);
}
#ifdef RT_USING_FINSH
-MSH_CMD_EXPORT(sensor_int, Sensor interrupt mode test function);
+ MSH_CMD_EXPORT(sensor_int, Sensor interrupt mode test function);
#endif
static void sensor_polling(int argc, char **argv)
@@ -269,7 +275,7 @@ static void sensor_polling(int argc, char **argv)
rt_device_close(dev);
}
#ifdef RT_USING_FINSH
-MSH_CMD_EXPORT(sensor_polling, Sensor polling mode test function);
+ MSH_CMD_EXPORT(sensor_polling, Sensor polling mode test function);
#endif
static void sensor(int argc, char **argv)
@@ -306,103 +312,103 @@ static void sensor(int argc, char **argv)
rt_device_control(dev, RT_SENSOR_CTRL_GET_INFO, &info);
switch (info.vendor)
{
- case RT_SENSOR_VENDOR_UNKNOWN:
- rt_kprintf("vendor :unknown vendor\n");
- break;
- case RT_SENSOR_VENDOR_STM:
- rt_kprintf("vendor :STMicroelectronics\n");
- break;
- case RT_SENSOR_VENDOR_BOSCH:
- rt_kprintf("vendor :Bosch\n");
- break;
- case RT_SENSOR_VENDOR_INVENSENSE:
- rt_kprintf("vendor :Invensense\n");
- break;
- case RT_SENSOR_VENDOR_SEMTECH:
- rt_kprintf("vendor :Semtech\n");
- break;
- case RT_SENSOR_VENDOR_GOERTEK:
- rt_kprintf("vendor :Goertek\n");
- break;
- case RT_SENSOR_VENDOR_MIRAMEMS:
- rt_kprintf("vendor :MiraMEMS\n");
- break;
- case RT_SENSOR_VENDOR_DALLAS:
- rt_kprintf("vendor :Dallas\n");
- break;
- case RT_SENSOR_VENDOR_ASAIR:
- rt_kprintf("vendor :Asair\n");
- break;
- case RT_SENSOR_VENDOR_SHARP:
- rt_kprintf("vendor :Sharp\n");
- break;
- case RT_SENSOR_VENDOR_SENSIRION:
- rt_kprintf("vendor :Sensirion\n");
- break;
- case RT_SENSOR_VENDOR_TI:
- rt_kprintf("vendor :Texas Instruments\n");
- break;
- case RT_SENSOR_VENDOR_PLANTOWER:
- rt_kprintf("vendor :Plantower\n");
- break;
- case RT_SENSOR_VENDOR_AMS:
- rt_kprintf("vendor :AMS\n");
- break;
- case RT_SENSOR_VENDOR_MAXIM:
- rt_kprintf("vendor :Maxim Integrated\n");
- break;
+ case RT_SENSOR_VENDOR_UNKNOWN:
+ rt_kprintf("vendor :unknown vendor\n");
+ break;
+ case RT_SENSOR_VENDOR_STM:
+ rt_kprintf("vendor :STMicroelectronics\n");
+ break;
+ case RT_SENSOR_VENDOR_BOSCH:
+ rt_kprintf("vendor :Bosch\n");
+ break;
+ case RT_SENSOR_VENDOR_INVENSENSE:
+ rt_kprintf("vendor :Invensense\n");
+ break;
+ case RT_SENSOR_VENDOR_SEMTECH:
+ rt_kprintf("vendor :Semtech\n");
+ break;
+ case RT_SENSOR_VENDOR_GOERTEK:
+ rt_kprintf("vendor :Goertek\n");
+ break;
+ case RT_SENSOR_VENDOR_MIRAMEMS:
+ rt_kprintf("vendor :MiraMEMS\n");
+ break;
+ case RT_SENSOR_VENDOR_DALLAS:
+ rt_kprintf("vendor :Dallas\n");
+ break;
+ case RT_SENSOR_VENDOR_ASAIR:
+ rt_kprintf("vendor :Asair\n");
+ break;
+ case RT_SENSOR_VENDOR_SHARP:
+ rt_kprintf("vendor :Sharp\n");
+ break;
+ case RT_SENSOR_VENDOR_SENSIRION:
+ rt_kprintf("vendor :Sensirion\n");
+ break;
+ case RT_SENSOR_VENDOR_TI:
+ rt_kprintf("vendor :Texas Instruments\n");
+ break;
+ case RT_SENSOR_VENDOR_PLANTOWER:
+ rt_kprintf("vendor :Plantower\n");
+ break;
+ case RT_SENSOR_VENDOR_AMS:
+ rt_kprintf("vendor :AMS\n");
+ break;
+ case RT_SENSOR_VENDOR_MAXIM:
+ rt_kprintf("vendor :Maxim Integrated\n");
+ break;
}
rt_kprintf("model :%s\n", info.model);
switch (info.unit)
{
- case RT_SENSOR_UNIT_NONE:
- rt_kprintf("unit :none\n");
- break;
- case RT_SENSOR_UNIT_MG:
- rt_kprintf("unit :mG\n");
- break;
- case RT_SENSOR_UNIT_MDPS:
- rt_kprintf("unit :mdps\n");
- break;
- case RT_SENSOR_UNIT_MGAUSS:
- rt_kprintf("unit :mGauss\n");
- break;
- case RT_SENSOR_UNIT_LUX:
- rt_kprintf("unit :lux\n");
- break;
- case RT_SENSOR_UNIT_CM:
- rt_kprintf("unit :cm\n");
- break;
- case RT_SENSOR_UNIT_PA:
- rt_kprintf("unit :pa\n");
- break;
- case RT_SENSOR_UNIT_PERMILLAGE:
- rt_kprintf("unit :permillage\n");
- break;
- case RT_SENSOR_UNIT_DCELSIUS:
- rt_kprintf("unit :Celsius\n");
- break;
- case RT_SENSOR_UNIT_HZ:
- rt_kprintf("unit :HZ\n");
- break;
- case RT_SENSOR_UNIT_ONE:
- rt_kprintf("unit :1\n");
- break;
- case RT_SENSOR_UNIT_BPM:
- rt_kprintf("unit :bpm\n");
- break;
- case RT_SENSOR_UNIT_MM:
- rt_kprintf("unit :mm\n");
- break;
- case RT_SENSOR_UNIT_MN:
- rt_kprintf("unit :mN\n");
- break;
- case RT_SENSOR_UNIT_PPM:
- rt_kprintf("unit :ppm\n");
- break;
- case RT_SENSOR_UNIT_PPB:
- rt_kprintf("unit :ppb\n");
- break;
+ case RT_SENSOR_UNIT_NONE:
+ rt_kprintf("unit :none\n");
+ break;
+ case RT_SENSOR_UNIT_MG:
+ rt_kprintf("unit :mG\n");
+ break;
+ case RT_SENSOR_UNIT_MDPS:
+ rt_kprintf("unit :mdps\n");
+ break;
+ case RT_SENSOR_UNIT_MGAUSS:
+ rt_kprintf("unit :mGauss\n");
+ break;
+ case RT_SENSOR_UNIT_LUX:
+ rt_kprintf("unit :lux\n");
+ break;
+ case RT_SENSOR_UNIT_CM:
+ rt_kprintf("unit :cm\n");
+ break;
+ case RT_SENSOR_UNIT_PA:
+ rt_kprintf("unit :pa\n");
+ break;
+ case RT_SENSOR_UNIT_PERMILLAGE:
+ rt_kprintf("unit :permillage\n");
+ break;
+ case RT_SENSOR_UNIT_DCELSIUS:
+ rt_kprintf("unit :Celsius\n");
+ break;
+ case RT_SENSOR_UNIT_HZ:
+ rt_kprintf("unit :HZ\n");
+ break;
+ case RT_SENSOR_UNIT_ONE:
+ rt_kprintf("unit :1\n");
+ break;
+ case RT_SENSOR_UNIT_BPM:
+ rt_kprintf("unit :bpm\n");
+ break;
+ case RT_SENSOR_UNIT_MM:
+ rt_kprintf("unit :mm\n");
+ break;
+ case RT_SENSOR_UNIT_MN:
+ rt_kprintf("unit :mN\n");
+ break;
+ case RT_SENSOR_UNIT_PPM:
+ rt_kprintf("unit :ppm\n");
+ break;
+ case RT_SENSOR_UNIT_PPB:
+ rt_kprintf("unit :ppb\n");
+ break;
}
rt_kprintf("range_max :%d\n", info.range_max);
rt_kprintf("range_min :%d\n", info.range_min);
@@ -497,5 +503,5 @@ static void sensor(int argc, char **argv)
}
}
#ifdef RT_USING_FINSH
-MSH_CMD_EXPORT(sensor, sensor test function);
+ MSH_CMD_EXPORT(sensor, sensor test function);
#endif