From d65edea0eececdf0221819c0f011e0e22bc2e455 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Mon, 16 Mar 2026 15:06:45 -0700 Subject: [PATCH] temp/iio-sensor-proxy: drop fork Signed-off-by: Clayton Craft Part-of: --- ...roxy.c-Do-not-exit-based-on-sensor-e.patch | 37 -- ...01-iio-sensor-proxy-depend-on-libssc.patch | 105 ----- ...oximity-support-SSC-proximity-sensor.patch | 195 -------- .../0003-light-support-SSC-light-sensor.patch | 188 -------- ...ter-support-SSC-accelerometer-sensor.patch | 215 --------- ...5-compass-support-SSC-compass-sensor.patch | 188 -------- .../0006-data-add-libssc-udev-rules.patch | 55 --- ...nsor-proxy.service.in-add-AF_QIPCRTR.patch | 29 -- .../0008-drv-ssc-implement-set_polling.patch | 430 ------------------ ...sts-integration-test-add-SSC-sensors.patch | 429 ----------------- ...010-fixup-data-add-libssc-udev-rules.patch | 25 - ...-add-test-for-sensors-that-report-no.patch | 63 --- temp/iio-sensor-proxy/APKBUILD | 77 ---- temp/iio-sensor-proxy/iio-sensor-proxy.initd | 8 - ...io-sensor-proxy.service.d-hexagonrpcd.conf | 8 - 15 files changed, 2052 deletions(-) delete mode 100644 temp/iio-sensor-proxy/0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch delete mode 100644 temp/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch delete mode 100644 temp/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch delete mode 100644 temp/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch delete mode 100644 temp/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch delete mode 100644 temp/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch delete mode 100644 temp/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch delete mode 100644 temp/iio-sensor-proxy/0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch delete mode 100644 temp/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch delete mode 100644 temp/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch delete mode 100644 temp/iio-sensor-proxy/0010-fixup-data-add-libssc-udev-rules.patch delete mode 100644 temp/iio-sensor-proxy/0013-integration-test-add-test-for-sensors-that-report-no.patch delete mode 100644 temp/iio-sensor-proxy/APKBUILD delete mode 100644 temp/iio-sensor-proxy/iio-sensor-proxy.initd delete mode 100644 temp/iio-sensor-proxy/system-iio-sensor-proxy.service.d-hexagonrpcd.conf diff --git a/temp/iio-sensor-proxy/0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch b/temp/iio-sensor-proxy/0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch deleted file mode 100644 index 44c9401b3..000000000 --- a/temp/iio-sensor-proxy/0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch +++ /dev/null @@ -1,37 +0,0 @@ -From c73bdbca1b4278ada24dde68e0d09c352dcaa004 Mon Sep 17 00:00:00 2001 -From: "Sicelo A. Mhlongo" -Date: Tue, 30 Sep 2025 13:17:16 +0200 -Subject: [PATCH] WIP: iio-sensor-proxy.c: Do not exit based on sensor events - -... ---- - src/iio-sensor-proxy.c | 6 +----- - 1 file changed, 1 insertion(+), 5 deletions(-) - -diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c -index 5f26d3d..7505783 100644 ---- a/src/iio-sensor-proxy.c -+++ b/src/iio-sensor-proxy.c -@@ -766,8 +766,7 @@ name_acquired_handler (GDBusConnection *connection, - - bail: - data->ret = 0; -- g_debug ("No sensors or missing kernel drivers for the sensors"); -- g_main_loop_quit (data->loop); -+ g_debug ("No sensors or missing kernel drivers for the sensors. Waiting for hotplug sensors"); - } - - static gboolean -@@ -1050,9 +1049,6 @@ sensor_changes (GUdevClient *client, - send_driver_changed_dbus_event (data, i); - } - } -- -- if (!any_sensors_left (data)) -- g_main_loop_quit (data->loop); - } else if (g_strcmp0 (action, "add") == 0) { - for (i = 0; i < G_N_ELEMENTS(drivers); i++) { - SensorDriver *driver = (SensorDriver *) drivers[i]; --- -2.51.0 - 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 deleted file mode 100644 index 206e21166..000000000 --- a/temp/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 169b29cbb8232bb3ee82f8327a7ad5cdded0256c Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sun, 23 Apr 2023 16:54:10 +0200 -Subject: [PATCH 01/10] iio-sensor-proxy: depend on libssc - -Add libssc library to iio-sensor-proxy and discover FastRPC -devices as possible subsystems for sensors. The presence of -FastRPC devices indicate the support for Qualcomm Snapdragon Sensor -Core (SSC). ---- - meson.build | 3 +++ - meson_options.txt | 4 ++++ - src/iio-sensor-proxy.c | 15 ++++++++++++++- - src/meson.build | 7 +++++++ - 4 files changed, 28 insertions(+), 1 deletion(-) - -diff --git a/meson.build b/meson.build -index 97270f8..0580d9e 100644 ---- a/meson.build -+++ b/meson.build -@@ -46,6 +46,9 @@ gio_dep = dependency('gio-2.0') - gudev_dep = dependency('gudev-1.0', version: '>= 237') - polkit_gobject_dep = dependency('polkit-gobject-1', version: '>= 0.91') - polkit_policy_directory = polkit_gobject_dep.get_pkgconfig_variable('policydir') -+if get_option('ssc-support') -+ libssc_dep = dependency('libssc') -+endif - - xmllint = find_program('xmllint', required: false) - -diff --git a/meson_options.txt b/meson_options.txt -index de5fbf4..2b60f82 100644 ---- a/meson_options.txt -+++ b/meson_options.txt -@@ -18,6 +18,10 @@ option('geoclue-user', - description: 'The USER (existing) as which geoclue service is running', - type: 'string', - value: 'geoclue') -+option('ssc-support', -+ description: 'Enable Qualcomm SSC support', -+ type: 'boolean', -+ value: false) - option('gtk_doc', - type: 'boolean', - value: false, -diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c -index 02d9ba5..342023c 100644 ---- a/src/iio-sensor-proxy.c -+++ b/src/iio-sensor-proxy.c -@@ -128,6 +128,11 @@ find_sensors (GUdevClient *client, - platform = g_udev_client_query_by_subsystem (client, "platform"); - devices = g_list_concat (devices, input); - devices = g_list_concat (devices, platform); -+#ifdef HAS_LIBSSC -+ GList *fastrpc; -+ fastrpc = g_udev_client_query_by_subsystem (client, "misc"); -+ devices = g_list_concat (devices, fastrpc); -+#endif - - /* Find the devices */ - for (l = devices; l != NULL; l = l->next) { -@@ -721,7 +726,15 @@ name_acquired_handler (GDBusConnection *connection, - gpointer user_data) - { - SensorData *data = user_data; -- const gchar * const subsystems[] = { "iio", "input", "platform", NULL }; -+ const gchar * const subsystems[] = { -+ "iio", -+ "input", -+ "platform", -+#ifdef HAS_LIBSSC -+ "misc", -+#endif -+ NULL -+ }; - guint i; - - data->client = g_udev_client_new (subsystems); -diff --git a/src/meson.build b/src/meson.build -index 4b822fc..3e503de 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -1,5 +1,8 @@ - config_h = configuration_data() - config_h.set_quoted('VERSION', meson.project_version()) -+if get_option('ssc-support') -+ config_h.set_quoted('HAS_LIBSSC', '1') -+endif - config_h_files = configure_file( - output: 'config.h', - configuration: config_h -@@ -7,6 +10,10 @@ config_h_files = configure_file( - - deps = [ gio_dep, gudev_dep, mathlib_dep, polkit_gobject_dep ] - -+if get_option('ssc-support') -+ deps = deps + [ libssc_dep ] -+endif -+ - resources = gnome.compile_resources( - 'iio-sensor-proxy-resources', 'iio-sensor-proxy.gresource.xml', - c_name: 'iio_sensor_proxy', --- -2.47.1 - 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 deleted file mode 100644 index 7022712b6..000000000 --- a/temp/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch +++ /dev/null @@ -1,195 +0,0 @@ -From 176a35a40b639be7d0cdbc4fd67eb681586978dc Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sun, 23 Apr 2023 17:54:46 +0200 -Subject: [PATCH 02/10] proximity: support SSC proximity sensor - -Add driver for the proximity sensor exposed by libssc. ---- - src/drivers.h | 4 ++ - src/drv-ssc-proximity.c | 128 ++++++++++++++++++++++++++++++++++++++++ - src/iio-sensor-proxy.c | 3 + - src/meson.build | 6 ++ - 4 files changed, 141 insertions(+) - create mode 100644 src/drv-ssc-proximity.c - -diff --git a/src/drivers.h b/src/drivers.h -index 33ad667..464e801 100644 ---- a/src/drivers.h -+++ b/src/drivers.h -@@ -161,4 +161,8 @@ extern SensorDriver iio_buffer_compass; - extern SensorDriver iio_poll_proximity; - extern SensorDriver input_proximity; - -+#ifdef HAS_LIBSSC -+extern SensorDriver ssc_proximity; -+#endif -+ - gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name); -diff --git a/src/drv-ssc-proximity.c b/src/drv-ssc-proximity.c -new file mode 100644 -index 0000000..f4aa897 ---- /dev/null -+++ b/src/drv-ssc-proximity.c -@@ -0,0 +1,128 @@ -+/* -+ * Copyright (c) 2023-2025 Dylan Van Assche -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 3 as published by -+ * the Free Software Foundation. -+ */ -+ -+#include "drivers.h" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+typedef struct DrvData { -+ SSCSensorProximity *sensor; -+ guint measurement_id; -+} DrvData; -+ -+static gboolean -+ssc_proximity_discover (GUdevDevice *device) -+{ -+ SSCSensorProximity *sensor = NULL; -+ -+ /* Verify presence of FastRPC device */ -+ if (!drv_check_udev_sensor_type (device, "ssc-proximity", NULL)) -+ return FALSE; -+ -+ /* Open and close SSC proximity sensor for discovering */ -+ sensor = ssc_sensor_proximity_new_sync (NULL, NULL); -+ if (!sensor) -+ return FALSE; -+ -+ if (!ssc_sensor_proximity_close_sync (sensor, NULL, NULL)) { -+ g_clear_object (&sensor); -+ return FALSE; -+ } -+ -+ g_clear_object (&sensor); -+ -+ g_debug ("Found SSC proximity at %s", g_udev_device_get_sysfs_path (device)); -+ return TRUE; -+} -+ -+static void -+measurement_cb (SSCSensorProximity *sensor, gboolean near, gpointer user_data) -+{ -+ SensorDevice *sensor_device = user_data; -+ ProximityReadings readings; -+ -+ readings.is_near = near ? PROXIMITY_NEAR_TRUE : PROXIMITY_NEAR_FALSE; -+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data); -+} -+ -+static SensorDevice * -+ssc_proximity_open (GUdevDevice *device) -+{ -+ SensorDevice *sensor_device; -+ DrvData *drv_data; -+ g_autoptr (GError) error = NULL; -+ -+ sensor_device = g_new0 (SensorDevice, 1); -+ sensor_device->priv = g_new0 (DrvData, 1); -+ drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_proximity_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC proximity sensor failed: %s", error->message); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ g_object_get (drv_data->sensor, -+ SSC_SENSOR_NAME, &sensor_device->name, -+ NULL); -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ -+ /* Enable sensor */ -+ if (!ssc_sensor_proximity_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC proximity sensor failed: %s", error->message); -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ -+ return sensor_device; -+} -+ -+static void -+ssc_proximity_close (SensorDevice *sensor_device) -+{ -+ g_autoptr (GError) error = NULL; -+ DrvData *drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_proximity_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC proximity sensor failed: %s", error->message); -+ -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+} -+ -+SensorDriver ssc_proximity = { -+ .driver_name = "SSC proximity sensor", -+ .type = DRIVER_TYPE_PROXIMITY, -+ -+ .discover = ssc_proximity_discover, -+ .open = ssc_proximity_open, -+ .close = ssc_proximity_close, -+}; -diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c -index 342023c..18263c5 100644 ---- a/src/iio-sensor-proxy.c -+++ b/src/iio-sensor-proxy.c -@@ -79,6 +79,9 @@ static const SensorDriver * const drivers[] = { - &iio_buffer_compass, - &iio_poll_proximity, - &input_proximity, -+#ifdef HAS_LIBSSC -+ &ssc_proximity, -+#endif - }; - - static ReadingsUpdateFunc driver_type_to_callback_func (DriverType type); -diff --git a/src/meson.build b/src/meson.build -index 3e503de..9a74481 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -45,6 +45,12 @@ sources = [ - config_h_files, - ] - -+if get_option('ssc-support') -+ sources = sources + [ -+ 'drv-ssc-proximity.c', -+ ] -+endif -+ - executable('iio-sensor-proxy', - sources, - dependencies: deps, --- -2.47.1 - 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 deleted file mode 100644 index 1968049d1..000000000 --- a/temp/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch +++ /dev/null @@ -1,188 +0,0 @@ -From 43440a5ef95bccae67ca64f0abe060f194574da5 Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Mon, 24 Apr 2023 16:56:20 +0200 -Subject: [PATCH 03/10] light: support SSC light sensor - -Add driver for the light sensor exposed by libssc. ---- - src/drivers.h | 1 + - src/drv-ssc-light.c | 129 +++++++++++++++++++++++++++++++++++++++++ - src/iio-sensor-proxy.c | 1 + - src/meson.build | 1 + - 4 files changed, 132 insertions(+) - create mode 100644 src/drv-ssc-light.c - -diff --git a/src/drivers.h b/src/drivers.h -index 464e801..46df2fd 100644 ---- a/src/drivers.h -+++ b/src/drivers.h -@@ -163,6 +163,7 @@ extern SensorDriver input_proximity; - - #ifdef HAS_LIBSSC - extern SensorDriver ssc_proximity; -+extern SensorDriver ssc_light; - #endif - - gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name); -diff --git a/src/drv-ssc-light.c b/src/drv-ssc-light.c -new file mode 100644 -index 0000000..eb43d6c ---- /dev/null -+++ b/src/drv-ssc-light.c -@@ -0,0 +1,129 @@ -+/* -+ * Copyright (c) 2023-2025 Dylan Van Assche -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 3 as published by -+ * the Free Software Foundation. -+ */ -+ -+#include "drivers.h" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+typedef struct DrvData { -+ SSCSensorLight *sensor; -+ guint measurement_id; -+} DrvData; -+ -+static gboolean -+ssc_light_discover (GUdevDevice *device) -+{ -+ SSCSensorLight *sensor; -+ -+ /* Verify presence of FastRPC device */ -+ if (!drv_check_udev_sensor_type (device, "ssc-light", NULL)) -+ return FALSE; -+ -+ /* Open and close SSC light sensor for discovering */ -+ sensor = ssc_sensor_light_new_sync (NULL, NULL); -+ if (!sensor) -+ return FALSE; -+ -+ if (!ssc_sensor_light_close_sync (sensor, NULL, NULL)) { -+ g_clear_object (&sensor); -+ return FALSE; -+ } -+ -+ g_clear_object (&sensor); -+ -+ g_debug ("Found SSC light at %s", g_udev_device_get_sysfs_path (device)); -+ return TRUE; -+} -+ -+static void -+measurement_cb (SSCSensorLight *sensor, gfloat intensity, gpointer user_data) -+{ -+ SensorDevice *sensor_device = user_data; -+ LightReadings readings; -+ -+ readings.level = intensity; -+ readings.uses_lux = TRUE; -+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data); -+} -+ -+static SensorDevice * -+ssc_light_open (GUdevDevice *device) -+{ -+ SensorDevice *sensor_device; -+ DrvData *drv_data; -+ g_autoptr (GError) error = NULL; -+ -+ sensor_device = g_new0 (SensorDevice, 1); -+ sensor_device->priv = g_new0 (DrvData, 1); -+ drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_light_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC light sensor failed: %s", error->message); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ g_object_get (drv_data->sensor, -+ SSC_SENSOR_NAME, &sensor_device->name, -+ NULL); -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ -+ /* Enable sensor */ -+ if (!ssc_sensor_light_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC light sensor failed: %s", error->message); -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ -+ return sensor_device; -+} -+ -+static void -+ssc_light_close (SensorDevice *sensor_device) -+{ -+ g_autoptr (GError) error = NULL; -+ DrvData *drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_light_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC light sensor failed: %s", error->message); -+ -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+} -+ -+SensorDriver ssc_light = { -+ .driver_name = "SSC light sensor", -+ .type = DRIVER_TYPE_LIGHT, -+ -+ .discover = ssc_light_discover, -+ .open = ssc_light_open, -+ .close = ssc_light_close, -+}; -diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c -index 18263c5..b4eacc3 100644 ---- a/src/iio-sensor-proxy.c -+++ b/src/iio-sensor-proxy.c -@@ -81,6 +81,7 @@ static const SensorDriver * const drivers[] = { - &input_proximity, - #ifdef HAS_LIBSSC - &ssc_proximity, -+ &ssc_light, - #endif - }; - -diff --git a/src/meson.build b/src/meson.build -index 9a74481..2f3c1e6 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -48,6 +48,7 @@ sources = [ - if get_option('ssc-support') - sources = sources + [ - 'drv-ssc-proximity.c', -+ 'drv-ssc-light.c', - ] - endif - --- -2.47.1 - 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 deleted file mode 100644 index 5cb415ef3..000000000 --- a/temp/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch +++ /dev/null @@ -1,215 +0,0 @@ -From 8c296891214b6b7ebbd3263550ef9296e9a9ff1f Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Mon, 24 Apr 2023 17:01:10 +0200 -Subject: [PATCH 04/10] accelerometer: support SSC accelerometer sensor - -Add driver for the accelerometer sensor exposed by libssc. -Mount matrix is supported through environment variables set -by udev rules because extracting the mount matrix from the -Qualcomm Snapdragon Sensor Core (SSC) firmware is not possible yet. ---- - src/drivers.h | 1 + - src/drv-ssc-accel.c | 153 +++++++++++++++++++++++++++++++++++++++++ - src/iio-sensor-proxy.c | 1 + - src/meson.build | 1 + - 4 files changed, 156 insertions(+) - create mode 100644 src/drv-ssc-accel.c - -diff --git a/src/drivers.h b/src/drivers.h -index 46df2fd..40707ec 100644 ---- a/src/drivers.h -+++ b/src/drivers.h -@@ -164,6 +164,7 @@ extern SensorDriver input_proximity; - #ifdef HAS_LIBSSC - extern SensorDriver ssc_proximity; - extern SensorDriver ssc_light; -+extern SensorDriver ssc_accel; - #endif - - gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name); -diff --git a/src/drv-ssc-accel.c b/src/drv-ssc-accel.c -new file mode 100644 -index 0000000..676303b ---- /dev/null -+++ b/src/drv-ssc-accel.c -@@ -0,0 +1,153 @@ -+/* -+ * Copyright (c) 2023-2025 Dylan Van Assche -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 3 as published by -+ * the Free Software Foundation. -+ */ -+ -+#include "drivers.h" -+#include "accel-mount-matrix.h" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+typedef struct DrvData { -+ SSCSensorAccelerometer *sensor; -+ guint measurement_id; -+ AccelVec3 *mount_matrix; -+ AccelLocation location; -+ AccelScale scale; -+} DrvData; -+ -+static gboolean -+ssc_accelerometer_discover (GUdevDevice *device) -+{ -+ SSCSensorAccelerometer *sensor = NULL; -+ -+ /* Verify presence of FastRPC device */ -+ if (!drv_check_udev_sensor_type (device, "ssc-accel", NULL)) -+ return FALSE; -+ -+ /* Open and close SSC accelerometer for discovering */ -+ sensor = ssc_sensor_accelerometer_new_sync (NULL, NULL); -+ if (!sensor) -+ return FALSE; -+ -+ if (!ssc_sensor_accelerometer_close_sync (sensor, NULL, NULL)) { -+ g_clear_object (&sensor); -+ return FALSE; -+ } -+ -+ g_clear_object (&sensor); -+ -+ g_debug ("Found SSC accelerometer at %s", g_udev_device_get_sysfs_path (device)); -+ return TRUE; -+} -+ -+static void -+measurement_cb (SSCSensorAccelerometer *sensor, gfloat accel_x, gfloat accel_y, gfloat accel_z, gpointer user_data) -+{ -+ SensorDevice *sensor_device = user_data; -+ DrvData *drv_data = (DrvData *) sensor_device->priv; -+ AccelReadings readings; -+ AccelVec3 tmp; -+ -+ tmp.x = accel_x; -+ tmp.y = accel_y; -+ tmp.z = accel_z; -+ -+ if (!apply_mount_matrix (drv_data->mount_matrix, &tmp)) -+ g_warning ("Could not apply mount matrix"); -+ -+ readings.accel_x = tmp.x; -+ readings.accel_y = tmp.y; -+ readings.accel_z = tmp.z; -+ copy_accel_scale (&readings.scale, drv_data->scale); -+ -+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data); -+} -+ -+static SensorDevice * -+ssc_accelerometer_open (GUdevDevice *device) -+{ -+ SensorDevice *sensor_device; -+ DrvData *drv_data; -+ g_autoptr (GError) error = NULL; -+ -+ sensor_device = g_new0 (SensorDevice, 1); -+ sensor_device->priv = g_new0 (DrvData, 1); -+ drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Setup accel attributes */ -+ drv_data->mount_matrix = setup_mount_matrix (device); -+ drv_data->location = setup_accel_location (device); -+ set_accel_scale (&drv_data->scale, 1.0); -+ -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC accelerometer sensor failed: %s", error->message); -+ g_clear_pointer (&drv_data->mount_matrix, g_free); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ g_object_get (drv_data->sensor, -+ SSC_SENSOR_NAME, &sensor_device->name, -+ NULL); -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ -+ /* Enable sensor */ -+ if (!ssc_sensor_accelerometer_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC accelerometer sensor failed: %s", error->message); -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&drv_data->mount_matrix, g_free); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ -+ return sensor_device; -+} -+ -+static void -+ssc_accelerometer_close (SensorDevice *sensor_device) -+{ -+ g_autoptr (GError) error = NULL; -+ DrvData *drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_accelerometer_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC accelerometer sensor failed: %s", error->message); -+ -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&drv_data->mount_matrix, g_free); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+} -+ -+SensorDriver ssc_accel = { -+ .driver_name = "SSC accelerometer sensor", -+ .type = DRIVER_TYPE_ACCEL, -+ -+ .discover = ssc_accelerometer_discover, -+ .open = ssc_accelerometer_open, -+ .close = ssc_accelerometer_close, -+}; -diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c -index b4eacc3..e99f641 100644 ---- a/src/iio-sensor-proxy.c -+++ b/src/iio-sensor-proxy.c -@@ -82,6 +82,7 @@ static const SensorDriver * const drivers[] = { - #ifdef HAS_LIBSSC - &ssc_proximity, - &ssc_light, -+ &ssc_accel, - #endif - }; - -diff --git a/src/meson.build b/src/meson.build -index 2f3c1e6..d59cfdd 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -49,6 +49,7 @@ if get_option('ssc-support') - sources = sources + [ - 'drv-ssc-proximity.c', - 'drv-ssc-light.c', -+ 'drv-ssc-accel.c', - ] - endif - --- -2.47.1 - 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 deleted file mode 100644 index 24bf9b40b..000000000 --- a/temp/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch +++ /dev/null @@ -1,188 +0,0 @@ -From 861e0e9bcc1ba400648e1e4a990a331284fff6e0 Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Mon, 24 Apr 2023 18:29:15 +0200 -Subject: [PATCH 05/10] compass: support SSC compass sensor - -Add driver for the compass sensor exposed by libssc. ---- - src/drivers.h | 1 + - src/drv-ssc-compass.c | 129 +++++++++++++++++++++++++++++++++++++++++ - src/iio-sensor-proxy.c | 1 + - src/meson.build | 1 + - 4 files changed, 132 insertions(+) - create mode 100644 src/drv-ssc-compass.c - -diff --git a/src/drivers.h b/src/drivers.h -index 40707ec..5e0347c 100644 ---- a/src/drivers.h -+++ b/src/drivers.h -@@ -165,6 +165,7 @@ extern SensorDriver input_proximity; - extern SensorDriver ssc_proximity; - extern SensorDriver ssc_light; - extern SensorDriver ssc_accel; -+extern SensorDriver ssc_compass; - #endif - - gboolean drv_check_udev_sensor_type (GUdevDevice *device, const gchar *match, const char *name); -diff --git a/src/drv-ssc-compass.c b/src/drv-ssc-compass.c -new file mode 100644 -index 0000000..c6f11a9 ---- /dev/null -+++ b/src/drv-ssc-compass.c -@@ -0,0 +1,129 @@ -+/* -+ * Copyright (c) 2023-2025 Dylan Van Assche -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 3 as published by -+ * the Free Software Foundation. -+ */ -+ -+#include "drivers.h" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+typedef struct DrvData { -+ SSCSensorCompass *sensor; -+ guint measurement_id; -+} DrvData; -+ -+static gboolean -+ssc_compass_discover (GUdevDevice *device) -+{ -+ SSCSensorCompass *sensor = NULL; -+ -+ /* Verify presence of FastRPC device */ -+ if (!drv_check_udev_sensor_type (device, "ssc-compass", NULL)) -+ return FALSE; -+ -+ /* Open and close SSC compass for discovering */ -+ sensor = ssc_sensor_compass_new_sync (NULL, NULL); -+ if (!sensor) -+ return FALSE; -+ -+ if (!ssc_sensor_compass_close_sync (sensor, NULL, NULL)) { -+ g_clear_object(&sensor); -+ return FALSE; -+ } -+ -+ g_clear_object(&sensor); -+ -+ g_debug ("Found SSC compass at %s", g_udev_device_get_sysfs_path (device)); -+ return TRUE; -+} -+ -+static void -+measurement_cb (SSCSensorCompass *sensor, gfloat azimuth, gpointer user_data) -+{ -+ SensorDevice *sensor_device = user_data; -+ CompassReadings readings; -+ -+ readings.heading = azimuth; -+ -+ sensor_device->callback_func (sensor_device, (gpointer) &readings, sensor_device->user_data); -+} -+ -+static SensorDevice * -+ssc_compass_open (GUdevDevice *device) -+{ -+ SensorDevice *sensor_device; -+ DrvData *drv_data; -+ g_autoptr (GError) error = NULL; -+ -+ sensor_device = g_new0 (SensorDevice, 1); -+ sensor_device->priv = g_new0 (DrvData, 1); -+ drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_compass_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC compass sensor failed: %s", error->message); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ g_object_get (drv_data->sensor, -+ SSC_SENSOR_NAME, &sensor_device->name, -+ NULL); -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ -+ /* Enable sensor */ -+ if (!ssc_sensor_compass_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC compass sensor failed: %s", error->message); -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+ return NULL; -+ } -+ -+ return sensor_device; -+} -+ -+static void -+ssc_compass_close (SensorDevice *sensor_device) -+{ -+ g_autoptr (GError) error = NULL; -+ DrvData *drv_data = (DrvData *) sensor_device->priv; -+ -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_compass_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC compass sensor failed: %s", error->message); -+ -+ g_clear_object (&drv_data->sensor); -+ g_clear_pointer (&sensor_device->priv, g_free); -+ g_free (sensor_device); -+} -+ -+SensorDriver ssc_compass = { -+ .driver_name = "SSC compass sensor", -+ .type = DRIVER_TYPE_COMPASS, -+ -+ .discover = ssc_compass_discover, -+ .open = ssc_compass_open, -+ .close = ssc_compass_close, -+}; -diff --git a/src/iio-sensor-proxy.c b/src/iio-sensor-proxy.c -index e99f641..9e8760c 100644 ---- a/src/iio-sensor-proxy.c -+++ b/src/iio-sensor-proxy.c -@@ -83,6 +83,7 @@ static const SensorDriver * const drivers[] = { - &ssc_proximity, - &ssc_light, - &ssc_accel, -+ &ssc_compass, - #endif - }; - -diff --git a/src/meson.build b/src/meson.build -index d59cfdd..1e753cc 100644 ---- a/src/meson.build -+++ b/src/meson.build -@@ -50,6 +50,7 @@ if get_option('ssc-support') - 'drv-ssc-proximity.c', - 'drv-ssc-light.c', - 'drv-ssc-accel.c', -+ 'drv-ssc-compass.c', - ] - endif - --- -2.47.1 - 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 deleted file mode 100644 index d86d9a929..000000000 --- a/temp/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 630eab1d4a0773f1126a5e3dc56a95cece71a69d Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Wed, 26 Apr 2023 18:54:07 +0200 -Subject: [PATCH 06/10] data: add libssc udev rules - -Add udev rules to indicate possible sensor types like -ssc-accel, ssc-light, ssc-proximity, and ssc-compass -when a FastRPC node is present. This commit enables -the usage of the libssc sensor drivers in iio-sensor-proxy -which are introduced in the previous commits. ---- - data/80-iio-sensor-proxy-libssc.rules | 11 +++++++++++ - data/meson.build | 10 +++++++++- - 2 files changed, 20 insertions(+), 1 deletion(-) - create mode 100644 data/80-iio-sensor-proxy-libssc.rules - -diff --git a/data/80-iio-sensor-proxy-libssc.rules b/data/80-iio-sensor-proxy-libssc.rules -new file mode 100644 -index 0000000..c4fad16 ---- /dev/null -+++ b/data/80-iio-sensor-proxy-libssc.rules -@@ -0,0 +1,11 @@ -+# iio-sensor-proxy: libssc -+# IIO sensor to D-Bus proxy with libssc support -+ -+ACTION=="remove", GOTO="iio_sensor_proxy_libssc_end" -+ -+# Set the sensor type for all the types we recognise for SDSP/ADSP. -+# Some devices expose the sensors via a separate SDSP while others re-use ADSP. -+# These DSPs expose itself as /dev/fastrpc-* in the misc subsystem. -+SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass" -+ -+LABEL="iio_sensor_proxy_libssc_end" -diff --git a/data/meson.build b/data/meson.build -index 97dbc07..8b78125 100644 ---- a/data/meson.build -+++ b/data/meson.build -@@ -1,5 +1,13 @@ -+rules = files( -+ '80-iio-sensor-proxy.rules' -+) -+ -+if get_option('ssc-support') -+ rules += files('80-iio-sensor-proxy-libssc.rules') -+endif -+ - install_data( -- '80-iio-sensor-proxy.rules', -+ rules, - install_dir: udev_rules_dir - ) - --- -2.47.1 - diff --git a/temp/iio-sensor-proxy/0007-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 deleted file mode 100644 index c34d12cc8..000000000 --- a/temp/iio-sensor-proxy/0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 4522c9a8e07e6645c0c460d93cd57c67768fae71 Mon Sep 17 00:00:00 2001 -From: Dylan Van Assche -Date: Sat, 1 Jun 2024 21:15:15 +0200 -Subject: [PATCH 07/10] data: iio-sensor-proxy.service.in: add AF_QIPCRTR - -Allow AF_QIPCRTR in lockdown for libssc. -Libssc uses the QMI protocol over QRTR in the kernel. -Systemd limits the address families to UNIX, LOCAL, and NETLINK. -However, QRTR uses its own address family: AF_QIPCRTR. -Add it to the allowed families. ---- - data/iio-sensor-proxy.service.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/data/iio-sensor-proxy.service.in b/data/iio-sensor-proxy.service.in -index 4bc921b..29ea3c0 100644 ---- a/data/iio-sensor-proxy.service.in -+++ b/data/iio-sensor-proxy.service.in -@@ -14,6 +14,6 @@ ProtectControlGroups=true - ProtectHome=true - ProtectKernelModules=true - PrivateTmp=true --RestrictAddressFamilies=AF_UNIX AF_LOCAL AF_NETLINK -+RestrictAddressFamilies=AF_UNIX AF_LOCAL AF_NETLINK AF_QIPCRTR - MemoryDenyWriteExecute=true - RestrictRealtime=true --- -2.47.1 - diff --git a/temp/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch b/temp/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch deleted file mode 100644 index 6ab125333..000000000 --- a/temp/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch +++ /dev/null @@ -1,430 +0,0 @@ -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 - -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 | 65 ++++++++++++++++++---------------- - src/drv-ssc-compass.c | 77 +++++++++++++++++++++-------------------- - src/drv-ssc-light.c | 74 +++++++++++++++++++-------------------- - src/drv-ssc-proximity.c | 75 +++++++++++++++++++-------------------- - 4 files changed, 146 insertions(+), 145 deletions(-) - -diff --git a/src/drv-ssc-accel.c b/src/drv-ssc-accel.c -index 676303b..745304c 100644 ---- a/src/drv-ssc-accel.c -+++ b/src/drv-ssc-accel.c -@@ -80,7 +80,6 @@ ssc_accelerometer_open (GUdevDevice *device) - { - SensorDevice *sensor_device; - DrvData *drv_data; -- g_autoptr (GError) error = NULL; - - sensor_device = g_new0 (SensorDevice, 1); - sensor_device->priv = g_new0 (DrvData, 1); -@@ -91,38 +90,43 @@ ssc_accelerometer_open (GUdevDevice *device) - drv_data->location = setup_accel_location (device); - set_accel_scale (&drv_data->scale, 1.0); - -- /* Create sensor */ -- drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error); -- if (!drv_data->sensor) { -- g_warning ("Creating SSC accelerometer sensor failed: %s", error->message); -- g_clear_pointer (&drv_data->mount_matrix, g_free); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } -- g_object_get (drv_data->sensor, -- SSC_SENSOR_NAME, &sensor_device->name, -- NULL); -- -- /* Start listening for measurements */ -- drv_data->measurement_id = g_signal_connect (drv_data->sensor, -- "measurement", -- G_CALLBACK (measurement_cb), -- sensor_device); -- -- /* Enable sensor */ -- if (!ssc_sensor_accelerometer_open_sync (drv_data->sensor, NULL, &error)) { -- g_warning ("Opening SSC accelerometer sensor failed: %s", error->message); -- g_clear_object (&drv_data->sensor); -- g_clear_pointer (&drv_data->mount_matrix, g_free); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } -- - return sensor_device; - } - -+static void -+ssc_accelerometer_set_polling (SensorDevice *sensor_device, gboolean state) -+{ -+ DrvData *drv_data = (DrvData *) sensor_device->priv; -+ g_autoptr (GError) error = NULL; -+ if (state) { -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_accelerometer_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ /* Enable sensor */ -+ if (!ssc_sensor_accelerometer_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ } else { -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_accelerometer_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC accelerometer sensor failed: %s", error ? error->message : "UNKNOWN"); -+ } -+} -+ - static void - ssc_accelerometer_close (SensorDevice *sensor_device) - { -@@ -149,5 +153,6 @@ SensorDriver ssc_accel = { - - .discover = ssc_accelerometer_discover, - .open = ssc_accelerometer_open, -+ .set_polling = ssc_accelerometer_set_polling, - .close = ssc_accelerometer_close, - }; -diff --git a/src/drv-ssc-compass.c b/src/drv-ssc-compass.c -index c6f11a9..f4af37b 100644 ---- a/src/drv-ssc-compass.c -+++ b/src/drv-ssc-compass.c -@@ -63,56 +63,56 @@ static SensorDevice * - ssc_compass_open (GUdevDevice *device) - { - SensorDevice *sensor_device; -- DrvData *drv_data; -- g_autoptr (GError) error = NULL; - - sensor_device = g_new0 (SensorDevice, 1); - sensor_device->priv = g_new0 (DrvData, 1); -- drv_data = (DrvData *) sensor_device->priv; -- -- /* Create sensor */ -- drv_data->sensor = ssc_sensor_compass_new_sync (NULL, &error); -- if (!drv_data->sensor) { -- g_warning ("Creating SSC compass sensor failed: %s", error->message); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } -- g_object_get (drv_data->sensor, -- SSC_SENSOR_NAME, &sensor_device->name, -- NULL); -- -- /* Start listening for measurements */ -- drv_data->measurement_id = g_signal_connect (drv_data->sensor, -- "measurement", -- G_CALLBACK (measurement_cb), -- sensor_device); -- -- /* Enable sensor */ -- if (!ssc_sensor_compass_open_sync (drv_data->sensor, NULL, &error)) { -- g_warning ("Opening SSC compass sensor failed: %s", error->message); -- g_clear_object (&drv_data->sensor); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } - - return sensor_device; - } - - static void --ssc_compass_close (SensorDevice *sensor_device) -+ssc_compass_set_polling (SensorDevice *sensor_device, gboolean state) - { -- g_autoptr (GError) error = NULL; - DrvData *drv_data = (DrvData *) sensor_device->priv; -+ g_autoptr (GError) error = NULL; - -- /* Stop listening for measurements */ -- g_warn_if_fail (drv_data->measurement_id > 0); -- g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ if (state) { -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_compass_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC compass sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ g_object_get (drv_data->sensor, -+ SSC_SENSOR_NAME, &sensor_device->name, -+ NULL); -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ -+ /* Enable sensor */ -+ if (!ssc_sensor_compass_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC compass sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ } else { -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_compass_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC compass sensor failed: %s", error ? error->message : "UNKNOWN"); -+ } -+} - -- /* Disable sensor */ -- if (!ssc_sensor_compass_close_sync (drv_data->sensor, NULL, &error)) -- g_warning ("Closing SSC compass sensor failed: %s", error->message); -+static void -+ssc_compass_close (SensorDevice *sensor_device) -+{ -+ DrvData *drv_data = (DrvData *) sensor_device->priv; - - g_clear_object (&drv_data->sensor); - g_clear_pointer (&sensor_device->priv, g_free); -@@ -125,5 +125,6 @@ SensorDriver ssc_compass = { - - .discover = ssc_compass_discover, - .open = ssc_compass_open, -+ .set_polling = ssc_compass_set_polling, - .close = ssc_compass_close, - }; -diff --git a/src/drv-ssc-light.c b/src/drv-ssc-light.c -index eb43d6c..04d24dd 100644 ---- a/src/drv-ssc-light.c -+++ b/src/drv-ssc-light.c -@@ -63,57 +63,54 @@ static SensorDevice * - ssc_light_open (GUdevDevice *device) - { - SensorDevice *sensor_device; -- DrvData *drv_data; -- g_autoptr (GError) error = NULL; - - sensor_device = g_new0 (SensorDevice, 1); - sensor_device->priv = g_new0 (DrvData, 1); -- drv_data = (DrvData *) sensor_device->priv; -- -- /* Create sensor */ -- drv_data->sensor = ssc_sensor_light_new_sync (NULL, &error); -- if (!drv_data->sensor) { -- g_warning ("Creating SSC light sensor failed: %s", error->message); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } -- g_object_get (drv_data->sensor, -- SSC_SENSOR_NAME, &sensor_device->name, -- NULL); -- -- /* Start listening for measurements */ -- drv_data->measurement_id = g_signal_connect (drv_data->sensor, -- "measurement", -- G_CALLBACK (measurement_cb), -- sensor_device); -- -- /* Enable sensor */ -- if (!ssc_sensor_light_open_sync (drv_data->sensor, NULL, &error)) { -- g_warning ("Opening SSC light sensor failed: %s", error->message); -- g_clear_object (&drv_data->sensor); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } - - return sensor_device; - } - -+static void -+ssc_light_set_polling (SensorDevice *sensor_device, gboolean state) -+{ -+ DrvData *drv_data = (DrvData *) sensor_device->priv; -+ g_autoptr (GError) error = NULL; -+ if (state) { -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_light_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC light sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ -+ /* Enable sensor */ -+ if (!ssc_sensor_light_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC light sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ } else { -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_light_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC light sensor failed: %s", error ? error->message : "UNKNOWN"); -+ } -+} -+ - static void - ssc_light_close (SensorDevice *sensor_device) - { - g_autoptr (GError) error = NULL; - DrvData *drv_data = (DrvData *) sensor_device->priv; - -- /* Stop listening for measurements */ -- g_warn_if_fail (drv_data->measurement_id > 0); -- g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -- -- /* Disable sensor */ -- if (!ssc_sensor_light_close_sync (drv_data->sensor, NULL, &error)) -- g_warning ("Closing SSC light sensor failed: %s", error->message); -- - g_clear_object (&drv_data->sensor); - g_clear_pointer (&sensor_device->priv, g_free); - g_free (sensor_device); -@@ -125,5 +122,6 @@ SensorDriver ssc_light = { - - .discover = ssc_light_discover, - .open = ssc_light_open, -+ .set_polling = ssc_light_set_polling, - .close = ssc_light_close, - }; -diff --git a/src/drv-ssc-proximity.c b/src/drv-ssc-proximity.c -index f4aa897..12570ba 100644 ---- a/src/drv-ssc-proximity.c -+++ b/src/drv-ssc-proximity.c -@@ -62,56 +62,52 @@ static SensorDevice * - ssc_proximity_open (GUdevDevice *device) - { - SensorDevice *sensor_device; -- DrvData *drv_data; -- g_autoptr (GError) error = NULL; - - sensor_device = g_new0 (SensorDevice, 1); - sensor_device->priv = g_new0 (DrvData, 1); -- drv_data = (DrvData *) sensor_device->priv; -- -- /* Create sensor */ -- drv_data->sensor = ssc_sensor_proximity_new_sync (NULL, &error); -- if (!drv_data->sensor) { -- g_warning ("Creating SSC proximity sensor failed: %s", error->message); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } -- g_object_get (drv_data->sensor, -- SSC_SENSOR_NAME, &sensor_device->name, -- NULL); -- -- /* Start listening for measurements */ -- drv_data->measurement_id = g_signal_connect (drv_data->sensor, -- "measurement", -- G_CALLBACK (measurement_cb), -- sensor_device); -- -- /* Enable sensor */ -- if (!ssc_sensor_proximity_open_sync (drv_data->sensor, NULL, &error)) { -- g_warning ("Opening SSC proximity sensor failed: %s", error->message); -- g_clear_object (&drv_data->sensor); -- g_clear_pointer (&sensor_device->priv, g_free); -- g_free (sensor_device); -- return NULL; -- } - - return sensor_device; - } - - static void --ssc_proximity_close (SensorDevice *sensor_device) -+ssc_proximity_set_polling (SensorDevice *sensor_device, gboolean state) - { -- g_autoptr (GError) error = NULL; - DrvData *drv_data = (DrvData *) sensor_device->priv; -+ g_autoptr (GError) error = NULL; -+ if (state) { -+ /* Create sensor */ -+ drv_data->sensor = ssc_sensor_proximity_new_sync (NULL, &error); -+ if (!drv_data->sensor) { -+ g_warning ("Creating SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ -+ /* Start listening for measurements */ -+ drv_data->measurement_id = g_signal_connect (drv_data->sensor, -+ "measurement", -+ G_CALLBACK (measurement_cb), -+ sensor_device); -+ -+ /* Enable sensor */ -+ if (!ssc_sensor_proximity_open_sync (drv_data->sensor, NULL, &error)) { -+ g_warning ("Opening SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN"); -+ return; -+ } -+ } else { -+ /* Stop listening for measurements */ -+ g_warn_if_fail (drv_data->measurement_id > 0); -+ g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -+ -+ /* Disable sensor */ -+ if (!ssc_sensor_proximity_close_sync (drv_data->sensor, NULL, &error)) -+ g_warning ("Closing SSC proximity sensor failed: %s", error ? error->message : "UNKNOWN"); -+ } -+} - -- /* Stop listening for measurements */ -- g_warn_if_fail (drv_data->measurement_id > 0); -- g_signal_handler_disconnect (drv_data->sensor, drv_data->measurement_id); -- -- /* Disable sensor */ -- if (!ssc_sensor_proximity_close_sync (drv_data->sensor, NULL, &error)) -- g_warning ("Closing SSC proximity sensor failed: %s", error->message); -+static void -+ssc_proximity_close (SensorDevice *sensor_device) -+{ -+ DrvData *drv_data = (DrvData *) sensor_device->priv; - - g_clear_object (&drv_data->sensor); - g_clear_pointer (&sensor_device->priv, g_free); -@@ -124,5 +120,6 @@ SensorDriver ssc_proximity = { - - .discover = ssc_proximity_discover, - .open = ssc_proximity_open, -+ .set_polling = ssc_proximity_set_polling, - .close = ssc_proximity_close, - }; --- -2.47.1 - 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 deleted file mode 100644 index 6405a2795..000000000 --- a/temp/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch +++ /dev/null @@ -1,429 +0,0 @@ -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/0010-fixup-data-add-libssc-udev-rules.patch b/temp/iio-sensor-proxy/0010-fixup-data-add-libssc-udev-rules.patch deleted file mode 100644 index ebb297a8b..000000000 --- a/temp/iio-sensor-proxy/0010-fixup-data-add-libssc-udev-rules.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 9d8e0b019583b549d61f1cfddc17ea32b17662c6 Mon Sep 17 00:00:00 2001 -From: Clayton Craft -Date: Fri, 2 Jan 2026 17:18:27 -0800 -Subject: [PATCH] fixup! data: add libssc udev rules - ---- - data/80-iio-sensor-proxy-libssc.rules | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/data/80-iio-sensor-proxy-libssc.rules b/data/80-iio-sensor-proxy-libssc.rules -index c4fad16..5eb3d46 100644 ---- a/data/80-iio-sensor-proxy-libssc.rules -+++ b/data/80-iio-sensor-proxy-libssc.rules -@@ -6,6 +6,7 @@ ACTION=="remove", GOTO="iio_sensor_proxy_libssc_end" - # Set the sensor type for all the types we recognise for SDSP/ADSP. - # Some devices expose the sensors via a separate SDSP while others re-use ADSP. - # These DSPs expose itself as /dev/fastrpc-* in the misc subsystem. --SUBSYSTEM=="misc", KERNEL=="fastrpc-*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass" -+SUBSYSTEM=="misc", KERNEL=="fastrpc-adsp*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass" -+SUBSYSTEM=="misc", KERNEL=="fastrpc-sdsp*", ENV{IIO_SENSOR_PROXY_TYPE}+="ssc-accel ssc-light ssc-proximity ssc-compass" - - LABEL="iio_sensor_proxy_libssc_end" --- -2.52.0 - diff --git a/temp/iio-sensor-proxy/0013-integration-test-add-test-for-sensors-that-report-no.patch b/temp/iio-sensor-proxy/0013-integration-test-add-test-for-sensors-that-report-no.patch deleted file mode 100644 index 2e671c999..000000000 --- a/temp/iio-sensor-proxy/0013-integration-test-add-test-for-sensors-that-report-no.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 5349b67bf68e07b3d4fef5d39579a2879a144a65 Mon Sep 17 00:00:00 2001 -From: "Sicelo A. Mhlongo" -Date: Mon, 26 May 2025 18:05:38 +0200 -Subject: [PATCH 4/4] integration-test: add test for sensors that report - non-working buffers - -Confirm that when a sensor reports support for buffer operation, and the mode -can actually be enabled, but no data is returned, iio-sensor-proxy will detect -this and switch to polling mode. ---- - tests/integration-test.py | 36 ++++++++++++++++++++++++++++++++++++ - 1 file changed, 36 insertions(+) - -diff --git a/tests/integration-test.py b/tests/integration-test.py -index b596eaa..95b9da3 100755 ---- a/tests/integration-test.py -+++ b/tests/integration-test.py -@@ -630,6 +630,42 @@ class Tests(dbusmock.DBusTestCase): - - self.stop_daemon() - -+ def test_iio_broken_buffer_accel(self): -+ '''iio sensor reporting broken buffer support''' -+ top_srcdir = os.getenv('top_srcdir', '.') -+ mock_dev_data = self.testbed.get_root_dir() + '/iio-dev-data.bin' -+ accel = self.testbed.add_device('iio', 'iio-buffer-accel0', None, -+ ['name', 'IIO Test Accelerometer', -+ 'buffer/enable', '0', -+ 'trigger/current_trigger', '', -+ 'scan_elements/in_accel_x_en', '0', -+ 'scan_elements/in_accel_x_index', '0', -+ 'scan_elements/in_accel_x_type', 'le:s16/32>>0', -+ 'scan_elements/in_accel_y_en', '0', -+ 'scan_elements/in_accel_y_index', '1', -+ 'scan_elements/in_accel_y_type', 'le:s16/32>>0', -+ 'scan_elements/in_accel_z_en', '0', -+ 'scan_elements/in_accel_z_index', '2', -+ 'scan_elements/in_accel_z_type', 'le:s16/32>>0', -+ 'scan_elements/in_timestamp_en', '1', -+ 'scan_elements/in_timestamp_index', '3', -+ 'scan_elements/in_timestamp_type', 'le:s64/64>>0'], -+ ['NAME', '"IIO Accelerometer"', -+ 'DEVNAME', '/dev/iio-buffer-accel-test', -+ 'IIO_SENSOR_PROXY_TYPE', 'iio-buffer-accel iio-poll-accel'] -+ ) -+ trigger = self.testbed.add_device('iio', 'trigger0', None, -+ ['name', 'accel_3d-dev0'], -+ [] -+ ) -+ self.start_daemon() -+ self.assertEqual(self.have_text_in_log('Built channel array'), True) -+ self.assertEqual(self.have_text_in_log('Disabled sensor'), True) -+ self.assertEqual(self.have_text_in_log('Found IIO poll accelerometer'), True) -+ self.assertEqual(self.get_dbus_property('HasAccelerometer'), True) -+ -+ self.stop_daemon() -+ - def test_unrequested_readings(self): - '''unrequested property updates''' - self.testbed.add_device('input', 'fake-light', None, --- -2.50.0 - diff --git a/temp/iio-sensor-proxy/APKBUILD b/temp/iio-sensor-proxy/APKBUILD deleted file mode 100644 index f17433dba..000000000 --- a/temp/iio-sensor-proxy/APKBUILD +++ /dev/null @@ -1,77 +0,0 @@ -# Forked from Alpine to add Qualcomm SSC support with libssc -maintainer="Dylan Van Assche " -pkgname=iio-sensor-proxy -_pkgver=3.8 -pkgver=9999$_pkgver -pkgrel=6 -pkgdesc="IIO sensors to D-Bus proxy" -url="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy" -arch="aarch64" -license="GPL-2.0-or-later" -depends="dbus" -makedepends=" - eudev-dev - glib-dev - libgudev-dev - meson - polkit-dev - libssc-dev>=0.2.1 - " -subpackages="$pkgname-openrc $pkgname-systemd $pkgname-udev" -builddir="$srcdir/$pkgname-$_pkgver" -source="https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/archive/$_pkgver/iio-sensor-proxy-$_pkgver.tar.gz - iio-sensor-proxy.initd - system-iio-sensor-proxy.service.d-hexagonrpcd.conf - 0001-iio-sensor-proxy-depend-on-libssc.patch - 0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch - 0002-proximity-support-SSC-proximity-sensor.patch - 0003-light-support-SSC-light-sensor.patch - 0004-accelerometer-support-SSC-accelerometer-sensor.patch - 0005-compass-support-SSC-compass-sensor.patch - 0006-data-add-libssc-udev-rules.patch - 0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch - 0008-drv-ssc-implement-set_polling.patch - 0009-tests-integration-test-add-SSC-sensors.patch - 0010-fixup-data-add-libssc-udev-rules.patch - 0013-integration-test-add-test-for-sensors-that-report-no.patch - " - -build() { - abuild-meson \ - -Db_lto=true \ - -Dssc-support=true \ - -Dsystemdsystemunitdir=/usr/lib/systemd/system \ - . output - meson compile -C output -} - -check() { - meson test --print-errorlogs -C output -} - -package() { - DESTDIR="$pkgdir" meson install --no-rebuild -C output - - install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname - - install -Dm644 "$srcdir"/system-iio-sensor-proxy.service.d-hexagonrpcd.conf \ - "$pkgdir"/usr/lib/systemd/system/iio-sensor-proxy.service.d/hexagonrpcd.conf -} - -sha512sums=" -9cca8d706c531c9a2e34dfebdc8673a1765b615533e3f7776118c74cb1ce145e472203c6c7804d35701c22cc93755609829bc3817c5920d5961249d7e8de87c6 iio-sensor-proxy-3.8.tar.gz -b25df94e249ca46fe96926e5a866c20dc913fa52a2d9259fb7a3594861c6b2f246fc7fef8a21f5b021f3a71401f734ae27210137b0b1917a7daaffb5e3221f2e iio-sensor-proxy.initd -2e8a876b61093add48e0677dcbfdac148690eddb398ff51ab4edb6547515ad8f8cfec31e8fda6886746b3bf30410b7b63c7486dcfe2441a7e742ea5023981a45 system-iio-sensor-proxy.service.d-hexagonrpcd.conf -d46eeb1deabb6ee6017b86f573fcb717d8b992979bfd447e52c6dabc95d9e6c986ab937f602c2f0a731d10d87d67578aa59930d7faff69b2f42a0eab25f4c60c 0001-iio-sensor-proxy-depend-on-libssc.patch -4b43ea53b71c9be29367897a3c9ba349e9fdb71185300aafc00be69f923d7f27aa02bb7f0f5c5be800f0d494035992e046c010fd70a1754f8a47701b17666926 0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch -59800fbd73abd77c6cf86ab1bcdce85abefb07e3cd28d58c3e91a4b3cdd9d893a9671e8f0f3dc212064d5744a62b0b24c54fa91ce8f3ac84e361f7ba8cc64ded 0002-proximity-support-SSC-proximity-sensor.patch -7cdcd1d78629f662fa588c90e657c6abed7e43f1462c43f0d14e7756933ea927435077e193429d069b7360ba2d1c16b608226e1707858e56460c82595f054080 0003-light-support-SSC-light-sensor.patch -a956d28d55ee0e0a03bea63caf06881ead7511ac60000a5def61d482b3575006575edd6b0b30ae7874ffd9b2268fd8008a273d6ede561cc44aad46f18233d789 0004-accelerometer-support-SSC-accelerometer-sensor.patch -d4379f8e53eea02f53640752bef883870a44d0169cf821d3f5bb3245309cac1d1502a7848d5cce60d40bcdd484c9baa1f63f60d887613ad25a5ca88721d7c4c8 0005-compass-support-SSC-compass-sensor.patch -4651572ada878fd07ba281426b4cf4b9baf19d8464fd3af1a1c1a98765bcf358d1d445bdef53acd3bf30b1d2c8c234489e96f728d9228e3681e5038f10059573 0006-data-add-libssc-udev-rules.patch -376999144da2c5a6374de73bfaaf0eb605c5c686640f4de8cbcabbe3e78f3fce4675d5bfdc2dd60dacaa84447a039cf22cc4e5fcda478ea77a00001f052a3d85 0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch -bf0ea8a078eb168937645a661fea5b979bf1747ee0c1cd556a238c25f4f26eefd6b2f7a1da1eb0b7d66dcafe24ce31521d71e1a188a324671b08178b392206af 0008-drv-ssc-implement-set_polling.patch -2a208aa064e4f3d6cb24701f65c5cdc5d35a99f61489ac0ab5f336aa8229bc1aa7571b6d7e928a3a28e53b8e35a07655ec3e8b432d7295d82606f8b1f206e7af 0009-tests-integration-test-add-SSC-sensors.patch -4f2d227efb645ce01f4ce997b2923d4a5b12a5d896c47b7e6189fd76abcae4659d5d1fb71608ce4809b19ac5a1129176c81063097826a4a19bc35ed5099537cb 0010-fixup-data-add-libssc-udev-rules.patch -9273f01d35e0f45ddc943808326d87f3a2e678ea29e607d3d70cabc9ea321db761cc170a86b3093553a4c3dfae1d81c5057d146b9a90ff490c85641f02b040df 0013-integration-test-add-test-for-sensors-that-report-no.patch -" diff --git a/temp/iio-sensor-proxy/iio-sensor-proxy.initd b/temp/iio-sensor-proxy/iio-sensor-proxy.initd deleted file mode 100644 index cb3c73eb2..000000000 --- a/temp/iio-sensor-proxy/iio-sensor-proxy.initd +++ /dev/null @@ -1,8 +0,0 @@ -#!/sbin/openrc-run - -supervisor=supervise-daemon -command="/usr/libexec/iio-sensor-proxy" - -depend() { - need dbus -} diff --git a/temp/iio-sensor-proxy/system-iio-sensor-proxy.service.d-hexagonrpcd.conf b/temp/iio-sensor-proxy/system-iio-sensor-proxy.service.d-hexagonrpcd.conf deleted file mode 100644 index ef4fcd640..000000000 --- a/temp/iio-sensor-proxy/system-iio-sensor-proxy.service.d-hexagonrpcd.conf +++ /dev/null @@ -1,8 +0,0 @@ -# Make iio-sensor-proxy depend on hexagonrpcd -[Unit] -Wants=hexagonrpcd-adsp-rootpd.service -Wants=hexagonrpcd-adsp-sensorspd.service -Wants=hexagonrpcd-sdsp.service -After=hexagonrpcd-adsp-rootpd.service -After=hexagonrpcd-adsp-sensorspd.service -After=hexagonrpcd-sdsp.service