13 stable releases (4 major)

4.0.3 Jul 5, 2023
4.0.0 Aug 7, 2022
3.0.0 Feb 9, 2022
2.0.1 Dec 30, 2021
0.2.1 Nov 30, 2019

#219 in Hardware support

37 downloads per month
Used in 4 crates (via cec-rs)

GPL-2.0 license

5MB
39K SLoC

C++ 15K SLoC // 0.1% comments C# 9K SLoC // 0.3% comments .NET Resource 7.5K SLoC // 0.0% comments Rust 4K SLoC // 0.0% comments Python 1.5K SLoC // 0.1% comments Batch 1K SLoC C 444 SLoC // 0.1% comments Visual Studio Project 368 SLoC Shell 243 SLoC // 0.1% comments SWIG 144 SLoC // 0.0% comments OCaml 112 SLoC Visual Studio Solution 96 SLoC

Contains (DOS exe, 1MB) p8-usbcec-bootloader-driver-installer.exe, (DOS exe, 1MB) p8-usbcec-bootloader-driver-installer.exe, (DOS exe, 620KB) p8-usbcec-driver-installer.exe, (DOS exe, 620KB) p8-usbcec-driver-installer.exe, (Windows DLL, 68KB) libusb0.dll, (Windows DLL, 68KB) vendor/support/windows/libusb0.dll

libcec-sys

Crates.io Docs.rs CI

FFI bindings for the libcec

Linking to system libcec

This crate works with libcec v4.x, v5.x and v6.x (latest version as time of writing). During the build we try to find libcec system library installation using pkg-config and compilation using default C compiler (cc crate). As a fallback, vendored libcec (v6.x) is used during the build.

Alternatively, one can the decide to skip logic above and force the use of vendored sources by enabling vendored feature.

The crate is tested mainly with Linux and Windows but could work with other platforms as well. PRs welcome.

Linux (general)

On Linux, for most convenient build process, it is recommended to install pkg-config, libcec-dev (headers and pkg-config configuration), libcec6 (dynamic library), libp8-platform-dev and libp8-platform2 from your package distribution before installing this crate. Exact package names vary between distributions and package managers.

In addition libudev-dev might be needed.

With debian based distributions, you can simply

sudo apt-get install libudev-dev libp8-platform2 libp8-platform-dev libcec-dev pkg-config libcec6

Raspberry Pi OS

If you are using Raspberry Pi OS and want to use the built-in HDMI port CEC, you might need to build the libcec yourself, since the libcec as packaged by debian is not providing the driver (as of 2022)

Adapted from libcec documentation:

# Remove libcec (since we are going to build it ourselves)
apt-get remove libcec6

# Install libcec build dependencies, but not libcec itself
sudo apt-get install libp8 platform-dev libp8-platform cmake libudev-dev libxrandr-dev python3-dev swig git

# Build libcec 6.0.2 with RPI CEC driver enabled
sudo rmdir -rf /tmp/libcec-build-tmp
sudo mkdir /tmp/libcec-build-tmp
sudo cd /tmp/libcec-build-tmp
sudo git clone --recursive https://github.com/Pulse-Eight/libcec.git
sudo cd libcec
sudo git checkout libcec-6.0.2
sudo mkdir build
sudo cd build
sudo cmake -DRPI_INCLUDE_DIR=/opt/vc/include -DRPI_LIB_DIR=/opt/vc/lib ..
sudo make -j4
sudo make install
sudo ldconfig

Windows

On Windows, it is recommended to install libcec via the installer and add cec.dll to the PATH environment variable.

For a vendored build, libcec-sys will dynamically link to the compiled cec.dll. This means you must package your standalone executable with the compiled dynamic library.

Vendored Build Prerequisites:

  • Visual Studio 2019 w/ Desktop Development with C++ and Universal Windows Platform development
  • CMake 3.12+
  • Python 3.6+ with Debug Binaries

License

Licensed under GNU General Public License version 2, (LICENSE or https://opensource.org/licenses/GPL-2.0)

The CI/CD setup in .github/ is based on rust-github/template, and therefore licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

See CONTRIBUTING.md.

Releasing

cargo release --no-publish --execute and let the github CD pipeline do the rest.

Dependencies