diff --git a/components/drivers/include/drivers/sensor_v2.h b/components/drivers/include/drivers/sensor_v2.h index 72044a3ee2..d90cef89c7 100644 --- a/components/drivers/include/drivers/sensor_v2.h +++ b/components/drivers/include/drivers/sensor_v2.h @@ -398,6 +398,7 @@ int rt_hw_sensor_register(rt_sensor_t sensor, const char *name, rt_uint32_t flag, void *data); +rt_sensor_t rt_sensor_device_find(const char *name); #ifdef __cplusplus } diff --git a/components/drivers/sensor/v2/sensor.c b/components/drivers/sensor/v2/sensor.c index a35089ad34..ce481c9e2e 100644 --- a/components/drivers/sensor/v2/sensor.c +++ b/components/drivers/sensor/v2/sensor.c @@ -41,7 +41,8 @@ static char *const sensor_name_str[] = "sp-", /* SpO2 sensor */ "ia-", /* IAQ sensor */ "et-", /* EtOH sensor */ - "bp-" /* Blood Pressure */ + "bp-", /* Blood Pressure */ + RT_NULL }; /* sensor interrupt handler function */ @@ -519,3 +520,23 @@ int rt_hw_sensor_register(rt_sensor_t sensor, return RT_EOK; } + +rt_sensor_t rt_sensor_device_find(const char *name) +{ + rt_uint8_t index; + char device_name[RT_NAME_MAX]; + rt_device_t device; + + for (index = 0; sensor_name_str[index] != RT_NULL; index++) + { + rt_memset(device_name, 0, sizeof(device_name)); + rt_snprintf(device_name, sizeof(device_name), "%s%s", sensor_name_str[index], name); + device = rt_device_find(device_name); + if (device != RT_NULL) + { + return (rt_sensor_t)device; + } + } + + return RT_NULL; +}