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 2023-08-01 14:15:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/iio-sensor-proxy (Old) and /work/SRC/openSUSE:Factory/.iio-sensor-proxy.new.32662 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "iio-sensor-proxy" Tue Aug 1 14:15:26 2023 rev:23 rq:1101424 version:3.5 Changes: -------- --- /work/SRC/openSUSE:Factory/iio-sensor-proxy/iio-sensor-proxy.changes 2022-10-16 16:09:16.290762545 +0200 +++ /work/SRC/openSUSE:Factory/.iio-sensor-proxy.new.32662/iio-sensor-proxy.changes 2023-08-01 14:15:27.735463807 +0200 @@ -1,0 +2,10 @@ +Wed Jul 26 23:25:11 UTC 2023 - Atri Bhattacharya <badshah...@gmail.com> + +- Update to version 3.5: + * Fix sensor hotplugging + * Fix some sensors not working when they were assigned a + sampling frequency they did not support. + * Add more tests. + * Correct the location of the D-Bus policy file. + +------------------------------------------------------------------- Old: ---- iio-sensor-proxy-3.4.tar.bz2 New: ---- iio-sensor-proxy-3.5.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ iio-sensor-proxy.spec ++++++ --- /var/tmp/diff_new_pack.fFr14C/_old 2023-08-01 14:15:28.439467942 +0200 +++ /var/tmp/diff_new_pack.fFr14C/_new 2023-08-01 14:15:28.447467990 +0200 @@ -1,7 +1,7 @@ # # spec file for package iio-sensor-proxy # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: iio-sensor-proxy -Version: 3.4 +Version: 3.5 Release: 0 Summary: Proxy for IIO and input subsystems License: GPL-3.0-only @@ -59,24 +59,22 @@ %install %meson_install -mkdir -p %{buildroot}%{_datadir}/dbus-1/system.d -mv %{buildroot}%{_sysconfdir}/dbus-1/system.d/net.hadess.SensorProxy.conf %{buildroot}%{_datadir}/dbus-1/system.d %pre -%service_add_pre %{name}.service +%service_add_pre iio-sensor-proxy.service %preun -%service_del_preun %{name}.service +%service_del_preun iio-sensor-proxy.service %post %udev_hwdb_update %udev_rules_update -%service_add_post %{name}.service +%service_add_post iio-sensor-proxy.service %postun %udev_hwdb_update %udev_rules_update -%service_del_postun %{name}.service +%service_del_postun iio-sensor-proxy.service %files %{_bindir}/monitor-sensor ++++++ iio-sensor-proxy-3.4.tar.bz2 -> iio-sensor-proxy-3.5.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.4/.gitlab-ci.yml new/iio-sensor-proxy-3.5/.gitlab-ci.yml --- old/iio-sensor-proxy-3.4/.gitlab-ci.yml 2022-07-15 15:08:38.000000000 +0200 +++ new/iio-sensor-proxy-3.5/.gitlab-ci.yml 2023-07-25 10:28:22.000000000 +0200 @@ -18,6 +18,11 @@ python3-psutil umockdev +workflow: + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + - if: $CI_PIPELINE_SOURCE == 'push' + build_stable: before_script: # Undo delangification present in the Fedora Docker images diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.4/NEWS new/iio-sensor-proxy-3.5/NEWS --- old/iio-sensor-proxy-3.4/NEWS 2022-07-15 15:08:38.000000000 +0200 +++ new/iio-sensor-proxy-3.5/NEWS 2023-07-25 10:28:22.000000000 +0200 @@ -1,3 +1,10 @@ +3.5 +--- + +This update fixes sensor hotplugging, and fixes some sensors not working when +they were assigned a sampling frequency they did not support. This update also +adds more tests, and corrects the location of the D-Bus policy file. + 3.4 --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.4/meson.build new/iio-sensor-proxy-3.5/meson.build --- old/iio-sensor-proxy-3.4/meson.build 2022-07-15 15:08:38.000000000 +0200 +++ new/iio-sensor-proxy-3.5/meson.build 2023-07-25 10:28:22.000000000 +0200 @@ -1,5 +1,5 @@ project('iio-sensor-proxy', [ 'c' ], - version: '3.4', + version: '3.5', license: 'GPLv3+', default_options: [ 'buildtype=debugoptimized', @@ -26,7 +26,7 @@ prefix = get_option('prefix') libexecdir = prefix / get_option('libexecdir') bindir = get_option('bindir') -dbusconfdir = get_option('sysconfdir') / 'dbus-1' / 'system.d' +dbusconfdir = get_option('datadir') / 'dbus-1' / 'system.d' mathlib_dep = cc.find_library('m', required: false) udev_rules_dir = get_option('udevrulesdir') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.4/src/iio-buffer-utils.c new/iio-sensor-proxy-3.5/src/iio-buffer-utils.c --- old/iio-sensor-proxy-3.4/src/iio-buffer-utils.c 2022-07-15 15:08:38.000000000 +0200 +++ new/iio-sensor-proxy-3.5/src/iio-buffer-utils.c 2023-07-25 10:28:22.000000000 +0200 @@ -13,7 +13,10 @@ #include "iio-buffer-utils.h" #include "utils.h" +#include <ctype.h> #include <fcntl.h> +#include <float.h> +#include <math.h> #include <string.h> #include <errno.h> #include <stdio.h> @@ -548,6 +551,61 @@ } /** + * iio_round_sampling_frequency: Round sampling_frequency to a supported value + * @dev: the IIO device to round the sampling frequency for + * @name: name of the *sampling_frequency attribute for which to round value + * @desired: desired value + * + * Check "<name>_available" and if that attribute exists round the desired + * value to a supported value, rounding up where possible. + */ +static double +iio_round_sampling_frequency (GUdevDevice *dev, const char *name, double desired) +{ + g_autofree char *available_attr = NULL; + const char *available_str; + char *endptr; + double closest_higher = DBL_MAX; + double closest_lower = 0.0; + double available; + + available_attr = g_strconcat (name, "_available", NULL); + available_str = g_udev_device_get_sysfs_attr (dev, available_attr); + + if (!available_str) + return desired; + + while (*available_str) { + available = g_ascii_strtod (available_str, &endptr); + if (available_str == endptr || (*endptr && !isspace (*endptr))) + break; + + available_str = endptr; + + /* 0 disables sampling, skip */ + if (available == 0.0) + continue; + + if (available >= desired) { + if (available < closest_higher) + closest_higher = available; + } else { + if (available > closest_lower) + closest_lower = available; + } + } + + /* Prefer higher values */ + if (closest_higher != DBL_MAX) + return closest_higher; + + if (closest_lower != 0.0) + return closest_lower; + + return desired; +} + +/** * iio_fixup_sampling_frequency: Fixup devices *sampling_frequency attributes * @dev: the IIO device to fix the sampling frequencies for * @@ -566,6 +624,7 @@ const char *device_dir; const char *name; g_autoptr(GError) error = NULL; + char sample_freq_str[G_ASCII_DTOSTR_BUF_SIZE]; double sample_freq; device_dir = g_udev_device_get_sysfs_path (dev); @@ -583,8 +642,16 @@ if (sample_freq >= IIO_MIN_SAMPLING_FREQUENCY) continue; /* Continue with pre-set sample freq. */ - /* Sample freq too low, set it to 10Hz */ - if (write_sysfs_int (name, device_dir, IIO_MIN_SAMPLING_FREQUENCY) < 0) + /* Sample freq too low, set it to a supported freq close to 10Hz */ + sample_freq = iio_round_sampling_frequency (dev, name, IIO_MIN_SAMPLING_FREQUENCY); + + /* + * Some sample_freq IIO sysfs attr only accept integers, most will + * accept floats but not all. g_ascii_dtostr() uses the shortest + * possible representation, omitting the "." for whole numbers. + */ + g_ascii_dtostr (sample_freq_str, G_ASCII_DTOSTR_BUF_SIZE, sample_freq); + if (write_sysfs_string (name, device_dir, sample_freq_str) < 0) g_warning ("Could not fix sample-freq for %s/%s", device_dir, name); } g_dir_close (dir); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.4/src/iio-sensor-proxy.c new/iio-sensor-proxy-3.5/src/iio-sensor-proxy.c --- old/iio-sensor-proxy-3.4/src/iio-sensor-proxy.c 2022-07-15 15:08:38.000000000 +0200 +++ new/iio-sensor-proxy-3.5/src/iio-sensor-proxy.c 2023-07-25 10:28:22.000000000 +0200 @@ -950,16 +950,21 @@ SensorDriver *driver = (SensorDriver *) drivers[i]; if (!driver_type_exists (data, driver->type) && driver_discover (driver, device)) { + SensorDevice *sensor_device = NULL; + g_debug ("Found hotplugged device %s of type %s at %s", g_udev_device_get_sysfs_path (device), driver_type_to_str (driver->type), driver->driver_name); - if (driver_open (driver, device, - driver_type_to_callback_func (driver->type), data)) { + sensor_device = driver_open (driver, device, + driver_type_to_callback_func (driver->type), data); + + if (sensor_device) { GHashTable *ht; UDEV_DEVICE_FOR_TYPE(driver->type) = g_object_ref (device); + DEVICE_FOR_TYPE(driver->type) = sensor_device; DRIVER_FOR_TYPE(driver->type) = (SensorDriver *) driver; send_driver_changed_dbus_event (data, driver->type); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.4/src/meson.build new/iio-sensor-proxy-3.5/src/meson.build --- old/iio-sensor-proxy-3.4/src/meson.build 2022-07-15 15:08:38.000000000 +0200 +++ new/iio-sensor-proxy-3.5/src/meson.build 2023-07-25 10:28:22.000000000 +0200 @@ -50,18 +50,22 @@ install: false ) -executable('test-mount-matrix', +test_mount_matrix = executable('test-mount-matrix', [ 'test-mount-matrix.c', 'accel-mount-matrix.c' ], dependencies: deps, install: false ) -executable('test-orientation', +test('test-mount-matrix', test_mount_matrix) + +test_orientation = executable('test-orientation', [ 'test-orientation.c', 'orientation.c', 'accel-mount-matrix.c', 'accel-scale.c' ], dependencies: deps, install: false ) +test('test-orientation', test_orientation) + if get_option('gtk-tests') executable('test-orientation-gtk', [ 'test-orientation-gtk.c', 'orientation.c', 'accel-scale.c' ], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iio-sensor-proxy-3.4/tests/integration-test.py new/iio-sensor-proxy-3.5/tests/integration-test.py --- old/iio-sensor-proxy-3.4/tests/integration-test.py 2022-07-15 15:08:38.000000000 +0200 +++ new/iio-sensor-proxy-3.5/tests/integration-test.py 2023-07-25 10:28:22.000000000 +0200 @@ -643,6 +643,46 @@ self.stop_daemon() + def test_sampling_freq_available_integer(self): + 'Check whether the sampling frequency gets corrected to >= 10Hz, integer numbers sorted low to high' + + accel = self.testbed.add_device('iio', 'iio-accel', None, + ['in_accel_x_raw', '0', + 'in_accel_y_raw', '-256000000', + 'in_accel_z_raw', '0', + 'in_accel_scale', '0.000001', + 'sampling_frequency', '5.2', + # Real world example taken from LSM303DA accelerometer + 'sampling_frequency_available', '3 6 12 25 50 100 200 400 800 1600', + 'name', 'IIO Test Accelerometer'], + ['NAME', '"IIO Accelerometer"', + 'IIO_SENSOR_PROXY_TYPE', 'iio-poll-accel'] + ) + self.start_daemon() + self.assertEqual(self.get_dbus_property('HasAccelerometer'), True) + self.assertEqual(self.read_sysfs_attr(accel, 'sampling_frequency'), b'12') + self.stop_daemon() + + def test_sampling_freq_available_double(self): + 'Check whether the sampling frequency gets corrected to >= 10Hz, double numbers sorted high to low' + + accel = self.testbed.add_device('iio', 'iio-accel', None, + ['in_accel_x_raw', '0', + 'in_accel_y_raw', '-256000000', + 'in_accel_z_raw', '0', + 'in_accel_scale', '0.000001', + 'sampling_frequency', '5.2', + # Real world example taken from drivers/iio/accel/mma8452.c + 'sampling_frequency_available', '800.000000 400.000000 200.000000 100.000000 50.000000 12.500000 6.250000 1.560000', + 'name', 'IIO Test Accelerometer'], + ['NAME', '"IIO Accelerometer"', + 'IIO_SENSOR_PROXY_TYPE', 'iio-poll-accel'] + ) + self.start_daemon() + self.assertEqual(self.get_dbus_property('HasAccelerometer'), True) + self.assertEqual(self.read_sysfs_attr(accel, 'sampling_frequency'), b'12.5') + self.stop_daemon() + def test_iio_scale_decimal_separator2(self): '''scale decimal separator polling''' accel = self.testbed.add_device('iio', 'iio-accel', None,