Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libcec for openSUSE:Factory checked 
in at 2026-06-02 16:01:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libcec (Old)
 and      /work/SRC/openSUSE:Factory/.libcec.new.1937 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libcec"

Tue Jun  2 16:01:54 2026 rev:15 rq:1356416 version:7.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/libcec/libcec.changes    2025-03-13 
22:04:38.426618240 +0100
+++ /work/SRC/openSUSE:Factory/.libcec.new.1937/libcec.changes  2026-06-02 
16:02:26.902274610 +0200
@@ -1,0 +2,16 @@
+Mon Jun  1 16:38:46 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to version 7.1.1 (includes 7.1.0):
+  * Add Teufel vendor ID
+  * Add system audio mode request & status support
+  * RPi: check that passive mode can be set during adapter
+    detection
+  * Make CMake obey INSTALL_BINDIR / INSTALL_LIBDIR
+  * Various build fixes and NULL-handling corrections
+- Drop libcec-cmake_install_lib_dir.patch: the lib-install-dir
+  fix is now included upstream
+- Do not ship the static library (libcec.a)
+- Spec cleanup: convert ncurses-devel to pkgconfig(ncurses),
+  drop obsolete Group tags
+
+-------------------------------------------------------------------

Old:
----
  libcec-7.0.0.tar.gz
  libcec-cmake_install_lib_dir.patch

New:
----
  libcec-7.1.1.tar.gz

----------(Old B)----------
  Old:  * Various build fixes and NULL-handling corrections
- Drop libcec-cmake_install_lib_dir.patch: the lib-install-dir
  fix is now included upstream
----------(Old E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libcec.spec ++++++
--- /var/tmp/diff_new_pack.BZvUV4/_old  2026-06-02 16:02:27.866314587 +0200
+++ /var/tmp/diff_new_pack.BZvUV4/_new  2026-06-02 16:02:27.878315085 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package libcec
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 # Copyright (c) 2012 Guillaume GARDET <[email protected]>
 #
 # All modifications and additions to the file contributed by third parties
@@ -21,19 +21,18 @@
 %define libname        %{name}%{sover}
 %bcond_with enable_rpi_build
 Name:           libcec
-Version:        7.0.0
+Version:        7.1.1
 Release:        0
 Summary:        Library to control devices with TV remote control via HDMI
 License:        GPL-2.0-or-later
 URL:            https://github.com/Pulse-Eight/libcec
 Source:         
https://github.com/Pulse-Eight/libcec/archive/libcec-%{version}.tar.gz
-Patch1:         libcec-cmake_install_lib_dir.patch
 BuildRequires:  cmake
 BuildRequires:  gcc-c++
-BuildRequires:  ncurses-devel
 BuildRequires:  pkgconfig
 BuildRequires:  swig
 BuildRequires:  pkgconfig(libudev)
+BuildRequires:  pkgconfig(ncurses)
 BuildRequires:  pkgconfig(p8-platform)
 BuildRequires:  pkgconfig(python3)
 BuildRequires:  pkgconfig(udev)
@@ -56,7 +55,6 @@
 
 %package -n cec-client
 Summary:        Control your device with your TV remote control via HDMI
-Group:          Hardware/TV
 Requires:       %{libname} = %{version}
 
 %description -n cec-client
@@ -73,7 +71,6 @@
 
 %package -n python3-%{name}
 Summary:        Python bindings for %{name}
-Group:          Hardware/TV
 
 %description -n python3-%{name}
 In combination with the right hardware, libcec allows to control
@@ -89,7 +86,6 @@
 
 %package -n %{libname}
 Summary:        USB CEC adapter communication library
-Group:          System/Libraries
 
 %description -n %{libname}
 In combination with the right hardware, libcec allows to control
@@ -98,7 +94,6 @@
 
 %package devel
 Summary:        Development files for the USB CEC adapter communication library
-Group:          Development/Libraries/C and C++
 Requires:       %{libname} = %{version}
 
 %description devel
@@ -120,6 +115,9 @@
 %install
 %cmake_install
 
+# do not ship the static library
+rm -f %{buildroot}%{_libdir}/libcec.a
+
 %ldconfig_scriptlets -n %{libname}
 
 %files -n cec-client

++++++ libcec-7.0.0.tar.gz -> libcec-7.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/.github/workflows/stale.yml 
new/libcec-libcec-7.1.1/.github/workflows/stale.yml
--- old/libcec-libcec-7.0.0/.github/workflows/stale.yml 1970-01-01 
01:00:00.000000000 +0100
+++ new/libcec-libcec-7.1.1/.github/workflows/stale.yml 2025-06-23 
12:57:23.000000000 +0200
@@ -0,0 +1,25 @@
+name: Close stale issues and pull requests
+
+on:
+  schedule:
+  - cron: '30 * * * *'
+
+jobs:
+  stale:
+
+    runs-on: ubuntu-latest
+    permissions:
+      issues: write
+      pull-requests: write
+
+    steps:
+    - uses: actions/stale@v9
+      with:
+        repo-token: ${{ secrets.GITHUB_TOKEN }}
+        days-before-stale: 90
+        days-before-close: 1
+        operations-per-run: 500
+        stale-issue-message: "This issue has now been marked as stale because 
there hasn't been any activity for 90 days. Please test if this issue is still 
relevant when using the [latest version of 
libCEC](https://github.com/Pulse-Eight/libcec/releases/tag/libcec-7.0.0) and 
remove the stale label or add a comment to reset the stale state."
+        stale-issue-label: 'stale'
+        stale-pr-message: "This pull request has now been marked as stale 
because there hasn't been any activity for 90 days. Please check if this pull 
request is still relevant when using the [latest version of 
libCEC](https://github.com/Pulse-Eight/libcec/releases/tag/libcec-7.0.0) and 
remove the stale label or add a comment to reset the stale state."
+        stale-pr-label: 'stale'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/CMakeLists.txt 
new/libcec-libcec-7.1.1/CMakeLists.txt
--- old/libcec-libcec-7.0.0/CMakeLists.txt      2025-02-26 10:40:16.000000000 
+0100
+++ new/libcec-libcec-7.1.1/CMakeLists.txt      2025-06-23 12:57:23.000000000 
+0200
@@ -2,16 +2,16 @@
 project(libcec)
 
 set(LIBCEC_VERSION_MAJOR 7)
-set(LIBCEC_VERSION_MINOR 0)
-set(LIBCEC_VERSION_PATCH 0)
+set(LIBCEC_VERSION_MINOR 1)
+set(LIBCEC_VERSION_PATCH 1)
 
 # cec-client
 add_subdirectory(src/cec-client)
-add_dependencies(cec-client cec)
+add_dependencies(cec-client cec-shared)
 
 # cecc-client
 add_subdirectory(src/cecc-client)
-add_dependencies(cecc-client cec)
+add_dependencies(cecc-client cec-shared)
 
 # pyCecClient
 add_subdirectory(src/pyCecClient)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/debian/changelog.in 
new/libcec-libcec-7.1.1/debian/changelog.in
--- old/libcec-libcec-7.0.0/debian/changelog.in 2025-02-26 10:40:16.000000000 
+0100
+++ new/libcec-libcec-7.1.1/debian/changelog.in 2025-06-23 12:57:23.000000000 
+0200
@@ -1,3 +1,39 @@
+libcec (7.1.1.1~#DIST#) #DIST#; urgency=low
+
+  [ Lars Op den Kamp ]
+  * fixed: missing cmake include after da0497bdcf2b25c6ed916939123f3ae18a607452
+  * fixed: CMakeLists on windows
+  * fixed: generating pdb in release mode. cleanups
+  * fixed: also install cec.dll in .net directories (dep of LibCecSharp)
+
+ -- Lars Op den Kamp <[email protected]>  Mon, 23 Jun 2025 12:54:27 +0200
+
+libcec (7.1.0.1~#DIST#) #DIST#; urgency=medium
+
+  [ Lars Op den Kamp ]
+  * fixed: physical address auto detection. closes #679. closes #687
+  * updated README.linux.md. closes #688
+
+  [ fuzzard ]
+  * [libcec] fix incorrect preprocessor command
+  * [cmake] CheckPlatform correctly check correct x86_64 variable
+  * [cmake] incorrect usage of _M_ARM64
+
+  [ chincheta0815 ]
+  * add Teufel vendor id
+  * RPiCECAdapterDetection: Include check that we can set passive mode
+  * correct typo
+  * add system audio mode request & system audio mode status
+  * update ceccloader.h
+  * make cmake obey INSTALLDIR and LIBDIR vars
+
+  [ Andrij Abyzov ]
+  * Fix another NULL return
+  * Don't use Bash for setting build variables
+  * Fix PRId64 define
+
+ -- Lars Op den Kamp <[email protected]>  Thu, 19 Jun 2025 12:54:31 +0200
+
 libcec (7.0.0.1~#DIST#) #DIST#; urgency=medium
 
   [ Lars Op den Kamp ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/docs/README.linux.md 
new/libcec-libcec-7.1.1/docs/README.linux.md
--- old/libcec-libcec-7.0.0/docs/README.linux.md        2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/docs/README.linux.md        2025-06-23 
12:57:23.000000000 +0200
@@ -20,7 +20,7 @@
 To compile libCEC on a new Debian/Ubuntu installation, follow these 
instructions:
 ```
 apt-get update
-apt-get install cmake libudev-dev libxrandr-dev python-dev swig
+apt-get install cmake libudev-dev libxrandr-dev python3-dev swig
 git clone https://github.com/Pulse-Eight/libcec.git
 mkdir libcec/build
 cd libcec/build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/docs/README.raspberrypi.md 
new/libcec-libcec-7.1.1/docs/README.raspberrypi.md
--- old/libcec-libcec-7.0.0/docs/README.raspberrypi.md  2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/docs/README.raspberrypi.md  2025-06-23 
12:57:23.000000000 +0200
@@ -1,5 +1,10 @@
-### Raspberry Pi
-If you're compiling for a Raspberry Pi, then the path to the required headers 
and libraries can be set manually, in case it's not in a standard system 
directory:
+# Raspberry Pi
+
+## Linux Kernel vs. Raspberry Pi driver
+On a recent Raspberry Pi that's using the `vc4_kms_3d` dtoverlay, you have to 
use the [Linux Kernel driver](#compilation-using-the-linux-kernel-driver) and 
disable the Raspberry Pi driver with `-DHAVE_RPI_API=0` to use CEC.
+
+## Raspberry Pi driver
+If you're compiling the old Raspberry Pi API driver, then the path to the 
required headers and libraries can be set manually, in case it's not in a 
standard system directory:
 ```
 cmake -DRPI_INCLUDE_DIR=/path/to/vc/include \
       -DRPI_LIB_DIR=/path/to/vc/lib \
@@ -18,6 +23,29 @@
       ..
 ```
 
+## Compilation using the Linux Kernel driver
+To compile libCEC on a new Raspbian installation, follow these instructions:
+```
+sudo apt-get update
+sudo apt-get -y install cmake libudev-dev libxrandr-dev python3-dev swig git
+cd
+git clone https://github.com/Pulse-Eight/platform.git
+mkdir platform/build
+cd platform/build
+cmake ..
+make
+sudo make install
+cd
+git clone https://github.com/Pulse-Eight/libcec.git
+mkdir libcec/build
+cd libcec/build
+cmake  -DHAVE_LINUX_API=1 -DHAVE_RPI_API=0 ..
+make -j4
+sudo make install
+sudo ldconfig
+```
+
+## Compilation using the old Raspberry Pi driver
 To compile libCEC on a new Raspbian installation, follow these instructions:
 ```
 sudo apt-get update
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/include/cec.h 
new/libcec-libcec-7.1.1/include/cec.h
--- old/libcec-libcec-7.0.0/include/cec.h       2025-02-26 10:40:16.000000000 
+0100
+++ new/libcec-libcec-7.1.1/include/cec.h       2025-06-23 12:57:23.000000000 
+0200
@@ -484,6 +484,12 @@
      */
     virtual bool AudioEnable(bool enable) = 0;
 
+    /*!
+     * @brief Get the current system audio mode status (if an AVR is connected)
+     * @return The current system audio mode status, or -1 if unknown
+     */
+    virtual uint8_t SystemAudioModeStatus(void) = 0;
+
 #if CEC_LIB_VERSION_MAJOR >= 5
     virtual bool GetStats(struct cec_adapter_stats* stats) = 0;
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/include/cecc.h 
new/libcec-libcec-7.1.1/include/cecc.h
--- old/libcec-libcec-7.0.0/include/cecc.h      2025-02-26 10:40:16.000000000 
+0100
+++ new/libcec-libcec-7.1.1/include/cecc.h      2025-06-23 12:57:23.000000000 
+0200
@@ -55,7 +55,7 @@
 extern DECLSPEC void libcec_clear_configuration(CEC_NAMESPACE 
libcec_configuration* configuration);
 #if CEC_LIB_VERSION_MAJOR >= 5
 extern DECLSPEC int libcec_set_callbacks(libcec_connection_t connection, 
CEC_NAMESPACE ICECCallbacks* callbacks, void* cbParam);
-extern DECLSPEC int libcec_disabled_callbacks(libcec_connection_t connection);
+extern DECLSPEC int libcec_disable_callbacks(libcec_connection_t connection);
 #else
 extern DECLSPEC int libcec_enable_callbacks(libcec_connection_t connection, 
void* cbParam, CEC_NAMESPACE ICECCallbacks* callbacks);
 #endif
@@ -116,6 +116,8 @@
 extern DECLSPEC uint8_t libcec_audio_mute(libcec_connection_t connection);
 extern DECLSPEC uint8_t libcec_audio_unmute(libcec_connection_t connection);
 extern DECLSPEC uint8_t libcec_audio_get_status(libcec_connection_t 
connection);
+extern DECLSPEC int libcec_system_audio_mode(libcec_connection_t connection, 
int bEnable);
+extern DECLSPEC uint8_t 
libcec_system_audio_mode_get_status(libcec_connection_t connection);
 extern DECLSPEC int8_t libcec_detect_adapters(libcec_connection_t connection, 
CEC_NAMESPACE cec_adapter_descriptor* deviceList, uint8_t iBufSize, const char* 
strDevicePath, int bQuickScan);
 #ifdef SWIG
 %cstring_bounded_output(char* buf, 50);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/include/ceccloader.h 
new/libcec-libcec-7.1.1/include/ceccloader.h
--- old/libcec-libcec-7.0.0/include/ceccloader.h        2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/include/ceccloader.h        2025-06-23 
12:57:23.000000000 +0200
@@ -63,11 +63,17 @@
 typedef struct {
   libcec_connection_t                 connection;
   libcecc_lib_instance_t              lib_instance;
+  libcec_connection_t                 (CDECL *initialise)(CEC_NAMESPACE 
libcec_configuration* configuration);
   void                                (CDECL *destroy)(libcec_connection_t 
connection);
   int                                 (CDECL *open)(libcec_connection_t 
connection, const char* strPort, uint32_t iTimeout);
   void                                (CDECL *close)(libcec_connection_t 
connection);
   void                                (CDECL 
*clear_configuration)(CEC_NAMESPACE libcec_configuration* configuration);
+#if CEC_LIB_VERSION_MAJOR >= 5
+  int                                 (CDECL 
*set_callbacks)(libcec_connection_t connection, CEC_NAMESPACE ICECCallbacks* 
callbacks, void* cbParam);
+  int                                 (CDECL 
*disable_callbacks)(libcec_connection_t connection);
+#else
   int                                 (CDECL 
*enable_callbacks)(libcec_connection_t connection, void* cbParam, CEC_NAMESPACE 
ICECCallbacks* callbacks);
+#endif
   int8_t                              (CDECL 
*find_adapters)(libcec_connection_t connection, CEC_NAMESPACE cec_adapter* 
deviceList, uint8_t iBufSize, const char* strDevicePath);
   int                                 (CDECL 
*ping_adapters)(libcec_connection_t connection);
   int                                 (CDECL 
*start_bootloader)(libcec_connection_t connection);
@@ -97,7 +103,9 @@
   int                                 (CDECL 
*set_hdmi_port)(libcec_connection_t connection, CEC_NAMESPACE 
cec_logical_address baseDevice, uint8_t iPort);
   int                                 (CDECL *volume_up)(libcec_connection_t 
connection, int bSendRelease);
   int                                 (CDECL *volume_down)(libcec_connection_t 
connection, int bSendRelease);
+#if CEC_LIB_VERSION_MAJOR >= 5
   int                                 (CDECL *mute_audio)(libcec_connection_t 
connection, int bSendRelease);
+#endif
   int                                 (CDECL 
*send_keypress)(libcec_connection_t connection, CEC_NAMESPACE 
cec_logical_address iDestination, CEC_NAMESPACE cec_user_control_code key, int 
bWait);
   int                                 (CDECL 
*send_key_release)(libcec_connection_t connection, CEC_NAMESPACE 
cec_logical_address iDestination, int bWait);
   int                                 (CDECL 
*get_device_osd_name)(libcec_connection_t connection, CEC_NAMESPACE 
cec_logical_address iAddress, CEC_NAMESPACE cec_osd_name name);
@@ -105,8 +113,12 @@
   int                                 (CDECL 
*set_stream_path_physical)(libcec_connection_t connection, uint16_t 
iPhysicalAddress);
   CEC_NAMESPACE cec_logical_addresses (CDECL 
*get_logical_addresses)(libcec_connection_t connection);
   int                                 (CDECL 
*get_current_configuration)(libcec_connection_t connection, CEC_NAMESPACE 
libcec_configuration* configuration);
+#if CEC_LIB_VERSION_MAJOR >= 5
+  int                                 (CDECL 
*can_save_configuration)(libcec_connection_t connection);
+#else
   int                                 (CDECL 
*can_persist_configuration)(libcec_connection_t connection);
   int                                 (CDECL 
*persist_configuration)(libcec_connection_t connection, CEC_NAMESPACE 
libcec_configuration* configuration);
+#endif
   int                                 (CDECL 
*set_configuration)(libcec_connection_t connection, const CEC_NAMESPACE 
libcec_configuration* configuration);
   void                                (CDECL 
*rescan_devices)(libcec_connection_t connection);
   int                                 (CDECL 
*is_libcec_active_source)(libcec_connection_t connection);
@@ -119,6 +131,8 @@
   uint8_t                             (CDECL *audio_mute)(libcec_connection_t 
connection);
   uint8_t                             (CDECL 
*audio_unmute)(libcec_connection_t connection);
   uint8_t                             (CDECL 
*audio_get_status)(libcec_connection_t connection);
+  int                                 (CDECL 
*system_audio_mode)(libcec_connection_t connection, int bEnable);
+  uint8_t                             (CDECL 
*system_audio_mode_get_status)(libcec_connection_t connection);
   int8_t                              (CDECL 
*detect_adapters)(libcec_connection_t connection, CEC_NAMESPACE 
cec_adapter_descriptor* deviceList, uint8_t iBufSize, const char* 
strDevicePath, int bQuickScan);
   void                                (CDECL *menu_state_to_string)(const 
CEC_NAMESPACE cec_menu_state state, char* buf, size_t bufsize);
   void                                (CDECL *cec_version_to_string)(const 
CEC_NAMESPACE cec_version version, char* buf, size_t bufsize);
@@ -140,11 +154,17 @@
   if (!lib || !iface)
     return -1;
 
+  _libcecc_resolve(lib, iface->initialise,                    
"libcec_initialise",                    libcec_connection_t(CDECL 
*)(CEC_NAMESPACE libcec_configuration*));
   _libcecc_resolve(lib, iface->destroy,                       
"libcec_destroy",                       void(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->open,                          "libcec_open",   
                       int(CDECL *)(libcec_connection_t, const char*, 
uint32_t));
   _libcecc_resolve(lib, iface->close,                         "libcec_close",  
                       void(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->clear_configuration,           
"libcec_clear_configuration",           void(CDECL *)(CEC_NAMESPACE 
libcec_configuration*));
+#if CEC_LIB_VERSION_MAJOR >= 5
+  _libcecc_resolve(lib, iface->set_callbacks,                 
"libcec_set_callbacks",                 int(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE ICECCallbacks*, void*));
+  _libcecc_resolve(lib, iface->disable_callbacks,             
"libcec_disable_callbacks",             int(CDECL *)(libcec_connection_t));
+#else
   _libcecc_resolve(lib, iface->enable_callbacks,              
"libcec_enable_callbacks",              int(CDECL *)(libcec_connection_t, 
void*, CEC_NAMESPACE ICECCallbacks*));
+#endif
   _libcecc_resolve(lib, iface->find_adapters,                 
"libcec_find_adapters",                 int8_t(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE cec_adapter*, uint8_t, const char*));
   _libcecc_resolve(lib, iface->ping_adapters,                 
"libcec_ping_adapters",                 int(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->start_bootloader,              
"libcec_start_bootloader",              int(CDECL *)(libcec_connection_t));
@@ -174,7 +194,9 @@
   _libcecc_resolve(lib, iface->set_hdmi_port,                 
"libcec_set_hdmi_port",                 int(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE cec_logical_address, uint8_t));
   _libcecc_resolve(lib, iface->volume_up,                     
"libcec_volume_up",                     int(CDECL *)(libcec_connection_t, int));
   _libcecc_resolve(lib, iface->volume_down,                   
"libcec_volume_down",                   int(CDECL *)(libcec_connection_t, int));
+#if CEC_LIB_VERSION_MAJOR >= 5
   _libcecc_resolve(lib, iface->mute_audio,                    
"libcec_mute_audio",                    int(CDECL *)(libcec_connection_t, int));
+#endif
   _libcecc_resolve(lib, iface->send_keypress,                 
"libcec_send_keypress",                 int(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE cec_logical_address, CEC_NAMESPACE cec_user_control_code, int));
   _libcecc_resolve(lib, iface->send_key_release,              
"libcec_send_key_release",              int(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE cec_logical_address, int));
   _libcecc_resolve(lib, iface->get_device_osd_name,           
"libcec_get_device_osd_name",           int(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE cec_logical_address, CEC_NAMESPACE cec_osd_name));
@@ -182,8 +204,12 @@
   _libcecc_resolve(lib, iface->set_stream_path_physical,      
"libcec_set_stream_path_physical",      int(CDECL *)(libcec_connection_t, 
uint16_t));
   _libcecc_resolve(lib, iface->get_logical_addresses,         
"libcec_get_logical_addresses",         CEC_NAMESPACE 
cec_logical_addresses(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->get_current_configuration,     
"libcec_get_current_configuration",     int(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE libcec_configuration*));
+#if CEC_LIB_VERSION_MAJOR >= 5
+  _libcecc_resolve(lib, iface->can_save_configuration,        
"libcec_can_save_configuration",        int(CDECL *)(libcec_connection_t));
+#else
   _libcecc_resolve(lib, iface->can_persist_configuration,     
"libcec_can_persist_configuration",     int(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->persist_configuration,         
"libcec_persist_configuration",         int(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE libcec_configuration*));
+#endif
   _libcecc_resolve(lib, iface->set_configuration,             
"libcec_set_configuration",             int(CDECL *)(libcec_connection_t, const 
CEC_NAMESPACE libcec_configuration*));
   _libcecc_resolve(lib, iface->rescan_devices,                
"libcec_rescan_devices",                void(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->is_libcec_active_source,       
"libcec_is_libcec_active_source",       int(CDECL *)(libcec_connection_t));
@@ -196,6 +222,8 @@
   _libcecc_resolve(lib, iface->audio_mute,                    
"libcec_audio_mute",                    uint8_t(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->audio_unmute,                  
"libcec_audio_unmute",                  uint8_t(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->audio_get_status,              
"libcec_audio_get_status",              uint8_t(CDECL *)(libcec_connection_t));
+  _libcecc_resolve(lib, iface->system_audio_mode,             
"libcec_system_audio_mode",             int(CDECL *)(libcec_connection_t, int));
+  _libcecc_resolve(lib, iface->system_audio_mode_get_status,  
"libcec_system_audio_mode_get_status",  uint8_t(CDECL *)(libcec_connection_t));
   _libcecc_resolve(lib, iface->detect_adapters,               
"libcec_detect_adapters",               int8_t(CDECL *)(libcec_connection_t, 
CEC_NAMESPACE cec_adapter_descriptor*, uint8_t, const char*, int));
   _libcecc_resolve(lib, iface->menu_state_to_string,          
"libcec_menu_state_to_string",          void(CDECL *)(const CEC_NAMESPACE 
cec_menu_state, char*, size_t));
   _libcecc_resolve(lib, iface->cec_version_to_string,         
"libcec_cec_version_to_string",         void(CDECL *)(const CEC_NAMESPACE 
cec_version, char*, size_t));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/include/cecloader.h 
new/libcec-libcec-7.1.1/include/cecloader.h
--- old/libcec-libcec-7.0.0/include/cecloader.h 2025-02-26 10:40:16.000000000 
+0100
+++ new/libcec-libcec-7.1.1/include/cecloader.h 2025-06-23 12:57:23.000000000 
+0200
@@ -88,7 +88,7 @@
   if (!g_libCEC)
     g_libCEC = LoadLibrary(strLib ? strLib : "cec.dll");
   if (!g_libCEC)
-    return NULL;
+    return false;
 
   typedef bool (__cdecl*_LibCecBootloader)(void);
   _LibCecBootloader LibCecBootloader;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/include/cectypes.h 
new/libcec-libcec-7.1.1/include/cectypes.h
--- old/libcec-libcec-7.0.0/include/cectypes.h  2025-02-26 10:40:16.000000000 
+0100
+++ new/libcec-libcec-7.1.1/include/cectypes.h  2025-06-23 12:57:23.000000000 
+0200
@@ -92,6 +92,11 @@
 #define CEC_POWER_STATE_REFRESH_TIME 30000
 
 /*!
+ * don't query the audio state for the same device within this timeout in 
milliseconds
+ */
+#define CEC_AUDIO_STATUS_REFRESH_TIME 200
+
+/*!
  * unknown firmware version value
  */
 #define CEC_FW_VERSION_UNKNOWN       0xFFFF
@@ -540,7 +545,8 @@
 typedef enum cec_system_audio_status
 {
   CEC_SYSTEM_AUDIO_STATUS_OFF = 0,
-  CEC_SYSTEM_AUDIO_STATUS_ON  = 1
+  CEC_SYSTEM_AUDIO_STATUS_ON  = 1,
+  CEC_SYSTEM_AUDIO_STATUS_UNKNOWN = 2
 } cec_system_audio_status;
 
 typedef enum cec_timer_cleared_status_data
@@ -869,6 +875,7 @@
   CEC_VENDOR_LG             = 0x00E091,
   CEC_VENDOR_SHARP          = 0x08001F,
   CEC_VENDOR_SONY           = 0x080046,
+  CEC_VENDOR_TEUFEL         = 0x232425,
   CEC_VENDOR_BROADCOM       = 0x18C086,
   CEC_VENDOR_SHARP2         = 0x534850,
   CEC_VENDOR_VIZIO          = 0x6B746D,
@@ -1575,11 +1582,11 @@
   {
     iPhysicalAddress =                CEC_PHYSICAL_ADDRESS_TV;
     baseDevice = (cec_logical_address)CEC_DEFAULT_BASE_DEVICE;
-    iHDMIPort =                       CEC_DEFAULT_HDMI_PORT;
+    iHDMIPort =                       CEC_HDMI_PORTNUMBER_NONE;
     tvVendor =              (uint32_t)CEC_VENDOR_UNKNOWN;
     clientVersion =                   LIBCEC_VERSION_CURRENT;
     serverVersion =                   LIBCEC_VERSION_CURRENT;
-    bAutodetectAddress =              0;
+    bAutodetectAddress =              1;
     bGetSettingsFromROM =             
CEC_DEFAULT_SETTING_GET_SETTINGS_FROM_ROM;
     bActivateSource =                 CEC_DEFAULT_SETTING_ACTIVATE_SOURCE;
     bPowerOffOnStandby =              CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/project/nsis/libcec-pdb.nsh 
new/libcec-libcec-7.1.1/project/nsis/libcec-pdb.nsh
--- old/libcec-libcec-7.0.0/project/nsis/libcec-pdb.nsh 2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/project/nsis/libcec-pdb.nsh 2025-06-23 
12:57:23.000000000 +0200
@@ -3,7 +3,7 @@
        SectionIn 1
 
        SetOutPath "$INSTDIR"
-       File "${BINARY_SOURCE_DIR}\lib\cec.pdb"
+       File "${BINARY_SOURCE_DIR}\cec.pdb"
        File "${BINARY_SOURCE_DIR}\cec-tray.pdb"
 
        SetOutPath "$INSTDIR\netfx"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/project/nsis/sections.nsh 
new/libcec-libcec-7.1.1/project/nsis/sections.nsh
--- old/libcec-libcec-7.0.0/project/nsis/sections.nsh   2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/project/nsis/sections.nsh   2025-06-23 
12:57:23.000000000 +0200
@@ -95,6 +95,7 @@
 
        ; Copy binaries
        SetOutPath "$INSTDIR\net8.0"
+       File "${BINARY_SOURCE_DIR}\cec.dll"
        File "${BINARY_SOURCE_DIR}\net8.0\LibCecSharpCore.deps.json"
        File "${BINARY_SOURCE_DIR}\net8.0\LibCecSharpCore.dll"
        File "${BINARY_SOURCE_DIR}\net8.0\LibCecSharpCore.runtimeconfig.json"
@@ -111,6 +112,7 @@
 
        ; Copy binaries
        SetOutPath "$INSTDIR\netfx"
+       File "${BINARY_SOURCE_DIR}\cec.dll"
        File "${BINARY_SOURCE_DIR}\LibCecSharp.dll"
        File "${BINARY_SOURCE_DIR}\LibCecSharp.xml"
        File /nonfatal "${BINARY_SOURCE_DIR}\CecSharpTester.exe"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/cec-client/CMakeLists.txt 
new/libcec-libcec-7.1.1/src/cec-client/CMakeLists.txt
--- old/libcec-libcec-7.0.0/src/cec-client/CMakeLists.txt       2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/cec-client/CMakeLists.txt       2025-06-23 
12:57:23.000000000 +0200
@@ -12,6 +12,7 @@
 include(CheckLibraryExists)
 include(CheckIncludeFiles)
 include(CheckCXXCompilerFlag)
+include(CheckSymbolExists)
 include(../../cmake/WindowsDebug.cmake)
 
 check_cxx_compiler_flag("-std=c++11" SUPPORTS_CXX11)
@@ -66,7 +67,9 @@
   endif()
 else()
   add_definitions(-DTARGET_WINDOWS -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS 
-D_WINSOCKAPI_)
-  if ((${WIN64}) OR (${_M_ARM64}))
+  check_symbol_exists(_AMD64_ Windows.h WIN64)
+  check_symbol_exists(_ARM64_ Windows.h ARM64)
+  if (WIN64 OR ARM64)
     string(REPLACE "/arch:SSE2" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
   else()
     add_definitions(-D_USE_32BIT_TIME_T)
@@ -85,5 +88,5 @@
           DESTINATION .)
 else()
   install(TARGETS     cec-client
-          DESTINATION bin)
+          DESTINATION ${CMAKE_INSTALL_BINDIR})
 endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/cec-client/cec-client.cpp 
new/libcec-libcec-7.1.1/src/cec-client/cec-client.cpp
--- old/libcec-libcec-7.0.0/src/cec-client/cec-client.cpp       2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/cec-client/cec-client.cpp       2025-06-23 
12:57:23.000000000 +0200
@@ -339,6 +339,10 @@
   "[pa] {physical address}   change the physical address of the CEC adapter." 
<< std::endl <<
   "[as]                      make the CEC adapter the active source." << 
std::endl <<
   "[is]                      mark the CEC adapter as inactive source." << 
std::endl <<
+  "[ea]                      enable system audio mode." << std::endl <<
+  "[da]                      disable system audio mode." << std::endl <<
+  "[gas]                     get audio status." << std::endl <<
+  "[gsam]                    get system audio mode status." << std::endl <<
   "[osd] {addr} {string}     set OSD message on the specified device." << 
std::endl <<
   "[ver] {addr}              get the CEC version of the specified device." << 
std::endl <<
   "[ven] {addr}              get the vendor ID of the specified device." << 
std::endl <<
@@ -481,6 +485,54 @@
   return false;
 }
 
+bool ProcessCommandGAS(ICECAdapter *parser, const std::string &command, 
std::string & UNUSED(arguments))
+{
+  if (command == "gas")
+  {
+    PrintToStdOut("Audio Status: %02x", parser->AudioStatus());
+    return true;
+  }
+
+  return false;
+}
+
+bool ProcessCommandGSAM(ICECAdapter *parser, const std::string &command, 
std::string & UNUSED(arguments))
+{
+  if (command == "gsam")
+  {
+    PrintToStdOut("System Audio Mode Status: %d", 
parser->SystemAudioModeStatus());
+    return true;
+  }
+
+  return false;
+}
+
+bool ProcessCommandEA(ICECAdapter *parser, const std::string &command, 
std::string & UNUSED(arguments))
+{
+  if (command == "ea")
+  {
+    if (parser->AudioEnable(true)) {
+      PrintToStdOut("Request System Audio Mode On sent.");
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool ProcessCommandDA(ICECAdapter *parser, const std::string &command, 
std::string & UNUSED(arguments))
+{
+  if (command == "da")
+  {
+    if (parser->AudioEnable(false)) {
+      PrintToStdOut("Request System Audio Mode Off sent.");
+      return true;
+    }
+  }
+
+  return false;
+}
+
 bool ProcessCommandPOLL(ICECAdapter *parser, const std::string &command, 
std::string &arguments)
 {
   if (command == "poll")
@@ -991,6 +1043,10 @@
       ProcessCommandSCAN(parser, command, input) ||
       ProcessCommandSP(parser, command, input) ||
       ProcessCommandSPL(parser, command, input) ||
+      ProcessCommandEA(parser, command, input) ||
+      ProcessCommandDA(parser, command, input) ||
+      ProcessCommandGAS(parser, command, input) ||
+      ProcessCommandGSAM(parser, command, input) ||
       ProcessCommandSELF(parser, command, input)
 #if CEC_LIB_VERSION_MAJOR >= 5
    || ProcessCommandSTATS(parser, command, input)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/cecc-client/CMakeLists.txt 
new/libcec-libcec-7.1.1/src/cecc-client/CMakeLists.txt
--- old/libcec-libcec-7.0.0/src/cecc-client/CMakeLists.txt      2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/cecc-client/CMakeLists.txt      2025-06-23 
12:57:23.000000000 +0200
@@ -36,7 +36,9 @@
   endif()
 else()
   add_definitions(-DTARGET_WINDOWS -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS 
-D_WINSOCKAPI_)
-  if ((${WIN64}) OR (${_M_ARM64}))
+  check_symbol_exists(_AMD64_ Windows.h WIN64)
+  check_symbol_exists(_ARM64_ Windows.h ARM64)
+  if (WIN64 OR ARM64)
     string(REPLACE "/arch:SSE2" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
   else()
     add_definitions(-D_USE_32BIT_TIME_T)
@@ -55,5 +57,5 @@
           DESTINATION .)
 else()
   install(TARGETS     cecc-client
-          DESTINATION bin)
+          DESTINATION ${CMAKE_INSTALL_BINDIR})
 endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/cecc-client/cecc-client.c 
new/libcec-libcec-7.1.1/src/cecc-client/cecc-client.c
--- old/libcec-libcec-7.0.0/src/cecc-client/cecc-client.c       2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/cecc-client/cecc-client.c       2025-06-23 
12:57:23.000000000 +0200
@@ -55,7 +55,7 @@
 }
 
 #define sleep(x) usleep(1000000 * x)
-#define PRId64 "%lld"
+#define PRId64 "lld"
 #endif
 
 static ICECCallbacks        g_callbacks = {
@@ -110,7 +110,7 @@
       break;
     }
 
-    printf("%s[" PRId64 "]\t%s\n", strLevel, message->time, message->message);
+    printf("%s[%" PRId64 "]\t%s\n", strLevel, message->time, message->message);
   }
 }
 
@@ -320,6 +320,54 @@
   return 0;
 }
 
+static int cec_process_command_ea(const char* data)
+{
+  if (strncmp(data, "ea", 2) == 0)
+  {
+    if (g_iface.system_audio_mode(g_iface.connection, 1)) {
+      printf("Request System Audio Mode On sent.\n");
+      return 1;
+    }
+  }
+
+  return 0;
+}
+
+static int cec_process_command_da(const char* data)
+{
+  if (strncmp(data, "da", 2) == 0)
+  {
+    if (g_iface.system_audio_mode(g_iface.connection, 0)) {
+      printf("Request System Audio Mode Off sent.\n");
+      return 1;
+    }
+  }
+
+  return 0; 
+}
+
+static int cec_process_command_gas(const char *data)
+{
+  if (strncmp(data, "gas", 2) == 0)
+  {
+    printf("Audio Status: %02x\n", 
g_iface.audio_get_status(g_iface.connection));
+    return 1;
+  }
+
+  return 0;
+}
+
+static int cec_process_command_gsam(const char *data)
+{
+  if (strncmp(data, "gsam", 2) == 0)
+  {
+    printf("System Audio Mode Status: %d\n", 
g_iface.system_audio_mode_get_status(g_iface.connection));
+    return 1;
+  }
+
+  return 0;
+}
+
 static int cec_process_command_scan(const char* data)
 {
   if (strncmp(data, "scan", 4) == 0)
@@ -386,6 +434,10 @@
     return 0;
 
   cec_process_command_as(buffer) ||
+  cec_process_command_ea(buffer) ||
+  cec_process_command_da(buffer) ||
+  cec_process_command_gas(buffer) ||
+  cec_process_command_gsam(buffer) ||
   cec_process_command_scan(buffer);
   //TODO
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/dotnetlib/CecSharpTypes.h 
new/libcec-libcec-7.1.1/src/dotnetlib/CecSharpTypes.h
--- old/libcec-libcec-7.0.0/src/dotnetlib/CecSharpTypes.h       2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/dotnetlib/CecSharpTypes.h       2025-06-23 
12:57:23.000000000 +0200
@@ -817,6 +817,7 @@
     Sony          = 0x080046,
     Broadcom      = 0x18C086,
     Sharp2        = 0x534850,
+    Teufel        = 0x232425,
     Vizio         = 0x6B746D,
     Benq          = 0x8065E9,
     HarmanKardon  = 0x9C645E,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/dotnetlib/LibCecSharp/LibCecSharp.vcxproj 
new/libcec-libcec-7.1.1/src/dotnetlib/LibCecSharp/LibCecSharp.vcxproj
--- old/libcec-libcec-7.0.0/src/dotnetlib/LibCecSharp/LibCecSharp.vcxproj       
2025-02-26 10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/dotnetlib/LibCecSharp/LibCecSharp.vcxproj       
2025-06-23 12:57:23.000000000 +0200
@@ -100,7 +100,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)cec-static.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)cec.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AssemblyDebug>true</AssemblyDebug>
       <TargetMachine>MachineX86</TargetMachine>
@@ -122,7 +122,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)cec-static.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)cec.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AssemblyDebug>true</AssemblyDebug>
       <TargetMachine>MachineX64</TargetMachine>
@@ -143,7 +143,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)cec-static.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)cec.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <TargetMachine>MachineX86</TargetMachine>
     </Link>
   </ItemDefinitionGroup>
@@ -162,7 +162,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)cec-static.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)cec.lib;$(OutDir)lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/dotnetlib/LibCecSharpCore/LibCecSharpCore.vcxproj 
new/libcec-libcec-7.1.1/src/dotnetlib/LibCecSharpCore/LibCecSharpCore.vcxproj
--- 
old/libcec-libcec-7.0.0/src/dotnetlib/LibCecSharpCore/LibCecSharpCore.vcxproj   
    2025-02-26 10:40:16.000000000 +0100
+++ 
new/libcec-libcec-7.1.1/src/dotnetlib/LibCecSharpCore/LibCecSharpCore.vcxproj   
    2025-06-23 12:57:23.000000000 +0200
@@ -91,7 +91,7 @@
       <GenerateXMLDocumentationFiles>true</GenerateXMLDocumentationFiles>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)..\cec-static.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)..\cec.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -103,7 +103,7 @@
       <GenerateXMLDocumentationFiles>true</GenerateXMLDocumentationFiles>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)..\cec-static.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)..\cec.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -115,7 +115,7 @@
       <GenerateXMLDocumentationFiles>true</GenerateXMLDocumentationFiles>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)..\cec-static.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)..\cec.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -127,7 +127,7 @@
       <GenerateXMLDocumentationFiles>true</GenerateXMLDocumentationFiles>
     </ClCompile>
     <Link>
-      
<AdditionalDependencies>$(OutDir)..\cec-static.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      
<AdditionalDependencies>$(OutDir)..\cec.lib;$(OutDir)..\lib\p8-platform.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/CECClient.cpp 
new/libcec-libcec-7.1.1/src/libcec/CECClient.cpp
--- old/libcec-libcec-7.0.0/src/libcec/CECClient.cpp    2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/CECClient.cpp    2025-06-23 
12:57:23.000000000 +0200
@@ -263,17 +263,14 @@
   }
 
   // reset to defaults if something went wrong
-  ResetPhysicalAddress();
+  if (m_processor->CECInitialised()) {
+    ResetPhysicalAddress();
+  }
   return false;
 }
 
 bool CCECClient::SetPhysicalAddress(const uint16_t iPhysicalAddress)
 {
-  if (m_configuration.iPhysicalAddress == iPhysicalAddress)
-  {
-    return true;
-  }
-
   // update the configuration
   {
     CLockObject lock(m_mutex);
@@ -828,6 +825,13 @@
   return device && audio && audio->IsPresent() ? 
audio->GetAudioStatus(device->GetLogicalAddress()) : 
(uint8_t)CEC_AUDIO_VOLUME_STATUS_UNKNOWN;
 }
 
+uint8_t CCECClient::SystemAudioModeStatus(void)
+{
+  CCECBusDevice *device = GetPrimaryDevice();
+  CCECAudioSystem *audio = m_processor->GetAudioSystem();
+  return device && audio && audio->IsPresent() ? 
audio->GetSystemAudioModeStatus(device->GetLogicalAddress()) : 
(uint8_t)CEC_SYSTEM_AUDIO_STATUS_UNKNOWN;
+}
+
 bool CCECClient::SendKeypress(const cec_logical_address iDestination, const 
cec_user_control_code key, bool bWait /* = true */)
 {
   CCECBusDevice *dest = m_processor->GetDevice(iDestination);
@@ -1367,6 +1371,7 @@
   uint16_t iPhysicalAddress = !!m_processor ?
     m_processor->GetDetectedPhysicalAddress() :
     CEC_INVALID_PHYSICAL_ADDRESS;
+
   CLockObject lock(m_mutex);
   if (CLibCEC::IsValidPhysicalAddress(iPhysicalAddress) &&
     (iPhysicalAddress != CEC_PHYSICAL_ADDRESS_TV))
@@ -1808,11 +1813,11 @@
 
 bool CCECClient::AudioEnable(bool enable)
 {
-  CCECBusDevice* device = enable ? GetPrimaryDevice() : nullptr;
+  CCECBusDevice* device = GetPrimaryDevice();
   CCECAudioSystem* audio = m_processor->GetAudioSystem();
 
   return !!audio ?
-      audio->EnableAudio(device) :
+      audio->AudioEnable(device, enable) :
       false;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/CECClient.h 
new/libcec-libcec-7.1.1/src/libcec/CECClient.h
--- old/libcec-libcec-7.0.0/src/libcec/CECClient.h      2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/CECClient.h      2025-06-23 
12:57:23.000000000 +0200
@@ -303,6 +303,7 @@
     virtual uint8_t               AudioMute(void);
     virtual uint8_t               AudioUnmute(void);
     virtual uint8_t               AudioStatus(void);
+    virtual uint8_t               SystemAudioModeStatus(void);
     virtual bool                  SendKeypress(const cec_logical_address 
iDestination, const cec_user_control_code key, bool bWait = true);
     virtual bool                  SendKeyRelease(const cec_logical_address 
iDestination, bool bWait = true);
     virtual std::string           GetDeviceOSDName(const cec_logical_address 
iAddress);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/CECProcessor.cpp 
new/libcec-libcec-7.1.1/src/libcec/CECProcessor.cpp
--- old/libcec-libcec-7.0.0/src/libcec/CECProcessor.cpp 2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/CECProcessor.cpp 2025-06-23 
12:57:23.000000000 +0200
@@ -884,17 +884,24 @@
   // mark as uninitialised
   client->SetInitialised(false);
 
+  uint16_t detectedAddress = 0;
+  if ((configuration.bAutodetectAddress == 1)
+      && (!CLibCEC::IsValidPhysicalAddress(configuration.iPhysicalAddress))
+      && ((detectedAddress = GetDetectedPhysicalAddress()) != 
CEC_INVALID_PHYSICAL_ADDRESS)
+      && CLibCEC::IsValidPhysicalAddress(detectedAddress)) {
+        configuration.iPhysicalAddress = detectedAddress;
+  }
   // get the settings from eeprom
   {
     libcec_configuration config; config.Clear();
     m_communication->GetConfiguration(config);
     {
-      CLockObject lock(m_mutex);
       if (configuration.bGetSettingsFromROM == 1)
       {
         if (!config.deviceTypes.IsEmpty())
           configuration.deviceTypes = config.deviceTypes;
-        if (CLibCEC::IsValidPhysicalAddress(config.iPhysicalAddress))
+        if (!CLibCEC::IsValidPhysicalAddress(configuration.iPhysicalAddress)
+          && CLibCEC::IsValidPhysicalAddress(config.iPhysicalAddress))
           configuration.iPhysicalAddress = config.iPhysicalAddress;
         snprintf(configuration.strDeviceName, LIBCEC_OSD_NAME_SIZE, "%s", 
config.strDeviceName);
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/CECTypeUtils.h 
new/libcec-libcec-7.1.1/src/libcec/CECTypeUtils.h
--- old/libcec-libcec-7.0.0/src/libcec/CECTypeUtils.h   2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/CECTypeUtils.h   2025-06-23 
12:57:23.000000000 +0200
@@ -466,7 +466,7 @@
       case CEC_SYSTEM_AUDIO_STATUS_OFF:
         return "off";
       default:
-        return "unknown";
+        return "UNKNOWN";
       }
     }
 
@@ -533,6 +533,8 @@
         return "Pulse Eight";
       case CEC_VENDOR_GOOGLE:
         return "Google";
+      case CEC_VENDOR_TEUFEL:
+        return "Teufel";
       default:
         return "Unknown";
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/CMakeLists.txt 
new/libcec-libcec-7.1.1/src/libcec/CMakeLists.txt
--- old/libcec-libcec-7.0.0/src/libcec/CMakeLists.txt   2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/CMakeLists.txt   2025-06-23 
12:57:23.000000000 +0200
@@ -161,7 +161,7 @@
   configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libcec.rc.in 
${CMAKE_CURRENT_SOURCE_DIR}/libcec.rc)
   add_definitions(-DDLL_EXPORT)
   add_definitions(-DTARGET_WINDOWS -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS 
-D_WINSOCKAPI_)
-  if ((${WIN64}) OR (${_M_ARM64}))
+  if (WIN64 OR ARM64)
     string(REPLACE "/arch:SSE2" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
   else()
     add_definitions(-D_USE_32BIT_TIME_T)
@@ -186,53 +186,50 @@
               ${PROJECT_SOURCE_DIR}/../../include/ceccloader.h
               ${PROJECT_SOURCE_DIR}/../../include/cectypes.h
               ${PROJECT_SOURCE_DIR}/../../include/version.h
-        DESTINATION include/libcec)
+        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcec)
 
 # external dependencies
 include(cmake/LinkPlatformSupport.cmake)
 
-# libCEC shared target
-add_library(cec SHARED ${CEC_SOURCES})
-install(TARGETS cec
-        DESTINATION ${LIB_DESTINATION})
-set_target_properties(cec PROPERTIES VERSION   
${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH}
-                                     SOVERSION ${LIBCEC_VERSION_MAJOR})
-target_link_libraries(cec ${cec_depends})
+set(libsrc ${CEC_SOURCES})
+add_library(libobj OBJECT ${libsrc})
+set_property(TARGET libobj PROPERTY POSITION_INDEPENDENT_CODE 1)
+
+
+add_library(cec-shared SHARED $<TARGET_OBJECTS:libobj>)
+set_target_properties(cec-shared PROPERTIES
+    VERSION   
${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH}
+    SOVERSION ${LIBCEC_VERSION_MAJOR}
+    OUTPUT_NAME cec)
+target_link_libraries(cec-shared ${cec_depends})
+
+
+add_library(cec-static STATIC $<TARGET_OBJECTS:libobj>)
+set_target_properties(cec-static PROPERTIES
+    VERSION   
${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH}
+       SOVERSION ${LIBCEC_VERSION_MAJOR}
+    OUTPUT_NAME cec)
+target_link_libraries(cec-static ${cec_depends})
 
 if(WIN32)
   if (MSVC)
     # generate pdb in release mode too
-    set_target_properties(cec
-        PROPERTIES
-        COMPILE_PDB_NAME_DEBUG cec${CMAKE_DEBUG_POSTFIX}
+       cmake_policy(SET CMP0141 NEW)
+       set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT 
"$<$<CONFIG:Release,RelWithDebInfo>:ProgramDatabase>")
+
+    set_target_properties(cec-shared PROPERTIES
+        COMPILE_PDB_NAME_DEBUG cec
         COMPILE_PDB_NAME_RELEASE cec
         COMPILE_PDB_NAME_MINSIZEREL cec
         COMPILE_PDB_NAME_RELWITHDEBINFO cec)
-  endif(MSVC)
-
-  # libCEC static target used by .net wrappers
-  add_library(cec-static STATIC ${CEC_SOURCES})
-  install(TARGETS cec-static
-          DESTINATION ${LIB_DESTINATION})
-  set_target_properties(cec-static PROPERTIES VERSION   
${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH}
-                                       SOVERSION ${LIBCEC_VERSION_MAJOR})
-  target_link_libraries(cec-static ${cec_depends})
-
-  if (MSVC)
-    # generate pdb in release mode too
-    set_target_properties(cec-static
-        PROPERTIES
-        COMPILE_PDB_NAME_DEBUG cec-static${CMAKE_DEBUG_POSTFIX}
-        COMPILE_PDB_NAME_RELEASE cec-static
-        COMPILE_PDB_NAME_MINSIZEREL cec-static
-        COMPILE_PDB_NAME_RELWITHDEBINFO cec-static)
 
     # install generated pdb
-    install(FILES $<TARGET_FILE_DIR:cec>/cec.pdb
-            DESTINATION "${CMAKE_INSTALL_LIBDIR}")
-    install(FILES $<TARGET_FILE_DIR:cec-static>/cec-static.pdb
-            DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+    install(FILES $<TARGET_FILE_DIR:cec-shared>/cec.pdb
+            DESTINATION ${LIB_DESTINATION})
   endif(MSVC)
 endif(WIN32)
 
+install(TARGETS cec-shared cec-static
+        DESTINATION ${LIB_DESTINATION})
+
 include(cmake/DisplayPlatformSupport.cmake)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/LibCEC.cpp 
new/libcec-libcec-7.1.1/src/libcec/LibCEC.cpp
--- old/libcec-libcec-7.0.0/src/libcec/LibCEC.cpp       2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/LibCEC.cpp       2025-06-23 
12:57:23.000000000 +0200
@@ -532,7 +532,7 @@
 #define FEATURES "'P8 USB' 'P8 USB detect'"
 #if defined(_WIN64)
 #define HOST_TYPE "Windows (x64)"
-#elseif defined(_M_ARM64)
+#elif defined(_M_ARM64)
 #define HOST_TYPE "Windows (ARM64)"
 #else
 #define HOST_TYPE "Windows (x86)"
@@ -582,6 +582,11 @@
   return m_client ? m_client->AudioStatus() : 
(uint8_t)CEC_AUDIO_VOLUME_STATUS_UNKNOWN;
 }
 
+uint8_t CLibCEC::SystemAudioModeStatus(void)
+{
+  return m_client ? m_client->SystemAudioModeStatus() : 
(uint8_t)CEC_SYSTEM_AUDIO_STATUS_UNKNOWN;
+}
+
 int8_t CLibCEC::DetectAdapters(cec_adapter_descriptor *deviceList, uint8_t 
iBufSize, const char *strDevicePath /* = nullptr */, bool bQuickScan /* = false 
*/)
 {
   int8_t iAdaptersFound = CAdapterFactory(this).DetectAdapters(deviceList, 
iBufSize, strDevicePath);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/LibCEC.h 
new/libcec-libcec-7.1.1/src/libcec/LibCEC.h
--- old/libcec-libcec-7.0.0/src/libcec/LibCEC.h 2025-02-26 10:40:16.000000000 
+0100
+++ new/libcec-libcec-7.1.1/src/libcec/LibCEC.h 2025-06-23 12:57:23.000000000 
+0200
@@ -164,6 +164,7 @@
       cec_command CommandFromString(const char* strCommand);
 
       bool AudioEnable(bool enable);
+      uint8_t SystemAudioModeStatus(void);
       bool GetStats(struct cec_adapter_stats* stats);
 
       CCECProcessor *           m_cec;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/libcec/LibCECC.cpp 
new/libcec-libcec-7.1.1/src/libcec/LibCECC.cpp
--- old/libcec-libcec-7.0.0/src/libcec/LibCECC.cpp      2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/LibCECC.cpp      2025-06-23 
12:57:23.000000000 +0200
@@ -544,6 +544,22 @@
       (uint8_t)CEC_AUDIO_VOLUME_STATUS_UNKNOWN;
 }
 
+int libcec_system_audio_mode(libcec_connection_t connection, int bEnable)
+{
+  ICECAdapter* adapter = static_cast<ICECAdapter*>(connection);
+  return adapter ?
+      adapter->AudioEnable(bEnable) :
+      -1;
+}
+
+uint8_t libcec_system_audio_mode_get_status(libcec_connection_t connection)
+{
+  ICECAdapter* adapter = static_cast<ICECAdapter*>(connection);
+  return adapter ?
+      adapter->SystemAudioModeStatus() :
+      (uint8_t)CEC_SYSTEM_AUDIO_STATUS_UNKNOWN;
+}
+
 int8_t libcec_detect_adapters(libcec_connection_t connection, 
cec_adapter_descriptor* deviceList, uint8_t iBufSize, const char* 
strDevicePath, int bQuickScan)
 {
   ICECAdapter* adapter = static_cast<ICECAdapter*>(connection);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/libcec/adapter/RPi/RPiCECAdapterDetection.cpp 
new/libcec-libcec-7.1.1/src/libcec/adapter/RPi/RPiCECAdapterDetection.cpp
--- old/libcec-libcec-7.0.0/src/libcec/adapter/RPi/RPiCECAdapterDetection.cpp   
2025-02-26 10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/adapter/RPi/RPiCECAdapterDetection.cpp   
2025-06-23 12:57:23.000000000 +0200
@@ -39,6 +39,7 @@
 extern "C" {
 #include <interface/vmcs_host/vc_cecservice.h>
 #include <interface/vchiq_arm/vchiq_if.h>
+#include <bcm_host.h>
 }
 
 using namespace CEC;
@@ -54,6 +55,10 @@
   if ((iResult = vchi_connect(NULL, 0, vchiq_instance)) != VCHIQ_SUCCESS)
     return false;
 
+  bcm_host_init();
+  iResult = vc_cec_set_passive(true);
+  if (iResult != VCHIQ_SUCCESS)
+    return false;
   return true;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/libcec/cmake/CheckPlatformSupport.cmake 
new/libcec-libcec-7.1.1/src/libcec/cmake/CheckPlatformSupport.cmake
--- old/libcec-libcec-7.0.0/src/libcec/cmake/CheckPlatformSupport.cmake 
2025-02-26 10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/cmake/CheckPlatformSupport.cmake 
2025-06-23 12:57:23.000000000 +0200
@@ -50,14 +50,14 @@
     # force python2 for eventghost
     set(PYTHON_USE_VERSION 2)
   elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "x64")
-    check_symbol_exists(_X64_ Windows.h WIN64)
-    check_symbol_exists(_AMD64_ Windows.h AMD64)
-    if (DEFINED WIN64 OR DEFINED AMD64)
+    check_symbol_exists(_AMD64_ Windows.h WIN64)
+    if (DEFINED WIN64)
       set(LIB_INFO "${LIB_INFO} (x64)")
     endif()
   elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM")
     set(LIB_INFO "${LIB_INFO} (arm)")
   elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM64")
+    check_symbol_exists(_ARM64_ Windows.h ARM64)
     set(LIB_INFO "${LIB_INFO} (arm64)")    
   else()
     message(FATAL_ERROR "Unknown architecture id: ${MSVC_C_ARCHITECTURE_ID}")
@@ -325,7 +325,7 @@
     SET_SOURCE_FILES_PROPERTIES(libcec.i PROPERTIES CPLUSPLUS ON)
     set_property(SOURCE libcec.i PROPERTY SWIG_MODULE_NAME cec)
     SWIG_ADD_LIBRARY(pycec LANGUAGE python TYPE MODULE SOURCES libcec.i)
-    SWIG_LINK_LIBRARIES(${SWIG_MODULE_pycec_REAL_NAME} cec ${PYTHON_LIBRARIES})
+    SWIG_LINK_LIBRARIES(${SWIG_MODULE_pycec_REAL_NAME} cec-shared 
${PYTHON_LIBRARIES})
     if (NOT WIN32)
       target_compile_options(pycec PUBLIC "-Wno-unused-parameter")
     endif()
@@ -363,16 +363,16 @@
 
       if (${PYTHON_MAJOR_VERSION} EQUAL 2)
         install(TARGETS     ${SWIG_MODULE_pycec_REAL_NAME}
-                DESTINATION 
lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH}/cec)
+                DESTINATION 
${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH}/cec)
         install(FILES       ${CMAKE_BINARY_DIR}/src/libcec/cec.py
-                DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR})
+                DESTINATION 
${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR})
         install(FILES ${CMAKE_SOURCE_DIR}/src/libcec/cmake/__init__.py
-                DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/cec)
+                DESTINATION 
${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/cec)
       else()
         install(TARGETS     ${SWIG_MODULE_pycec_REAL_NAME}
-                DESTINATION 
lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH})
+                DESTINATION 
${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH})
         install(FILES       ${CMAKE_BINARY_DIR}/src/libcec/cec.py
-                DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR})
+                DESTINATION 
${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR})
       endif()
     endif()
   endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/libcec/cmake/SetBuildInfo.cmake 
new/libcec-libcec-7.1.1/src/libcec/cmake/SetBuildInfo.cmake
--- old/libcec-libcec-7.0.0/src/libcec/cmake/SetBuildInfo.cmake 2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/cmake/SetBuildInfo.cmake 2025-06-23 
12:57:23.000000000 +0200
@@ -14,8 +14,8 @@
   set(LIB_INFO "")
 
   # add git revision to compile info
-  find_program(HAVE_GIT_BIN git /bin /usr/bin /usr/local/bin)
-  if(HAVE_GIT_BIN)
+  find_program(GIT_BIN git /bin /usr/bin /usr/local/bin)
+  if(GIT_BIN)
     execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/cmake/git-rev.sh 
OUTPUT_VARIABLE GIT_REVISION)
     string(STRIP ${GIT_REVISION} GIT_REVISION)
     message(STATUS "git found: ${GIT_REVISION}")
@@ -29,12 +29,12 @@
   set(LIB_INFO "${LIB_INFO} compiled on ${BUILD_DATE}")
 
   # add user who built this to compile info
-  find_program(HAVE_WHOAMI_BIN whoami /bin /usr/bin /usr/local/bin)
+  find_program(WHOAMI_BIN whoami /bin /usr/bin /usr/local/bin)
   if (DEFINED ENV{SOURCE_DATE_EPOCH})
     set(BUILD_USER "(reproducible)")
   else()
-    if(HAVE_WHOAMI_BIN)
-      execute_process(COMMAND bash -c "whoami" OUTPUT_VARIABLE BUILD_USER)
+    if(WHOAMI_BIN)
+      execute_process(COMMAND "${WHOAMI_BIN}" OUTPUT_VARIABLE BUILD_USER)
       string(STRIP ${BUILD_USER} BUILD_USER)
       set(LIB_INFO "${LIB_INFO} by ${BUILD_USER}")
     else()
@@ -46,11 +46,11 @@
   if (DEFINED ENV{SOURCE_DATE_EPOCH})
     set(BUILD_HOST "(reproducible)")
   else()
-    find_program(HAVE_HOSTNAME_BIN hostname /bin /usr/bin /usr/local/bin)
-    if(HAVE_HOSTNAME_BIN)
-      execute_process(COMMAND bash -c "hostname" ARGS -f OUTPUT_VARIABLE 
BUILD_HOST RESULT_VARIABLE RETURN_HOST)
+    find_program(HOSTNAME_BIN hostname /bin /usr/bin /usr/local/bin)
+    if(HOSTNAME_BIN)
+      execute_process(COMMAND ${HOSTNAME_BIN} -f OUTPUT_VARIABLE BUILD_HOST 
RESULT_VARIABLE RETURN_HOST)
       if (RETURN_HOST)
-        execute_process(COMMAND bash -c "hostname" OUTPUT_VARIABLE BUILD_HOST)
+        execute_process(COMMAND ${HOSTNAME_BIN} OUTPUT_VARIABLE BUILD_HOST)
       endif()
       string(STRIP ${BUILD_HOST} BUILD_HOST)
       set(LIB_INFO "${LIB_INFO}@${BUILD_HOST}")
@@ -58,11 +58,11 @@
   endif()
 
   # add host info on which this was built to compile info
-  find_program(HAVE_UNAME_BIN uname /bin /usr/bin /usr/local/bin)
-  if(HAVE_UNAME_BIN)
-    execute_process(COMMAND bash -c "uname" ARGS -s OUTPUT_VARIABLE 
BUILD_SYSNAME)
-    execute_process(COMMAND bash -c "uname" ARGS -r OUTPUT_VARIABLE 
BUILD_SYSVER)
-    execute_process(COMMAND bash -c "uname" ARGS -m OUTPUT_VARIABLE 
BUILD_SYSARCH)
+  find_program(UNAME_BIN uname /bin /usr/bin /usr/local/bin)
+  if(UNAME_BIN)
+    execute_process(COMMAND "${UNAME_BIN}" -s OUTPUT_VARIABLE BUILD_SYSNAME)
+    execute_process(COMMAND "${UNAME_BIN}" -r OUTPUT_VARIABLE BUILD_SYSVER)
+    execute_process(COMMAND "${UNAME_BIN}" -m OUTPUT_VARIABLE BUILD_SYSARCH)
     string(STRIP ${BUILD_SYSNAME} BUILD_SYSNAME)
     string(STRIP ${BUILD_SYSVER} BUILD_SYSVER)
     string(STRIP ${BUILD_SYSARCH} BUILD_SYSARCH)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/libcec/devices/CECAudioSystem.cpp 
new/libcec-libcec-7.1.1/src/libcec/devices/CECAudioSystem.cpp
--- old/libcec-libcec-7.0.0/src/libcec/devices/CECAudioSystem.cpp       
2025-02-26 10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/devices/CECAudioSystem.cpp       
2025-06-23 12:57:23.000000000 +0200
@@ -47,7 +47,8 @@
 
 CCECAudioSystem::CCECAudioSystem(CCECProcessor *processor, cec_logical_address 
address, uint16_t iPhysicalAddress /* = CEC_INVALID_PHYSICAL_ADDRESS */) :
     CCECBusDevice(processor, address, iPhysicalAddress),
-    m_systemAudioStatus(CEC_SYSTEM_AUDIO_STATUS_ON),
+    m_iLastAudioStatusUpdate(0),
+    m_systemAudioModeStatus(CEC_SYSTEM_AUDIO_STATUS_UNKNOWN),
     m_audioStatus(CEC_AUDIO_VOLUME_STATUS_UNKNOWN)
 {
   m_type = CEC_DEVICE_TYPE_AUDIO_SYSTEM;
@@ -58,6 +59,7 @@
   CLockObject lock(m_mutex);
   if (m_audioStatus != status)
   {
+    m_iLastAudioStatusUpdate = GetTimeMs();
     LIB_CEC->AddLog(CEC_LOG_DEBUG, ">> %s (%X): audio status changed from %2x 
to %2x", GetLogicalAddressName(), m_iLogicalAddress, m_audioStatus, status);
     m_audioStatus = status;
     return true;
@@ -69,10 +71,10 @@
 bool CCECAudioSystem::SetSystemAudioModeStatus(const cec_system_audio_status 
mode)
 {
   CLockObject lock(m_mutex);
-  if (m_systemAudioStatus != mode)
+  if (m_systemAudioModeStatus != mode)
   {
-    LIB_CEC->AddLog(CEC_LOG_DEBUG, ">> %s (%X): system audio mode status 
changed from %s to %s", GetLogicalAddressName(), m_iLogicalAddress, 
ToString(m_systemAudioStatus), ToString(mode));
-    m_systemAudioStatus = mode;
+    LIB_CEC->AddLog(CEC_LOG_DEBUG, ">> %s (%X): system audio mode changed from 
%s to %s", GetLogicalAddressName(), m_iLogicalAddress, 
ToString((cec_system_audio_status)m_systemAudioModeStatus), ToString(mode));
+    m_systemAudioModeStatus = mode;
     return true;
   }
 
@@ -96,8 +98,8 @@
   cec_system_audio_status state;
   {
     CLockObject lock(m_mutex);
-    LIB_CEC->AddLog(CEC_LOG_DEBUG, "<< %x -> %x: set system audio mode '%2x'", 
m_iLogicalAddress, dest, m_audioStatus);
-    state = m_systemAudioStatus;
+    LIB_CEC->AddLog(CEC_LOG_DEBUG, "<< %x -> %x: set system audio mode '%d'", 
m_iLogicalAddress, dest, m_systemAudioModeStatus);
+    state = (cec_system_audio_status)m_systemAudioModeStatus;
   }
 
   return m_handler->TransmitSetSystemAudioMode(m_iLogicalAddress, dest, state, 
bIsReply);
@@ -108,8 +110,8 @@
   cec_system_audio_status state;
   {
     CLockObject lock(m_mutex);
-    LIB_CEC->AddLog(CEC_LOG_DEBUG, "<< %x -> %x: system audio mode '%s'", 
m_iLogicalAddress, dest, ToString(m_systemAudioStatus));
-    state = m_systemAudioStatus;
+    LIB_CEC->AddLog(CEC_LOG_DEBUG, "<< %x -> %x: system audio mode '%s'", 
m_iLogicalAddress, dest, 
ToString((cec_system_audio_status)m_systemAudioModeStatus));
+    state = (cec_system_audio_status)m_systemAudioModeStatus;
   }
 
   return m_handler->TransmitSystemAudioModeStatus(m_iLogicalAddress, dest, 
state, bIsReply);
@@ -150,6 +152,21 @@
   return bReturn;
 }
 
+bool CCECAudioSystem::RequestSystemAudioModeStatus(const cec_logical_address 
initiator, bool bWaitForResponse /* = true */)
+{
+  bool bReturn(false);
+
+  if (!IsHandledByLibCEC() &&
+      !IsUnsupportedFeature(CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS))
+  {
+    MarkBusy();
+    LIB_CEC->AddLog(CEC_LOG_DEBUG, "<< requesting system audio mode status of 
'%s' (%X)", GetLogicalAddressName(), m_iLogicalAddress);
+    bReturn = m_handler->TransmitRequestSystemAudioModeStatus(initiator, 
m_iLogicalAddress, bWaitForResponse);
+    MarkReady();
+  }
+  return bReturn;
+}
+
 uint8_t CCECAudioSystem::GetAudioStatus(const cec_logical_address initiator, 
bool bUpdate /* = false */)
 {
   bool bIsPresent(GetStatus() == CEC_DEVICE_STATUS_PRESENT);
@@ -157,7 +174,8 @@
   {
     CLockObject lock(m_mutex);
     bRequestUpdate = bIsPresent &&
-        (bUpdate || m_audioStatus == CEC_AUDIO_VOLUME_STATUS_UNKNOWN);
+        (bUpdate || m_audioStatus == CEC_AUDIO_VOLUME_STATUS_UNKNOWN ||
+           GetTimeMs() - m_iLastAudioStatusUpdate >= 
CEC_AUDIO_STATUS_REFRESH_TIME);
   }
 
   if (bRequestUpdate)
@@ -170,10 +188,32 @@
   return m_audioStatus;
 }
 
-bool CCECAudioSystem::EnableAudio(CCECBusDevice* device /* = nullptr */)
+uint8_t CCECAudioSystem::GetSystemAudioModeStatus(const cec_logical_address 
initiator, bool bUpdate /* = false */)
+{
+  bool bIsPresent(GetStatus() == CEC_DEVICE_STATUS_PRESENT);
+  bool bRequestUpdate(false);
+  {
+    CLockObject lock(m_mutex);
+    bRequestUpdate = bIsPresent &&
+        (bUpdate || m_systemAudioModeStatus == 
CEC_SYSTEM_AUDIO_STATUS_UNKNOWN);
+  }
+
+  if (bRequestUpdate)
+  {
+    CheckVendorIdRequested(initiator);
+    RequestSystemAudioModeStatus(initiator);
+  }
+
+  CLockObject lock(m_mutex);
+  return m_systemAudioModeStatus;
+}
+
+bool CCECAudioSystem::AudioEnable(CCECBusDevice* device, bool bEnable /* = 
true */)
 {
-  uint16_t audioAddress = !!device ?
-      device->GetCurrentPhysicalAddress() :
-      CEC_INVALID_PHYSICAL_ADDRESS;
-  return m_handler->TransmitSystemAudioModeRequest(m_iLogicalAddress, 
audioAddress);
+  cec_logical_address iLogicalAddress = device->GetLogicalAddress() ?
+    device->GetLogicalAddress() : CECDEVICE_UNKNOWN;
+  uint16_t physicalAddress = bEnable ? device->GetCurrentPhysicalAddress() :
+    CEC_INVALID_PHYSICAL_ADDRESS;
+
+  return m_handler->TransmitSystemAudioModeRequest(iLogicalAddress, 
physicalAddress);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/libcec/devices/CECAudioSystem.h 
new/libcec-libcec-7.1.1/src/libcec/devices/CECAudioSystem.h
--- old/libcec-libcec-7.0.0/src/libcec/devices/CECAudioSystem.h 2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/devices/CECAudioSystem.h 2025-06-23 
12:57:23.000000000 +0200
@@ -53,14 +53,17 @@
     uint8_t VolumeDown(const cec_logical_address source, bool bSendRelease = 
true);
     uint8_t MuteAudio(const cec_logical_address source);
     uint8_t GetAudioStatus(const cec_logical_address initiator, bool bUpdate = 
false);
-    bool EnableAudio(CCECBusDevice* device = nullptr);
+    uint8_t GetSystemAudioModeStatus(const cec_logical_address initiator, bool 
bUpdate = false);
+    bool AudioEnable(CCECBusDevice* device, bool bEnable = true);
 
     bool TransmitActiveSource(bool bIsReply) { (void)bIsReply; return false; }
 
   protected:
     bool RequestAudioStatus(const cec_logical_address initiator, bool 
bWaitForResponse = true);
+    bool RequestSystemAudioModeStatus(const cec_logical_address initiator, 
bool bWaitForResponse = true);
 
-    cec_system_audio_status m_systemAudioStatus;
+    int64_t                 m_iLastAudioStatusUpdate;
+    uint8_t                 m_systemAudioModeStatus;
     uint8_t                 m_audioStatus;
   };
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/libcec/implementations/CECCommandHandler.cpp 
new/libcec-libcec-7.1.1/src/libcec/implementations/CECCommandHandler.cpp
--- old/libcec-libcec-7.0.0/src/libcec/implementations/CECCommandHandler.cpp    
2025-02-26 10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/implementations/CECCommandHandler.cpp    
2025-06-23 12:57:23.000000000 +0200
@@ -987,6 +987,14 @@
   return Transmit(command, !bWaitForResponse, false);
 }
 
+bool CCECCommandHandler::TransmitRequestSystemAudioModeStatus(const 
cec_logical_address iInitiator, const cec_logical_address iDestination, bool 
bWaitForResponse /* = true */)
+{
+  cec_command command;
+  cec_command::Format(command, iInitiator, iDestination, 
CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS);
+
+  return Transmit(command, !bWaitForResponse, false);
+}
+
 bool CCECCommandHandler::TransmitRequestPhysicalAddress(const 
cec_logical_address iInitiator, const cec_logical_address iDestination, bool 
bWaitForResponse /* = true */)
 {
   cec_command command;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libcec-libcec-7.0.0/src/libcec/implementations/CECCommandHandler.h 
new/libcec-libcec-7.1.1/src/libcec/implementations/CECCommandHandler.h
--- old/libcec-libcec-7.0.0/src/libcec/implementations/CECCommandHandler.h      
2025-02-26 10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/libcec/implementations/CECCommandHandler.h      
2025-06-23 12:57:23.000000000 +0200
@@ -74,6 +74,7 @@
     virtual bool TransmitRequestMenuLanguage(const cec_logical_address 
iInitiator, const cec_logical_address iDestination, bool bWaitForResponse = 
true);
     virtual bool TransmitRequestOSDName(const cec_logical_address iInitiator, 
const cec_logical_address iDestination, bool bWaitForResponse = true);
     virtual bool TransmitRequestAudioStatus(const cec_logical_address 
iInitiator, const cec_logical_address iDestination, bool bWaitForResponse = 
true);
+    virtual bool TransmitRequestSystemAudioModeStatus(const 
cec_logical_address iInitiator, const cec_logical_address iDestination, bool 
bWaitForResponse = true);
     virtual bool TransmitRequestPhysicalAddress(const cec_logical_address 
iInitiator, const cec_logical_address iDestination, bool bWaitForResponse = 
true);
     virtual bool TransmitRequestPowerStatus(const cec_logical_address 
iInitiator, const cec_logical_address iDestination, bool bUpdate, bool 
bWaitForResponse = true);
     virtual bool TransmitRequestVendorId(const cec_logical_address iInitiator, 
const cec_logical_address iDestination, bool bWaitForResponse = true);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/src/pyCecClient/CMakeLists.txt 
new/libcec-libcec-7.1.1/src/pyCecClient/CMakeLists.txt
--- old/libcec-libcec-7.0.0/src/pyCecClient/CMakeLists.txt      2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/src/pyCecClient/CMakeLists.txt      2025-06-23 
12:57:23.000000000 +0200
@@ -1,6 +1,8 @@
 cmake_minimum_required(VERSION 3.12.0)
 project(pyCecClient)
 
+include(GNUInstallDirs)
+
 # Python
 if(WIN32 AND "${MSVC_C_ARCHITECTURE_ID}" STREQUAL "X86")
   set(PYTHON_USE_VERSION 2)
@@ -22,7 +24,7 @@
             DESTINATION python)
   else()
     install(PROGRAMS pyCecClient.py
-            DESTINATION bin
+            DESTINATION ${CMAKE_INSTALL_BINDIR}
             RENAME pyCecClient)
   endif()
 endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libcec-libcec-7.0.0/windows/build-all.cmd 
new/libcec-libcec-7.1.1/windows/build-all.cmd
--- old/libcec-libcec-7.0.0/windows/build-all.cmd       2025-02-26 
10:40:16.000000000 +0100
+++ new/libcec-libcec-7.1.1/windows/build-all.cmd       2025-06-23 
12:57:23.000000000 +0200
@@ -22,9 +22,9 @@
   SET BUILDARCH=%1
 )
 
-rem optional parameter: build type (Release)
+rem optional parameter: build type (RelWithDebInfo)
 IF "%2" == "" (
-  SET BUILDTYPE=Release
+  SET BUILDTYPE=RelWithDebInfo
 ) ELSE (
   SET BUILDTYPE=%2
 )
@@ -59,7 +59,7 @@
 rem Compile libCEC
 CD "%MYDIR%..\project"
 ECHO. * compiling release libCEC libraries for %BUILDARCH%
-CALL "%MYDIR%build-lib.cmd" %BUILDARCH% Release %VSVERSION% 
"%BUILDPATH%\Release" nmake
+CALL "%MYDIR%build-lib.cmd" %BUILDARCH% RelWithDebInfo %VSVERSION% 
"%BUILDPATH%\Release" nmake
 IF %errorlevel% neq 0 (
   ECHO. *** failed to build libCEC for %BUILDARCH% ***
   PAUSE

Reply via email to