diff --git a/common/iio-sensor-proxy/0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch b/common/iio-sensor-proxy/0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch new file mode 100644 index 0000000..552d85a --- /dev/null +++ b/common/iio-sensor-proxy/0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch @@ -0,0 +1,37 @@ +From 1755503f7d249f86515b5aa34c51ea8b2a12119f 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 c204b5c..aed7cb4 100644 +--- a/src/iio-sensor-proxy.c ++++ b/src/iio-sensor-proxy.c +@@ -785,8 +785,7 @@ name_acquired_handler (GDBusConnection *connection, + + bail: + data->ret = 0; +- g_message ("No sensors or missing kernel drivers for the sensors. Exiting"); +- g_main_loop_quit (data->loop); ++ g_message ("No sensors or missing kernel drivers for the sensors. Waiting for hotplug sensors"); + } + + static gboolean +@@ -1069,9 +1068,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.52.0 + diff --git a/common/iio-sensor-proxy/iio-sensor-proxy.spec b/common/iio-sensor-proxy/iio-sensor-proxy.spec new file mode 100644 index 0000000..90d062a --- /dev/null +++ b/common/iio-sensor-proxy/iio-sensor-proxy.spec @@ -0,0 +1,79 @@ +%global commit 0085ddf8ecb173a1c5fcf2344aa40e561125354f + +Name: iio-sensor-proxy +Version: 3.9 +Release: 1 +Summary: IIO accelerometer sensor to input device proxy + +# tests/unittest_inspector.py is LGPL-2.1-or-later but it is not packaged +License: GPL-3.0-or-later +URL: https://gitlab.freedesktop.org/hadess/iio-sensor-proxy +Source0: %{url}/-/archive/%{commit}/%{name}-%{commit}.tar.gz + +Patch0001: 0001-WIP-iio-sensor-proxy.c-Do-not-exit-based-on-sensor-e.patch + +BuildRequires: meson +BuildRequires: gcc +BuildRequires: git-core +BuildRequires: gtk-doc +BuildRequires: pkgconfig(udev) +BuildRequires: pkgconfig(systemd) +BuildRequires: pkgconfig(libssc) +BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(gudev-1.0) +BuildRequires: pkgconfig(polkit-gobject-1) +BuildRequires: systemd +BuildRequires: umockdev +BuildRequires: python3-dbusmock +%{?systemd_requires} + +Requires: libssc +Requires: dbus + +%description +%{summary}. + +%package docs +Summary: Documentation for %{name} +License: GFDL-1.1-or-later +BuildArch: noarch + +%description docs +This package contains the documentation for %{name}. + +%prep +%autosetup -S git_am -n %{name}-%{commit} + +%build +%meson -Dgtk_doc=true -Dgtk-tests=false -Dssc-support=enabled +%meson_build + +%install +%meson_install + +%post +%systemd_post %{name}.service + +%preun +%systemd_preun %{name}.service + +%postun +%systemd_postun_with_restart %{name}.service + +%files +%license COPYING +%doc README.md +%{_bindir}/monitor-sensor +%{_libexecdir}/%{name} +%{_unitdir}/%{name}.service +%{_udevrulesdir}/*-%{name}.rules +%{_datadir}/dbus-1/system.d/net.hadess.SensorProxy.conf +%{_datadir}/polkit-1/actions/net.hadess.SensorProxy.policy + +%files docs +%dir %{_datadir}/gtk-doc/ +%dir %{_datadir}/gtk-doc/html/ +%{_datadir}/gtk-doc/html/%{name}/ + +%changelog +%autochangelog diff --git a/sm8250/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch b/sm8250/iio-sensor-proxy/0001-iio-sensor-proxy-depend-on-libssc.patch deleted file mode 100644 index 206e211..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch b/sm8250/iio-sensor-proxy/0002-proximity-support-SSC-proximity-sensor.patch deleted file mode 100644 index 7022712..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch b/sm8250/iio-sensor-proxy/0003-light-support-SSC-light-sensor.patch deleted file mode 100644 index 1968049..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch b/sm8250/iio-sensor-proxy/0004-accelerometer-support-SSC-accelerometer-sensor.patch deleted file mode 100644 index 5cb415e..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch b/sm8250/iio-sensor-proxy/0005-compass-support-SSC-compass-sensor.patch deleted file mode 100644 index 24bf9b4..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch b/sm8250/iio-sensor-proxy/0006-data-add-libssc-udev-rules.patch deleted file mode 100644 index d86d9a9..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch b/sm8250/iio-sensor-proxy/0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch deleted file mode 100644 index c34d12c..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch b/sm8250/iio-sensor-proxy/0008-drv-ssc-implement-set_polling.patch deleted file mode 100644 index 6ab1253..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch b/sm8250/iio-sensor-proxy/0009-tests-integration-test-add-SSC-sensors.patch deleted file mode 100644 index 6405a27..0000000 --- a/sm8250/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/sm8250/iio-sensor-proxy/iio-sensor-proxy.spec b/sm8250/iio-sensor-proxy/iio-sensor-proxy.spec deleted file mode 100644 index c879d28..0000000 --- a/sm8250/iio-sensor-proxy/iio-sensor-proxy.spec +++ /dev/null @@ -1,238 +0,0 @@ -Name: iio-sensor-proxy -Version: 3.7 -Release: %autorelease -Summary: IIO accelerometer sensor to input device proxy - -# tests/unittest_inspector.py is LGPL-2.1-or-later but it is not packaged -License: GPL-3.0-or-later -URL: https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/ -Source0: %{url}/-/archive/%{version}/%{name}-%{version}.tar.gz - -Patch: 0001-iio-sensor-proxy-depend-on-libssc.patch -Patch: 0002-proximity-support-SSC-proximity-sensor.patch -Patch: 0003-light-support-SSC-light-sensor.patch -Patch: 0004-accelerometer-support-SSC-accelerometer-sensor.patch -Patch: 0005-compass-support-SSC-compass-sensor.patch -Patch: 0006-data-add-libssc-udev-rules.patch -Patch: 0007-data-iio-sensor-proxy.service.in-add-AF_QIPCRTR.patch -Patch: 0008-drv-ssc-implement-set_polling.patch -Patch: 0009-tests-integration-test-add-SSC-sensors.patch - -BuildRequires: meson -BuildRequires: gcc -BuildRequires: gtk-doc -BuildRequires: pkgconfig(udev) -BuildRequires: pkgconfig(systemd) -BuildRequires: pkgconfig(libssc) -BuildRequires: pkgconfig(gio-2.0) -BuildRequires: pkgconfig(gudev-1.0) -BuildRequires: pkgconfig(polkit-gobject-1) -BuildRequires: systemd -BuildRequires: umockdev -BuildRequires: python3-dbusmock -%{?systemd_requires} - -%description -%{summary}. - -%package docs -Summary: Documentation for %{name} -License: GFDL-1.1-or-later -BuildArch: noarch - -%description docs -This package contains the documentation for %{name}. - -%prep -%autosetup -p1 - -%build -%meson -Dgtk_doc=true -Dgtk-tests=false -Dssc-support=true -%meson_build - -%install -%meson_install - -%post -%systemd_post %{name}.service - -%preun -%systemd_preun %{name}.service - -%postun -%systemd_postun_with_restart %{name}.service - -%files -%license COPYING -%doc README.md -%{_bindir}/monitor-sensor -%{_libexecdir}/%{name} -%{_unitdir}/%{name}.service -%{_udevrulesdir}/*-%{name}*.rules -%{_datadir}/dbus-1/system.d/net.hadess.SensorProxy.conf -%{_datadir}/polkit-1/actions/net.hadess.SensorProxy.policy - -%files docs -%dir %{_datadir}/gtk-doc/ -%dir %{_datadir}/gtk-doc/html/ -%{_datadir}/gtk-doc/html/%{name}/ - -%changelog -* Mon Mar 31 2025 Sam Day - 3.7-1 -- Update to 3.7 - -* Fri Jan 17 2025 Fedora Release Engineering - 3.5-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Wed Nov 13 2024 Michel Lind - 3.5-5 -- Update URL -- Resolves: rhbz#2324439 - -* Thu Jul 18 2024 Fedora Release Engineering - 3.5-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jan 24 2024 Fedora Release Engineering - 3.5-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sat Jan 20 2024 Fedora Release Engineering - 3.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Tue Jul 25 2023 Bastien Nocera - 3.5-1 -- Update to 3.5 - -* Thu Jul 20 2023 Fedora Release Engineering - 3.4-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Thu Jan 19 2023 Fedora Release Engineering - 3.4-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Jul 21 2022 Fedora Release Engineering - 3.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Fri Jul 15 2022 Bastien Nocera - 3.4-1 -+ iio-sensor-proxy-3.4-1 -- Update to 3.4 - -* Thu Jan 20 2022 Fedora Release Engineering - 3.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Mon Aug 16 2021 Bastien Nocera - 3.3-1 -+ iio-sensor-proxy-3.3-1 -- Update to 3.3 - -* Sun Aug 15 2021 Bastien Nocera - 3.2-1 -+ iio-sensor-proxy-3.2-1 -- Update to 3.2 - -* Thu Jul 22 2021 Fedora Release Engineering - 3.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Mon Jun 14 2021 Bastien Nocera - 3.1-1 -+ iio-sensor-proxy-3.1-1 -- Update to 3.1 - -* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 3.0-4 -- Rebuilt for updated systemd-rpm-macros - See https://pagure.io/fesco/issue/2583. - -* Tue Jan 26 2021 Fedora Release Engineering - 3.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Tue Jul 28 2020 Fedora Release Engineering - 3.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Mar 23 2020 Bastien Nocera - 3.0-1 -+ iio-sensor-proxy-3.0-1 -- Update to 3.0 - -* Wed Jan 29 2020 Fedora Release Engineering - 2.8-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Wed Sep 04 2019 Bastien Nocera - 2.8-1 -+ iio-sensor-proxy-2.8-1 -- Update to 2.8 - -* Thu Jul 25 2019 Fedora Release Engineering - 2.7-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Fri Jun 07 2019 Bastien Nocera - 2.7-1 -+ iio-sensor-proxy-2.7-1 -- Update to 2.7 (#1709812) - -* Fri Feb 01 2019 Fedora Release Engineering - 2.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Tue Oct 09 2018 Bastien Nocera - 2.5-1 -+ iio-sensor-proxy-2.5-1 -- Update to 2.5 - -* Fri Jul 13 2018 Fedora Release Engineering - 2.4-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Sun Feb 18 2018 Igor Gnatenko - 2.4-3 -- Add BuildRequires: make/gcc - -* Wed Feb 07 2018 Fedora Release Engineering - 2.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Thu Nov 02 2017 Bastien Nocera - 2.4-1 -+ iio-sensor-proxy-2.4-1 -- Update to 2.4 - -* Wed Sep 20 2017 Bastien Nocera - 2.3-1 -+ iio-sensor-proxy-2.3-1 -- Update to 2.3 - -* Wed Aug 02 2017 Fedora Release Engineering - 2.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 2.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed Feb 15 2017 Igor Gnatenko - 2.2-1 -- Update to 2.2 - -* Fri Feb 10 2017 Fedora Release Engineering - 2.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Thu Feb 02 2017 Igor Gnatenko - 2.1-1 -- Update to 2.1 - -* Mon Dec 12 2016 Igor Gnatenko - 2.0-1 -- Update to 2.0 - -* Fri Nov 18 2016 Igor Gnatenko - 1.3-2 -- Don't use hwdb update macro -- Trivial fixes - -* Sat Sep 17 2016 Bastien Nocera - 1.3-1 -- Update to 1.3 - -* Tue Sep 06 2016 Bastien Nocera - 1.2-1 -- Update to 1.2 - -* Thu Feb 04 2016 Fedora Release Engineering - 1.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Thu Jul 23 2015 Igor Gnatenko - 1.1-1 -- Update to 1.1 -- Add -docs subpackage - -* Tue Jun 23 2015 Igor Gnatenko - 1.0-6 -- Fix udev rule (RHBZ #1234744) - -* Wed Jun 17 2015 Fedora Release Engineering - 1.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Wed May 27 2015 Igor Gnatenko - 1.0-4 -- use real license (GPLv3+) - -* Sun May 24 2015 Igor Gnatenko - 1.0-3 -- Fix license tag -- Disable silent building - -* Sat May 23 2015 Igor Gnatenko - 1.0-2 -- Use _udevrules dir instead of custom detecting rules dir - -* Sat May 23 2015 Igor Gnatenko - 1.0-1 -- Initial package