Merge pull request #121881 from berbiche/kinect-audio-setup-init

kinect-audio-setup: init at 0.5

Changed files
+131
pkgs
+91
pkgs/os-specific/linux/kinect-audio-setup/default.nix
···
···
+
{ lib
+
, stdenv
+
, fetchgit
+
, requireFile
+
, pkg-config
+
, libusb1
+
, p7zip
+
}:
+
+
let
+
# The last known good firmware package to have been tested
+
# by the upstream projet.
+
# The firmware URL is hardcoded in the upstream project's installation script
+
firmwareUrl = "https://download.microsoft.com/download/F/9/9/F99791F2-D5BE-478A-B77A-830AD14950C3/KinectSDK-v1.0-beta2-x86.msi";
+
# The original URL "https://research.microsoft.com/en-us/um/legal/kinectsdk-tou_noncommercial.htm"
+
# redirects to the following url:
+
licenseUrl = "https://www.microsoft.com/en-us/legal/terms-of-use";
+
in
+
stdenv.mkDerivation rec {
+
pname = "kinect-audio-setup";
+
+
# On update: Make sure that the `firmwareURL` is still in sync with upstream.
+
# If the project structure hasn't changed you can find the URL in the
+
# `kinect_fetch_fw` file in the project source.
+
version = "0.5";
+
+
# This is an MSI or CAB file
+
FIRMWARE = requireFile rec {
+
name = "UACFirmware";
+
sha256 = "08a2vpgd061cmc6h3h8i6qj3sjvjr1fwcnwccwywqypz3icn8xw1";
+
message = ''
+
In order to install the Kinect Audio Firmware, you need to download the
+
non-redistributable firmware from Microsoft.
+
The firmware is available at ${firmwareUrl} and the license at ${licenseUrl} .
+
Save the file as UACFirmware and use "nix-prefetch-url file://\$PWD/UACFirmware" to
+
add it to the Nix store.
+
'';
+
};
+
+
src = fetchgit {
+
url = "git://git.ao2.it/kinect-audio-setup.git";
+
rev = "v${version}";
+
sha256 = "sha256-bFwmWh822KvFwP/0Gu097nF5K2uCwCLMB1RtP7k+Zt0=";
+
};
+
+
# These patches are not upstream because the project has seen no
+
# activity since 2016
+
patches = [
+
./libusb-1-import-path.patch
+
./udev-rules-extra-devices.patch
+
];
+
+
nativeBuildInputs = [ p7zip libusb1 pkg-config ];
+
+
makeFlags = [
+
"PREFIX=$(out)"
+
"DESTDIR=$(out)"
+
"FIRMWARE_PATH=$(out)/lib/firmware/UACFirmware"
+
"LOADER_PATH=$(out)/libexec/kinect_upload_fw"
+
];
+
+
buildPhase = ''
+
runHook preBuild
+
make -C kinect_upload_fw kinect_upload_fw $makeFlags "''${makeFlagsArray[@]}"
+
runHook postBuild
+
'';
+
+
installPhase = ''
+
runHook preInstall
+
mkdir -p $out/libexec/ $out/lib/firmware $out/lib/udev/rules.d
+
+
install -Dm755 kinect_upload_fw/kinect_upload_fw $out/libexec/
+
+
# 7z extract "assume yes on all queries" "only extract/keep files/directories matching UACFIRMWARE.* recursively"
+
7z e -y -r "${FIRMWARE}" "UACFirmware.*" >/dev/null
+
# The filename is bound to change with the Firmware SDK
+
mv UACFirmware.* $out/lib/firmware/UACFirmware
+
+
make install_udev_rules $makeFlags "''${makeFlagsArray[@]}"
+
+
runHook postInstall
+
'';
+
+
meta = with lib; {
+
description = "Tools to enable audio input from the Microsoft Kinect sensor device";
+
homepage = "https://git.ao2.it/kinect-audio-setup.git";
+
maintainers = with maintainers; [ berbiche ];
+
platforms = platforms.linux;
+
license = licenses.unfree;
+
};
+
}
+23
pkgs/os-specific/linux/kinect-audio-setup/libusb-1-import-path.patch
···
···
+
commit 02fd6c4355809e1bff7c66d478e88f30bedde13b
+
Author: Nicolas Berbiche <nicolas@normie.dev>
+
Date: Wed May 5 23:14:56 2021 -0400
+
+
fix libusb include for Linux
+
+
diff --git a/kinect_upload_fw/kinect_upload_fw.c b/kinect_upload_fw/kinect_upload_fw.c
+
index 1bd4102..351c94f 100644
+
--- a/kinect_upload_fw/kinect_upload_fw.c
+
+++ b/kinect_upload_fw/kinect_upload_fw.c
+
@@ -35,7 +35,12 @@
+
#include <stdlib.h>
+
#include <string.h>
+
#include <errno.h>
+
+
+
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(_WIN32)
+
#include <libusb.h>
+
+#else
+
+#include <libusb-1.0/libusb.h>
+
+#endif
+
+
#include "endian.h"
+
+15
pkgs/os-specific/linux/kinect-audio-setup/udev-rules-extra-devices.patch
···
···
+
commit afaaa77b0a03811f86428cf264397b60dd795549
+
Author: Nicolas Berbiche <nicolas@normie.dev>
+
Date: Thu May 6 00:10:37 2021 -0400
+
+
Add support for other Kinect device in udev
+
+
diff --git a/contrib/55-kinect_audio.rules.in b/contrib/55-kinect_audio.rules.in
+
index 25ea713..9e1b69f 100644
+
--- a/contrib/55-kinect_audio.rules.in
+
+++ b/contrib/55-kinect_audio.rules.in
+
@@ -1,2 +1,4 @@
+
# Rule to load the Kinect UAC firmware on the "generic" usb device
+
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="02ad", RUN+="@LOADER_PATH@ @FIRMWARE_PATH@"
+
+# Rule to load the Kinect UAC firmware on another supported device
+
+ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="02bb", RUN+="@LOADER_PATH@ @FIRMWARE_PATH@"
+2
pkgs/top-level/all-packages.nix
···
kbdlight = callPackage ../os-specific/linux/kbdlight { };
kmscon = callPackage ../os-specific/linux/kmscon { };
kmscube = callPackage ../os-specific/linux/kmscube { };
···
kbdlight = callPackage ../os-specific/linux/kbdlight { };
+
kinect-audio-setup = callPackage ../os-specific/linux/kinect-audio-setup { };
+
kmscon = callPackage ../os-specific/linux/kmscon { };
kmscube = callPackage ../os-specific/linux/kmscube { };