From 7d5ff7e42c92841f86f8194f973d7635e08be092 Mon Sep 17 00:00:00 2001 From: Yorick van Pelt Date: Wed, 13 Apr 2022 17:10:46 +0200 Subject: [PATCH] mdrd --- bin/sony | 65 ++++++++++++++++++++++++ nixos/logical/blackadder.nix | 10 ++++ overlays.nix | 1 + pkgs/mdr.nix | 97 ++++++++++++++++++++++++++++++++++++ 4 files changed, 173 insertions(+) create mode 100755 bin/sony create mode 100644 pkgs/mdr.nix diff --git a/bin/sony b/bin/sony new file mode 100755 index 0000000..72f721e --- /dev/null +++ b/bin/sony @@ -0,0 +1,65 @@ +#! /usr/bin/env nix-shell +#! nix-shell -p python3 -p python3.pkgs.dbus-python -i python +import dbus +import enum + +system_bus = dbus.SystemBus() + +class AmbientSoundMode(enum.Enum): + NORMAL = "normal" + VOICE = "voice" + +class Headphone(): + def __init__(self, path): + self.proxy = system_bus.get_object("org.mdr", path) + self.nc = dbus.Interface(self.proxy, dbus_interface="org.mdr.NoiseCancelling") + self.amb = dbus.Interface(self.proxy, dbus_interface="org.mdr.AmbientSoundMode") + self.props = dbus.Interface(self.proxy, dbus_interface="org.freedesktop.DBus.Properties") + def _p(self, tp, i, n): + return tp(self.props.Get("org.mdr."+i, n)) + @property + def name(self) -> str: + return self._p(tp, "Device", "name") + @property + def volume(self) -> int: + return self._p(int, "Playback", "volume") + @volume.setter + def volume(self, n: int): + self.proxy.SetVolume(n, dbus_interface="org.mdr.Playback") + @property + def noise_cancelling(self) -> bool: + return self._p(bool, "NoiseCancelling", "enabled") + @noise_cancelling.setter + def noise_cancelling(self, val: bool) -> None: + if val: + self.nc.Enable() + else: + self.nc.Disable() + @property + def battery(self) -> int: + return self._p(int, "Battery", "level") + @property + def charging(self) -> bool: + return self._p(bool, "Battery", "charging") + @property + def ambient_sound_amount(self) -> int: + return self._p(int, "AmbientSoundMode", "amount") + @ambient_sound_amount.setter + def ambient_sound_amount(self, n: int) -> None: + return self.amb.SetAmount(n) + @property + def ambient_sound_mode(self) -> AmbientSoundMode: + return AmbientSoundMode(self._p("AmbientSoundMode", "mode")) + @ambient_sound_mode.setter + def ambient_sound_mode(self, n: AmbientSoundMode) -> None: + self.amb.SetMode(n.value) + @property + def auto_power_off_timeout(self) -> str: + return self._p(str, "AutoPowerOff", "timeout") + # todo setter + # todo eq + def power_off(self) -> None: + self.proxy.PowerOff(dbus_interface="org.mdr.PowerOff") + + +wh = Headphone("/org/bluez/hci0/dev_94_DB_56_79_7D_86") diff --git a/nixos/logical/blackadder.nix b/nixos/logical/blackadder.nix index 36ed6ab..7fea6be 100644 --- a/nixos/logical/blackadder.nix +++ b/nixos/logical/blackadder.nix @@ -41,4 +41,14 @@ # docker virtualisation.docker.enable = true; users.users.yorick.extraGroups = [ "docker" ]; + + systemd.services.mdrd = { + serviceConfig = { + Type = "dbus"; + ExecStart = "${pkgs.mdrd}/bin/mdrd"; + BusName = "org.mdr"; + }; + wantedBy = [ "graphical-session.target" ]; + }; + services.dbus.packages = [ pkgs.mdrd ]; } diff --git a/overlays.nix b/overlays.nix index 8c74043..fe6ae6e 100644 --- a/overlays.nix +++ b/overlays.nix @@ -5,6 +5,7 @@ in [ (import sources.nixpkgs-mozilla) (import sources.emacs-overlay) (import ./pkgs) + (import ./pkgs/mdr.nix) (import ./nixos/overlay.nix) (import ./overlay.nix) ] diff --git a/pkgs/mdr.nix b/pkgs/mdr.nix new file mode 100644 index 0000000..570293f --- /dev/null +++ b/pkgs/mdr.nix @@ -0,0 +1,97 @@ +(self: super: { + libmdr = self.callPackage ({stdenv, fetchFromGitHub, bluez}: stdenv.mkDerivation rec { + pname = "libmdr"; + version = "0.5.1"; + buildInputs = [ bluez ]; + src = fetchFromGitHub { + owner = "AndreasOlofsson"; + repo = pname; + rev = "v${version}"; + sha256 = "1asXrEwv1Bk82sgtOhU+beo2p8B8VBTHw4FP6seIPag="; + }; + enableParallelBuilding = true; + installPhase = '' + install -D libmdr.a $out/lib/libmdr.a + cp -r include $out + ''; + }) {}; + mdrd = self.callPackage ({stdenv, fetchFromGitHub, libmdr, pkg-config, glib, bluez}: stdenv.mkDerivation rec { + pname = "mdrd"; + version = "0.3"; + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ libmdr glib bluez ]; + makeFlags = "LIBMDR=${libmdr}/lib/libmdr.a --assume-old=${libmdr}/lib/libmdr.a"; + src = fetchFromGitHub { + owner = "AndreasOlofsson"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-XAcHtOaG/na9zlPezBSH52J5gF6uhW99vP7TW+ShnzY="; + }; + + installPhase = '' + install -D mdrd $out/bin/mdrd + mkdir -p $out/share/dbus-1/system-services + cat > $_/org.mdr.service < $_/org.mdr.conf < + + + + + + + + + + + + + + + + + + + + + + + HERE + ''; + enableParallelBuilding = true; + }) {}; + mdr-manager = self.callPackage ({stdenv, fetchFromGitHub, pkg-config, glib, gtk3}: stdenv.mkDerivation rec { + pname = "mdr-manager"; + version = "0.3"; + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ glib gtk3 ]; + NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0"; + #makeFlags = "LIBMDR=${libmdr}/lib/libmdr.a --assume-old=${libmdr}/lib/libmdr.a"; + src = fetchFromGitHub { + owner = "AndreasOlofsson"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-ZWXhsGsbGDQlnkZLCbL9MPi5Y7wZIltVyOrkPWImu2c="; + }; + installPhase = "install -D mdr-manager $out/bin/mdr-manager"; + enableParallelBuilding = true; + }) {}; +})