This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit c41c7261618c3b8e68af19afab53a207f65b08a5
Author: chenzihan1 <[email protected]>
AuthorDate: Wed Nov 27 15:04:43 2024 +0800

    goldfish sensor add get_info interface
    
    Signed-off-by: chenzihan1 <[email protected]>
---
 drivers/sensors/goldfish_sensor_uorb.c | 153 +++++++++++++++++++++++++++++++++
 1 file changed, 153 insertions(+)

diff --git a/drivers/sensors/goldfish_sensor_uorb.c 
b/drivers/sensors/goldfish_sensor_uorb.c
index 2684fe521b..274c8946fa 100644
--- a/drivers/sensors/goldfish_sensor_uorb.c
+++ b/drivers/sensors/goldfish_sensor_uorb.c
@@ -95,6 +95,9 @@ static int goldfish_sensor_activate(FAR struct 
sensor_lowerhalf_s *lower,
 static int goldfish_sensor_set_interval(FAR struct sensor_lowerhalf_s *lower,
                                         FAR struct file *filep,
                                         FAR uint32_t *period_us);
+static int goldfish_sensor_get_info(FAR struct sensor_lowerhalf_s *lower,
+                                    FAR struct file *filep,
+                                    FAR struct sensor_device_info_s *info);
 static int goldfish_sensor_thread(int argc, FAR char** argv);
 
 /****************************************************************************
@@ -105,6 +108,7 @@ static const struct sensor_ops_s g_goldfish_sensor_ops =
 {
   .activate = goldfish_sensor_activate,
   .set_interval = goldfish_sensor_set_interval,
+  .get_info = goldfish_sensor_get_info,
 };
 
 FAR static const char *const g_goldfish_sensor_name[] =
@@ -129,6 +133,126 @@ FAR static const char *const g_goldfish_sensor_name[] =
   "acceleration-uncalibrated",
 };
 
+static struct sensor_device_info_s g_goldfish_sensor_info[] =
+{
+  {
+    .version                    = 1,
+    .power                      = 3.0f,
+    .max_range                  = 2.8f,
+    .resolution                 = 1.0f / 4032.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "acceleration",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 3.0f,
+    .max_range                  = 11.1111111,
+    .resolution                 = 1.0f / 1000.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .name                       = "gyroscope",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 6.7f,
+    .max_range                  = 2000.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "magnetic-field",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 9.7f,
+    .max_range                  = 360.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "orientation",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 0.0f,
+    .max_range                  = 80.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "temperature",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 20.0f,
+    .max_range                  = 1.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "proximity",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 20.0f,
+    .max_range                  = 40000.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "light",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 20.0f,
+    .max_range                  = 800.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "pressure",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 20.0f,
+    .max_range                  = 100.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .fifo_reserved_event_count  = 0,
+    .fifo_max_event_count       = 0,
+    .name                       = "humidity",
+    .vendor                     = "The Android Open Source Project",
+  },
+  {
+    .version                    = 1,
+    .power                      = 6.7f,
+    .max_range                  = 2000.0f,
+    .resolution                 = 1.0f,
+    .min_delay                  = 10000,
+    .max_delay                  = 500 * 1000,
+    .name                       = "magnetic-field-uncalibrated",
+    .vendor                     = "The Android Open Source Project",
+  },
+};
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -594,6 +718,35 @@ static int goldfish_sensor_set_interval(FAR struct 
sensor_lowerhalf_s *lower,
   return OK;
 }
 
+static int goldfish_sensor_get_info(FAR struct sensor_lowerhalf_s *lower,
+                                    FAR struct file *filep,
+                                    FAR struct sensor_device_info_s *info)
+{
+  FAR struct goldfish_sensor_s *priv;
+  int handle;
+  int i;
+
+  handle = goldfish_get_priv(lower, &priv);
+  if (handle < 0)
+    {
+      return -EINVAL;
+    }
+
+  for (i = 0; i < sizeof(g_goldfish_sensor_info); i++)
+    {
+      if (!strncmp(goldfish_sensor_get_name(handle),
+                   g_goldfish_sensor_info[i].name,
+                   strlen(g_goldfish_sensor_info[i].name)))
+        {
+          memcpy(info, &g_goldfish_sensor_info[i],
+                 sizeof(struct sensor_device_info_s));
+          return OK;
+        }
+    }
+
+  return -EINVAL;
+}
+
 static int goldfish_sensor_thread(int argc, FAR char** argv)
 {
   FAR struct goldfish_sensor_s *priv =

Reply via email to