Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package callaudiod for openSUSE:Factory checked in at 2022-09-29 18:14:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/callaudiod (Old) and /work/SRC/openSUSE:Factory/.callaudiod.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "callaudiod" Thu Sep 29 18:14:38 2022 rev:2 rq:1006952 version:0.1.4 Changes: -------- --- /work/SRC/openSUSE:Factory/callaudiod/callaudiod.changes 2022-09-02 21:56:52.308344235 +0200 +++ /work/SRC/openSUSE:Factory/.callaudiod.new.2275/callaudiod.changes 2022-09-29 18:15:23.131493430 +0200 @@ -1,0 +2,28 @@ +Thu Sep 01 20:33:20 UTC 2022 - [email protected] + +- Update to version 0.1.4: + * cad-pulse: + - Fix possible NULL dereference + - Improve monitor source identification + - Make sure speaker state is reset between calls + - Set D-Bus object properties on state change + - Simplify mic mute operation + - Track current state + * cli: Add --status flag to query current status + * dbus: Add properties to track the current state + * gitlab-ci: add `debian` folder for CI use + * libcallaudio: + - Add API to query current state + - Don't leak async data + - Improve documentation and fix more leaks + - Register enums as GType + - Use G_DBUS_PROXY_FLAGS_NONE instead of "0" + * manager: + - Add DBus properties + - Remove unused code + - Track state of operations + * src: make backend responsible for tracking current state +- Package doc sub-package as noarch. +- Add apiver define, ease future changes. + +------------------------------------------------------------------- Old: ---- callaudiod-0.1.3.obscpio New: ---- callaudiod-0.1.4.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ callaudiod.spec ++++++ --- /var/tmp/diff_new_pack.lqzS7A/_old 2022-09-29 18:15:23.667494482 +0200 +++ /var/tmp/diff_new_pack.lqzS7A/_new 2022-09-29 18:15:23.671494489 +0200 @@ -16,10 +16,11 @@ # %define soname libcallaudio0_1-0 +%define apiver 0.1 Name: callaudiod -Version: 0.1.3 +Version: 0.1.4 Release: 0 Summary: Daemon for audio calls License: GPL-3.0-or-later AND MIT @@ -65,6 +66,7 @@ %package doc Summary: API documentation for %{name} +BuildArch: noarch %description doc A daemon for audio calls. @@ -95,12 +97,12 @@ %{_datadir}/dbus-1/services/org.mobian_project.CallAudio.service %files -n %{soname} -%{_libdir}/libcallaudio-0.1.so.0 +%{_libdir}/libcallaudio-%{apiver}.so.* %files devel -%{_includedir}/libcallaudio-0.1/ -%{_libdir}/libcallaudio-0.1.so -%{_libdir}/pkgconfig/libcallaudio-0.1.pc +%{_includedir}/libcallaudio-%{apiver}/ +%{_libdir}/libcallaudio-%{apiver}.so +%{_libdir}/pkgconfig/libcallaudio-%{apiver}.pc %files doc %{_datadir}/gtk-doc/html/libcallaudio/ ++++++ _service ++++++ --- /var/tmp/diff_new_pack.lqzS7A/_old 2022-09-29 18:15:23.699494544 +0200 +++ /var/tmp/diff_new_pack.lqzS7A/_new 2022-09-29 18:15:23.699494544 +0200 @@ -1,7 +1,7 @@ <services> <service mode="disabled" name="obs_scm"> <param name="url">https://gitlab.com/mobian1/callaudiod.git</param> - <param name="revision">refs/tags/0.1.3</param> + <param name="revision">refs/tags/0.1.4</param> <param name="versionformat">@PARENT_TAG@</param> <param name="scm">git</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.lqzS7A/_old 2022-09-29 18:15:23.719494583 +0200 +++ /var/tmp/diff_new_pack.lqzS7A/_new 2022-09-29 18:15:23.719494583 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://gitlab.com/mobian1/callaudiod.git</param> - <param name="changesrevision">4cb8bd9d228d13ea67e79f4c37c674f412b32d20</param></service></servicedata> + <param name="changesrevision">a7ca6ce9d4c947f19c3f99ff2cab986c64434e57</param></service></servicedata> (No newline at EOF) ++++++ callaudiod-0.1.3.obscpio -> callaudiod-0.1.4.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/callaudiod.install new/callaudiod-0.1.4/.gitlab-ci/debian/callaudiod.install --- old/callaudiod-0.1.3/.gitlab-ci/debian/callaudiod.install 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/callaudiod.install 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,2 @@ +/usr/bin/callaudiod +/usr/share/dbus-1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/changelog new/callaudiod-0.1.4/.gitlab-ci/debian/changelog --- old/callaudiod-0.1.3/.gitlab-ci/debian/changelog 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/changelog 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,5 @@ +callaudiod (@@VERSION@@~ci-1) unstable; urgency=medium + + * CI build + + -- CI <[email protected]> Thu, 01 Jan 1970 00:00:00 +0000 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/control new/callaudiod-0.1.4/.gitlab-ci/debian/control --- old/callaudiod-0.1.3/.gitlab-ci/debian/control 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/control 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,100 @@ +Source: callaudiod +Section: comm +Priority: optional +Maintainer: DebianOnMobile Maintainers <[email protected]> +Uploaders: Arnaud Ferraris <[email protected]> +Build-Depends: + dbus, + debhelper-compat (= 13), + gtk-doc-tools, + jq, + libasound2-dev, + libglib2.0-dev, + libpulse-dev, + meson, + pkg-config, +Standards-Version: 4.5.0 +Homepage: https://gitlab.com/mobian1/callaudiod +Vcs-Git: https://salsa.debian.org/DebianOnMobile-team/callaudiod.git +Vcs-Browser: https://salsa.debian.org/DebianOnMobile-team/callaudiod +Rules-Requires-Root: no + +Package: callaudiod +Architecture: any +Depends: + ${misc:Depends}, + ${shlibs:Depends}, + pulseaudio, +Description: Call audio routing daemon + callaudiod is a daemon for dealing with audio routing during phone calls. + It provides a D-Bus interface allowing other programs to: + * switch audio profiles + * output audio to the speaker or back to its original port + * mute the microphone + . + This package contains the daemon and D-Bus interface definition. + +Package: libcallaudio-0-1 +Architecture: any +Multi-Arch: same +Section: libs +Depends: + ${misc:Depends}, + ${shlibs:Depends}, +Description: Library for audio routing during voice calls + callaudiod is a daemon for dealing with audio routing during phone calls. + It provides a D-Bus interface allowing other programs to: + * switch audio profiles + * output audio to the speaker or back to its original port + * mute the microphone + . + This package contains the shared libraries for applications interfacing with + callaudiod. + +Package: libcallaudio-dev +Architecture: any +Multi-Arch: same +Section: libdevel +Depends: + libcallaudio-0-1 (= ${binary:Version}), + libglib2.0-dev, + ${misc:Depends}, + ${shlibs:Depends}, +Description: Development files for libcallaudio + callaudiod is a daemon for dealing with audio routing during phone calls. + It provides a D-Bus interface allowing other programs to: + * switch audio profiles + * output audio to the speaker or back to its original port + * mute the microphone + . + This package contains development files to use when writing applications that + interface with callaudiod. + +Package: libcallaudio-doc +Architecture: all +Section: doc +Depends: + ${misc:Depends} +Suggests: devhelp +Description: Documentation for libcallaudio's API + callaudiod is a daemon for dealing with audio routing during phone calls. + It provides a D-Bus interface allowing other programs to: + * switch audio profiles + * output audio to the speaker or back to its original port + * mute the microphone + . + This package contains the API documentation. + +Package: libcallaudio-tools +Architecture: any +Depends: + ${misc:Depends}, + ${shlibs:Depends}, +Description: Helper tools for libcallaudio + callaudiod is a daemon for dealing with audio routing during phone calls. + It provides a D-Bus interface allowing other programs to: + * switch audio profiles + * output audio to the speaker or back to its original port + * mute the microphone + . + This package contains helper tools for libcallaudio. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/copyright new/callaudiod-0.1.4/.gitlab-ci/debian/copyright --- old/callaudiod-0.1.3/.gitlab-ci/debian/copyright 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/copyright 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,52 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: callaudiod +Upstream-Contact: Arnaud Ferraris <[email protected]> +Source: https://gitlab.com/mobian1/callaudiod + +Files: * +Copyright: + 2018, 2019, 2020 Purism SPC + 2020 Arnaud Ferraris <[email protected]> +License: LGPL-2.1-or-later + +Files: + src/* + tools/* +Copyright: + 2018, 2019, 2020 Purism SPC + 2020 Arnaud Ferraris <[email protected]> +License: GPL-3.0-or-later + +License: LGPL-2.1-or-later + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + . + This package 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 Lesser General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/> + . + On Debian systems, the complete text of the GNU Lesser General + Public License version 3 can be found in "/usr/share/common-licenses/LGPL-2.1". + +License: GPL-3.0-or-later + This package 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 3 of the License, or + (at your option) any later version. + . + This package 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. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/> + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-0-1.install new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-0-1.install --- old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-0-1.install 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-0-1.install 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1 @@ +/usr/lib/*/libcallaudio-*.so.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-0-1.symbols new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-0-1.symbols --- old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-0-1.symbols 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-0-1.symbols 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,36 @@ +libcallaudio-0.1.so.0 libcallaudio-0-1 #MINVER# +* Build-Depends-Package: libcallaudio-dev + LIBCALLAUDIO_0_0_0@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_enable_speaker@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_enable_speaker_finish@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_enable_speaker_sync@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_mute_mic@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_mute_mic_finish@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_mute_mic_sync@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_select_mode@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_select_mode_finish@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_call_select_mode_sync@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_complete_enable_speaker@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_complete_mute_mic@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_complete_select_mode@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_get_type@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_interface_info@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_override_properties@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_proxy_get_type@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_proxy_new@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_proxy_new_finish@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_proxy_new_for_bus@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_proxy_new_for_bus_finish@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_proxy_new_for_bus_sync@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_proxy_new_sync@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_skeleton_get_type@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_dbus_call_audio_skeleton_new@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_deinit@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_enable_speaker@LIBCALLAUDIO_0_0_0 0.0.4 + call_audio_enable_speaker_async@LIBCALLAUDIO_0_0_0 0.0.5 + call_audio_is_inited@LIBCALLAUDIO_0_0_0 0.0.4 + call_audio_init@LIBCALLAUDIO_0_0_0 0.0.1 + call_audio_mute_mic@LIBCALLAUDIO_0_0_0 0.0.4 + call_audio_mute_mic_async@LIBCALLAUDIO_0_0_0 0.0.5 + call_audio_select_mode@LIBCALLAUDIO_0_0_0 0.0.4 + call_audio_select_mode_async@LIBCALLAUDIO_0_0_0 0.0.5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-dev.install new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-dev.install --- old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-dev.install 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-dev.install 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,3 @@ +/usr/include +/usr/lib/*/libcallaudio-*.so +/usr/lib/*/pkgconfig/libcallaudio-*.pc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-doc.install new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-doc.install --- old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-doc.install 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-doc.install 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1 @@ +/usr/share/gtk-doc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-tools.install new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-tools.install --- old/callaudiod-0.1.3/.gitlab-ci/debian/libcallaudio-tools.install 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/libcallaudio-tools.install 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1 @@ +/usr/bin/callaudiocli diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/rules new/callaudiod-0.1.4/.gitlab-ci/debian/rules --- old/callaudiod-0.1.3/.gitlab-ci/debian/rules 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/rules 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,9 @@ +#!/usr/bin/make -f + +export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +%: + dh $@ --builddirectory=_build + +override_dh_auto_configure: + dh_auto_configure -- -Dgtk_doc=true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/source/format new/callaudiod-0.1.4/.gitlab-ci/debian/source/format --- old/callaudiod-0.1.3/.gitlab-ci/debian/source/format 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/source/format 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1 @@ +3.0 (quilt) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/.gitlab-ci/debian/watch new/callaudiod-0.1.4/.gitlab-ci/debian/watch --- old/callaudiod-0.1.3/.gitlab-ci/debian/watch 1970-01-01 01:00:00.000000000 +0100 +++ new/callaudiod-0.1.4/.gitlab-ci/debian/watch 2022-03-25 09:58:37.000000000 +0100 @@ -0,0 +1,3 @@ +version=4 +opts=filenamemangle=s/.*\/archive\/(\d\S+)\/callaudiod.*\.tar\.gz/callaudiod-$1\.tar\.gz/g \ + https://gitlab.com/mobian1/callaudiod/tags?sort=updated_desc .*/archive/(\d\S+)/.*\.tar\.gz.* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/data/org.mobian_project.CallAudio.xml new/callaudiod-0.1.4/data/org.mobian_project.CallAudio.xml --- old/callaudiod-0.1.3/data/org.mobian_project.CallAudio.xml 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/data/org.mobian_project.CallAudio.xml 2022-03-25 09:58:37.000000000 +0100 @@ -26,14 +26,34 @@ <arg direction="out" name="success" type="b"/> </method> + <!-- + AudioMode: + 0 = default audio mode, 1 = voice call mode, 255 = unknown + --> + <property name="AudioMode" type="u" access="read"/> + <method name="EnableSpeaker"> <arg direction="in" name="enable" type="b"/> <arg direction="out" name="success" type="b"/> </method> + <!-- + SpeakerState: + 0 = off, 1 = on, 255 = unknown + all other values should be considered the same as 'unknown' + --> + <property name="SpeakerState" type="u" access="read"/> + <method name="MuteMic"> <arg direction="in" name="mute" type="b"/> <arg direction="out" name="success" type="b"/> </method> + + <!-- + MicState: + 0 = off, 1 = on, 255 = unknown + all other values should be considered the same as 'unknown' + --> + <property name="MicState" type="u" access="read"/> </interface> </node> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/libcallaudio/libcallaudio.c new/callaudiod-0.1.4/libcallaudio/libcallaudio.c --- old/callaudiod-0.1.3/libcallaudio/libcallaudio.c 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/libcallaudio/libcallaudio.c 2022-03-25 09:58:37.000000000 +0100 @@ -57,7 +57,9 @@ return TRUE; _proxy = call_audio_dbus_call_audio_proxy_new_for_bus_sync( - CALLAUDIO_DBUS_TYPE,0, CALLAUDIO_DBUS_NAME, + CALLAUDIO_DBUS_TYPE, + G_DBUS_PROXY_FLAGS_NONE, + CALLAUDIO_DBUS_NAME, CALLAUDIO_DBUS_PATH, NULL, error); if (!_proxy) return FALSE; @@ -113,13 +115,15 @@ if (async_data && async_data->cb) async_data->cb(ret && success, error, async_data->user_data); + g_free(async_data); } /** * call_audio_select_mode_async: * @mode: Audio mode to select * @cb: Function to be called when operation completes - * @data: User data to be passed to the callback function after completion + * @data: User data to be passed to the callback function after completion. This + * data is owned by the caller, which is responsible for freeing it. * * Select the audio mode to use. */ @@ -169,6 +173,19 @@ return (ret && success); } +/** + * call_audio_get_audio_mode: + * + * Returns: The selected #CallAudioMode. + */ +CallAudioMode call_audio_get_audio_mode(void) +{ + if (!_initted) + return CALL_AUDIO_MODE_UNKNOWN; + + return call_audio_dbus_call_audio_get_audio_mode(_proxy); +} + static void enable_speaker_done(GObject *object, GAsyncResult *result, gpointer data) { CallAudioDbusCallAudio *proxy = CALL_AUDIO_DBUS_CALL_AUDIO(object); @@ -189,13 +206,15 @@ if (async_data && async_data->cb) async_data->cb(ret && success, error, async_data->user_data); + g_free(async_data); } /** * call_audio_enable_speaker_async: * @enable: Desired speaker state * @cb: Function to be called when operation completes - * @data: User data to be passed to the callback function after completion + * @data: User data to be passed to the callback function after completion. This + * data is owned by the caller, which is responsible for freeing it. * * Enable or disable speaker output. */ @@ -218,6 +237,20 @@ } /** + * call_audio_get_speaker_state: + * + * Returns: %CALL_AUDIO_SPEAKER_ON if the speaker is on, %CALL_AUDIO_SPEAKER_OFF if it is off or + * %CALL_AUDIO_SPEAKER_UNKNOWN if the state is not known. + */ +CallAudioSpeakerState call_audio_get_speaker_state(void) +{ + if (!_initted) + return CALL_AUDIO_SPEAKER_UNKNOWN; + + return call_audio_dbus_call_audio_get_speaker_state(_proxy); +} + +/** * call_audio_enable_speaker: * @enable: Desired speaker state * @error: The error that will be set if the audio mode could not be selected. @@ -264,13 +297,15 @@ if (async_data && async_data->cb) async_data->cb(ret && success, error, async_data->user_data); + g_free(async_data); } /** * call_audio_mute_mic_async: * @mute: %TRUE to mute the microphone, or %FALSE to unmute it * @cb: Function to be called when operation completes - * @data: User data to be passed to the callback function after completion + * @data: User data to be passed to the callback function after completion. This + * data is owned by the caller, which is responsible for freeing it. * * Mute or unmute microphone. */ @@ -319,3 +354,17 @@ return (ret && success); } + +/** + * call_audio_get_mic_state: + * + * Returns: %CALL_AUDIO_MIC_ON if the microphone is on, %CALL_AUDIO_MIC_OFF if it is off or + * %CALL_AUDIO_MIC_UNKNOWN if the state is not known. + */ +CallAudioMicState call_audio_get_mic_state(void) +{ + if (!_initted) + return CALL_AUDIO_MIC_UNKNOWN; + + return call_audio_dbus_call_audio_get_mic_state(_proxy); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/libcallaudio/libcallaudio.h new/callaudiod-0.1.4/libcallaudio/libcallaudio.h --- old/callaudiod-0.1.3/libcallaudio/libcallaudio.h 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/libcallaudio/libcallaudio.h 2022-03-25 09:58:37.000000000 +0100 @@ -7,6 +7,8 @@ #pragma once +#include "libcallaudio-enums.h" + #include <glib.h> G_BEGIN_DECLS @@ -15,15 +17,43 @@ * CallAudioMode: * @CALL_AUDIO_MODE_DEFAULT: Default mode (used for music, alarms, ringtones...) * @CALL_AUDIO_MODE_CALL: Voice call mode + * @CALL_AUDIO_MODE_UNKNOWN: Mode unknown * * Enum values to indicate the mode to be selected. */ -typedef enum _CallAudioMode { +typedef enum { CALL_AUDIO_MODE_DEFAULT = 0, CALL_AUDIO_MODE_CALL, + CALL_AUDIO_MODE_UNKNOWN = 255 } CallAudioMode; +/** + * CallAudioSpeakerState: + * @CALL_AUDIO_SPEAKER_OFF: Speaker disabled + * @CALL_AUDIO_SPEAKER_ON: Speaker enabled + * @CALL_AUDIO_SPEAKER_UNKNOWN: Unknown + */ + +typedef enum { + CALL_AUDIO_SPEAKER_OFF = 0, + CALL_AUDIO_SPEAKER_ON = 1, + CALL_AUDIO_SPEAKER_UNKNOWN = 255 +} CallAudioSpeakerState; + +/** + * CallAudioMicState: + * @CALL_AUDIO_MIC_OFF: Mic disabled + * @CALL_AUDIO_MIC_ON: Mic enabled + * @CALL_AUDIO_MIC_UNKNOWN: Unknown + */ + +typedef enum { + CALL_AUDIO_MIC_OFF = 0, + CALL_AUDIO_MIC_ON, + CALL_AUDIO_MIC_UNKNOWN = 255 +} CallAudioMicState; + typedef void (*CallAudioCallback)(gboolean success, GError *error, gpointer data); @@ -36,15 +66,18 @@ gboolean call_audio_select_mode_async(CallAudioMode mode, CallAudioCallback cb, gpointer data); +CallAudioMode call_audio_get_audio_mode(void); gboolean call_audio_enable_speaker (gboolean enable, GError **error); gboolean call_audio_enable_speaker_async(gboolean enable, CallAudioCallback cb, gpointer data); +CallAudioSpeakerState call_audio_get_speaker_state(void); gboolean call_audio_mute_mic (gboolean mute, GError **error); gboolean call_audio_mute_mic_async(gboolean mute, CallAudioCallback cb, gpointer data); +CallAudioMicState call_audio_get_mic_state(void); G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/libcallaudio/meson.build new/callaudiod-0.1.4/libcallaudio/meson.build --- old/callaudiod-0.1.3/libcallaudio/meson.build 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/libcallaudio/meson.build 2022-03-25 09:58:37.000000000 +0100 @@ -15,8 +15,16 @@ 'libcallaudio.h', ] +libcallaudio_enum_sources = gnome.mkenums_simple( + 'libcallaudio-enums', + sources : libcallaudio_headers, + install_header : true, + install_dir : libcallaudio_header_dir, +) + libcallaudio_sources = [ generated_dbus_sources, + libcallaudio_enum_sources, libcallaudio_headers, 'libcallaudio.c', ] @@ -47,7 +55,7 @@ ) libcallaudio_dep = declare_dependency( - sources : [generated_dbus_sources], + sources : [generated_dbus_sources, libcallaudio_enum_sources[1]], link_with : libcallaudio, dependencies: libcallaudio_deps, include_directories : libcallaudio_inc, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/meson.build new/callaudiod-0.1.4/meson.build --- old/callaudiod-0.1.3/meson.build 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/meson.build 2022-03-25 09:58:37.000000000 +0100 @@ -8,7 +8,7 @@ project ( 'callaudiod', 'c', - version : '0.1.3', + version : '0.1.4', license : 'LGPLv3+', meson_version : '>= 0.50.0', default_options : diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/src/cad-manager.c new/callaudiod-0.1.4/src/cad-manager.c --- old/callaudiod-0.1.3/src/cad-manager.c 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/src/cad-manager.c 2022-03-25 09:58:37.000000000 +0100 @@ -10,6 +10,8 @@ #include "cad-manager.h" #include "cad-pulse.h" +#include "libcallaudio.h" + #include <gio/gio.h> #include <glib-unix.h> @@ -49,8 +51,6 @@ G_DBUS_ERROR_FAILED, "Operation failed"); } - - free(op); } static gboolean cad_manager_handle_select_mode(CallAudioDbusCallAudio *object, @@ -76,15 +76,23 @@ } op->type = CAD_OPERATION_SELECT_MODE; + op->value = GUINT_TO_POINTER(mode); op->object = object; op->invocation = invocation; op->callback = complete_command_cb; g_debug("Select mode: %u", mode); cad_pulse_select_mode(mode, op); + return TRUE; } +static CallAudioMode +cad_manager_get_audio_mode(CallAudioDbusCallAudio *object) +{ + return cad_pulse_get_audio_mode(); +} + static gboolean cad_manager_handle_enable_speaker(CallAudioDbusCallAudio *object, GDBusMethodInvocation *invocation, gboolean enable) @@ -101,15 +109,23 @@ } op->type = CAD_OPERATION_ENABLE_SPEAKER; + op->value = GUINT_TO_POINTER(enable ? CALL_AUDIO_SPEAKER_ON : CALL_AUDIO_SPEAKER_OFF); op->object = object; op->invocation = invocation; op->callback = complete_command_cb; g_debug("Enable speaker: %d", enable); cad_pulse_enable_speaker(enable, op); + return TRUE; } +static CallAudioSpeakerState +cad_manager_get_speaker_state(CallAudioDbusCallAudio *object) +{ + return cad_pulse_get_speaker_state(); +} + static gboolean cad_manager_handle_mute_mic(CallAudioDbusCallAudio *object, GDBusMethodInvocation *invocation, gboolean mute) @@ -126,38 +142,35 @@ } op->type = CAD_OPERATION_MUTE_MIC; + op->value = GUINT_TO_POINTER(mute ? CALL_AUDIO_MIC_OFF : CALL_AUDIO_MIC_ON); op->object = object; op->invocation = invocation; op->callback = complete_command_cb; g_debug("Mute mic: %d", mute); cad_pulse_mute_mic(mute, op); - return TRUE; -} -static void cad_manager_constructed(GObject *object) -{ - G_OBJECT_CLASS(cad_manager_parent_class)->constructed(object); + return TRUE; } -static void cad_manager_dispose(GObject *object) +static CallAudioMicState +cad_manager_get_mic_state(CallAudioDbusCallAudio *object) { - G_OBJECT_CLASS(cad_manager_parent_class)->dispose(object); + return cad_pulse_get_mic_state(); } static void cad_manager_call_audio_iface_init(CallAudioDbusCallAudioIface *iface) { iface->handle_select_mode = cad_manager_handle_select_mode; + iface->get_audio_mode = cad_manager_get_audio_mode; iface->handle_enable_speaker = cad_manager_handle_enable_speaker; + iface->get_speaker_state = cad_manager_get_speaker_state; iface->handle_mute_mic = cad_manager_handle_mute_mic; + iface->get_mic_state = cad_manager_get_mic_state; } static void cad_manager_class_init(CadManagerClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS(klass); - - object_class->constructed = cad_manager_constructed; - object_class->dispose = cad_manager_dispose; } static void cad_manager_init(CadManager *self) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/src/cad-operation.h new/callaudiod-0.1.4/src/cad-operation.h --- old/callaudiod-0.1.3/src/cad-operation.h 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/src/cad-operation.h 2022-03-25 09:58:37.000000000 +0100 @@ -29,6 +29,7 @@ struct _CadOperation { CadOperationType type; + gpointer value; CallAudioDbusCallAudio *object; GDBusMethodInvocation *invocation; CadOperationCallback callback; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/src/cad-pulse.c new/callaudiod-0.1.4/src/cad-pulse.c --- old/callaudiod-0.1.3/src/cad-pulse.c 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/src/cad-pulse.c 2022-03-25 09:58:37.000000000 +0100 @@ -7,10 +7,9 @@ #define G_LOG_DOMAIN "callaudiod-pulse" +#include "cad-manager.h" #include "cad-pulse.h" -#include "libcallaudio.h" - #include <glib/gi18n.h> #include <glib-object.h> #include <pulse/pulseaudio.h> @@ -33,6 +32,8 @@ { GObject parent_instance; + GObject *manager; + pa_glib_mainloop *loop; pa_context *ctx; @@ -42,11 +43,14 @@ gboolean has_voice_profile; gchar *speaker_port; + gchar *earpiece_port; GHashTable *sink_ports; GHashTable *source_ports; - CallAudioMode current_mode; + CallAudioMode audio_mode; + CallAudioSpeakerState speaker_state; + CallAudioMicState mic_state; }; G_DEFINE_TYPE(CadPulse, cad_pulse, G_TYPE_OBJECT); @@ -149,7 +153,7 @@ prop = pa_proplist_gets(info->proplist, PA_PROP_DEVICE_CLASS); if (prop && strcmp(prop, SINK_CLASS) != 0) return; - if (g_str_has_suffix(info->name, "monitor")) + if (info->monitor_of_sink != PA_INVALID_INDEX) return; if (info->card != self->card_id || self->source_id != -1) return; @@ -194,6 +198,14 @@ if (op) pa_operation_unref(op); + if (self->mic_state == CALL_AUDIO_MIC_UNKNOWN) { + if (info->mute) + self->mic_state = CALL_AUDIO_MIC_OFF; + else + self->mic_state = CALL_AUDIO_MIC_ON; + g_object_set(self->manager, "mic-state", self->mic_state, NULL); + } + target_port = get_available_source_port(info, NULL); if (target_port) { op = pa_context_set_source_port_by_index(ctx, self->source_id, @@ -313,6 +325,15 @@ } else { self->speaker_port = g_strdup(port->name); } + } else if (strstr(port->name, SND_USE_CASE_DEV_EARPIECE) != NULL) { + if (self->earpiece_port) { + if (strcmp(port->name, self->earpiece_port) != 0) { + g_free(self->earpiece_port); + self->earpiece_port = g_strdup(port->name); + } + } else { + self->earpiece_port = g_strdup(port->name); + } } if (port->available != PA_PORT_AVAILABLE_UNKNOWN) { @@ -323,6 +344,7 @@ } g_debug("SINK: speaker_port='%s'", self->speaker_port); + g_debug("SINK: earpiece_port='%s'", self->earpiece_port); } static void init_sink_info(pa_context *ctx, const pa_sink_info *info, int eol, void *data) @@ -347,6 +369,54 @@ if (op) pa_operation_unref(op); + if (self->speaker_state == CALL_AUDIO_SPEAKER_UNKNOWN) { + self->speaker_state = CALL_AUDIO_SPEAKER_OFF; + + switch (self->audio_mode) { + case CALL_AUDIO_MODE_CALL: + if (g_strcmp0(info->active_port->name, self->speaker_port) == 0) { + self->speaker_state = CALL_AUDIO_SPEAKER_ON; + g_object_set(self->manager, "speaker-state", self->speaker_state, NULL); + /* + * callaudiod likely restarted after being killed during a call + * during which the speaker was enabled. End processing here so + * we keep the current routing and don't unexpectedly mess with + * the call setup. + */ + return; + } + break; + case CALL_AUDIO_MODE_UNKNOWN: + /* + * Let's see if we can guess the current mode: + * - if current port is earpiece, we're likely in call mode + * - otherwise we're either in default mode, or call mode with + * speaker enabled. Let's settle for the former as both situations + * are technically equivalent. + * + * Note: this code path is only used when the card doesn't have a + * voice profile, otherwise things are easier to deal with. + */ + if (g_strcmp0(info->active_port->name, self->earpiece_port) == 0) { + self->audio_mode = CALL_AUDIO_MODE_CALL; + g_object_set(self->manager, "audio-mode", self->audio_mode, NULL); + /* + * Don't touch routing as we're likely in the middle of a call, + * see above. + */ + return; + } else { + self->audio_mode = CALL_AUDIO_MODE_DEFAULT; + g_object_set(self->manager, "audio-mode", self->audio_mode, NULL); + } + break; + default: + break; + } + + g_object_set(self->manager, "speaker-state", self->speaker_state, NULL); + } + target_port = get_available_sink_port(info, NULL); if (target_port) { g_debug(" Using sink port '%s'", target_port); @@ -425,10 +495,18 @@ if (strstr(profile->name, SND_USE_CASE_VERB_VOICECALL) != NULL) { self->has_voice_profile = TRUE; + if (info->active_profile2 == profile) + self->audio_mode = CALL_AUDIO_MODE_CALL; + else + self->audio_mode = CALL_AUDIO_MODE_DEFAULT; break; } } + // We were able determine the current mode, set the corresponding D-Bus property + if (self->audio_mode != CALL_AUDIO_MODE_UNKNOWN) + g_object_set(self->manager, "audio-mode", self->audio_mode, NULL); + g_debug("CARD: %s voice profile", self->has_voice_profile ? "has" : "doesn't have"); /* Found a suitable card, let's prepare the sink/source */ @@ -632,6 +710,8 @@ if (self->speaker_port) g_free(self->speaker_port); + if (self->earpiece_port) + g_free(self->earpiece_port); pulseaudio_cleanup(self); @@ -653,6 +733,10 @@ static void cad_pulse_init(CadPulse *self) { + self->manager = G_OBJECT(cad_manager_get_default()); + self->audio_mode = CALL_AUDIO_MODE_UNKNOWN; + self->speaker_state = CALL_AUDIO_SPEAKER_UNKNOWN; + self->mic_state = CALL_AUDIO_MIC_UNKNOWN; } CadPulse *cad_pulse_get_default(void) @@ -684,12 +768,42 @@ if (operation) { if (operation->op) { operation->op->success = (gboolean)!!success; - operation->op->callback(operation->op); + if (operation->op->callback) + operation->op->callback(operation->op); - if (operation->op->type == CAD_OPERATION_SELECT_MODE && - operation->op->success) { - operation->pulse->current_mode = operation->value; + if (operation->op->success) { + guint new_value = GPOINTER_TO_UINT(operation->value); + + switch (operation->op->type) { + case CAD_OPERATION_SELECT_MODE: + if (operation->pulse->audio_mode != new_value) { + operation->pulse->audio_mode = new_value; + g_object_set(operation->pulse->manager, "audio-mode", new_value, NULL); + } + break; + case CAD_OPERATION_ENABLE_SPEAKER: + if (operation->pulse->speaker_state != new_value) { + operation->pulse->speaker_state = new_value; + g_object_set(operation->pulse->manager, "speaker-state", new_value, NULL); + } + break; + case CAD_OPERATION_MUTE_MIC: + /* + * "Mute mic" operation's value is TRUE (1) for muting the mic, + * so ensure mic_state carries the right value. + */ + new_value = new_value ? CALL_AUDIO_MIC_OFF : CALL_AUDIO_MIC_ON; + if (operation->pulse->mic_state != new_value) { + operation->pulse->mic_state = new_value; + g_object_set(operation->pulse->manager, "mic-state", new_value, NULL); + } + break; + default: + break; + } } + + free(operation->op); } free(operation); @@ -752,7 +866,7 @@ if (info->card != operation->pulse->card_id || info->index != operation->pulse->sink_id) return; - if (operation->op->type == CAD_OPERATION_SELECT_MODE) { + if (operation->op && operation->op->type == CAD_OPERATION_SELECT_MODE) { /* * When switching to voice call mode, we want to switch to any port * other than the speaker; this makes sure we use the headphones if they @@ -794,40 +908,6 @@ } } -static void set_mic_mute(pa_context *ctx, const pa_source_info *info, int eol, void *data) -{ - CadPulseOperation *operation = data; - pa_operation *op = NULL; - - if (eol != 0) - return; - - if (!info) { - g_critical("PA returned no source info (eol=%d)", eol); - return; - } - - if (info->card != operation->pulse->card_id || info->index != operation->pulse->source_id) - return; - - if (info->mute && !operation->value) { - g_debug("mic is muted, unmuting..."); - op = pa_context_set_source_mute_by_index(ctx, operation->pulse->source_id, 0, - operation_complete_cb, operation); - } else if (!info->mute && operation->value) { - g_debug("mic is active, muting..."); - op = pa_context_set_source_mute_by_index(ctx, operation->pulse->source_id, 1, - operation_complete_cb, operation); - } - - if (op) { - pa_operation_unref(op); - } else { - g_debug("%s: nothing to be done", __func__); - operation_complete_cb(ctx, 1, operation); - } -} - /** * cad_pulse_select_mode: * @mode: @@ -861,16 +941,21 @@ /* * When ending a call, we want to make sure the mic doesn't stay muted */ - CadPulseOperation *unmute_op = g_new0(CadPulseOperation, 1); + CadOperation *unmute_op = g_new0(CadOperation, 1); + unmute_op->type = CAD_OPERATION_MUTE_MIC; - unmute_op->pulse = operation->pulse; - unmute_op->value = FALSE; + cad_pulse_mute_mic(FALSE, unmute_op); - op = pa_context_get_source_info_by_index(unmute_op->pulse->ctx, - unmute_op->pulse->source_id, - set_mic_mute, unmute_op); - if (op) - pa_operation_unref(op); + /* + * If the card has a dedicated voice profile, disable speaker so it + * doesn't get automatically enabled for next call. + */ + if (operation->pulse->has_voice_profile) { + CadOperation *disable_speaker_op = g_new0(CadOperation, 1); + disable_speaker_op->type = CAD_OPERATION_ENABLE_SPEAKER; + + cad_pulse_enable_speaker(FALSE, disable_speaker_op); + } } if (operation->pulse->has_voice_profile) { @@ -982,11 +1067,24 @@ operation->op = cad_op; operation->value = (guint)mute; - op = pa_context_get_source_info_by_index(operation->pulse->ctx, - operation->pulse->source_id, - set_mic_mute, operation); - if (op) + if (operation->pulse->mic_state == CALL_AUDIO_MIC_OFF && !operation->value) { + g_debug("mic is muted, unmuting..."); + op = pa_context_set_source_mute_by_index(operation->pulse->ctx, + operation->pulse->source_id, 0, + operation_complete_cb, operation); + } else if (operation->pulse->mic_state == CALL_AUDIO_MIC_ON && operation->value) { + g_debug("mic is active, muting..."); + op = pa_context_set_source_mute_by_index(operation->pulse->ctx, + operation->pulse->source_id, 1, + operation_complete_cb, operation); + } + + if (op) { pa_operation_unref(op); + } else { + g_debug("%s: nothing to be done", __func__); + operation_complete_cb(operation->pulse->ctx, 1, operation); + } return; @@ -998,3 +1096,21 @@ if (operation) free(operation); } + +CallAudioMode cad_pulse_get_audio_mode(void) +{ + CadPulse *self = cad_pulse_get_default(); + return self->audio_mode; +} + +CallAudioSpeakerState cad_pulse_get_speaker_state(void) +{ + CadPulse *self = cad_pulse_get_default(); + return self->speaker_state; +} + +CallAudioMicState cad_pulse_get_mic_state(void) +{ + CadPulse *self = cad_pulse_get_default(); + return self->mic_state; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/src/cad-pulse.h new/callaudiod-0.1.4/src/cad-pulse.h --- old/callaudiod-0.1.3/src/cad-pulse.h 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/src/cad-pulse.h 2022-03-25 09:58:37.000000000 +0100 @@ -7,6 +7,7 @@ #pragma once +#include "libcallaudio.h" #include "cad-operation.h" #include <glib-object.h> @@ -22,4 +23,8 @@ void cad_pulse_enable_speaker(gboolean enable, CadOperation *op); void cad_pulse_mute_mic(gboolean mute, CadOperation *op); +CallAudioMode cad_pulse_get_audio_mode(void); +CallAudioSpeakerState cad_pulse_get_speaker_state(void); +CallAudioMicState cad_pulse_get_mic_state(void); + G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/src/meson.build new/callaudiod-0.1.4/src/meson.build --- old/callaudiod-0.1.3/src/meson.build 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/src/meson.build 2022-03-25 09:58:37.000000000 +0100 @@ -17,6 +17,7 @@ 'callaudiod', config_h, generated_dbus_sources, + libcallaudio_enum_sources, [ 'callaudiod.c', 'callaudiod.h', 'cad-manager.c', 'cad-manager.h', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/callaudiod-0.1.3/tools/callaudiocli.c new/callaudiod-0.1.4/tools/callaudiocli.c --- old/callaudiod-0.1.3/tools/callaudiocli.c 2022-01-06 20:22:37.000000000 +0100 +++ new/callaudiod-0.1.4/tools/callaudiocli.c 2022-03-25 09:58:37.000000000 +0100 @@ -6,6 +6,7 @@ */ #include "libcallaudio.h" +#include "libcallaudio-enums.h" #include <glib.h> @@ -16,11 +17,13 @@ int mode = -1; int speaker = -1; int mic = -1; + gboolean status = FALSE; const GOptionEntry options [] = { {"select-mode", 'm', 0, G_OPTION_ARG_INT, &mode, "Select mode", NULL}, {"enable-speaker", 's', 0, G_OPTION_ARG_INT, &speaker, "Enable speaker", NULL}, {"mute-mic", 'u', 0, G_OPTION_ARG_INT, &mic, "Mute microphone", NULL}, + {"status", 'S', 0, G_OPTION_ARG_NONE, &status, "Print status", NULL}, { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } }; @@ -36,6 +39,10 @@ return 1; } + /* If there's nothing else to be done, print the current status */ + if (mode == -1 && speaker == -1 && mic == -1) + status = TRUE; + if (mode == CALL_AUDIO_MODE_DEFAULT || mode == CALL_AUDIO_MODE_CALL) call_audio_select_mode(mode, NULL); @@ -45,6 +52,20 @@ if (mic == 0 || mic == 1) call_audio_mute_mic((gboolean)mic, NULL); + if (status) { + CallAudioMode audio_mode = call_audio_get_audio_mode(); + CallAudioSpeakerState speaker_state = call_audio_get_speaker_state(); + CallAudioMicState mic_state = call_audio_get_mic_state(); + const char *string_audio = g_enum_to_string(CALL_TYPE_AUDIO_MODE, audio_mode); + const char *string_speaker = g_enum_to_string(CALL_TYPE_AUDIO_SPEAKER_STATE, speaker_state); + const char *string_mic = g_enum_to_string(CALL_TYPE_AUDIO_MIC_STATE, mic_state); + + g_print("Selected mode: %s\n" + "Speaker enabled: %s\n" + "Mic muted: %s\n", + string_audio, string_speaker, string_mic); + } + call_audio_deinit (); return 0; } ++++++ callaudiod.obsinfo ++++++ --- /var/tmp/diff_new_pack.lqzS7A/_old 2022-09-29 18:15:23.823494787 +0200 +++ /var/tmp/diff_new_pack.lqzS7A/_new 2022-09-29 18:15:23.827494795 +0200 @@ -1,5 +1,5 @@ name: callaudiod -version: 0.1.3 -mtime: 1641496957 -commit: 4cb8bd9d228d13ea67e79f4c37c674f412b32d20 +version: 0.1.4 +mtime: 1648198717 +commit: a7ca6ce9d4c947f19c3f99ff2cab986c64434e57
