temp/iio-sensor-proxy: drop fork
Signed-off-by: Clayton Craft <craftyguy@postmarketos.org> Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/7788>
This commit is contained in:
parent
91470d21d1
commit
d65edea0ee
15 changed files with 0 additions and 2052 deletions
|
|
@ -1,37 +0,0 @@
|
|||
From c73bdbca1b4278ada24dde68e0d09c352dcaa004 Mon Sep 17 00:00:00 2001
|
||||
From: "Sicelo A. Mhlongo" <absicsz@gmail.com>
|
||||
Date: Tue, 30 Sep 2025 13:17:16 +0200
|
||||
Subject: [PATCH] WIP: iio-sensor-proxy.c: Do not exit based on sensor events
|
||||
|
||||
...
|
||||
---
|
||||
src/iio-sensor-proxy.c | 6 +-----
|
||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index 5f26d3d..7505783 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -766,8 +766,7 @@ name_acquired_handler (GDBusConnection *connection,
|
||||
|
||||
bail:
|
||||
data->ret = 0;
|
||||
- g_debug ("No sensors or missing kernel drivers for the sensors");
|
||||
- g_main_loop_quit (data->loop);
|
||||
+ g_debug ("No sensors or missing kernel drivers for the sensors. Waiting for hotplug sensors");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -1050,9 +1049,6 @@ sensor_changes (GUdevClient *client,
|
||||
send_driver_changed_dbus_event (data, i);
|
||||
}
|
||||
}
|
||||
-
|
||||
- if (!any_sensors_left (data))
|
||||
- g_main_loop_quit (data->loop);
|
||||
} else if (g_strcmp0 (action, "add") == 0) {
|
||||
for (i = 0; i < G_N_ELEMENTS(drivers); i++) {
|
||||
SensorDriver *driver = (SensorDriver *) drivers[i];
|
||||
--
|
||||
2.51.0
|
||||
|
||||
|
|
@ -1,105 +0,0 @@
|
|||
From 169b29cbb8232bb3ee82f8327a7ad5cdded0256c Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sun, 23 Apr 2023 16:54:10 +0200
|
||||
Subject: [PATCH 01/10] iio-sensor-proxy: depend on libssc
|
||||
|
||||
Add libssc library to iio-sensor-proxy and discover FastRPC
|
||||
devices as possible subsystems for sensors. The presence of
|
||||
FastRPC devices indicate the support for Qualcomm Snapdragon Sensor
|
||||
Core (SSC).
|
||||
---
|
||||
meson.build | 3 +++
|
||||
meson_options.txt | 4 ++++
|
||||
src/iio-sensor-proxy.c | 15 ++++++++++++++-
|
||||
src/meson.build | 7 +++++++
|
||||
4 files changed, 28 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 97270f8..0580d9e 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -46,6 +46,9 @@ gio_dep = dependency('gio-2.0')
|
||||
gudev_dep = dependency('gudev-1.0', version: '>= 237')
|
||||
polkit_gobject_dep = dependency('polkit-gobject-1', version: '>= 0.91')
|
||||
polkit_policy_directory = polkit_gobject_dep.get_pkgconfig_variable('policydir')
|
||||
+if get_option('ssc-support')
|
||||
+ libssc_dep = dependency('libssc')
|
||||
+endif
|
||||
|
||||
xmllint = find_program('xmllint', required: false)
|
||||
|
||||
diff --git a/meson_options.txt b/meson_options.txt
|
||||
index de5fbf4..2b60f82 100644
|
||||
--- a/meson_options.txt
|
||||
+++ b/meson_options.txt
|
||||
@@ -18,6 +18,10 @@ option('geoclue-user',
|
||||
description: 'The USER (existing) as which geoclue service is running',
|
||||
type: 'string',
|
||||
value: 'geoclue')
|
||||
+option('ssc-support',
|
||||
+ description: 'Enable Qualcomm SSC support',
|
||||
+ type: 'boolean',
|
||||
+ value: false)
|
||||
option('gtk_doc',
|
||||
type: 'boolean',
|
||||
value: false,
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index 02d9ba5..342023c 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -128,6 +128,11 @@ find_sensors (GUdevClient *client,
|
||||
platform = g_udev_client_query_by_subsystem (client, "platform");
|
||||
devices = g_list_concat (devices, input);
|
||||
devices = g_list_concat (devices, platform);
|
||||
+#ifdef HAS_LIBSSC
|
||||
+ GList *fastrpc;
|
||||
+ fastrpc = g_udev_client_query_by_subsystem (client, "misc");
|
||||
+ devices = g_list_concat (devices, fastrpc);
|
||||
+#endif
|
||||
|
||||
/* Find the devices */
|
||||
for (l = devices; l != NULL; l = l->next) {
|
||||
@@ -721,7 +726,15 @@ name_acquired_handler (GDBusConnection *connection,
|
||||
gpointer user_data)
|
||||
{
|
||||
SensorData *data = user_data;
|
||||
- const gchar * const subsystems[] = { "iio", "input", "platform", NULL };
|
||||
+ const gchar * const subsystems[] = {
|
||||
+ "iio",
|
||||
+ "input",
|
||||
+ "platform",
|
||||
+#ifdef HAS_LIBSSC
|
||||
+ "misc",
|
||||
+#endif
|
||||
+ NULL
|
||||
+ };
|
||||
guint i;
|
||||
|
||||
data->client = g_udev_client_new (subsystems);
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 4b822fc..3e503de 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -1,5 +1,8 @@
|
||||
config_h = configuration_data()
|
||||
config_h.set_quoted('VERSION', meson.project_version())
|
||||
+if get_option('ssc-support')
|
||||
+ config_h.set_quoted('HAS_LIBSSC', '1')
|
||||
+endif
|
||||
config_h_files = configure_file(
|
||||
output: 'config.h',
|
||||
configuration: config_h
|
||||
@@ -7,6 +10,10 @@ config_h_files = configure_file(
|
||||
|
||||
deps = [ gio_dep, gudev_dep, mathlib_dep, polkit_gobject_dep ]
|
||||
|
||||
+if get_option('ssc-support')
|
||||
+ deps = deps + [ libssc_dep ]
|
||||
+endif
|
||||
+
|
||||
resources = gnome.compile_resources(
|
||||
'iio-sensor-proxy-resources', 'iio-sensor-proxy.gresource.xml',
|
||||
c_name: 'iio_sensor_proxy',
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,195 +0,0 @@
|
|||
From 176a35a40b639be7d0cdbc4fd67eb681586978dc Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sun, 23 Apr 2023 17:54:46 +0200
|
||||
Subject: [PATCH 02/10] proximity: support SSC proximity sensor
|
||||
|
||||
Add driver for the proximity sensor exposed by libssc.
|
||||
---
|
||||
src/drivers.h | 4 ++
|
||||
src/drv-ssc-proximity.c | 128 ++++++++++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 3 +
|
||||
src/meson.build | 6 ++
|
||||
4 files changed, 141 insertions(+)
|
||||
create mode 100644 src/drv-ssc-proximity.c
|
||||
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index 33ad667..464e801 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -161,4 +161,8 @@ extern SensorDriver iio_buffer_compass;
|
||||
extern SensorDriver iio_poll_proximity;
|
||||
extern SensorDriver input_proximity;
|
||||
|
||||
+#ifdef HAS_LIBSSC
|
||||
+extern SensorDriver ssc_proximity;
|
||||
+#endif
|
||||
+
|
||||
gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name);
|
||||
diff --git a/src/drv-ssc-proximity.c b/src/drv-ssc-proximity.c
|
||||
new file mode 100644
|
||||
index 0000000..f4aa897
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-proximity.c
|
||||
@@ -0,0 +1,128 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023-2025 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-proximity.h>
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorProximity *sensor;
|
||||
+ guint measurement_id;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_proximity_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ SSCSensorProximity *sensor = NULL;
|
||||
+
|
||||
+ /* Verify presence of FastRPC device */
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-proximity", NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /* Open and close SSC proximity sensor for discovering */
|
||||
+ sensor = ssc_sensor_proximity_new_sync (NULL, NULL);
|
||||
+ if (!sensor)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!ssc_sensor_proximity_close_sync (sensor, NULL, NULL)) {
|
||||
+ g_clear_object (&sensor);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ g_clear_object (&sensor);
|
||||
+
|
||||
+ g_debug ("Found SSC proximity at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorProximity *sensor, gboolean near, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ ProximityReadings readings;
|
||||
+
|
||||
+ readings.is_near = near ? PROXIMITY_NEAR_TRUE : PROXIMITY_NEAR_FALSE;
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_proximity_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_proximity_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC proximity sensor failed: %s", error->message);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_proximity_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC proximity sensor failed: %s", error->message);
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_proximity_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_proximity_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC proximity sensor failed: %s", error->message);
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_proximity = {
|
||||
+ .driver_name = "SSC proximity sensor",
|
||||
+ .type = DRIVER_TYPE_PROXIMITY,
|
||||
+
|
||||
+ .discover = ssc_proximity_discover,
|
||||
+ .open = ssc_proximity_open,
|
||||
+ .close = ssc_proximity_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index 342023c..18263c5 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -79,6 +79,9 @@ static const SensorDriver * const drivers[] = {
|
||||
&iio_buffer_compass,
|
||||
&iio_poll_proximity,
|
||||
&input_proximity,
|
||||
+#ifdef HAS_LIBSSC
|
||||
+ &ssc_proximity,
|
||||
+#endif
|
||||
};
|
||||
|
||||
static ReadingsUpdateFunc driver_type_to_callback_func (DriverType type);
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 3e503de..9a74481 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -45,6 +45,12 @@ sources = [
|
||||
config_h_files,
|
||||
]
|
||||
|
||||
+if get_option('ssc-support')
|
||||
+ sources = sources + [
|
||||
+ 'drv-ssc-proximity.c',
|
||||
+ ]
|
||||
+endif
|
||||
+
|
||||
executable('iio-sensor-proxy',
|
||||
sources,
|
||||
dependencies: deps,
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,188 +0,0 @@
|
|||
From 43440a5ef95bccae67ca64f0abe060f194574da5 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Mon, 24 Apr 2023 16:56:20 +0200
|
||||
Subject: [PATCH 03/10] light: support SSC light sensor
|
||||
|
||||
Add driver for the light sensor exposed by libssc.
|
||||
---
|
||||
src/drivers.h | 1 +
|
||||
src/drv-ssc-light.c | 129 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 1 +
|
||||
src/meson.build | 1 +
|
||||
4 files changed, 132 insertions(+)
|
||||
create mode 100644 src/drv-ssc-light.c
|
||||
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index 464e801..46df2fd 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -163,6 +163,7 @@ extern SensorDriver input_proximity;
|
||||
|
||||
#ifdef HAS_LIBSSC
|
||||
extern SensorDriver ssc_proximity;
|
||||
+extern SensorDriver ssc_light;
|
||||
#endif
|
||||
|
||||
gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name);
|
||||
diff --git a/src/drv-ssc-light.c b/src/drv-ssc-light.c
|
||||
new file mode 100644
|
||||
index 0000000..eb43d6c
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-light.c
|
||||
@@ -0,0 +1,129 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023-2025 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-light.h>
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorLight *sensor;
|
||||
+ guint measurement_id;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_light_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ SSCSensorLight *sensor;
|
||||
+
|
||||
+ /* Verify presence of FastRPC device */
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-light", NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /* Open and close SSC light sensor for discovering */
|
||||
+ sensor = ssc_sensor_light_new_sync (NULL, NULL);
|
||||
+ if (!sensor)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!ssc_sensor_light_close_sync (sensor, NULL, NULL)) {
|
||||
+ g_clear_object (&sensor);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ g_clear_object (&sensor);
|
||||
+
|
||||
+ g_debug ("Found SSC light at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorLight *sensor, gfloat intensity, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ LightReadings readings;
|
||||
+
|
||||
+ readings.level = intensity;
|
||||
+ readings.uses_lux = TRUE;
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_light_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_light_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC light sensor failed: %s", error->message);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_light_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC light sensor failed: %s", error->message);
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_light_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_light_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC light sensor failed: %s", error->message);
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_light = {
|
||||
+ .driver_name = "SSC light sensor",
|
||||
+ .type = DRIVER_TYPE_LIGHT,
|
||||
+
|
||||
+ .discover = ssc_light_discover,
|
||||
+ .open = ssc_light_open,
|
||||
+ .close = ssc_light_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index 18263c5..b4eacc3 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -81,6 +81,7 @@ static const SensorDriver * const drivers[] = {
|
||||
&input_proximity,
|
||||
#ifdef HAS_LIBSSC
|
||||
&ssc_proximity,
|
||||
+ &ssc_light,
|
||||
#endif
|
||||
};
|
||||
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 9a74481..2f3c1e6 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -48,6 +48,7 @@ sources = [
|
||||
if get_option('ssc-support')
|
||||
sources = sources + [
|
||||
'drv-ssc-proximity.c',
|
||||
+ 'drv-ssc-light.c',
|
||||
]
|
||||
endif
|
||||
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,215 +0,0 @@
|
|||
From 8c296891214b6b7ebbd3263550ef9296e9a9ff1f Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Mon, 24 Apr 2023 17:01:10 +0200
|
||||
Subject: [PATCH 04/10] accelerometer: support SSC accelerometer sensor
|
||||
|
||||
Add driver for the accelerometer sensor exposed by libssc.
|
||||
Mount matrix is supported through environment variables set
|
||||
by udev rules because extracting the mount matrix from the
|
||||
Qualcomm Snapdragon Sensor Core (SSC) firmware is not possible yet.
|
||||
---
|
||||
src/drivers.h | 1 +
|
||||
src/drv-ssc-accel.c | 153 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 1 +
|
||||
src/meson.build | 1 +
|
||||
4 files changed, 156 insertions(+)
|
||||
create mode 100644 src/drv-ssc-accel.c
|
||||
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index 46df2fd..40707ec 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -164,6 +164,7 @@ extern SensorDriver input_proximity;
|
||||
#ifdef HAS_LIBSSC
|
||||
extern SensorDriver ssc_proximity;
|
||||
extern SensorDriver ssc_light;
|
||||
+extern SensorDriver ssc_accel;
|
||||
#endif
|
||||
|
||||
gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name);
|
||||
diff --git a/src/drv-ssc-accel.c b/src/drv-ssc-accel.c
|
||||
new file mode 100644
|
||||
index 0000000..676303b
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-accel.c
|
||||
@@ -0,0 +1,153 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023-2025 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+#include "accel-mount-matrix.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-accelerometer.h>
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorAccelerometer *sensor;
|
||||
+ guint measurement_id;
|
||||
+ AccelVec3 *mount_matrix;
|
||||
+ AccelLocation location;
|
||||
+ AccelScale scale;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_accelerometer_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ SSCSensorAccelerometer *sensor = NULL;
|
||||
+
|
||||
+ /* Verify presence of FastRPC device */
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-accel", NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /* Open and close SSC accelerometer for discovering */
|
||||
+ sensor = ssc_sensor_accelerometer_new_sync (NULL, NULL);
|
||||
+ if (!sensor)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!ssc_sensor_accelerometer_close_sync (sensor, NULL, NULL)) {
|
||||
+ g_clear_object (&sensor);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ g_clear_object (&sensor);
|
||||
+
|
||||
+ g_debug ("Found SSC accelerometer at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorAccelerometer *sensor, gfloat accel_x, gfloat accel_y, gfloat accel_z, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+ AccelReadings readings;
|
||||
+ AccelVec3 tmp;
|
||||
+
|
||||
+ tmp.x = accel_x;
|
||||
+ tmp.y = accel_y;
|
||||
+ tmp.z = accel_z;
|
||||
+
|
||||
+ if (!apply_mount_matrix (drv_data->mount_matrix, &tmp))
|
||||
+ g_warning ("Could not apply mount matrix");
|
||||
+
|
||||
+ readings.accel_x = tmp.x;
|
||||
+ readings.accel_y = tmp.y;
|
||||
+ readings.accel_z = tmp.z;
|
||||
+ copy_accel_scale (&readings.scale, drv_data->scale);
|
||||
+
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_accelerometer_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Setup accel attributes */
|
||||
+ drv_data->mount_matrix = setup_mount_matrix (device);
|
||||
+ drv_data->location = setup_accel_location (device);
|
||||
+ set_accel_scale (&drv_data->scale, 1.0);
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC accelerometer sensor failed: %s", error->message);
|
||||
+ g_clear_pointer (&drv_data->mount_matrix, g_free);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_accelerometer_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC accelerometer sensor failed: %s", error->message);
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&drv_data->mount_matrix, g_free);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_accelerometer_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_accelerometer_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC accelerometer sensor failed: %s", error->message);
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&drv_data->mount_matrix, g_free);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_accel = {
|
||||
+ .driver_name = "SSC accelerometer sensor",
|
||||
+ .type = DRIVER_TYPE_ACCEL,
|
||||
+
|
||||
+ .discover = ssc_accelerometer_discover,
|
||||
+ .open = ssc_accelerometer_open,
|
||||
+ .close = ssc_accelerometer_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index b4eacc3..e99f641 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -82,6 +82,7 @@ static const SensorDriver * const drivers[] = {
|
||||
#ifdef HAS_LIBSSC
|
||||
&ssc_proximity,
|
||||
&ssc_light,
|
||||
+ &ssc_accel,
|
||||
#endif
|
||||
};
|
||||
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index 2f3c1e6..d59cfdd 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -49,6 +49,7 @@ if get_option('ssc-support')
|
||||
sources = sources + [
|
||||
'drv-ssc-proximity.c',
|
||||
'drv-ssc-light.c',
|
||||
+ 'drv-ssc-accel.c',
|
||||
]
|
||||
endif
|
||||
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,188 +0,0 @@
|
|||
From 861e0e9bcc1ba400648e1e4a990a331284fff6e0 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Mon, 24 Apr 2023 18:29:15 +0200
|
||||
Subject: [PATCH 05/10] compass: support SSC compass sensor
|
||||
|
||||
Add driver for the compass sensor exposed by libssc.
|
||||
---
|
||||
src/drivers.h | 1 +
|
||||
src/drv-ssc-compass.c | 129 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/iio-sensor-proxy.c | 1 +
|
||||
src/meson.build | 1 +
|
||||
4 files changed, 132 insertions(+)
|
||||
create mode 100644 src/drv-ssc-compass.c
|
||||
|
||||
diff --git a/src/drivers.h b/src/drivers.h
|
||||
index 40707ec..5e0347c 100644
|
||||
--- a/src/drivers.h
|
||||
+++ b/src/drivers.h
|
||||
@@ -165,6 +165,7 @@ extern SensorDriver input_proximity;
|
||||
extern SensorDriver ssc_proximity;
|
||||
extern SensorDriver ssc_light;
|
||||
extern SensorDriver ssc_accel;
|
||||
+extern SensorDriver ssc_compass;
|
||||
#endif
|
||||
|
||||
gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name);
|
||||
diff --git a/src/drv-ssc-compass.c b/src/drv-ssc-compass.c
|
||||
new file mode 100644
|
||||
index 0000000..c6f11a9
|
||||
--- /dev/null
|
||||
+++ b/src/drv-ssc-compass.c
|
||||
@@ -0,0 +1,129 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2023-2025 Dylan Van Assche
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License version 3 as published by
|
||||
+ * the Free Software Foundation.
|
||||
+ */
|
||||
+
|
||||
+#include "drivers.h"
|
||||
+
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <string.h>
|
||||
+#include <errno.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <gio/gio.h>
|
||||
+#include <libssc-sensor.h>
|
||||
+#include <libssc-sensor-compass.h>
|
||||
+
|
||||
+typedef struct DrvData {
|
||||
+ SSCSensorCompass *sensor;
|
||||
+ guint measurement_id;
|
||||
+} DrvData;
|
||||
+
|
||||
+static gboolean
|
||||
+ssc_compass_discover (GUdevDevice *device)
|
||||
+{
|
||||
+ SSCSensorCompass *sensor = NULL;
|
||||
+
|
||||
+ /* Verify presence of FastRPC device */
|
||||
+ if (!drv_check_udev_sensor_type (device, "ssc-compass", NULL))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /* Open and close SSC compass for discovering */
|
||||
+ sensor = ssc_sensor_compass_new_sync (NULL, NULL);
|
||||
+ if (!sensor)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!ssc_sensor_compass_close_sync (sensor, NULL, NULL)) {
|
||||
+ g_clear_object(&sensor);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ g_clear_object(&sensor);
|
||||
+
|
||||
+ g_debug ("Found SSC compass at %s", g_udev_device_get_sysfs_path (device));
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+measurement_cb (SSCSensorCompass *sensor, gfloat azimuth, gpointer user_data)
|
||||
+{
|
||||
+ SensorDevice *sensor_device = user_data;
|
||||
+ CompassReadings readings;
|
||||
+
|
||||
+ readings.heading = azimuth;
|
||||
+
|
||||
+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data);
|
||||
+}
|
||||
+
|
||||
+static SensorDevice *
|
||||
+ssc_compass_open (GUdevDevice *device)
|
||||
+{
|
||||
+ SensorDevice *sensor_device;
|
||||
+ DrvData *drv_data;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+
|
||||
+ sensor_device = g_new0 (SensorDevice, 1);
|
||||
+ sensor_device->priv = g_new0 (DrvData, 1);
|
||||
+ drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_compass_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC compass sensor failed: %s", error->message);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_compass_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC compass sensor failed: %s", error->message);
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return sensor_device;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+ssc_compass_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_compass_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC compass sensor failed: %s", error->message);
|
||||
+
|
||||
+ g_clear_object (&drv_data->sensor);
|
||||
+ g_clear_pointer (&sensor_device->priv, g_free);
|
||||
+ g_free (sensor_device);
|
||||
+}
|
||||
+
|
||||
+SensorDriver ssc_compass = {
|
||||
+ .driver_name = "SSC compass sensor",
|
||||
+ .type = DRIVER_TYPE_COMPASS,
|
||||
+
|
||||
+ .discover = ssc_compass_discover,
|
||||
+ .open = ssc_compass_open,
|
||||
+ .close = ssc_compass_close,
|
||||
+};
|
||||
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
|
||||
index e99f641..9e8760c 100644
|
||||
--- a/src/iio-sensor-proxy.c
|
||||
+++ b/src/iio-sensor-proxy.c
|
||||
@@ -83,6 +83,7 @@ static const SensorDriver * const drivers[] = {
|
||||
&ssc_proximity,
|
||||
&ssc_light,
|
||||
&ssc_accel,
|
||||
+ &ssc_compass,
|
||||
#endif
|
||||
};
|
||||
|
||||
diff --git a/src/meson.build b/src/meson.build
|
||||
index d59cfdd..1e753cc 100644
|
||||
--- a/src/meson.build
|
||||
+++ b/src/meson.build
|
||||
@@ -50,6 +50,7 @@ if get_option('ssc-support')
|
||||
'drv-ssc-proximity.c',
|
||||
'drv-ssc-light.c',
|
||||
'drv-ssc-accel.c',
|
||||
+ 'drv-ssc-compass.c',
|
||||
]
|
||||
endif
|
||||
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
From 630eab1d4a0773f1126a5e3dc56a95cece71a69d Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Wed, 26 Apr 2023 18:54:07 +0200
|
||||
Subject: [PATCH 06/10] data: add libssc udev rules
|
||||
|
||||
Add udev rules to indicate possible sensor types like
|
||||
ssc-accel, ssc-light, ssc-proximity, and ssc-compass
|
||||
when a FastRPC node is present. This commit enables
|
||||
the usage of the libssc sensor drivers in iio-sensor-proxy
|
||||
which are introduced in the previous commits.
|
||||
---
|
||||
data/80-iio-sensor-proxy-libssc.rules | 11 +++++++++++
|
||||
data/meson.build | 10 +++++++++-
|
||||
2 files changed, 20 insertions(+), 1 deletion(-)
|
||||
create mode 100644 data/80-iio-sensor-proxy-libssc.rules
|
||||
|
||||
diff --git a/data/80-iio-sensor-proxy-libssc.rules b/data/80-iio-sensor-proxy-libssc.rules
|
||||
new file mode 100644
|
||||
index 0000000..c4fad16
|
||||
--- /dev/null
|
||||
+++ b/data/80-iio-sensor-proxy-libssc.rules
|
||||
@@ -0,0 +1,11 @@
|
||||
+# iio-sensor-proxy: libssc
|
||||
+# IIO sensor to D-Bus proxy with libssc support
|
||||
+
|
||||
+ACTION=="remove", GOTO="iio_sensor_proxy_libssc_end"
|
||||
+
|
||||
+# Set the sensor type for all the types we recognise for SDSP/ADSP.
|
||||
+# Some devices expose the sensors via a separate SDSP while others re-use ADSP.
|
||||
+# These DSPs expose itself as /dev/fastrpc-* in the misc subsystem.
|
||||
+SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass"
|
||||
+
|
||||
+LABEL="iio_sensor_proxy_libssc_end"
|
||||
diff --git a/data/meson.build b/data/meson.build
|
||||
index 97dbc07..8b78125 100644
|
||||
--- a/data/meson.build
|
||||
+++ b/data/meson.build
|
||||
@@ -1,5 +1,13 @@
|
||||
+rules = files(
|
||||
+ '80-iio-sensor-proxy.rules'
|
||||
+)
|
||||
+
|
||||
+if get_option('ssc-support')
|
||||
+ rules += files('80-iio-sensor-proxy-libssc.rules')
|
||||
+endif
|
||||
+
|
||||
install_data(
|
||||
- '80-iio-sensor-proxy.rules',
|
||||
+ rules,
|
||||
install_dir: udev_rules_dir
|
||||
)
|
||||
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
From 4522c9a8e07e6645c0c460d93cd57c67768fae71 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sat, 1 Jun 2024 21:15:15 +0200
|
||||
Subject: [PATCH 07/10] data: iio-sensor-proxy.service.in: add AF_QIPCRTR
|
||||
|
||||
Allow AF_QIPCRTR in lockdown for libssc.
|
||||
Libssc uses the QMI protocol over QRTR in the kernel.
|
||||
Systemd limits the address families to UNIX, LOCAL, and NETLINK.
|
||||
However, QRTR uses its own address family: AF_QIPCRTR.
|
||||
Add it to the allowed families.
|
||||
---
|
||||
data/iio-sensor-proxy.service.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/data/iio-sensor-proxy.service.in b/data/iio-sensor-proxy.service.in
|
||||
index 4bc921b..29ea3c0 100644
|
||||
--- a/data/iio-sensor-proxy.service.in
|
||||
+++ b/data/iio-sensor-proxy.service.in
|
||||
@@ -14,6 +14,6 @@ ProtectControlGroups=true
|
||||
ProtectHome=true
|
||||
ProtectKernelModules=true
|
||||
PrivateTmp=true
|
||||
-RestrictAddressFamilies=AF_UNIX AF_LOCAL AF_NETLINK
|
||||
+RestrictAddressFamilies=AF_UNIX AF_LOCAL AF_NETLINK AF_QIPCRTR
|
||||
MemoryDenyWriteExecute=true
|
||||
RestrictRealtime=true
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,430 +0,0 @@
|
|||
From 7a195b942cf59088a298f77b00e44291c8dc67d0 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sat, 11 Jan 2025 21:11:36 +0100
|
||||
Subject: [PATCH 08/10] drv-ssc-*: implement set_polling
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
set_polling method allows sensors to be enabled/disabled on demand
|
||||
of the consumers. If all consumers stop listen for a sensor,
|
||||
iio-sensor-proxy will use this method to disable the sensor hardware
|
||||
and the other way around.
|
||||
|
||||
Co-Developed-By: Jonas Dreßler <verdre@v0yd.nl>
|
||||
Co-Developed-By: Sicelo A. Mhlongo <absicsz@gmail.com>
|
||||
---
|
||||
src/drv-ssc-accel.c | 65 ++++++++++++++++++----------------
|
||||
src/drv-ssc-compass.c | 77 +++++++++++++++++++++--------------------
|
||||
src/drv-ssc-light.c | 74 +++++++++++++++++++--------------------
|
||||
src/drv-ssc-proximity.c | 75 +++++++++++++++++++--------------------
|
||||
4 files changed, 146 insertions(+), 145 deletions(-)
|
||||
|
||||
diff --git a/src/drv-ssc-accel.c b/src/drv-ssc-accel.c
|
||||
index 676303b..745304c 100644
|
||||
--- a/src/drv-ssc-accel.c
|
||||
+++ b/src/drv-ssc-accel.c
|
||||
@@ -80,7 +80,6 @@ ssc_accelerometer_open (GUdevDevice *device)
|
||||
{
|
||||
SensorDevice *sensor_device;
|
||||
DrvData *drv_data;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
|
||||
sensor_device = g_new0 (SensorDevice, 1);
|
||||
sensor_device->priv = g_new0 (DrvData, 1);
|
||||
@@ -91,38 +90,43 @@ ssc_accelerometer_open (GUdevDevice *device)
|
||||
drv_data->location = setup_accel_location (device);
|
||||
set_accel_scale (&drv_data->scale, 1.0);
|
||||
|
||||
- /* Create sensor */
|
||||
- drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error);
|
||||
- if (!drv_data->sensor) {
|
||||
- g_warning ("Creating SSC accelerometer sensor failed: %s", error->message);
|
||||
- g_clear_pointer (&drv_data->mount_matrix, g_free);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
- g_object_get (drv_data->sensor,
|
||||
- SSC_SENSOR_NAME, &sensor_device->name,
|
||||
- NULL);
|
||||
-
|
||||
- /* Start listening for measurements */
|
||||
- drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
- "measurement",
|
||||
- G_CALLBACK (measurement_cb),
|
||||
- sensor_device);
|
||||
-
|
||||
- /* Enable sensor */
|
||||
- if (!ssc_sensor_accelerometer_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
- g_warning ("Opening SSC accelerometer sensor failed: %s", error->message);
|
||||
- g_clear_object (&drv_data->sensor);
|
||||
- g_clear_pointer (&drv_data->mount_matrix, g_free);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
return sensor_device;
|
||||
}
|
||||
|
||||
+static void
|
||||
+ssc_accelerometer_set_polling (SensorDevice *sensor_device, gboolean state)
|
||||
+{
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ if (state) {
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_accelerometer_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+ } else {
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_accelerometer_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void
|
||||
ssc_accelerometer_close (SensorDevice *sensor_device)
|
||||
{
|
||||
@@ -149,5 +153,6 @@ SensorDriver ssc_accel = {
|
||||
|
||||
.discover = ssc_accelerometer_discover,
|
||||
.open = ssc_accelerometer_open,
|
||||
+ .set_polling = ssc_accelerometer_set_polling,
|
||||
.close = ssc_accelerometer_close,
|
||||
};
|
||||
diff --git a/src/drv-ssc-compass.c b/src/drv-ssc-compass.c
|
||||
index c6f11a9..f4af37b 100644
|
||||
--- a/src/drv-ssc-compass.c
|
||||
+++ b/src/drv-ssc-compass.c
|
||||
@@ -63,56 +63,56 @@ static SensorDevice *
|
||||
ssc_compass_open (GUdevDevice *device)
|
||||
{
|
||||
SensorDevice *sensor_device;
|
||||
- DrvData *drv_data;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
|
||||
sensor_device = g_new0 (SensorDevice, 1);
|
||||
sensor_device->priv = g_new0 (DrvData, 1);
|
||||
- drv_data = (DrvData *) sensor_device->priv;
|
||||
-
|
||||
- /* Create sensor */
|
||||
- drv_data->sensor = ssc_sensor_compass_new_sync (NULL, &error);
|
||||
- if (!drv_data->sensor) {
|
||||
- g_warning ("Creating SSC compass sensor failed: %s", error->message);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
- g_object_get (drv_data->sensor,
|
||||
- SSC_SENSOR_NAME, &sensor_device->name,
|
||||
- NULL);
|
||||
-
|
||||
- /* Start listening for measurements */
|
||||
- drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
- "measurement",
|
||||
- G_CALLBACK (measurement_cb),
|
||||
- sensor_device);
|
||||
-
|
||||
- /* Enable sensor */
|
||||
- if (!ssc_sensor_compass_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
- g_warning ("Opening SSC compass sensor failed: %s", error->message);
|
||||
- g_clear_object (&drv_data->sensor);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
|
||||
return sensor_device;
|
||||
}
|
||||
|
||||
static void
|
||||
-ssc_compass_close (SensorDevice *sensor_device)
|
||||
+ssc_compass_set_polling (SensorDevice *sensor_device, gboolean state)
|
||||
{
|
||||
- g_autoptr (GError) error = NULL;
|
||||
DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
|
||||
- /* Stop listening for measurements */
|
||||
- g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
- g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+ if (state) {
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_compass_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC compass sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+ g_object_get (drv_data->sensor,
|
||||
+ SSC_SENSOR_NAME, &sensor_device->name,
|
||||
+ NULL);
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_compass_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC compass sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+ } else {
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_compass_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC compass sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ }
|
||||
+}
|
||||
|
||||
- /* Disable sensor */
|
||||
- if (!ssc_sensor_compass_close_sync (drv_data->sensor, NULL, &error))
|
||||
- g_warning ("Closing SSC compass sensor failed: %s", error->message);
|
||||
+static void
|
||||
+ssc_compass_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
|
||||
g_clear_object (&drv_data->sensor);
|
||||
g_clear_pointer (&sensor_device->priv, g_free);
|
||||
@@ -125,5 +125,6 @@ SensorDriver ssc_compass = {
|
||||
|
||||
.discover = ssc_compass_discover,
|
||||
.open = ssc_compass_open,
|
||||
+ .set_polling = ssc_compass_set_polling,
|
||||
.close = ssc_compass_close,
|
||||
};
|
||||
diff --git a/src/drv-ssc-light.c b/src/drv-ssc-light.c
|
||||
index eb43d6c..04d24dd 100644
|
||||
--- a/src/drv-ssc-light.c
|
||||
+++ b/src/drv-ssc-light.c
|
||||
@@ -63,57 +63,54 @@ static SensorDevice *
|
||||
ssc_light_open (GUdevDevice *device)
|
||||
{
|
||||
SensorDevice *sensor_device;
|
||||
- DrvData *drv_data;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
|
||||
sensor_device = g_new0 (SensorDevice, 1);
|
||||
sensor_device->priv = g_new0 (DrvData, 1);
|
||||
- drv_data = (DrvData *) sensor_device->priv;
|
||||
-
|
||||
- /* Create sensor */
|
||||
- drv_data->sensor = ssc_sensor_light_new_sync (NULL, &error);
|
||||
- if (!drv_data->sensor) {
|
||||
- g_warning ("Creating SSC light sensor failed: %s", error->message);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
- g_object_get (drv_data->sensor,
|
||||
- SSC_SENSOR_NAME, &sensor_device->name,
|
||||
- NULL);
|
||||
-
|
||||
- /* Start listening for measurements */
|
||||
- drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
- "measurement",
|
||||
- G_CALLBACK (measurement_cb),
|
||||
- sensor_device);
|
||||
-
|
||||
- /* Enable sensor */
|
||||
- if (!ssc_sensor_light_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
- g_warning ("Opening SSC light sensor failed: %s", error->message);
|
||||
- g_clear_object (&drv_data->sensor);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
|
||||
return sensor_device;
|
||||
}
|
||||
|
||||
+static void
|
||||
+ssc_light_set_polling (SensorDevice *sensor_device, gboolean state)
|
||||
+{
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ if (state) {
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_light_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC light sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_light_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC light sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+ } else {
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_light_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC light sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void
|
||||
ssc_light_close (SensorDevice *sensor_device)
|
||||
{
|
||||
g_autoptr (GError) error = NULL;
|
||||
DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
|
||||
- /* Stop listening for measurements */
|
||||
- g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
- g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
-
|
||||
- /* Disable sensor */
|
||||
- if (!ssc_sensor_light_close_sync (drv_data->sensor, NULL, &error))
|
||||
- g_warning ("Closing SSC light sensor failed: %s", error->message);
|
||||
-
|
||||
g_clear_object (&drv_data->sensor);
|
||||
g_clear_pointer (&sensor_device->priv, g_free);
|
||||
g_free (sensor_device);
|
||||
@@ -125,5 +122,6 @@ SensorDriver ssc_light = {
|
||||
|
||||
.discover = ssc_light_discover,
|
||||
.open = ssc_light_open,
|
||||
+ .set_polling = ssc_light_set_polling,
|
||||
.close = ssc_light_close,
|
||||
};
|
||||
diff --git a/src/drv-ssc-proximity.c b/src/drv-ssc-proximity.c
|
||||
index f4aa897..12570ba 100644
|
||||
--- a/src/drv-ssc-proximity.c
|
||||
+++ b/src/drv-ssc-proximity.c
|
||||
@@ -62,56 +62,52 @@ static SensorDevice *
|
||||
ssc_proximity_open (GUdevDevice *device)
|
||||
{
|
||||
SensorDevice *sensor_device;
|
||||
- DrvData *drv_data;
|
||||
- g_autoptr (GError) error = NULL;
|
||||
|
||||
sensor_device = g_new0 (SensorDevice, 1);
|
||||
sensor_device->priv = g_new0 (DrvData, 1);
|
||||
- drv_data = (DrvData *) sensor_device->priv;
|
||||
-
|
||||
- /* Create sensor */
|
||||
- drv_data->sensor = ssc_sensor_proximity_new_sync (NULL, &error);
|
||||
- if (!drv_data->sensor) {
|
||||
- g_warning ("Creating SSC proximity sensor failed: %s", error->message);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
- g_object_get (drv_data->sensor,
|
||||
- SSC_SENSOR_NAME, &sensor_device->name,
|
||||
- NULL);
|
||||
-
|
||||
- /* Start listening for measurements */
|
||||
- drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
- "measurement",
|
||||
- G_CALLBACK (measurement_cb),
|
||||
- sensor_device);
|
||||
-
|
||||
- /* Enable sensor */
|
||||
- if (!ssc_sensor_proximity_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
- g_warning ("Opening SSC proximity sensor failed: %s", error->message);
|
||||
- g_clear_object (&drv_data->sensor);
|
||||
- g_clear_pointer (&sensor_device->priv, g_free);
|
||||
- g_free (sensor_device);
|
||||
- return NULL;
|
||||
- }
|
||||
|
||||
return sensor_device;
|
||||
}
|
||||
|
||||
static void
|
||||
-ssc_proximity_close (SensorDevice *sensor_device)
|
||||
+ssc_proximity_set_polling (SensorDevice *sensor_device, gboolean state)
|
||||
{
|
||||
- g_autoptr (GError) error = NULL;
|
||||
DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ if (state) {
|
||||
+ /* Create sensor */
|
||||
+ drv_data->sensor = ssc_sensor_proximity_new_sync (NULL, &error);
|
||||
+ if (!drv_data->sensor) {
|
||||
+ g_warning ("Creating SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* Start listening for measurements */
|
||||
+ drv_data->measurement_id = g_signal_connect (drv_data->sensor,
|
||||
+ "measurement",
|
||||
+ G_CALLBACK (measurement_cb),
|
||||
+ sensor_device);
|
||||
+
|
||||
+ /* Enable sensor */
|
||||
+ if (!ssc_sensor_proximity_open_sync (drv_data->sensor, NULL, &error)) {
|
||||
+ g_warning ("Opening SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ return;
|
||||
+ }
|
||||
+ } else {
|
||||
+ /* Stop listening for measurements */
|
||||
+ g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
+
|
||||
+ /* Disable sensor */
|
||||
+ if (!ssc_sensor_proximity_close_sync (drv_data->sensor, NULL, &error))
|
||||
+ g_warning ("Closing SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN");
|
||||
+ }
|
||||
+}
|
||||
|
||||
- /* Stop listening for measurements */
|
||||
- g_warn_if_fail (drv_data->measurement_id > 0);
|
||||
- g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id);
|
||||
-
|
||||
- /* Disable sensor */
|
||||
- if (!ssc_sensor_proximity_close_sync (drv_data->sensor, NULL, &error))
|
||||
- g_warning ("Closing SSC proximity sensor failed: %s", error->message);
|
||||
+static void
|
||||
+ssc_proximity_close (SensorDevice *sensor_device)
|
||||
+{
|
||||
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
|
||||
|
||||
g_clear_object (&drv_data->sensor);
|
||||
g_clear_pointer (&sensor_device->priv, g_free);
|
||||
@@ -124,5 +120,6 @@ SensorDriver ssc_proximity = {
|
||||
|
||||
.discover = ssc_proximity_discover,
|
||||
.open = ssc_proximity_open,
|
||||
+ .set_polling = ssc_proximity_set_polling,
|
||||
.close = ssc_proximity_close,
|
||||
};
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,429 +0,0 @@
|
|||
From 15f095b67722ffdeb6d8f04d12b9f569d256aa2f Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sun, 12 Jan 2025 20:59:16 +0100
|
||||
Subject: [PATCH 09/10] tests: integration-test: add SSC sensors
|
||||
|
||||
Test all 4 sensors provided by libssc.
|
||||
---
|
||||
tests/integration-test.py | 1 +
|
||||
tests/meson.build | 14 ++
|
||||
tests/ssc-test.py | 373 ++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 388 insertions(+)
|
||||
create mode 100755 tests/ssc-test.py
|
||||
|
||||
diff --git a/tests/integration-test.py b/tests/integration-test.py
|
||||
index 4751505..60bbd31 100755
|
||||
--- a/tests/integration-test.py
|
||||
+++ b/tests/integration-test.py
|
||||
@@ -56,6 +56,7 @@ class Tests(dbusmock.DBusTestCase):
|
||||
def setUpClass(cls):
|
||||
# run from local build tree if we are in one, otherwise use system instance
|
||||
builddir = os.getenv('top_builddir', '.')
|
||||
+ print(os.path.join(builddir, 'src', 'iio-sensor-proxy'))
|
||||
if os.access(os.path.join(builddir, 'src', 'iio-sensor-proxy'), os.X_OK):
|
||||
cls.daemon_path = os.path.join(builddir, 'src', 'iio-sensor-proxy')
|
||||
cls.monitor_sensor_path = os.path.join(builddir, 'src', 'monitor-sensor')
|
||||
diff --git a/tests/meson.build b/tests/meson.build
|
||||
index e51e90f..5c19964 100644
|
||||
--- a/tests/meson.build
|
||||
+++ b/tests/meson.build
|
||||
@@ -16,3 +16,17 @@ foreach ut: unit_tests
|
||||
env: envs,
|
||||
)
|
||||
endforeach
|
||||
+
|
||||
+if get_option('ssc-support')
|
||||
+ r = run_command(unittest_inspector, files('ssc-test.py'), check: true)
|
||||
+ unit_tests = r.stdout().strip().split('\n')
|
||||
+ foreach ut: unit_tests
|
||||
+ ut_args = files('ssc-test.py')
|
||||
+ ut_args += ut
|
||||
+ test(ut,
|
||||
+ python3,
|
||||
+ args: ut_args,
|
||||
+ env: envs,
|
||||
+ )
|
||||
+ endforeach
|
||||
+endif
|
||||
diff --git a/tests/ssc-test.py b/tests/ssc-test.py
|
||||
new file mode 100755
|
||||
index 0000000..72e24f0
|
||||
--- /dev/null
|
||||
+++ b/tests/ssc-test.py
|
||||
@@ -0,0 +1,373 @@
|
||||
+#!/usr/bin/python3
|
||||
+
|
||||
+# iio-sensor-proxy integration test suite
|
||||
+#
|
||||
+# Run in built tree to test local built binaries, or from anywhere else to test
|
||||
+# system installed binaries.
|
||||
+#
|
||||
+# Copyright: (C) 2011 Martin Pitt <martin.pitt@ubuntu.com>
|
||||
+# (C) 2021 Bastien Nocera <hadess@hadess.net>
|
||||
+#
|
||||
+# This program is free software; you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation; either version 2 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+import os
|
||||
+import sys
|
||||
+import dbus
|
||||
+import dbusmock
|
||||
+import gi
|
||||
+import tempfile
|
||||
+import psutil
|
||||
+import subprocess
|
||||
+import unittest
|
||||
+import locale
|
||||
+import time
|
||||
+
|
||||
+try:
|
||||
+ from gi.repository import GLib
|
||||
+ from gi.repository import Gio
|
||||
+except ImportError as e:
|
||||
+ sys.stderr.write('PyGobject not available for Python 3, or missing GI typelibs: %s\n' % str(e))
|
||||
+ sys.exit(1)
|
||||
+
|
||||
+try:
|
||||
+ gi.require_version('UMockdev', '1.0')
|
||||
+ from gi.repository import UMockdev
|
||||
+except ImportError:
|
||||
+ sys.stderr.write('umockdev not available (https://github.com/martinpitt/umockdev)\n')
|
||||
+ sys.exit(1)
|
||||
+
|
||||
+
|
||||
+SP = 'net.hadess.SensorProxy'
|
||||
+SP_PATH = '/net/hadess/SensorProxy'
|
||||
+SP_COMPASS = 'net.hadess.SensorProxy.Compass'
|
||||
+SP_COMPASS_PATH = '/net/hadess/SensorProxy/Compass'
|
||||
+
|
||||
+class Tests(dbusmock.DBusTestCase):
|
||||
+
|
||||
+ @classmethod
|
||||
+ def setUpClass(cls):
|
||||
+ # run from local build tree if we are in one, otherwise use system instance
|
||||
+ builddir = os.getenv('top_builddir', '.')
|
||||
+ print(os.path.join(builddir, 'src', 'iio-sensor-proxy'))
|
||||
+ if os.access(os.path.join(builddir, 'src', 'iio-sensor-proxy'), os.X_OK):
|
||||
+ cls.daemon_path = os.path.join(builddir, 'src', 'iio-sensor-proxy')
|
||||
+ cls.monitor_sensor_path = os.path.join(builddir, 'src', 'monitor-sensor')
|
||||
+ print('Testing binaries from local build tree (%s)' % cls.daemon_path)
|
||||
+ elif os.environ.get('UNDER_JHBUILD', False):
|
||||
+ jhbuild_prefix = os.environ['JHBUILD_PREFIX']
|
||||
+ cls.daemon_path = os.path.join(jhbuild_prefix, 'libexec', 'iio-sensor-proxy')
|
||||
+ cls.monitor_sensor_path = os.path.join(jhbuild_prefix, 'bin', 'monitor-sensor')
|
||||
+ print('Testing binaries from JHBuild (%s)' % cls.daemon_path)
|
||||
+ else:
|
||||
+ cls.daemon_path = None
|
||||
+ with open('/usr/lib/systemd/system/iio-sensor-proxy.service') as f:
|
||||
+ for line in f:
|
||||
+ if line.startswith('ExecStart='):
|
||||
+ cls.daemon_path = line.split('=', 1)[1].strip()
|
||||
+ break
|
||||
+ assert cls.daemon_path, 'could not determine daemon path from systemd .service file'
|
||||
+ cls.monitor_sensor_path = '/usr/bin/monitor-sensor'
|
||||
+ print('Testing installed system binary (%s)' % cls.daemon_path)
|
||||
+
|
||||
+ # fail on CRITICALs on client and server side
|
||||
+ GLib.log_set_always_fatal(GLib.LogLevelFlags.LEVEL_WARNING |
|
||||
+ GLib.LogLevelFlags.LEVEL_ERROR |
|
||||
+ GLib.LogLevelFlags.LEVEL_CRITICAL)
|
||||
+ os.environ['G_DEBUG'] = 'fatal_warnings'
|
||||
+
|
||||
+ # set up a fake system D-BUS
|
||||
+ cls.test_bus = Gio.TestDBus.new(Gio.TestDBusFlags.NONE)
|
||||
+ cls.test_bus.up()
|
||||
+ try:
|
||||
+ del os.environ['DBUS_SESSION_BUS_ADDRESS']
|
||||
+ except KeyError:
|
||||
+ pass
|
||||
+ os.environ['DBUS_SYSTEM_BUS_ADDRESS'] = cls.test_bus.get_bus_address()
|
||||
+
|
||||
+ cls.dbus = Gio.bus_get_sync(Gio.BusType.SYSTEM, None)
|
||||
+ cls.dbus_con = cls.get_dbus(True)
|
||||
+
|
||||
+ # Some test outputs require the daemon to run under the fr locale:
|
||||
+ # so check if that's available
|
||||
+ try:
|
||||
+ old_loc = locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
|
||||
+ locale.setlocale(locale.LC_ALL, old_loc)
|
||||
+ # We need to make sure the decimal point is correct as on musl libc the above
|
||||
+ # succeeds yet the tests just fail due to the output being in unexpected format
|
||||
+ cls.has_fr = locale.localeconv()["decimal_point"] == ","
|
||||
+ except:
|
||||
+ cls.has_fr = False
|
||||
+
|
||||
+ @classmethod
|
||||
+ def tearDownClass(cls):
|
||||
+ cls.test_bus.down()
|
||||
+ dbusmock.DBusTestCase.tearDownClass()
|
||||
+
|
||||
+ def setUp(self):
|
||||
+ '''Set up a local umockdev testbed.
|
||||
+
|
||||
+ The testbed is initially empty.
|
||||
+ '''
|
||||
+ self.testbed = UMockdev.Testbed.new()
|
||||
+ self.polkitd, obj_polkit = self.spawn_server_template(
|
||||
+ 'polkitd', {}, stdout=subprocess.PIPE)
|
||||
+ obj_polkit.SetAllowed(['net.hadess.SensorProxy.claim-sensor'])
|
||||
+
|
||||
+ self.proxy = None
|
||||
+ self.log = None
|
||||
+ self.daemon = None
|
||||
+
|
||||
+ def run(self, result=None):
|
||||
+ super(Tests, self).run(result)
|
||||
+ if result and len(result.errors) + len(result.failures) > 0 and self.log:
|
||||
+ with open(self.log.name) as f:
|
||||
+ sys.stderr.write('\n-------------- daemon log: ----------------\n')
|
||||
+ sys.stderr.write(f.read())
|
||||
+ sys.stderr.write('------------------------------\n')
|
||||
+
|
||||
+ def tearDown(self):
|
||||
+ del self.testbed
|
||||
+ self.stop_daemon()
|
||||
+
|
||||
+ if self.polkitd:
|
||||
+ try:
|
||||
+ self.polkitd.kill()
|
||||
+ except OSError:
|
||||
+ pass
|
||||
+ self.polkitd.wait()
|
||||
+ self.polkitd = None
|
||||
+
|
||||
+ #
|
||||
+ # Daemon control and D-BUS I/O
|
||||
+ #
|
||||
+
|
||||
+ def start_daemon(self, env = None, wrapper = None):
|
||||
+ '''Start daemon and create DBus proxy.
|
||||
+
|
||||
+ When done, this sets self.proxy as the Gio.DBusProxy for power-profiles-daemon.
|
||||
+ '''
|
||||
+ if not env:
|
||||
+ env = os.environ.copy()
|
||||
+ env['G_DEBUG'] = 'fatal-criticals'
|
||||
+ env['G_MESSAGES_DEBUG'] = 'all'
|
||||
+ env['UMOCKDEV_DEBUG'] = 'all'
|
||||
+ # note: Python doesn't propagate the setenv from Testbed.new(), so we
|
||||
+ # have to do that ourselves
|
||||
+ env['UMOCKDEV_DIR'] = self.testbed.get_root_dir()
|
||||
+ self.log = tempfile.NamedTemporaryFile()
|
||||
+ timeout_multiplier = 1
|
||||
+ if wrapper:
|
||||
+ daemon_path = wrapper + [ self.daemon_path ]
|
||||
+ else:
|
||||
+ daemon_path = [ self.daemon_path ]
|
||||
+ if os.getenv('VALGRIND') != None:
|
||||
+ daemon_path = ['valgrind'] + daemon_path + ['-v']
|
||||
+ timeout_multiplier = 10
|
||||
+ else:
|
||||
+ daemon_path = daemon_path + ['-v']
|
||||
+
|
||||
+ self.daemon = subprocess.Popen(daemon_path,
|
||||
+ env=env, stdout=self.log,
|
||||
+ stderr=subprocess.STDOUT)
|
||||
+
|
||||
+ # wait until the daemon gets online
|
||||
+ timeout = 100 * timeout_multiplier
|
||||
+ while timeout > 0:
|
||||
+ time.sleep(0.1)
|
||||
+ timeout -= 1
|
||||
+ try:
|
||||
+ self.get_dbus_property('HasAccelerometer')
|
||||
+ break
|
||||
+ except GLib.GError:
|
||||
+ pass
|
||||
+ else:
|
||||
+ self.fail('daemon did not start in 10 seconds')
|
||||
+
|
||||
+ self.proxy = Gio.DBusProxy.new_sync(
|
||||
+ self.dbus, Gio.DBusProxyFlags.DO_NOT_AUTO_START, None, SP,
|
||||
+ SP_PATH, SP, None)
|
||||
+
|
||||
+ self.assertEqual(self.daemon.poll(), None, 'daemon crashed')
|
||||
+
|
||||
+ def stop_daemon(self):
|
||||
+ '''Stop the daemon if it is running.'''
|
||||
+
|
||||
+ if self.daemon:
|
||||
+ try:
|
||||
+ for child in psutil.Process(self.daemon.pid).children(recursive=True):
|
||||
+ child.kill()
|
||||
+ self.daemon.kill()
|
||||
+ except OSError:
|
||||
+ pass
|
||||
+ self.daemon.wait()
|
||||
+ self.daemon = None
|
||||
+ self.proxy = None
|
||||
+
|
||||
+ def get_dbus_property(self, name):
|
||||
+ '''Get property value from daemon D-Bus interface.'''
|
||||
+
|
||||
+ proxy = Gio.DBusProxy.new_sync(
|
||||
+ self.dbus, Gio.DBusProxyFlags.DO_NOT_AUTO_START, None, SP,
|
||||
+ SP_PATH, 'org.freedesktop.DBus.Properties', None)
|
||||
+ return proxy.Get('(ss)', SP, name)
|
||||
+
|
||||
+ def get_compass_dbus_property(self, name):
|
||||
+ '''Get property value from daemon compass D-Bus interface.'''
|
||||
+
|
||||
+ proxy = Gio.DBusProxy.new_sync(
|
||||
+ self.dbus, Gio.DBusProxyFlags.DO_NOT_AUTO_START, None, SP,
|
||||
+ SP_COMPASS_PATH, 'org.freedesktop.DBus.Properties', None)
|
||||
+ return proxy.Get('(ss)', SP_COMPASS, name)
|
||||
+
|
||||
+ def have_text_in_log(self, text):
|
||||
+ return self.count_text_in_log(text) > 0
|
||||
+
|
||||
+ def count_text_in_log(self, text):
|
||||
+ with open(self.log.name) as f:
|
||||
+ return f.read().count(text)
|
||||
+
|
||||
+ def read_sysfs_attr(self, device, attribute):
|
||||
+ with open(os.path.join(self.testbed.get_root_dir() + device, attribute), 'rb') as f:
|
||||
+ return f.read()
|
||||
+ return None
|
||||
+
|
||||
+ def read_file(self, path):
|
||||
+ with open(path, 'rb') as f:
|
||||
+ return f.read()
|
||||
+ return None
|
||||
+
|
||||
+ def assertEventually(self, condition, message=None, timeout=50):
|
||||
+ '''Assert that condition function eventually returns True.
|
||||
+
|
||||
+ Timeout is in deciseconds, defaulting to 50 (5 seconds). message is
|
||||
+ printed on failure.
|
||||
+ '''
|
||||
+ while timeout >= 0:
|
||||
+ context = GLib.MainContext.default()
|
||||
+ while context.iteration(False):
|
||||
+ pass
|
||||
+ if condition():
|
||||
+ break
|
||||
+ timeout -= 1
|
||||
+ time.sleep(0.1)
|
||||
+ else:
|
||||
+ self.fail(message or 'timed out waiting for ' + str(condition))
|
||||
+
|
||||
+ #
|
||||
+ # Actual test cases
|
||||
+ #
|
||||
+
|
||||
+ def test_ssc_proximity(self):
|
||||
+ '''SSC proximity'''
|
||||
+ prox = self.testbed.add_device('misc', 'ssc-proximity', None,
|
||||
+ ['name', 'SSC Test Proximity Sensor'],
|
||||
+ ['NAME', '"SSC Proximity Sensor"',
|
||||
+ 'DEVNAME', '/dev/fastrpc-sdsp',
|
||||
+ 'IIO_SENSOR_PROXY_TYPE', 'ssc-proximity']
|
||||
+ )
|
||||
+ self.start_daemon()
|
||||
+ self.assertEqual(self.get_dbus_property('HasAmbientLight'), False)
|
||||
+ self.assertEqual(self.get_dbus_property('HasAccelerometer'), False)
|
||||
+ self.assertEqual(self.get_dbus_property('HasProximity'), True)
|
||||
+ self.assertEqual(self.get_compass_dbus_property('HasCompass'), False)
|
||||
+
|
||||
+ # Default values
|
||||
+ self.assertEqual(self.get_dbus_property('ProximityNear'), False)
|
||||
+
|
||||
+ self.proxy.ClaimProximity()
|
||||
+ self.assertEqual(self.get_dbus_property('ProximityNear'), True)
|
||||
+ self.assertEventually(lambda: self.get_dbus_property('ProximityNear') == False)
|
||||
+ self.assertEventually(lambda: self.get_dbus_property('ProximityNear') == True)
|
||||
+
|
||||
+ self.stop_daemon()
|
||||
+
|
||||
+ def test_ssc_accel(self):
|
||||
+ '''SSC accelerometer'''
|
||||
+ prox = self.testbed.add_device('misc', 'ssc-accel', None,
|
||||
+ ['name', 'SSC Test Accelerometer Sensor'],
|
||||
+ ['NAME', '"SSC Accelerometer Sensor"',
|
||||
+ 'DEVNAME', '/dev/fastrpc-sdsp',
|
||||
+ 'IIO_SENSOR_PROXY_TYPE', 'ssc-accel']
|
||||
+ )
|
||||
+ self.start_daemon()
|
||||
+ self.assertEqual(self.get_dbus_property('HasAmbientLight'), False)
|
||||
+ self.assertEqual(self.get_dbus_property('HasAccelerometer'), True)
|
||||
+ self.assertEqual(self.get_dbus_property('HasProximity'), False)
|
||||
+ self.assertEqual(self.get_compass_dbus_property('HasCompass'), False)
|
||||
+
|
||||
+ self.assertEqual(self.get_dbus_property('AccelerometerOrientation'), 'undefined')
|
||||
+
|
||||
+ self.proxy.ClaimAccelerometer()
|
||||
+ self.assertEqual(self.get_dbus_property('AccelerometerOrientation'), 'left-up')
|
||||
+
|
||||
+ self.stop_daemon()
|
||||
+
|
||||
+ def test_ssc_light(self):
|
||||
+ '''SSC light'''
|
||||
+ prox = self.testbed.add_device('misc', 'ssc-light', None,
|
||||
+ ['name', 'SSC Test Light Sensor'],
|
||||
+ ['NAME', '"SSC Light Sensor"',
|
||||
+ 'DEVNAME', '/dev/fastrpc-sdsp',
|
||||
+ 'IIO_SENSOR_PROXY_TYPE', 'ssc-light']
|
||||
+ )
|
||||
+ self.start_daemon()
|
||||
+ self.assertEqual(self.get_dbus_property('HasAmbientLight'), True)
|
||||
+ self.assertEqual(self.get_dbus_property('HasAccelerometer'), False)
|
||||
+ self.assertEqual(self.get_dbus_property('HasProximity'), False)
|
||||
+ self.assertEqual(self.get_compass_dbus_property('HasCompass'), False)
|
||||
+
|
||||
+ # Default values
|
||||
+ self.assertEqual(self.get_dbus_property('LightLevelUnit'), 'lux')
|
||||
+ self.assertEqual(self.get_dbus_property('LightLevel'), 0)
|
||||
+
|
||||
+ self.proxy.ClaimLight()
|
||||
+ self.assertEventually(lambda: self.get_dbus_property('LightLevel') == 7)
|
||||
+ self.assertEqual(self.get_dbus_property('LightLevelUnit'), 'lux')
|
||||
+
|
||||
+ self.stop_daemon()
|
||||
+
|
||||
+ def test_ssc_compass(self):
|
||||
+ '''SSC compass'''
|
||||
+ prox = self.testbed.add_device('misc', 'ssc-compass', None,
|
||||
+ ['name', 'SSC Test Compass Sensor'],
|
||||
+ ['NAME', '"SSC Compass Sensor"',
|
||||
+ 'DEVNAME', '/dev/fastrpc-sdsp',
|
||||
+ 'IIO_SENSOR_PROXY_TYPE', 'ssc-compass']
|
||||
+ )
|
||||
+ self.start_daemon()
|
||||
+ self.assertEqual(self.get_dbus_property('HasAmbientLight'), False)
|
||||
+ self.assertEqual(self.get_dbus_property('HasAccelerometer'), False)
|
||||
+ self.assertEqual(self.get_dbus_property('HasProximity'), False)
|
||||
+ self.assertEqual(self.get_compass_dbus_property('HasCompass'), True)
|
||||
+ self.assertEqual(int(self.get_compass_dbus_property('CompassHeading')), 0)
|
||||
+
|
||||
+ self.stop_daemon()
|
||||
+
|
||||
+ #
|
||||
+ # Helper methods
|
||||
+ #
|
||||
+
|
||||
+ @classmethod
|
||||
+ def _props_to_str(cls, properties):
|
||||
+ '''Convert a properties dictionary to uevent text representation.'''
|
||||
+
|
||||
+ prop_str = ''
|
||||
+ if properties:
|
||||
+ for k, v in properties.items():
|
||||
+ prop_str += '%s=%s\n' % (k, v)
|
||||
+ return prop_str
|
||||
+
|
||||
+if __name__ == '__main__':
|
||||
+ # run ourselves under umockdev
|
||||
+ if 'umockdev' not in os.environ.get('LD_PRELOAD', ''):
|
||||
+ os.execvp('umockdev-wrapper', ['umockdev-wrapper'] + sys.argv)
|
||||
+
|
||||
+ unittest.main()
|
||||
--
|
||||
2.47.1
|
||||
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From 9d8e0b019583b549d61f1cfddc17ea32b17662c6 Mon Sep 17 00:00:00 2001
|
||||
From: Clayton Craft <clayton@craftyguy.net>
|
||||
Date: Fri, 2 Jan 2026 17:18:27 -0800
|
||||
Subject: [PATCH] fixup! data: add libssc udev rules
|
||||
|
||||
---
|
||||
data/80-iio-sensor-proxy-libssc.rules | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/data/80-iio-sensor-proxy-libssc.rules b/data/80-iio-sensor-proxy-libssc.rules
|
||||
index c4fad16..5eb3d46 100644
|
||||
--- a/data/80-iio-sensor-proxy-libssc.rules
|
||||
+++ b/data/80-iio-sensor-proxy-libssc.rules
|
||||
@@ -6,6 +6,7 @@ ACTION=="remove", GOTO="iio_sensor_proxy_libssc_end"
|
||||
# Set the sensor type for all the types we recognise for SDSP/ADSP.
|
||||
# Some devices expose the sensors via a separate SDSP while others re-use ADSP.
|
||||
# These DSPs expose itself as /dev/fastrpc-* in the misc subsystem.
|
||||
-SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass"
|
||||
+SUBSYSTEM=="misc", KERNEL=="fastrpc-adsp*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass"
|
||||
+SUBSYSTEM=="misc", KERNEL=="fastrpc-sdsp*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass"
|
||||
|
||||
LABEL="iio_sensor_proxy_libssc_end"
|
||||
--
|
||||
2.52.0
|
||||
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
From 5349b67bf68e07b3d4fef5d39579a2879a144a65 Mon Sep 17 00:00:00 2001
|
||||
From: "Sicelo A. Mhlongo" <absicsz@gmail.com>
|
||||
Date: Mon, 26 May 2025 18:05:38 +0200
|
||||
Subject: [PATCH 4/4] integration-test: add test for sensors that report
|
||||
non-working buffers
|
||||
|
||||
Confirm that when a sensor reports support for buffer operation, and the mode
|
||||
can actually be enabled, but no data is returned, iio-sensor-proxy will detect
|
||||
this and switch to polling mode.
|
||||
---
|
||||
tests/integration-test.py | 36 ++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 36 insertions(+)
|
||||
|
||||
diff --git a/tests/integration-test.py b/tests/integration-test.py
|
||||
index b596eaa..95b9da3 100755
|
||||
--- a/tests/integration-test.py
|
||||
+++ b/tests/integration-test.py
|
||||
@@ -630,6 +630,42 @@ class Tests(dbusmock.DBusTestCase):
|
||||
|
||||
self.stop_daemon()
|
||||
|
||||
+ def test_iio_broken_buffer_accel(self):
|
||||
+ '''iio sensor reporting broken buffer support'''
|
||||
+ top_srcdir = os.getenv('top_srcdir', '.')
|
||||
+ mock_dev_data = self.testbed.get_root_dir() + '/iio-dev-data.bin'
|
||||
+ accel = self.testbed.add_device('iio', 'iio-buffer-accel0', None,
|
||||
+ ['name', 'IIO Test Accelerometer',
|
||||
+ 'buffer/enable', '0',
|
||||
+ 'trigger/current_trigger', '',
|
||||
+ 'scan_elements/in_accel_x_en', '0',
|
||||
+ 'scan_elements/in_accel_x_index', '0',
|
||||
+ 'scan_elements/in_accel_x_type', 'le:s16/32>>0',
|
||||
+ 'scan_elements/in_accel_y_en', '0',
|
||||
+ 'scan_elements/in_accel_y_index', '1',
|
||||
+ 'scan_elements/in_accel_y_type', 'le:s16/32>>0',
|
||||
+ 'scan_elements/in_accel_z_en', '0',
|
||||
+ 'scan_elements/in_accel_z_index', '2',
|
||||
+ 'scan_elements/in_accel_z_type', 'le:s16/32>>0',
|
||||
+ 'scan_elements/in_timestamp_en', '1',
|
||||
+ 'scan_elements/in_timestamp_index', '3',
|
||||
+ 'scan_elements/in_timestamp_type', 'le:s64/64>>0'],
|
||||
+ ['NAME', '"IIO Accelerometer"',
|
||||
+ 'DEVNAME', '/dev/iio-buffer-accel-test',
|
||||
+ 'IIO_SENSOR_PROXY_TYPE', 'iio-buffer-accel iio-poll-accel']
|
||||
+ )
|
||||
+ trigger = self.testbed.add_device('iio', 'trigger0', None,
|
||||
+ ['name', 'accel_3d-dev0'],
|
||||
+ []
|
||||
+ )
|
||||
+ self.start_daemon()
|
||||
+ self.assertEqual(self.have_text_in_log('Built channel array'), True)
|
||||
+ self.assertEqual(self.have_text_in_log('Disabled sensor'), True)
|
||||
+ self.assertEqual(self.have_text_in_log('Found IIO poll accelerometer'), True)
|
||||
+ self.assertEqual(self.get_dbus_property('HasAccelerometer'), True)
|
||||
+
|
||||
+ self.stop_daemon()
|
||||
+
|
||||
def test_unrequested_readings(self):
|
||||
'''unrequested property updates'''
|
||||
self.testbed.add_device('input', 'fake-light', None,
|
||||
--
|
||||
2.50.0
|
||||
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
# Forked from Alpine to add Qualcomm SSC support with libssc
|
||||
maintainer="Dylan Van Assche <me@dylanvanassche.be>"
|
||||
pkgname=iio-sensor-proxy
|
||||
_pkgver=3.8
|
||||
pkgver=9999$_pkgver
|
||||
pkgrel=6
|
||||
pkgdesc="IIO sensors to D-Bus proxy"
|
||||
url="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy"
|
||||
arch="aarch64"
|
||||
license="GPL-2.0-or-later"
|
||||
depends="dbus"
|
||||
makedepends="
|
||||
eudev-dev
|
||||
glib-dev
|
||||
libgudev-dev
|
||||
meson
|
||||
polkit-dev
|
||||
libssc-dev>=0.2.1
|
||||
"
|
||||
subpackages="$pkgname-openrc $pkgname-systemd $pkgname-udev"
|
||||
builddir="$srcdir/$pkgname-$_pkgver"
|
||||
source="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/archive/$_pkgver/iio-sensor-proxy-$_pkgver.tar.gz
|
||||
iio-sensor-proxy.initd
|
||||
system-iio-sensor-proxy.service.d-hexagonrpcd.conf
|
||||
0001-iio-sensor-proxy-depend-on-libssc.patch
|
||||
0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch
|
||||
0002-proximity-support-SSC-proximity-sensor.patch
|
||||
0003-light-support-SSC-light-sensor.patch
|
||||
0004-accelerometer-support-SSC-accelerometer-sensor.patch
|
||||
0005-compass-support-SSC-compass-sensor.patch
|
||||
0006-data-add-libssc-udev-rules.patch
|
||||
0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch
|
||||
0008-drv-ssc-implement-set_polling.patch
|
||||
0009-tests-integration-test-add-SSC-sensors.patch
|
||||
0010-fixup-data-add-libssc-udev-rules.patch
|
||||
0013-integration-test-add-test-for-sensors-that-report-no.patch
|
||||
"
|
||||
|
||||
build() {
|
||||
abuild-meson \
|
||||
-Db_lto=true \
|
||||
-Dssc-support=true \
|
||||
-Dsystemdsystemunitdir=/usr/lib/systemd/system \
|
||||
. output
|
||||
meson compile -C output
|
||||
}
|
||||
|
||||
check() {
|
||||
meson test --print-errorlogs -C output
|
||||
}
|
||||
|
||||
package() {
|
||||
DESTDIR="$pkgdir" meson install --no-rebuild -C output
|
||||
|
||||
install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
|
||||
|
||||
install -Dm644 "$srcdir"/system-iio-sensor-proxy.service.d-hexagonrpcd.conf \
|
||||
"$pkgdir"/usr/lib/systemd/system/iio-sensor-proxy.service.d/hexagonrpcd.conf
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
9cca8d706c531c9a2e34dfebdc8673a1765b615533e3f7776118c74cb1ce145e472203c6c7804d35701c22cc93755609829bc3817c5920d5961249d7e8de87c6 iio-sensor-proxy-3.8.tar.gz
|
||||
b25df94e249ca46fe96926e5a866c20dc913fa52a2d9259fb7a3594861c6b2f246fc7fef8a21f5b021f3a71401f734ae27210137b0b1917a7daaffb5e3221f2e iio-sensor-proxy.initd
|
||||
2e8a876b61093add48e0677dcbfdac148690eddb398ff51ab4edb6547515ad8f8cfec31e8fda6886746b3bf30410b7b63c7486dcfe2441a7e742ea5023981a45 system-iio-sensor-proxy.service.d-hexagonrpcd.conf
|
||||
d46eeb1deabb6ee6017b86f573fcb717d8b992979bfd447e52c6dabc95d9e6c986ab937f602c2f0a731d10d87d67578aa59930d7faff69b2f42a0eab25f4c60c 0001-iio-sensor-proxy-depend-on-libssc.patch
|
||||
4b43ea53b71c9be29367897a3c9ba349e9fdb71185300aafc00be69f923d7f27aa02bb7f0f5c5be800f0d494035992e046c010fd70a1754f8a47701b17666926 0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch
|
||||
59800fbd73abd77c6cf86ab1bcdce85abefb07e3cd28d58c3e91a4b3cdd9d893a9671e8f0f3dc212064d5744a62b0b24c54fa91ce8f3ac84e361f7ba8cc64ded 0002-proximity-support-SSC-proximity-sensor.patch
|
||||
7cdcd1d78629f662fa588c90e657c6abed7e43f1462c43f0d14e7756933ea927435077e193429d069b7360ba2d1c16b608226e1707858e56460c82595f054080 0003-light-support-SSC-light-sensor.patch
|
||||
a956d28d55ee0e0a03bea63caf06881ead7511ac60000a5def61d482b3575006575edd6b0b30ae7874ffd9b2268fd8008a273d6ede561cc44aad46f18233d789 0004-accelerometer-support-SSC-accelerometer-sensor.patch
|
||||
d4379f8e53eea02f53640752bef883870a44d0169cf821d3f5bb3245309cac1d1502a7848d5cce60d40bcdd484c9baa1f63f60d887613ad25a5ca88721d7c4c8 0005-compass-support-SSC-compass-sensor.patch
|
||||
4651572ada878fd07ba281426b4cf4b9baf19d8464fd3af1a1c1a98765bcf358d1d445bdef53acd3bf30b1d2c8c234489e96f728d9228e3681e5038f10059573 0006-data-add-libssc-udev-rules.patch
|
||||
376999144da2c5a6374de73bfaaf0eb605c5c686640f4de8cbcabbe3e78f3fce4675d5bfdc2dd60dacaa84447a039cf22cc4e5fcda478ea77a00001f052a3d85 0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch
|
||||
bf0ea8a078eb168937645a661fea5b979bf1747ee0c1cd556a238c25f4f26eefd6b2f7a1da1eb0b7d66dcafe24ce31521d71e1a188a324671b08178b392206af 0008-drv-ssc-implement-set_polling.patch
|
||||
2a208aa064e4f3d6cb24701f65c5cdc5d35a99f61489ac0ab5f336aa8229bc1aa7571b6d7e928a3a28e53b8e35a07655ec3e8b432d7295d82606f8b1f206e7af 0009-tests-integration-test-add-SSC-sensors.patch
|
||||
4f2d227efb645ce01f4ce997b2923d4a5b12a5d896c47b7e6189fd76abcae4659d5d1fb71608ce4809b19ac5a1129176c81063097826a4a19bc35ed5099537cb 0010-fixup-data-add-libssc-udev-rules.patch
|
||||
9273f01d35e0f45ddc943808326d87f3a2e678ea29e607d3d70cabc9ea321db761cc170a86b3093553a4c3dfae1d81c5057d146b9a90ff490c85641f02b040df 0013-integration-test-add-test-for-sensors-that-report-no.patch
|
||||
"
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
#!/sbin/openrc-run
|
||||
|
||||
supervisor=supervise-daemon
|
||||
command="/usr/libexec/iio-sensor-proxy"
|
||||
|
||||
depend() {
|
||||
need dbus
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
# Make iio-sensor-proxy depend on hexagonrpcd
|
||||
[Unit]
|
||||
Wants=hexagonrpcd-adsp-rootpd.service
|
||||
Wants=hexagonrpcd-adsp-sensorspd.service
|
||||
Wants=hexagonrpcd-sdsp.service
|
||||
After=hexagonrpcd-adsp-rootpd.service
|
||||
After=hexagonrpcd-adsp-sensorspd.service
|
||||
After=hexagonrpcd-sdsp.service
|
||||
Loading…
Add table
Add a link
Reference in a new issue