From 507a90f05583c381f3a9cb53ad345b1277cbe06b Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Fri, 8 Mar 2019 10:32:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[sensor]=20add=20irq=5Fhandle=20for=20drive?= =?UTF-8?q?r.=20|=20=E4=B8=BA=E5=BA=95=E5=B1=82=E9=A9=B1=E5=8A=A8=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E4=B8=AD=E6=96=AD=E5=9B=9E=E8=B0=83=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/drivers/sensors/sensor.c | 5 +++++ components/drivers/sensors/sensor.h | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/components/drivers/sensors/sensor.c b/components/drivers/sensors/sensor.c index 99f366ddac..ec1ad98fb6 100644 --- a/components/drivers/sensors/sensor.c +++ b/components/drivers/sensors/sensor.c @@ -43,6 +43,11 @@ void rt_sensor_cb(rt_sensor_t sen) { return; } + + if (sen->irq_handle != RT_NULL) + { + sen->irq_handle(sen); + } /* The buffer is not empty. Read the data in the buffer first */ if (sen->data_len > 0) diff --git a/components/drivers/sensors/sensor.h b/components/drivers/sensors/sensor.h index fd437e4e09..94650ea886 100644 --- a/components/drivers/sensors/sensor.h +++ b/components/drivers/sensors/sensor.h @@ -68,6 +68,7 @@ extern "C" { #define RT_SENSOR_UNIT_HZ (9) /* Frequency unit: HZ */ #define RT_SENSOR_UNIT_ONE (10) /* Dimensionless quantity unit: 1 */ #define RT_SENSOR_UNIT_BPM (11) /* Heart rate unit: bpm */ +#define RT_SENSOR_UNIT_MM (12) /* Distance unit: mm */ /* Sensor communication interface types */ @@ -131,6 +132,8 @@ struct rt_sensor_config rt_int32_t range; /* sensor range of measurement */ }; +typedef struct rt_sensor_device *rt_sensor_t; + struct rt_sensor_device { struct rt_device parent; /* The standard device */ @@ -144,8 +147,9 @@ struct rt_sensor_device const struct rt_sensor_ops *ops; /* The sensor ops */ struct rt_sensor_module *module; /* The sensor module */ + + rt_err_t (*irq_handle)(rt_sensor_t sensor); /* Called when an interrupt is generated, registered by the driver */ }; -typedef struct rt_sensor_device *rt_sensor_t; struct rt_sensor_module { From f6eabb2d0a6184ef6fc6c5c6baca001da18c5e4f Mon Sep 17 00:00:00 2001 From: guozhanxin Date: Fri, 8 Mar 2019 10:37:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[sensor]=20Fixed=20a=20problem=20where=20th?= =?UTF-8?q?reads=20were=20repeatedly=20created=E3=80=82|=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=BA=BF=E7=A8=8B=E8=A2=AB=E9=87=8D=E5=A4=8D=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/drivers/sensors/sensor_cmd.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/components/drivers/sensors/sensor_cmd.c b/components/drivers/sensors/sensor_cmd.c index 07487c8866..4658a42722 100644 --- a/components/drivers/sensors/sensor_cmd.c +++ b/components/drivers/sensors/sensor_cmd.c @@ -44,6 +44,9 @@ static void sensor_show_data(rt_size_t num, rt_sensor_t sensor, struct rt_sensor case RT_SENSOR_CLASS_STEP: LOG_I("num:%3d, step:%5d, timestamp:%5d", num, sensor_data->data.step, sensor_data->timestamp); break; + case RT_SENSOR_CLASS_PROXIMITY: + LOG_I("num:%3d, distance:%5d, timestamp:%5d", num, sensor_data->data.proximity, sensor_data->timestamp); + break; default: break; } @@ -96,6 +99,12 @@ static void sensor_fifo(int argc, char **argv) return; } sensor = (rt_sensor_t)dev; + + if (rt_device_open(dev, RT_DEVICE_FLAG_FIFO_RX) != RT_EOK) + { + LOG_E("open device failed!"); + return; + } if (sensor_rx_sem == RT_NULL) { @@ -117,11 +126,6 @@ static void sensor_fifo(int argc, char **argv) rt_device_set_rx_indicate(dev, rx_callback); - if (rt_device_open(dev, RT_DEVICE_FLAG_FIFO_RX) != RT_EOK) - { - LOG_E("open device failed!"); - return; - } rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)20); } #ifdef FINSH_USING_MSH