Merge tag 'v0.5' into debian
[kinect-audio-setup.git] / kinect_fetch_fw
index cde470c..3459dca 100755 (executable)
@@ -1,8 +1,8 @@
 #!/bin/sh
 #
 #!/bin/sh
 #
-# Fetch and install the firmware to get the kinect Audio working on linux
+# kinect_fetch_fw - Fetch and install the Microsoft Kinect UAC firmware
 #
 #
-# Copyright (C) 2011  Antonio Ospite <ospite@studenti.unina.it>
+# Copyright (C) 2011-2016  Antonio Ospite <ao2@ao2.it>
 #
 # This program is free software. It comes without any warranty, to
 # the extent permitted by applicable law. You can redistribute it
 #
 # This program is free software. It comes without any warranty, to
 # the extent permitted by applicable law. You can redistribute it
 # To Public License, Version 2, as published by Sam Hocevar. See
 # http://sam.zoy.org/wtfpl/COPYING for more details.
 #
 # To Public License, Version 2, as published by Sam Hocevar. See
 # http://sam.zoy.org/wtfpl/COPYING for more details.
 #
-# 7z from p7zip-full is needed, it can be installed with
-#   sudo aptitude install p7zip-full
+# wget and 7z from p7zip-full are needed, they can be installed with
+#   sudo aptitude install wget p7zip-full
+#
+# NOTE: p7zip-full >= 9.20 is required in order to extract .msi files
+#       correctly
 
 set -e
 
 
 set -e
 
-SDK_URL=${SDK_URL:-"http://download.microsoft.com/download/8/4/C/84C9EF40-EE49-42C2-AE26-C6E30921182F/KinectSDK32.msi"}
+SDK_URL=${SDK_URL:-"http://download.microsoft.com/download/F/9/9/F99791F2-D5BE-478A-B77A-830AD14950C3/KinectSDK-v1.0-beta2-x86.msi"}
+SDK_MD5="40764fe9e00911bda5095e5be777e311"
 
 
-[ $# -lt 1 ] && { echo "usage: $(basename "$0") <firmware destdir> [<path of kinect_upload_fw binary>]"; exit 1; }
-FW_DESTDIR=$1
-LOADER_PATH=${2:-"/usr/local/sbin/kinect_upload_fw"}
+[ $# -lt 1 ] && { echo "usage: $(basename "$0") <firmware destdir>" 1>&2; exit 1; }
+FW_DESTDIR=$(readlink -m $1)
 
 
-command -v wget >/dev/null 2>&1 || { echo "$(basename "$0"): command 'wget' is needed." ; exit 1; }
-command -v 7z >/dev/null 2>&1 || { echo "$(basename "$0"): command '7z' is needed." ; exit 1; }
+command -v wget >/dev/null 2>&1 || { echo "$(basename "$0"): command 'wget' is needed." 1>&2 ; exit 1; }
+command -v 7z >/dev/null 2>&1 || { echo "$(basename "$0"): command '7z' is needed." 1>&2; exit 1; }
 
 
-TEMPDIR="$(mktemp -d)"
+TEMPDIR=$(mktemp -d)
 trap 'rm -rf "$TEMPDIR" >/dev/null 2>&1' 0
 trap "exit 2" 1 2 3 15
 
 trap 'rm -rf "$TEMPDIR" >/dev/null 2>&1' 0
 trap "exit 2" 1 2 3 15
 
+cat << EOM
+
+This script is going to download the UAC Firmware for the Microsoft
+Kinect Sensor device from the Microsoft Kinect for Windows SDK:
+http://kinectforwindows.org/
+
+The full license of the SDK can be found at:
+http://research.microsoft.com/en-us/um/legal/kinectsdk-tou_noncommercial.htm
+
+EOM
+
 cd "$TEMPDIR"
 ARCHIVE_NAME=$(basename "$SDK_URL")
 rm -f "$ARCHIVE_NAME" && wget "$SDK_URL" -O "$ARCHIVE_NAME"
 cd "$TEMPDIR"
 ARCHIVE_NAME=$(basename "$SDK_URL")
 rm -f "$ARCHIVE_NAME" && wget "$SDK_URL" -O "$ARCHIVE_NAME"
-7z e -y -r "$ARCHIVE_NAME" "UACFirmware.*"
 
 
-FW_FILE=$(ls UACFirmware.* | cut -d ' ' -f 1)
+ARCHIVE_MD5=$(md5sum "$ARCHIVE_NAME" | grep --only-matching -m 1 '^[0-9a-f]*')
+if [ "$ARCHIVE_MD5" != "$SDK_MD5" ];
+then
+  echo "$(basename "$0"): Invalid hash for file '$ARCHIVE_NAME'." 1>&2
+  exit 1
+fi
 
 
-install -d "$DESTDIR/$FW_DESTDIR"
-install -m 644 "$FW_FILE" "$DESTDIR/$FW_DESTDIR"
+echo -n "Extracting the UAC firmware..."
+7z e -y -r "$ARCHIVE_NAME" "UACFirmware.*" > /dev/null
+echo " done."
 
 
-FIRMWARE_PATH=$FW_DESTDIR/$(basename "$FW_FILE")
+FW_FILE=$(ls UACFirmware.* | cut -d ' ' -f 1)
+FIRMWARE_PATH="${FW_DESTDIR}/UACFirmware"
 
 
-if [ -f "${DESTDIR}/lib/udev/rules.d/55-kinect_audio.rules" ];
-then
-  sed -e "s|@LOADER_PATH@|$LOADER_PATH|g" \
-      -e "s|@FIRMWARE_PATH@|$FIRMWARE_PATH|g" \
-      -i "${DESTDIR}/lib/udev/rules.d/55-kinect_audio.rules"
-fi
+install -d "$FW_DESTDIR"
+install -m 644 "$FW_FILE" "$FIRMWARE_PATH"