goldfish sensor add get_info interface

Signed-off-by: chenzihan1 <chenzihan1@xiaomi.com>
This commit is contained in:
chenzihan1 2024-11-27 15:04:43 +08:00 committed by Xiang Xiao
parent 71fe717459
commit c41c726161

View file

@ -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 =