From af17d8f3a7572ed2be40d5a28c6ce08c74bd36c7 Mon Sep 17 00:00:00 2001 From: Dylan Van Assche Date: Mon, 13 Jan 2025 19:40:13 +0100 Subject: [PATCH] temp/iio-sensor-proxy: upgrade libssc patches (MR 6040) Libssc integration in iio-sensor-proxy has been heavily improved, sync the patches in pmaports. --- ...01-iio-sensor-proxy-depend-on-libssc.patch | 16 +- ...oximity-support-SSC-proximity-sensor.patch | 36 +- .../0003-light-support-SSC-light-sensor.patch | 36 +- ...ter-support-SSC-accelerometer-sensor.patch | 38 +- ...5-compass-support-SSC-compass-sensor.patch | 36 +- .../0006-data-add-libssc-udev-rules.patch | 6 +- .../0007-CI-add-libssc-build.patch | 47 -- ...sor-proxy.service.in-add-AF_QIPCRTR.patch} | 6 +- ... 0008-drv-ssc-implement-set_polling.patch} | 175 ++++--- ...sts-integration-test-add-SSC-sensors.patch | 429 ++++++++++++++++++ temp/iio-sensor-proxy/APKBUILD | 32 +- 11 files changed, 632 insertions(+), 225 deletions(-) delete mode 100644 temp/iio-sensor-proxy/0007-CI-add-libssc-build.patch rename temp/iio-sensor-proxy/{0008-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch => 0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch} (86%) rename temp/iio-sensor-proxy/{0009-drivers-ssc-implement-set_polling-function.patch => 0008-drv-ssc-implement-set_polling.patch} (74%) create mode 100644 temp/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch diff --git a/temp/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch b/temp/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch index fc02dff62..206e21166 100644 --- a/temp/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch +++ b/temp/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch @@ -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 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 diff --git a/temp/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch b/temp/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch index 6a3201d5a..7022712b6 100644 --- a/temp/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch +++ b/temp/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch @@ -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 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 diff --git a/temp/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch b/temp/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch index 65406cc45..1968049d1 100644 --- a/temp/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch +++ b/temp/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch @@ -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 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 diff --git a/temp/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch b/temp/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch index f43736c91..5cb415ef3 100644 --- a/temp/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch +++ b/temp/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch @@ -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 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 diff --git a/temp/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch b/temp/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch index c15bf864e..24bf9b40b 100644 --- a/temp/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch +++ b/temp/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch @@ -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 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 diff --git a/temp/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch b/temp/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch index bddf82ffc..d86d9a929 100644 --- a/temp/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch +++ b/temp/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch @@ -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 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 diff --git a/temp/iio-sensor-proxy/0007-CI-add-libssc-build.patch b/temp/iio-sensor-proxy/0007-CI-add-libssc-build.patch deleted file mode 100644 index c8e484aa0..000000000 --- a/temp/iio-sensor-proxy/0007-CI-add-libssc-build.patch +++ /dev/null @@ -1,47 +0,0 @@ -From cd0d6b7d9be8f256cef9acd502447619e751034c Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -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 - diff --git a/temp/iio-sensor-proxy/0008-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch b/temp/iio-sensor-proxy/0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch similarity index 86% rename from temp/iio-sensor-proxy/0008-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch rename to temp/iio-sensor-proxy/0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch index 11482d74f..c34d12cc8 100644 --- a/temp/iio-sensor-proxy/0008-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch +++ b/temp/iio-sensor-proxy/0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch @@ -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 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 diff --git a/temp/iio-sensor-proxy/0009-drivers-ssc-implement-set_polling-function.patch b/temp/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch similarity index 74% rename from temp/iio-sensor-proxy/0009-drivers-ssc-implement-set_polling-function.patch rename to temp/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch index 9090d48b8..6ab125333 100644 --- a/temp/iio-sensor-proxy/0009-drivers-ssc-implement-set_polling-function.patch +++ b/temp/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch @@ -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?= -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 +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 +Co-Developed-By: Sicelo A. Mhlongo --- - 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 diff --git a/temp/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch b/temp/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch new file mode 100644 index 000000000..6405a2795 --- /dev/null +++ b/temp/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch @@ -0,0 +1,429 @@ +From 15f095b67722ffdeb6d8f04d12b9f569d256aa2f Mon Sep 17 00:00:00 2001 +From: Dylan Van Assche +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 ++# (C) 2021 Bastien Nocera ++# ++# 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 + diff --git a/temp/iio-sensor-proxy/APKBUILD b/temp/iio-sensor-proxy/APKBUILD index f5a8cf867..8f126085e 100644 --- a/temp/iio-sensor-proxy/APKBUILD +++ b/temp/iio-sensor-proxy/APKBUILD @@ -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 "