diff options
Diffstat (limited to 'components')
| -rw-r--r-- | components/drivers/include/drivers/sensor.h | 5 | ||||
| -rw-r--r-- | components/drivers/sensors/sensor.c | 13 | ||||
| -rwxr-xr-x | components/drivers/sensors/sensor_cmd.c | 200 |
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 |
