244 lines
6.1 KiB
Bash
Executable File
244 lines
6.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# * Neither the name of The Linux Foundation nor the names of its
|
|
# contributors may be used to endorse or promote products derived from
|
|
# this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE DISCLAIMED. IN NO
|
|
# EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
# Switch to a chosen USB composition.
|
|
|
|
COMP_DIR="/usr/bin/usb/compositions"
|
|
symlink_hsusb="/usr/bin/usb/boot_hsusb_composition"
|
|
symlink_hsic="/usr/bin/usb/boot_hsic_composition"
|
|
|
|
legal_composition() {
|
|
for c in $( ls $COMP_DIR ); do
|
|
if [ "$1" = "$c" ]; then
|
|
echo "1"
|
|
exit
|
|
fi
|
|
done
|
|
echo "0"
|
|
}
|
|
|
|
read_pid() {
|
|
local tmp_pid='0'
|
|
read -p "Pid number : " tmp_pid
|
|
while [ true ]; do
|
|
if [ `legal_composition $tmp_pid` = "1" ]; then
|
|
echo "$tmp_pid"
|
|
exit
|
|
fi
|
|
read -p "Illegal Pid number, try again : " tmp_pid
|
|
done
|
|
}
|
|
|
|
read_hsic() {
|
|
local tmp_hsic='0'
|
|
read -p "Choose core: y - hsic, n - hsusb ? (y/n)" tmp_hsic
|
|
while [ true ]; do
|
|
if [ $tmp_hsic = "y" ] || [ $tmp_hsic = "n" ]; then
|
|
echo "$tmp_hsic"
|
|
exit
|
|
fi
|
|
read -p "Only 'y' or 'n' are allowed, try again : " tmp_hsic
|
|
done
|
|
}
|
|
|
|
read_persistent() {
|
|
local tmp_persistent='0'
|
|
read -p "Would you like it to be the default composition ? (y/n)" tmp_persistent
|
|
while [ true ]; do
|
|
if [ $tmp_persistent = "y" ] || [ $tmp_persistent = "n" ]; then
|
|
echo "$tmp_persistent"
|
|
exit
|
|
fi
|
|
read -p "Only 'y' or 'n' are allowed, try again : " tmp_persistent
|
|
done
|
|
}
|
|
|
|
read_immediate() {
|
|
local tmp_immediate='0'
|
|
read -p "Would you like the composition to change immediately? (y/n)" tmp_immediate
|
|
while [ true ]; do
|
|
if [ $tmp_immediate = "y" ] || [ $tmp_immediate = "n" ]; then
|
|
echo "$tmp_immediate"
|
|
exit
|
|
fi
|
|
read -p "Only 'y' or 'n' are allowed, try again : " tmp_immediate
|
|
done
|
|
}
|
|
|
|
common_functions() {
|
|
if [ "$1" = "empty" ] || [ "$2" = "empty" ]; then
|
|
echo "0"
|
|
exit
|
|
fi
|
|
func_list_1=`grep functions $COMP_DIR/$1 | sed 's/echo //' | sed 's/>.*$//' | tr , '\n' | tr : '\n'`
|
|
func_list_2=`grep functions $COMP_DIR/$2 | sed 's/echo //' | sed 's/>.*$//' | tr , '\n' | tr : '\n'`
|
|
for func_1 in $func_list_1
|
|
do
|
|
for func_2 in $func_list_2
|
|
do
|
|
if [ "$func_1" = "$func_2" ]; then
|
|
echo $func_1
|
|
exit
|
|
fi
|
|
done
|
|
done
|
|
echo "0"
|
|
}
|
|
|
|
hsusb_comp=`readlink $symlink_hsusb | xargs basename`
|
|
hsic_comp=`readlink $symlink_hsic | xargs basename`
|
|
|
|
if [ "$#" -ge 5 ]; then
|
|
echo "Usage: usb_composition [Pid] [HSIC] [PERSISTENT] [IMMEDIATE]" >&2
|
|
exit 6
|
|
|
|
elif [ "$#" -eq 4 ]; then
|
|
|
|
if [ `legal_composition $1` = "0" ]; then
|
|
echo "Illegal pid"
|
|
exit 1
|
|
fi
|
|
if [ $2 != "y" ] && [ $2 != "n" ]; then
|
|
echo "Illegal hsic choice (must be 'y' or 'n')."
|
|
exit 2
|
|
fi
|
|
if [ $3 != "y" ] && [ $3 != "n" ]; then
|
|
echo "Illegal persistent choice (must be 'y' or 'n')."
|
|
exit 3
|
|
fi
|
|
if [ $4 != "y" ] && [ $4 != "n" ]; then
|
|
echo "Illegal immediate choice (must be 'y' or 'n')."
|
|
exit 4
|
|
fi
|
|
pid=$1
|
|
hsic=$2
|
|
persistent=$3
|
|
immediate=$4
|
|
|
|
elif [ "$#" -eq 3 ]; then
|
|
|
|
if [ `legal_composition $1` = "0" ]; then
|
|
echo "Illegal pid"
|
|
exit 1
|
|
fi
|
|
if [ $2 != "y" ] && [ $2 != "n" ]; then
|
|
echo "Illegal hsic choice (must be 'y' or 'n')."
|
|
exit 2
|
|
fi
|
|
if [ $3 != "y" ] && [ $3 != "n" ]; then
|
|
echo "Illegal persistent choice (must be 'y' or 'n')."
|
|
exit 3
|
|
fi
|
|
pid=$1
|
|
hsic=$2
|
|
persistent=$3
|
|
immediate="y"
|
|
|
|
elif [ "$#" -eq 2 ]; then
|
|
|
|
if [ `legal_composition $1` = "0" ]; then
|
|
echo "Illegal pid"
|
|
exit 1
|
|
fi
|
|
if [ $2 != "y" ] && [ $2 != "n" ]; then
|
|
echo "Illegal hsic choice (must be 'y' or 'n')."
|
|
exit 2
|
|
fi
|
|
pid=$1
|
|
hsic=$2
|
|
persistent="n"
|
|
immediate="y"
|
|
|
|
elif [ "$#" -eq 1 ]; then
|
|
|
|
if [ `legal_composition $1` = "0" ]; then
|
|
echo "Illegal pid"
|
|
exit 1
|
|
fi
|
|
pid=$1
|
|
hsic="n"
|
|
persistent="n"
|
|
immediate="y"
|
|
|
|
elif [ "$#" -eq 0 ]; then
|
|
|
|
echo "boot hsusb composition: $hsusb_comp"
|
|
echo "boot hsic composition: $hsic_comp"
|
|
echo "Choose Composition by Pid:"
|
|
for i in $( ls $COMP_DIR ); do
|
|
desc=`grep DESCRIPTION: $COMP_DIR/$i | sed 's/.*DESCRIPTION: *//g'`
|
|
echo " $i - $desc"
|
|
done
|
|
pid=`read_pid`
|
|
hsic=`read_hsic`
|
|
persistent=`read_persistent`
|
|
immediate=`read_immediate`
|
|
|
|
fi
|
|
|
|
if [ $persistent = "n" ]; then
|
|
if [ $immediate = "n" ]; then
|
|
echo "Change will have no effect - Illegal combination of not persistent and not immediate"
|
|
exit 5
|
|
fi
|
|
fi
|
|
|
|
if [ $hsic = "y" ]; then
|
|
other=$hsusb_comp
|
|
else
|
|
other=$hsic_comp
|
|
fi
|
|
|
|
common=`common_functions $other $pid`
|
|
if [ $common != "0" ]; then
|
|
echo "Can't change composition, hsusb and hsic cant use the same usb function : $common"
|
|
exit 7
|
|
fi
|
|
|
|
if [ $persistent = "y" ]; then
|
|
if [ $hsic = "y" ]; then
|
|
rm $symlink_hsic
|
|
ln -s $COMP_DIR/$pid $symlink_hsic
|
|
rm /usr/bin/usb/compositions/hsic_next
|
|
echo "$pid" > /usr/bin/usb/compositions/hsic_next
|
|
else
|
|
rm $symlink_hsusb
|
|
ln -s $COMP_DIR/$pid $symlink_hsusb
|
|
rm /usr/bin/usb/compositions/hsusb_next
|
|
echo "$pid" > /usr/bin/usb/compositions/hsusb_next
|
|
fi
|
|
fi
|
|
|
|
if [ $hsic = "n" ]; then
|
|
if [ $immediate = "y" ]; then
|
|
$COMP_DIR/$pid n
|
|
fi
|
|
else
|
|
echo "Please reboot device for HSIC composition to take effect"
|
|
fi
|
|
|
|
|