Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package iio-sensor-proxy for openSUSE:Factory checked in at 2025-08-12 17:03:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/iio-sensor-proxy (Old) and /work/SRC/openSUSE:Factory/.iio-sensor-proxy.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "iio-sensor-proxy" Tue Aug 12 17:03:07 2025 rev:26 rq:1298689 version:3.8 Changes: -------- --- /work/SRC/openSUSE:Factory/iio-sensor-proxy/iio-sensor-proxy.changes 2025-03-31 11:37:21.021662025 +0200 +++ /work/SRC/openSUSE:Factory/.iio-sensor-proxy.new.1085/iio-sensor-proxy.changes 2025-08-12 17:03:46.721270507 +0200 @@ -1,0 +2,8 @@ +Sun Aug 10 07:05:55 UTC 2025 - Atri Bhattacharya <badshah...@gmail.com> + +- Update to version 3.8: + * Require 2.76 or newer for the Gio dependency. + * Improve handling of buffer sensors which caused a regression + in 3.7 for some corner cases. + +------------------------------------------------------------------- Old: ---- iio-sensor-proxy-3.7.tar.bz2 New: ---- iio-sensor-proxy-3.8.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ iio-sensor-proxy.spec ++++++ --- /var/tmp/diff_new_pack.BddlnJ/_old 2025-08-12 17:03:47.437300339 +0200 +++ /var/tmp/diff_new_pack.BddlnJ/_new 2025-08-12 17:03:47.445300672 +0200 @@ -1,7 +1,7 @@ # # spec file for package iio-sensor-proxy # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,18 +17,17 @@ Name: iio-sensor-proxy -Version: 3.7 +Version: 3.8 Release: 0 Summary: Proxy for IIO and input subsystems License: GPL-3.0-only Group: System/Monitoring URL: https://gitlab.freedesktop.org/hadess/iio-sensor-proxy Source0: %{url}/-/archive/%{version}/%{name}-%{version}.tar.bz2 - BuildRequires: gtk-doc BuildRequires: meson BuildRequires: pkgconfig -BuildRequires: pkgconfig(glib-2.0) >= 2.56 +BuildRequires: pkgconfig(glib-2.0) >= 2.76 BuildRequires: pkgconfig(gobject-2.0) BuildRequires: pkgconfig(gudev-1.0) >= 237 BuildRequires: pkgconfig(polkit-gobject-1) @@ -53,7 +52,7 @@ %autosetup -p1 %build -%meson -Dgtk-tests=false \ +%meson -Dtests=false \ -Dgtk_doc=true \ -Dgeoclue-user=srvGeoClue %meson_build ++++++ iio-sensor-proxy-3.7.tar.bz2 -> iio-sensor-proxy-3.8.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/NEWS new/iio-sensor-proxy-3.8/NEWS --- old/iio-sensor-proxy-3.7/NEWS 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/NEWS 2025-08-09 13:57:19.000000000 +0200 @@ -1,3 +1,9 @@ +3.8 +--- + +- Require 2.76 or newer for the Gio dependency. +- Improve handling of buffer sensors which caused a regression in 3.7 for some corner cases. + 3.7 --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/meson.build new/iio-sensor-proxy-3.8/meson.build --- old/iio-sensor-proxy-3.7/meson.build 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/meson.build 2025-08-09 13:57:19.000000000 +0200 @@ -1,5 +1,5 @@ project('iio-sensor-proxy', [ 'c' ], - version: '3.7', + version: '3.8', license: 'GPLv3+', default_options: [ 'buildtype=debugoptimized', @@ -42,7 +42,7 @@ if get_option('gtk-tests') gtk_dep = dependency('gtk+-3.0', required: false) endif -gio_dep = dependency('gio-2.0') +gio_dep = dependency('gio-2.0', version: '>= 2.76') 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') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/src/drv-iio-buffer-accel.c new/iio-sensor-proxy-3.8/src/drv-iio-buffer-accel.c --- old/iio-sensor-proxy-3.7/src/drv-iio-buffer-accel.c 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/src/drv-iio-buffer-accel.c 2025-08-09 13:57:19.000000000 +0200 @@ -120,19 +120,6 @@ return G_SOURCE_CONTINUE; } -static gboolean -iio_buffer_accel_discover (GUdevDevice *device) -{ - if (!drv_check_udev_sensor_type (device, "iio-buffer-accel", NULL)) - return FALSE; - - if (!is_buffer_usable (device)) - return FALSE; - - g_debug ("Found IIO buffer accelerometer at %s", g_udev_device_get_sysfs_path (device)); - return TRUE; -} - static void iio_buffer_accel_set_polling (SensorDevice *sensor_device, gboolean state) @@ -164,13 +151,9 @@ { SensorDevice *sensor_device; DrvData *drv_data; - g_autofree char *trigger_name = NULL; BufferDrvData *buffer_data; - /* Get the trigger name, and build the channels from that */ - trigger_name = get_trigger_name (device); - - buffer_data = buffer_drv_data_new (device, trigger_name); + buffer_data = buffer_drv_data_new (device); if (!buffer_data) return NULL; @@ -205,6 +188,37 @@ g_free (sensor_device); } +static gboolean +iio_buffer_accel_discover (GUdevDevice *device) +{ + SensorDevice *sensor_device; + DrvData *drv_data; + gboolean buffer_usable = FALSE; + + if (!drv_check_udev_sensor_type (device, "iio-buffer-accel", NULL)) + return FALSE; + + sensor_device = iio_buffer_accel_open (device); + if (!sensor_device) + return FALSE; + + /* Attempt to read from the sensor */ + drv_data = (DrvData *) sensor_device->priv; + enable_ring_buffer (drv_data->buffer_data); + + buffer_usable = is_buffer_usable(drv_data->dev_path); + + /* Close the sensor until it has been claimed */ + disable_ring_buffer (drv_data->buffer_data); + iio_buffer_accel_close (sensor_device); + + if (!buffer_usable) + return FALSE; + + g_debug ("Found IIO buffer accelerometer at %s", g_udev_device_get_sysfs_path (device)); + return TRUE; +} + SensorDriver iio_buffer_accel = { .driver_name = "IIO Buffer accelerometer", .type = DRIVER_TYPE_ACCEL, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/src/drv-iio-buffer-compass.c new/iio-sensor-proxy-3.8/src/drv-iio-buffer-compass.c --- old/iio-sensor-proxy-3.7/src/drv-iio-buffer-compass.c 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/src/drv-iio-buffer-compass.c 2025-08-09 13:57:19.000000000 +0200 @@ -20,7 +20,7 @@ guint timeout_id; GUdevDevice *dev; - const char *dev_path; + char *dev_path; int device_id; BufferDrvData *buffer_data; } DrvData; @@ -103,35 +103,14 @@ return G_SOURCE_CONTINUE; } -static gboolean -iio_buffer_compass_discover (GUdevDevice *device) -{ - if (!drv_check_udev_sensor_type (device, "iio-buffer-compass", NULL)) - return FALSE; - - if (!is_buffer_usable (device)) - return FALSE; - - g_debug ("Found IIO buffer compass at %s", g_udev_device_get_sysfs_path (device)); - return TRUE; -} - static SensorDevice * iio_buffer_compass_open (GUdevDevice *device) { SensorDevice *sensor_device; DrvData *drv_data; - g_autofree char *trigger_name = NULL; BufferDrvData *buffer_data; - /* Get the trigger name, and build the channels from that */ - trigger_name = get_trigger_name (device); - if (!trigger_name) { - g_debug ("Could not find trigger for %s", g_udev_device_get_sysfs_path (device)); - return NULL; - } - - buffer_data = buffer_drv_data_new (device, trigger_name); + buffer_data = buffer_drv_data_new (device); if (!buffer_data) return NULL; @@ -146,7 +125,7 @@ drv_data = (DrvData *) sensor_device->priv; drv_data->dev = g_object_ref (device); drv_data->buffer_data = buffer_data; - drv_data->dev_path = g_udev_device_get_device_file (device); + drv_data->dev_path = get_device_file (device); return sensor_device; } @@ -188,6 +167,37 @@ g_free (sensor_device); } +static gboolean +iio_buffer_compass_discover (GUdevDevice *device) +{ + SensorDevice *sensor_device; + DrvData *drv_data; + gboolean buffer_usable = FALSE; + + if (!drv_check_udev_sensor_type (device, "iio-buffer-compass", NULL)) + return FALSE; + + sensor_device = iio_buffer_compass_open (device); + if (!sensor_device) + return FALSE; + + /* Attempt to read from the sensor */ + drv_data = (DrvData *) sensor_device->priv; + enable_ring_buffer (drv_data->buffer_data); + + buffer_usable = is_buffer_usable(drv_data->dev_path); + + /* Close the sensor until it has been claimed */ + disable_ring_buffer (drv_data->buffer_data); + iio_buffer_compass_close (sensor_device); + + if (!buffer_usable) + return FALSE; + + g_debug ("Found IIO buffer compass at %s", g_udev_device_get_sysfs_path (device)); + return TRUE; +} + SensorDriver iio_buffer_compass = { .driver_name = "IIO Buffer Compass", .type = DRIVER_TYPE_COMPASS, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/src/drv-iio-buffer-light.c new/iio-sensor-proxy-3.8/src/drv-iio-buffer-light.c --- old/iio-sensor-proxy-3.7/src/drv-iio-buffer-light.c 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/src/drv-iio-buffer-light.c 2025-08-09 13:57:19.000000000 +0200 @@ -20,7 +20,7 @@ guint timeout_id; GUdevDevice *dev; - const char *dev_path; + char *dev_path; int device_id; BufferDrvData *buffer_data; } DrvData; @@ -108,19 +108,6 @@ return G_SOURCE_CONTINUE; } -static gboolean -iio_buffer_light_discover (GUdevDevice *device) -{ - if (!drv_check_udev_sensor_type (device, "iio-buffer-als", NULL)) - return FALSE; - - if (!is_buffer_usable (device)) - return FALSE; - - g_debug ("Found IIO buffer ALS at %s", g_udev_device_get_sysfs_path (device)); - return TRUE; -} - static void iio_buffer_light_set_polling (SensorDevice *sensor_device, gboolean state) @@ -152,16 +139,9 @@ { SensorDevice *sensor_device; DrvData *drv_data; - g_autofree char *trigger_name = NULL; BufferDrvData *buffer_data; - /* Get the trigger name, and build the channels from that */ - trigger_name = get_trigger_name (device); - if (!trigger_name) { - g_debug ("Could not find trigger for %s", g_udev_device_get_sysfs_path (device)); - return NULL; - } - buffer_data = buffer_drv_data_new (device, trigger_name); + buffer_data = buffer_drv_data_new (device); if (!buffer_data) return NULL; @@ -176,7 +156,7 @@ drv_data = (DrvData *) sensor_device->priv; drv_data->dev = g_object_ref (device); drv_data->buffer_data = buffer_data; - drv_data->dev_path = g_udev_device_get_device_file (device); + drv_data->dev_path = get_device_file (device); return sensor_device; } @@ -192,6 +172,37 @@ g_free (sensor_device); } +static gboolean +iio_buffer_light_discover (GUdevDevice *device) +{ + SensorDevice *sensor_device; + DrvData *drv_data; + gboolean buffer_usable = FALSE; + + if (!drv_check_udev_sensor_type (device, "iio-buffer-als", NULL)) + return FALSE; + + sensor_device = iio_buffer_light_open (device); + if (!sensor_device) + return FALSE; + + /* Attempt to read from the sensor */ + drv_data = (DrvData *) sensor_device->priv; + enable_ring_buffer (drv_data->buffer_data); + + buffer_usable = is_buffer_usable(drv_data->dev_path); + + /* Close the sensor until it has been claimed */ + disable_ring_buffer (drv_data->buffer_data); + iio_buffer_light_close (sensor_device); + + if (!buffer_usable) + return FALSE; + + g_debug ("Found IIO buffer ALS at %s", g_udev_device_get_sysfs_path (device)); + return TRUE; +} + SensorDriver iio_buffer_light = { .driver_name = "IIO Buffer Light sensor", .type = DRIVER_TYPE_LIGHT, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/src/iio-buffer-utils.c new/iio-sensor-proxy-3.8/src/iio-buffer-utils.c --- old/iio-sensor-proxy-3.7/src/iio-buffer-utils.c 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/src/iio-buffer-utils.c 2025-08-09 13:57:19.000000000 +0200 @@ -20,6 +20,7 @@ #include <string.h> #include <errno.h> #include <stdio.h> +#include <glib/gstdio.h> #define IIO_MIN_SAMPLING_FREQUENCY 10 /* Hz */ @@ -880,13 +881,14 @@ } BufferDrvData * -buffer_drv_data_new (GUdevDevice *device, - const char *trigger_name) +buffer_drv_data_new (GUdevDevice *device) { BufferDrvData *buffer_data; + g_autofree char *trigger_name = NULL; buffer_data = g_new0 (BufferDrvData, 1); buffer_data->dev_dir_name = g_udev_device_get_sysfs_path (device); + trigger_name = get_trigger_name (device); if (trigger_name) buffer_data->trigger_name = g_strdup (trigger_name); buffer_data->device = g_object_ref (device); @@ -904,21 +906,28 @@ } gboolean -is_buffer_usable (GUdevDevice *device) +is_buffer_usable (char *path) { - g_autofree char *trigger_name = NULL; - BufferDrvData *buffer_data; - - trigger_name = get_trigger_name (device); + gboolean buffer_usable = FALSE; + g_autofd int fp = -1; + GPollFD fds; + + /* Attempt to read from the sensor buffer */ + fp = g_open (path, O_RDONLY | O_NONBLOCK); + if (fp == -1) { + g_warning ("Failed to open '%s': %s", path, g_strerror (errno)); + } else { + fds.fd = fp; + fds.events = G_IO_IN | G_IO_ERR; + g_poll (&fds, 1, 500); - /* Temporarily enable the buffer to ensure the kernel driver is buffer-capable */ - buffer_data = buffer_drv_data_new (device, trigger_name); - if (!buffer_data) - return FALSE; + if (fds.revents & G_IO_IN) + buffer_usable = TRUE; + else + g_warning ("Buffer '%s' did not have data within 0.5s", path); + } - /* Destroy buffer information until actually needed (in the .open call) */ - g_clear_pointer (&buffer_data, buffer_drv_data_free); - return TRUE; + return buffer_usable; } IIOSensorData * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/src/iio-buffer-utils.h new/iio-sensor-proxy-3.8/src/iio-buffer-utils.h --- old/iio-sensor-proxy-3.7/src/iio-buffer-utils.h 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/src/iio-buffer-utils.h 2025-08-09 13:57:19.000000000 +0200 @@ -43,8 +43,7 @@ char *get_trigger_name (GUdevDevice *device); void buffer_drv_data_free (BufferDrvData *buffer_data); -BufferDrvData *buffer_drv_data_new (GUdevDevice *device, - const char *trigger_name); +BufferDrvData *buffer_drv_data_new (GUdevDevice *device); void disable_ring_buffer (BufferDrvData *data); gboolean enable_ring_buffer (BufferDrvData *data); -gboolean is_buffer_usable (GUdevDevice *device); +gboolean is_buffer_usable (char *path); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.7/tests/integration-test.py new/iio-sensor-proxy-3.8/tests/integration-test.py --- old/iio-sensor-proxy-3.7/tests/integration-test.py 2025-03-12 19:36:01.000000000 +0100 +++ new/iio-sensor-proxy-3.8/tests/integration-test.py 2025-08-09 13:57:19.000000000 +0200 @@ -555,6 +555,9 @@ ['name', 'accel_3d-dev0'], [] ) + data = self.read_file(top_srcdir + '/tests/iio-buffer-accel-data/orientation-normal.bin') + with open(mock_dev_data,'wb') as mock_file: + mock_file.write(data) self.start_daemon() self.assertEqual(self.get_dbus_property('HasAmbientLight'), False) self.assertEqual(self.get_dbus_property('HasAccelerometer'), True) @@ -566,7 +569,6 @@ self.assertEqual(self.read_sysfs_attr(accel, 'scan_elements/in_accel_y_en'), b'1') self.assertEqual(self.read_sysfs_attr(accel, 'scan_elements/in_accel_z_en'), b'1') - data = self.read_file(top_srcdir + '/tests/iio-buffer-accel-data/orientation-normal.bin') with open(mock_dev_data,'wb') as mock_file: mock_file.write(data) self.proxy.ClaimAccelerometer() @@ -595,6 +597,8 @@ def test_driver_buffer_without_trigger(self): '''buffer driver picking without trigger''' + 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', @@ -615,6 +619,9 @@ 'IIO_SENSOR_PROXY_TYPE', 'iio-buffer-accel'] ) + data = self.read_file(top_srcdir + '/tests/iio-buffer-accel-data/orientation-normal.bin') + with open(mock_dev_data,'wb') as mock_file: + mock_file.write(data) self.start_daemon() self.assertEqual(self.get_dbus_property('HasAmbientLight'), False) @@ -623,6 +630,42 @@ 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, @@ -696,10 +739,12 @@ ) env = os.environ.copy() env['LC_NUMERIC'] = 'fr_FR.UTF-8' + data = self.read_file(top_srcdir + '/tests/iio-buffer-accel-data/orientation-normal.bin') + with open(mock_dev_data,'wb') as mock_file: + mock_file.write(data) self.start_daemon(env=env) self.assertEqual(self.get_dbus_property('HasAccelerometer'), True) - data = self.read_file(top_srcdir + '/tests/iio-buffer-accel-data/orientation-normal.bin') with open(mock_dev_data,'wb') as mock_file: mock_file.write(data) self.proxy.ClaimAccelerometer() @@ -742,6 +787,9 @@ ) env = os.environ.copy() env['LC_NUMERIC'] = 'fr_FR.UTF-8' + data = self.read_file(top_srcdir + '/tests/iio-buffer-accel-data/orientation-normal.bin') + with open(mock_dev_data,'wb') as mock_file: + mock_file.write(data) self.start_daemon(env=env) self.assertEqual(self.get_dbus_property('HasAccelerometer'), True)