github Pulse-Eight/libcec libcec-8.1.5
libCEC 8.1.5

latest release: libcec-8.1.6
3 hours ago

Changelog

libCEC 8.1.5 adds a Rust binding — the fifth language binding after C, C++, .NET, Python and Node.js — a public API for sending <play>, and fixes a set of physical address bugs that made a configured base device and HDMI port behave as if they had been ignored.

Highlights

  • A Rust binding. A dependency-free libcec crate over the C API, with a safe API, an mpsc channel for callbacks, examples, an ENABLE_RUST_LIB cmake option, a librust-libcec-dev Debian package and a rustdoc reference alongside the other four.
  • SendPlay() sends <play> to a device. cec_play_mode was part of the public API but nothing could reach it.
  • A configured physical address is honoured again. Three separate paths could replace it — another device reporting the same address, a base device that was in standby when the client registered, and a base device + HDMI port set alongside an explicit address.

Added

  • a Rust binding: a dependency-free crate over the C API. Callbacks come either as a trait implemented on libCEC's worker thread — the only way to answer menu_state_changed/command_handler — or as an mpsc::Receiver<CecEvent>, which is the sane default. The protocol enums are generated from cectypes.h, and tests/layout.rs asserts every struct size and field offset against a C compiler reading the real headers. Built with -DENABLE_RUST_LIB=1, packaged as librust-libcec-dev
  • SendPlay() sends <play> to a device on the bus. The transmit is virtual, so LG players are sent the user control code they act on rather than a <play> they ignore. Available in the C, C++, .NET, Python, Node.js and Rust bindings, and cec-client gains a play command (#727)
  • Open() without a port opens the first adapter that can be opened, walking past adapters another process is already using, instead of failing

Fixed

  • don't reset the physical address to HDMI port 1 on the TV when another device reports the address libCEC is using. That replaced one wrong address by another and silently overrode a configured setting. The address is kept, and the log now names the device that holds it and says to configure that device as the base device when this adapter is connected behind it (#738)
  • re-derive the physical address once the configured base device reports one, instead of keeping the eeprom or default address for good. A base device that is in standby when the client registers doesn't always answer, which left a correct base device + HDMI port setting looking as broken as a wrong one (#738)
  • a configured physical address is used again when a base device and HDMI port are set too, instead of being silently replaced by the address derived from that device and port. The base device and port are only meant to be used when no address was configured (#740)
  • crash in Close() when the adapter was never opened, and stop a failed open from logging connection opened and marking the processor initialised
  • the npm module and the .NET assembly shipped a stale version number. release.py now checks every file that repeats the version from CMakeLists.txt and reports all mismatches at once
  • compile with /Z7 rather than /Zi so concurrent MSVC builds no longer race each other over mspdbsrv, and install the linker's pdb, which the Release build shipped none of

Full Changelog: libcec-8.1.4...libcec-8.1.5

Don't miss a new libcec release

NewReleases is sending notifications on new releases.