temp/iio-sensor-proxy: upgrade libssc patches (MR 6040)

Libssc integration in iio-sensor-proxy has been heavily improved, sync the patches in pmaports.
This commit is contained in:
Dylan Van Assche 2025-01-13 19:40:13 +01:00 committed by Robert Eckelmann
parent 5f4f465db0
commit af17d8f3a7
No known key found for this signature in database
GPG key ID: 30C0D50BEF63BF54
11 changed files with 632 additions and 225 deletions

View file

@ -1,7 +1,7 @@
From e651b07633f5a9a3bd499a2e3aaf2f8b7e4f8cef Mon Sep 17 00:00:00 2001
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 1/8] iio-sensor-proxy: depend on libssc
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
@ -15,7 +15,7 @@ Core (SSC).
4 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 767e539..fe97a27 100644
index 97270f8..0580d9e 100644
--- a/meson.build
+++ b/meson.build
@@ -46,6 +46,9 @@ gio_dep = dependency('gio-2.0')
@ -23,7 +23,7 @@ index 767e539..fe97a27 100644
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-glib')
+ libssc_dep = dependency('libssc')
+endif
xmllint = find_program('xmllint', required: false)
@ -44,10 +44,10 @@ index de5fbf4..2b60f82 100644
type: 'boolean',
value: false,
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
index 1884839..220dc71 100644
index 02d9ba5..342023c 100644
--- a/src/iio-sensor-proxy.c
+++ b/src/iio-sensor-proxy.c
@@ -124,6 +124,11 @@ find_sensors (GUdevClient *client,
@@ -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);
@ -59,7 +59,7 @@ index 1884839..220dc71 100644
/* Find the devices */
for (l = devices; l != NULL; l = l->next) {
@@ -686,7 +691,15 @@ name_acquired_handler (GDBusConnection *connection,
@@ -721,7 +726,15 @@ name_acquired_handler (GDBusConnection *connection,
gpointer user_data)
{
SensorData *data = user_data;
@ -101,5 +101,5 @@ index 4b822fc..3e503de 100644
'iio-sensor-proxy-resources', 'iio-sensor-proxy.gresource.xml',
c_name: 'iio_sensor_proxy',
--
2.45.1
2.47.1

View file

@ -1,15 +1,15 @@
From 27b5c9e0dba5601447b21816e8ee7063c6154268 Mon Sep 17 00:00:00 2001
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 2/8] proximity: support SSC proximity sensor
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 | 122 ++++++++++++++++++++++++++++++++++++++++
src/drv-ssc-proximity.c | 128 ++++++++++++++++++++++++++++++++++++++++
src/iio-sensor-proxy.c | 3 +
src/meson.build | 6 ++
4 files changed, 135 insertions(+)
4 files changed, 141 insertions(+)
create mode 100644 src/drv-ssc-proximity.c
diff --git a/src/drivers.h b/src/drivers.h
@ -27,12 +27,12 @@ index 33ad667..464e801 100644
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..0ec8b08
index 0000000..f4aa897
--- /dev/null
+++ b/src/drv-ssc-proximity.c
@@ -0,0 +1,122 @@
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2023 Dylan Van Assche
+ * 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
@ -70,8 +70,10 @@ index 0000000..0ec8b08
+ if (!sensor)
+ return FALSE;
+
+ if (!ssc_sensor_proximity_close_sync (sensor, NULL, NULL))
+ if (!ssc_sensor_proximity_close_sync (sensor, NULL, NULL)) {
+ g_clear_object (&sensor);
+ return FALSE;
+ }
+
+ g_clear_object (&sensor);
+
@ -103,7 +105,9 @@ index 0000000..0ec8b08
+ /* 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");
+ 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,
@ -118,8 +122,10 @@ index 0000000..0ec8b08
+
+ /* 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");
+ g_object_unref (sensor_device);
+ 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;
+ }
+
@ -138,7 +144,7 @@ index 0000000..0ec8b08
+
+ /* 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");
+ g_warning ("Closing SSC proximity sensor failed: %s", error->message);
+
+ g_clear_object (&drv_data->sensor);
+ g_clear_pointer (&sensor_device->priv, g_free);
@ -154,10 +160,10 @@ index 0000000..0ec8b08
+ .close = ssc_proximity_close,
+};
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
index 220dc71..257c822 100644
index 342023c..18263c5 100644
--- a/src/iio-sensor-proxy.c
+++ b/src/iio-sensor-proxy.c
@@ -75,6 +75,9 @@ static const SensorDriver * const drivers[] = {
@@ -79,6 +79,9 @@ static const SensorDriver * const drivers[] = {
&iio_buffer_compass,
&iio_poll_proximity,
&input_proximity,
@ -185,5 +191,5 @@ index 3e503de..9a74481 100644
sources,
dependencies: deps,
--
2.45.1
2.47.1

View file

@ -1,15 +1,15 @@
From cfd4f19473145c3adfba06e2e44c2e6e773f30cc Mon Sep 17 00:00:00 2001
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 3/8] light: support SSC light sensor
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 | 123 +++++++++++++++++++++++++++++++++++++++++
src/drv-ssc-light.c | 129 +++++++++++++++++++++++++++++++++++++++++
src/iio-sensor-proxy.c | 1 +
src/meson.build | 1 +
4 files changed, 126 insertions(+)
4 files changed, 132 insertions(+)
create mode 100644 src/drv-ssc-light.c
diff --git a/src/drivers.h b/src/drivers.h
@ -26,12 +26,12 @@ index 464e801..46df2fd 100644
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..e5ad8dd
index 0000000..eb43d6c
--- /dev/null
+++ b/src/drv-ssc-light.c
@@ -0,0 +1,123 @@
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2023 Dylan Van Assche
+ * 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
@ -69,8 +69,10 @@ index 0000000..e5ad8dd
+ if (!sensor)
+ return FALSE;
+
+ if (!ssc_sensor_light_close_sync (sensor, NULL, NULL))
+ if (!ssc_sensor_light_close_sync (sensor, NULL, NULL)) {
+ g_clear_object (&sensor);
+ return FALSE;
+ }
+
+ g_clear_object (&sensor);
+
@ -103,7 +105,9 @@ index 0000000..e5ad8dd
+ /* 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");
+ 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,
@ -118,8 +122,10 @@ index 0000000..e5ad8dd
+
+ /* 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");
+ g_object_unref (sensor_device);
+ 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;
+ }
+
@ -138,7 +144,7 @@ index 0000000..e5ad8dd
+
+ /* 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");
+ g_warning ("Closing SSC light sensor failed: %s", error->message);
+
+ g_clear_object (&drv_data->sensor);
+ g_clear_pointer (&sensor_device->priv, g_free);
@ -154,10 +160,10 @@ index 0000000..e5ad8dd
+ .close = ssc_light_close,
+};
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
index 257c822..77a75ab 100644
index 18263c5..b4eacc3 100644
--- a/src/iio-sensor-proxy.c
+++ b/src/iio-sensor-proxy.c
@@ -77,6 +77,7 @@ static const SensorDriver * const drivers[] = {
@@ -81,6 +81,7 @@ static const SensorDriver * const drivers[] = {
&input_proximity,
#ifdef HAS_LIBSSC
&ssc_proximity,
@ -178,5 +184,5 @@ index 9a74481..2f3c1e6 100644
endif
--
2.45.1
2.47.1

View file

@ -1,7 +1,7 @@
From cdc8a661bdeb7f0ada6b08beb6ceee40188d8843 Mon Sep 17 00:00:00 2001
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 4/8] accelerometer: support SSC accelerometer sensor
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
@ -9,10 +9,10 @@ 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 | 145 +++++++++++++++++++++++++++++++++++++++++
src/drv-ssc-accel.c | 153 +++++++++++++++++++++++++++++++++++++++++
src/iio-sensor-proxy.c | 1 +
src/meson.build | 1 +
4 files changed, 148 insertions(+)
4 files changed, 156 insertions(+)
create mode 100644 src/drv-ssc-accel.c
diff --git a/src/drivers.h b/src/drivers.h
@ -29,12 +29,12 @@ index 46df2fd..40707ec 100644
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..26364db
index 0000000..676303b
--- /dev/null
+++ b/src/drv-ssc-accel.c
@@ -0,0 +1,145 @@
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2023 Dylan Van Assche
+ * 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
@ -76,8 +76,10 @@ index 0000000..26364db
+ if (!sensor)
+ return FALSE;
+
+ if (!ssc_sensor_accelerometer_close_sync (sensor, NULL, NULL))
+ if (!ssc_sensor_accelerometer_close_sync (sensor, NULL, NULL)) {
+ g_clear_object (&sensor);
+ return FALSE;
+ }
+
+ g_clear_object (&sensor);
+
@ -127,7 +129,10 @@ index 0000000..26364db
+ /* 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");
+ 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,
@ -142,8 +147,11 @@ index 0000000..26364db
+
+ /* 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");
+ g_object_unref (sensor_device);
+ 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;
+ }
+
@ -162,7 +170,7 @@ index 0000000..26364db
+
+ /* 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");
+ 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);
@ -179,10 +187,10 @@ index 0000000..26364db
+ .close = ssc_accelerometer_close,
+};
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
index 77a75ab..6c0e96f 100644
index b4eacc3..e99f641 100644
--- a/src/iio-sensor-proxy.c
+++ b/src/iio-sensor-proxy.c
@@ -78,6 +78,7 @@ static const SensorDriver * const drivers[] = {
@@ -82,6 +82,7 @@ static const SensorDriver * const drivers[] = {
#ifdef HAS_LIBSSC
&ssc_proximity,
&ssc_light,
@ -203,5 +211,5 @@ index 2f3c1e6..d59cfdd 100644
endif
--
2.45.1
2.47.1

View file

@ -1,15 +1,15 @@
From 9f394846ebcd1cb0f052b239d16ceb9b9742c823 Mon Sep 17 00:00:00 2001
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 5/8] compass: support SSC compass sensor
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 | 123 +++++++++++++++++++++++++++++++++++++++++
src/drv-ssc-compass.c | 129 +++++++++++++++++++++++++++++++++++++++++
src/iio-sensor-proxy.c | 1 +
src/meson.build | 1 +
4 files changed, 126 insertions(+)
4 files changed, 132 insertions(+)
create mode 100644 src/drv-ssc-compass.c
diff --git a/src/drivers.h b/src/drivers.h
@ -26,12 +26,12 @@ index 40707ec..5e0347c 100644
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..5e65c15
index 0000000..c6f11a9
--- /dev/null
+++ b/src/drv-ssc-compass.c
@@ -0,0 +1,123 @@
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2023 Dylan Van Assche
+ * 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
@ -69,8 +69,10 @@ index 0000000..5e65c15
+ if (!sensor)
+ return FALSE;
+
+ if (!ssc_sensor_compass_close_sync (sensor, NULL, NULL))
+ if (!ssc_sensor_compass_close_sync (sensor, NULL, NULL)) {
+ g_clear_object(&sensor);
+ return FALSE;
+ }
+
+ g_clear_object(&sensor);
+
@ -103,7 +105,9 @@ index 0000000..5e65c15
+ /* 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");
+ 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,
@ -118,8 +122,10 @@ index 0000000..5e65c15
+
+ /* 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");
+ g_object_unref (sensor_device);
+ 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;
+ }
+
@ -138,7 +144,7 @@ index 0000000..5e65c15
+
+ /* 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");
+ g_warning ("Closing SSC compass sensor failed: %s", error->message);
+
+ g_clear_object (&drv_data->sensor);
+ g_clear_pointer (&sensor_device->priv, g_free);
@ -154,10 +160,10 @@ index 0000000..5e65c15
+ .close = ssc_compass_close,
+};
diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c
index 6c0e96f..17858da 100644
index e99f641..9e8760c 100644
--- a/src/iio-sensor-proxy.c
+++ b/src/iio-sensor-proxy.c
@@ -79,6 +79,7 @@ static const SensorDriver * const drivers[] = {
@@ -83,6 +83,7 @@ static const SensorDriver * const drivers[] = {
&ssc_proximity,
&ssc_light,
&ssc_accel,
@ -178,5 +184,5 @@ index d59cfdd..1e753cc 100644
endif
--
2.45.1
2.47.1

View file

@ -1,7 +1,7 @@
From 313d84bd57ba0bd240e6ac2d75ed3184212c9911 Mon Sep 17 00:00:00 2001
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 6/8] data: add libssc udev rules
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
@ -51,5 +51,5 @@ index 97dbc07..8b78125 100644
)
--
2.45.1
2.47.1

View file

@ -1,47 +0,0 @@
From cd0d6b7d9be8f256cef9acd502447619e751034c Mon Sep 17 00:00:00 2001
From: Dylan Van Assche <me@dylanvanassche.be>
Date: Fri, 24 May 2024 21:00:25 +0200
Subject: [PATCH 7/8] CI: add libssc build
libssc support is behind a meson build flag which is disabled by default,
add a separate build to CI.
---
.gitlab-ci.yml | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8e691b6..5efeb7c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -45,6 +45,28 @@ build_stable:
- "${CI_PROJECT_DIR}/_build/meson-dist"
- "${CI_PROJECT_DIR}/_build/docs/html/"
+build_libssc:
+ before_script:
+ # Undo delangification present in the Fedora Docker images
+ - rm -f /etc/rpm/macros.image-language-conf
+ - if [ -x /bin/dnf ]; then dnf update -y; else dnf5 update -y; fi
+ - if [ -x /bin/dnf ]; then dnf install -y $DEPENDENCIES; else dnf5 install -y $DEPENDENCIES; fi
+ - if [ -x /bin/dnf ]; then dnf install -y libqmi-devel protobuf-c-devel; else dnf5 install -y libqmi-devel protobuf-c-devel; fi
+ - if [ -x /bin/dnf ]; then dnf reinstall -y glib2; else dnf5 reinstall -y glib2; fi
+ - git clone "https://codeberg.org/DylanVanAssche/libssc.git"
+ - cd libssc
+ - mkdir _build
+ - meson _build
+ - meson compile -C _build
+ - meson install --no-rebuild -C _build
+ - cd ..
+ script:
+ - meson -Dssc-support=true _build
+ - ninja -v -C _build
+ - ninja -v -C _build install
+ - ninja -v -C _build uninstall
+ - ninja -v -C _build dist
+
pages:
needs:
- build_stable
--
2.45.1

View file

@ -1,7 +1,7 @@
From c70950f1e33aba5c58c337e8dfb73d40efed5b5d Mon Sep 17 00:00:00 2001
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 8/8] data: iio-sensor-proxy.service.in: add AF_QIPCRTR
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.
@ -25,5 +25,5 @@ index 4bc921b..29ea3c0 100644
MemoryDenyWriteExecute=true
RestrictRealtime=true
--
2.45.1
2.47.1

View file

@ -1,34 +1,30 @@
Patch-Source: https://gitlab.freedesktop.org/verdre/iio-sensor-proxy/-/commit/74a5860474b6e79cd6e3be13d1ff8dd9cd810b8b
---
From 7a7a5f3ea04ff4c134f3dbbbc005b8c26d0af300 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Thu, 11 Jul 2024 23:19:34 +0200
Subject: [PATCH] drivers/ssc: Implement set_polling function
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
Seems like ssc doesn't like when ssc_sensor_*_open_sync() isn't called right
after ssc_sensor_*_new_sync(), so move the call to new_sync() into
set_polling(), too.
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 | 73 ++++++++++++++++++++-------------------
src/drv-ssc-compass.c | 75 ++++++++++++++++++++++-------------------
src/drv-ssc-light.c | 72 ++++++++++++++++++++-------------------
src/drv-ssc-proximity.c | 73 ++++++++++++++++++++-------------------
4 files changed, 155 insertions(+), 138 deletions(-)
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 26364db..be26308 100644
index 676303b..745304c 100644
--- a/src/drv-ssc-accel.c
+++ b/src/drv-ssc-accel.c
@@ -57,7 +57,7 @@ measurement_cb (SSCSensorAccelerometer *sensor, gfloat accel_x, gfloat accel_y,
DrvData *drv_data = (DrvData *) sensor_device->priv;
AccelReadings readings;
AccelVec3 tmp;
-
+ g_debug ("recvd measure from accel");
tmp.x = accel_x;
tmp.y = accel_y;
tmp.z = accel_z;
@@ -78,7 +78,6 @@ ssc_accelerometer_open (GUdevDevice *device)
@@ -80,7 +80,6 @@ ssc_accelerometer_open (GUdevDevice *device)
{
SensorDevice *sensor_device;
DrvData *drv_data;
@ -36,14 +32,17 @@ index 26364db..be26308 100644
sensor_device = g_new0 (SensorDevice, 1);
sensor_device->priv = g_new0 (DrvData, 1);
@@ -89,45 +88,50 @@ ssc_accelerometer_open (GUdevDevice *device)
@@ -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 ? error->message : "UNKNOWN");
- 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,
@ -58,21 +57,21 @@ index 26364db..be26308 100644
-
- /* 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");
- g_object_unref (sensor_device);
- 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)
+ssc_accelerometer_set_polling (SensorDevice *sensor_device,
+ gboolean state)
{
- g_autoptr (GError) error = NULL;
DrvData *drv_data = (DrvData *) sensor_device->priv;
+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 */
@ -87,11 +86,9 @@ index 26364db..be26308 100644
+ "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");
+ g_object_unref (sensor_device);
+ return;
+ }
+ } else {
@ -104,22 +101,11 @@ index 26364db..be26308 100644
+ g_warning ("Closing SSC accelerometer 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_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)
+{
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
g_clear_object (&drv_data->sensor);
g_clear_pointer (&drv_data->mount_matrix, g_free);
@@ -141,5 +145,6 @@ SensorDriver ssc_accel = {
+
static void
ssc_accelerometer_close (SensorDevice *sensor_device)
{
@@ -149,5 +153,6 @@ SensorDriver ssc_accel = {
.discover = ssc_accelerometer_discover,
.open = ssc_accelerometer_open,
@ -127,10 +113,10 @@ index 26364db..be26308 100644
.close = ssc_accelerometer_close,
};
diff --git a/src/drv-ssc-compass.c b/src/drv-ssc-compass.c
index 5e65c15..6dd032a 100644
index c6f11a9..f4af37b 100644
--- a/src/drv-ssc-compass.c
+++ b/src/drv-ssc-compass.c
@@ -61,52 +61,57 @@ static SensorDevice *
@@ -63,56 +63,56 @@ static SensorDevice *
ssc_compass_open (GUdevDevice *device)
{
SensorDevice *sensor_device;
@ -144,7 +130,9 @@ index 5e65c15..6dd032a 100644
- /* 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");
- 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,
@ -159,8 +147,10 @@ index 5e65c15..6dd032a 100644
-
- /* 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");
- g_object_unref (sensor_device);
- 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;
- }
@ -169,12 +159,15 @@ index 5e65c15..6dd032a 100644
static void
-ssc_compass_close (SensorDevice *sensor_device)
+ssc_compass_set_polling (SensorDevice *sensor_device,
+ gboolean state)
+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);
@ -195,7 +188,6 @@ index 5e65c15..6dd032a 100644
+ /* 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");
+ g_object_unref (sensor_device);
+ return;
+ }
+ } else {
@ -209,13 +201,9 @@ index 5e65c15..6dd032a 100644
+ }
+}
- /* 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");
- g_warning ("Closing SSC compass sensor failed: %s", error->message);
+static void
+ssc_compass_close (SensorDevice *sensor_device)
+{
@ -223,11 +211,18 @@ index 5e65c15..6dd032a 100644
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 e5ad8dd..892b7d0 100644
index eb43d6c..04d24dd 100644
--- a/src/drv-ssc-light.c
+++ b/src/drv-ssc-light.c
@@ -61,53 +61,56 @@ static SensorDevice *
@@ -63,57 +63,54 @@ static SensorDevice *
ssc_light_open (GUdevDevice *device)
{
SensorDevice *sensor_device;
@ -241,7 +236,9 @@ index e5ad8dd..892b7d0 100644
- /* 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");
- 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,
@ -256,8 +253,10 @@ index e5ad8dd..892b7d0 100644
-
- /* 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");
- g_object_unref (sensor_device);
- 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;
- }
@ -265,8 +264,7 @@ index e5ad8dd..892b7d0 100644
}
+static void
+ssc_light_set_polling (SensorDevice *sensor_device,
+ gboolean state)
+ssc_light_set_polling (SensorDevice *sensor_device, gboolean state)
+{
+ DrvData *drv_data = (DrvData *) sensor_device->priv;
+ g_autoptr (GError) error = NULL;
@ -287,7 +285,6 @@ index e5ad8dd..892b7d0 100644
+ /* 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");
+ g_object_unref (sensor_device);
+ return;
+ }
+ } else {
@ -313,12 +310,12 @@ index e5ad8dd..892b7d0 100644
-
- /* 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");
- 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);
@@ -119,5 +122,6 @@ SensorDriver ssc_light = {
@@ -125,5 +122,6 @@ SensorDriver ssc_light = {
.discover = ssc_light_discover,
.open = ssc_light_open,
@ -326,10 +323,10 @@ index e5ad8dd..892b7d0 100644
.close = ssc_light_close,
};
diff --git a/src/drv-ssc-proximity.c b/src/drv-ssc-proximity.c
index 0ec8b08..32659fb 100644
index f4aa897..12570ba 100644
--- a/src/drv-ssc-proximity.c
+++ b/src/drv-ssc-proximity.c
@@ -60,52 +60,54 @@ static SensorDevice *
@@ -62,56 +62,52 @@ static SensorDevice *
ssc_proximity_open (GUdevDevice *device)
{
SensorDevice *sensor_device;
@ -343,7 +340,9 @@ index 0ec8b08..32659fb 100644
- /* 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");
- 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,
@ -358,8 +357,10 @@ index 0ec8b08..32659fb 100644
-
- /* 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");
- g_object_unref (sensor_device);
- 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;
- }
@ -368,8 +369,7 @@ index 0ec8b08..32659fb 100644
static void
-ssc_proximity_close (SensorDevice *sensor_device)
+ssc_proximity_set_polling (SensorDevice *sensor_device,
+ gboolean state)
+ssc_proximity_set_polling (SensorDevice *sensor_device, gboolean state)
{
- g_autoptr (GError) error = NULL;
DrvData *drv_data = (DrvData *) sensor_device->priv;
@ -391,7 +391,6 @@ index 0ec8b08..32659fb 100644
+ /* 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");
+ g_object_unref (sensor_device);
+ return;
+ }
+ } else {
@ -411,7 +410,7 @@ index 0ec8b08..32659fb 100644
-
- /* 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");
- g_warning ("Closing SSC proximity sensor failed: %s", error->message);
+static void
+ssc_proximity_close (SensorDevice *sensor_device)
+{
@ -419,7 +418,7 @@ index 0ec8b08..32659fb 100644
g_clear_object (&drv_data->sensor);
g_clear_pointer (&sensor_device->priv, g_free);
@@ -118,5 +120,6 @@ SensorDriver ssc_proximity = {
@@ -124,5 +120,6 @@ SensorDriver ssc_proximity = {
.discover = ssc_proximity_discover,
.open = ssc_proximity_open,
@ -427,5 +426,5 @@ index 0ec8b08..32659fb 100644
.close = ssc_proximity_close,
};
--
GitLab
2.47.1

View file

@ -0,0 +1,429 @@
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

View file

@ -2,7 +2,7 @@
pkgname=iio-sensor-proxy
pkgver=9999
pkgrel=7
pkgrel=8
pkgdesc="IIO sensors to D-Bus proxy"
url="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy"
arch="aarch64"
@ -14,10 +14,10 @@ makedepends="
libgudev-dev
meson
polkit-dev
libssc-dev>=0.1.6
libssc-dev>=0.2.1
"
subpackages="$pkgname-openrc"
_commit="fe56bdba1243cc5f6a652eb75d11ae1d1957ff7e"
_commit="882879b14c3bf430d88bce558f47242d4e94ed5f"
builddir="$srcdir/$pkgname-$_commit"
source="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/archive/$_commit/iio-sensor-proxy-$_commit.tar.gz
iio-sensor-proxy.initd
@ -27,9 +27,9 @@ source="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/archive/$_commi
0004-accelerometer-support-SSC-accelerometer-sensor.patch
0005-compass-support-SSC-compass-sensor.patch
0006-data-add-libssc-udev-rules.patch
0007-CI-add-libssc-build.patch
0008-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch
0009-drivers-ssc-implement-set_polling-function.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
"
# tests fail on armv7 and armhf, and it seems to be due to some weird issue
# with pmaports qemu CI (not reproducible locally with `pmb build --arch
@ -56,15 +56,15 @@ package() {
}
sha512sums="
49b96fefbcfabb706fc6189d3f40e6e1a1e847ec6e4101398bf639db9e844c5c5057f2267f3e541d302d002d0042a84fdd56191207ed0e911f80342cd1d416c4 iio-sensor-proxy-fe56bdba1243cc5f6a652eb75d11ae1d1957ff7e.tar.gz
94e1d990f7cd89803c75c8a831eb2db60b851c88566c46dc4478347e0d894a26ca8eac155f64d1a4fd9873cfbd7a4c20279fecf7687909fa327776960ae3a39e iio-sensor-proxy-882879b14c3bf430d88bce558f47242d4e94ed5f.tar.gz
1efbd03f7ee8c1eac4695647aa9931a0b0806779fb96e1c8e03f7deb6e8507aa6092e66f8ef796c68beb0b16b8624ef70c59231884a0fbb3ffdf46db72959f23 iio-sensor-proxy.initd
3d1be8e5a932ca6ca0b908caaa7f16dcdbbc6e48a75183c1b7c225689f309203f7008f53ed4276c93790dc7dc0b2cb3c9b3f00cef84305657f279369f1307d89 0001-iio-sensor-proxy-depend-on-libssc.patch
bb8e1496411c030062eeb1bb919c9680c32d9571587540368c663b6739e3c506d21ab90836a4e83be526019e654af393dc849031ab81bb8aadff623873232d58 0002-proximity-support-SSC-proximity-sensor.patch
465f4296778b3c0269b00badd11f841c2ea9dbc14b7489b21f2e4d8e45a628fa59327c91692f8e350c926776de05173e2abc9bef54e51bf0378866ace3891152 0003-light-support-SSC-light-sensor.patch
4f6a3b76fc10eb42a4824cc49b063acc1c54a762637f7ff37a1ac42adb1410fbfe5e17b5277bb8fcb4d232b94971cf96c61925f4c207c9b4b56c78321b1b7d69 0004-accelerometer-support-SSC-accelerometer-sensor.patch
80d59825dde8ff8bcc92b3d6d659968f88f82c8198e9576e1a77b2d38be074781926c45115e213e4c557a3dc7ba1c1391d67cb6f0c49d23aff2e0cdbfedefc87 0005-compass-support-SSC-compass-sensor.patch
651d3281fe64fb72780bdfc4f3416af6f221c5c0aebf8b9a87d2cf6b5a31ebd0816199b45c97f24810807286a4a8839b6304a12cfc23b4191261a30efd3fbe2b 0006-data-add-libssc-udev-rules.patch
bdb8831d89f389badd5de0eb52d9eca5dbdf045dbcfab18165d43798c9e329c3e68e3209b8ad1053916cfac6c54984dd47aa379c419d46f1c25ad6a57c2bd771 0007-CI-add-libssc-build.patch
c778168de17f86e3d50b62a4905d3940e9d69bb919fe3b9b5fc8962d8fe9b7cdb48a57dd8128ded93ff08493f65a7f602e6e7ad295e6736c74c273a2c6399c35 0008-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch
d7c0d67a664d900708a1a76edaac3fc05be567abe9c5d49b11d3181ebe932c3847de4f3f89291542fe7d7f0798bde2d5a504d23350a79d93a7afe57f959380ae 0009-drivers-ssc-implement-set_polling-function.patch
d46eeb1deabb6ee6017b86f573fcb717d8b992979bfd447e52c6dabc95d9e6c986ab937f602c2f0a731d10d87d67578aa59930d7faff69b2f42a0eab25f4c60c 0001-iio-sensor-proxy-depend-on-libssc.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
"