From 107e3e5d5276bce6f0f24e2af19dd266fd177616 Mon Sep 17 00:00:00 2001 From: Jiuzhu Dong Date: Thu, 23 Jun 2022 12:13:56 +0800 Subject: [PATCH] driver/sensor: export upper half lock Signed-off-by: Jiuzhu Dong --- drivers/sensors/sensor.c | 16 +++++++++++++++- include/nuttx/sensors/sensor.h | 13 +++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/sensors/sensor.c b/drivers/sensors/sensor.c index 45b67b011a..4d61eb2c9b 100644 --- a/drivers/sensors/sensor.c +++ b/drivers/sensors/sensor.c @@ -177,6 +177,18 @@ static const struct file_operations g_sensor_fops = * Private Functions ****************************************************************************/ +static void sensor_lock(FAR void *priv) +{ + FAR struct sensor_upperhalf_s *upper = priv; + nxrmutex_lock(&upper->lock); +} + +static void sensor_unlock(FAR void *priv) +{ + FAR struct sensor_upperhalf_s *upper = priv; + nxrmutex_unlock(&upper->lock); +} + static bool sensor_in_range(unsigned long left, unsigned long value, unsigned long right) { @@ -1017,7 +1029,9 @@ int sensor_custom_register(FAR struct sensor_lowerhalf_s *lower, /* Bind the lower half data structure member */ - lower->priv = upper; + lower->priv = upper; + lower->sensor_lock = sensor_lock; + lower->sensor_unlock = sensor_unlock; if (!lower->ops->fetch) { diff --git a/include/nuttx/sensors/sensor.h b/include/nuttx/sensors/sensor.h index 35172a6080..8af4eca43f 100644 --- a/include/nuttx/sensors/sensor.h +++ b/include/nuttx/sensors/sensor.h @@ -937,6 +937,19 @@ struct sensor_lowerhalf_s sensor_notify_event_t notify_event; }; +/**************************************************************************** + * Name: sensor_lock/sensor_unlock + * + * Description: + * Lower half driver can lock/unlock upper half driver by this interface. + * + * Input Parameters: + * priv - Upper half driver handle + ****************************************************************************/ + + void (*sensor_lock)(void * priv); + void (*sensor_unlock)(void * priv); + /* The private opaque pointer to be passed to upper-layer during callback */ FAR void *priv;