kinect_upload_fw: factor out an upload_firmware function
[kinect-audio-setup.git] / kinect_fetch_fw
1 #!/bin/sh
2 #
3 # kinect_fetch_fw -  Fetch and install the Microsoft Kinect UAC firmware
4 #
5 # Copyright (C) 2011  Antonio Ospite <ospite@studenti.unina.it>
6 #
7 # This program is free software. It comes without any warranty, to
8 # the extent permitted by applicable law. You can redistribute it
9 # and/or modify it under the terms of the Do What The Fuck You Want
10 # To Public License, Version 2, as published by Sam Hocevar. See
11 # http://sam.zoy.org/wtfpl/COPYING for more details.
12 #
13 # wget and 7z from p7zip-full are needed, they can be installed with
14 #   sudo aptitude install wget p7zip-full
15 #
16 # NOTE: p7zip-full >= 9.20 is required in order to extract .msi files
17 #       correctly
18
19 set -e
20
21 SDK_URL=${SDK_URL:-"http://download.microsoft.com/download/F/9/9/F99791F2-D5BE-478A-B77A-830AD14950C3/KinectSDK-v1.0-beta2-x86.msi"}
22 SDK_MD5="40764fe9e00911bda5095e5be777e311"
23
24 [ $# -lt 1 ] && { echo "usage: $(basename "$0") <firmware destdir> [<path of kinect_upload_fw binary>]" 1>&2; exit 1; }
25 FW_DESTDIR=$(readlink -f $1)
26 LOADER_PATH=${2:-"/usr/local/sbin/kinect_upload_fw"}
27
28 command -v wget >/dev/null 2>&1 || { echo "$(basename "$0"): command 'wget' is needed." 1>&2 ; exit 1; }
29 command -v 7z >/dev/null 2>&1 || { echo "$(basename "$0"): command '7z' is needed." 1>&2; exit 1; }
30
31 TEMPDIR=$(mktemp -d)
32 trap 'rm -rf "$TEMPDIR" >/dev/null 2>&1' 0
33 trap "exit 2" 1 2 3 15
34
35 cat << EOM
36
37 This script is going to download the UAC Firmware for the Microsoft 
38 Kinect Sensor device from the Microsoft Kinect for Windows SDK:
39 http://kinectforwindows.org/
40
41 The full license of the SDK can be found at:
42 http://www.kinectforwindows.org/download/EULA.htm
43
44 EOM
45
46 cd "$TEMPDIR"
47 ARCHIVE_NAME=$(basename "$SDK_URL")
48 rm -f "$ARCHIVE_NAME" && wget "$SDK_URL" -O "$ARCHIVE_NAME"
49
50 ARCHIVE_MD5=$(md5sum "$ARCHIVE_NAME" | grep --only-matching -m 1 '^[0-9a-f]*')
51 if [ "$ARCHIVE_MD5" != "$SDK_MD5" ];
52 then
53   echo "$(basename "$0"): Invalid hash for file '$ARCHIVE_NAME'." 1>&2
54   exit 1
55 fi
56
57 echo -n "Extracting the UAC firmware..."
58 7z e -y -r "$ARCHIVE_NAME" "UACFirmware.*" > /dev/null
59 echo " done."
60
61 FW_FILE=$(ls UACFirmware.* | cut -d ' ' -f 1)
62
63 install -d "${DESTDIR}${FW_DESTDIR}"
64 install -m 644 "$FW_FILE" "${DESTDIR}${FW_DESTDIR}"
65
66 FIRMWARE_PATH=$FW_DESTDIR/$(basename "$FW_FILE")
67
68 if [ -f "${DESTDIR}/lib/udev/rules.d/55-kinect_audio.rules" ];
69 then
70   sed -e "s|@LOADER_PATH@|$LOADER_PATH|g" \
71       -e "s|@FIRMWARE_PATH@|$FIRMWARE_PATH|g" \
72       -i "${DESTDIR}/lib/udev/rules.d/55-kinect_audio.rules"
73 fi