Skip to content

Commit d9a8cc7

Browse files
authored
Merge pull request #2404 from Guozhanxin/temp_1
完善 sensor 框架
2 parents 382f2f1 + f6eabb2 commit d9a8cc7

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

components/drivers/sensors/sensor.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ void rt_sensor_cb(rt_sensor_t sen)
4343
{
4444
return;
4545
}
46+
47+
if (sen->irq_handle != RT_NULL)
48+
{
49+
sen->irq_handle(sen);
50+
}
4651

4752
/* The buffer is not empty. Read the data in the buffer first */
4853
if (sen->data_len > 0)

components/drivers/sensors/sensor.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ extern "C" {
6868
#define RT_SENSOR_UNIT_HZ (9) /* Frequency unit: HZ */
6969
#define RT_SENSOR_UNIT_ONE (10) /* Dimensionless quantity unit: 1 */
7070
#define RT_SENSOR_UNIT_BPM (11) /* Heart rate unit: bpm */
71+
#define RT_SENSOR_UNIT_MM (12) /* Distance unit: mm */
7172

7273
/* Sensor communication interface types */
7374

@@ -131,6 +132,8 @@ struct rt_sensor_config
131132
rt_int32_t range; /* sensor range of measurement */
132133
};
133134

135+
typedef struct rt_sensor_device *rt_sensor_t;
136+
134137
struct rt_sensor_device
135138
{
136139
struct rt_device parent; /* The standard device */
@@ -144,8 +147,9 @@ struct rt_sensor_device
144147
const struct rt_sensor_ops *ops; /* The sensor ops */
145148

146149
struct rt_sensor_module *module; /* The sensor module */
150+
151+
rt_err_t (*irq_handle)(rt_sensor_t sensor); /* Called when an interrupt is generated, registered by the driver */
147152
};
148-
typedef struct rt_sensor_device *rt_sensor_t;
149153

150154
struct rt_sensor_module
151155
{

components/drivers/sensors/sensor_cmd.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ static void sensor_show_data(rt_size_t num, rt_sensor_t sensor, struct rt_sensor
4444
case RT_SENSOR_CLASS_STEP:
4545
LOG_I("num:%3d, step:%5d, timestamp:%5d", num, sensor_data->data.step, sensor_data->timestamp);
4646
break;
47+
case RT_SENSOR_CLASS_PROXIMITY:
48+
LOG_I("num:%3d, distance:%5d, timestamp:%5d", num, sensor_data->data.proximity, sensor_data->timestamp);
49+
break;
4750
default:
4851
break;
4952
}
@@ -96,6 +99,12 @@ static void sensor_fifo(int argc, char **argv)
9699
return;
97100
}
98101
sensor = (rt_sensor_t)dev;
102+
103+
if (rt_device_open(dev, RT_DEVICE_FLAG_FIFO_RX) != RT_EOK)
104+
{
105+
LOG_E("open device failed!");
106+
return;
107+
}
99108

100109
if (sensor_rx_sem == RT_NULL)
101110
{
@@ -117,11 +126,6 @@ static void sensor_fifo(int argc, char **argv)
117126

118127
rt_device_set_rx_indicate(dev, rx_callback);
119128

120-
if (rt_device_open(dev, RT_DEVICE_FLAG_FIFO_RX) != RT_EOK)
121-
{
122-
LOG_E("open device failed!");
123-
return;
124-
}
125129
rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)20);
126130
}
127131
#ifdef FINSH_USING_MSH

0 commit comments

Comments
 (0)