#!/bin/sh # # Copyright (C) 2017 Wolfgang Wiedmeyer # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . set -e DEVICE=$1 FW_FUNC=$2 ACTION=$3 FW_HOST="https://github.com" ADB="adb" get_files () { fw_file=$1 mkdir -p "$DEVICE-fw" cat "$DEVICE-fwinfo/$fw_file.txt" | while read file do link=${file%:*} wget "$FW_HOST/$link" -O "$DEVICE-fw/"$( basename $file ) done } find_files () { fw_file=$1 cat "$DEVICE-fwinfo/$fw_file.txt" | while read file do path="$DEVICE-fw/"$( basename $file ) if [ ! -f "$path" ] then echo "$path missing, downloading..." get_files $fw_file break fi done } prepare_adb () { echo -n "Using " $ADB version $ADB root sleep 3 $ADB remount } push_files () { fw_file=$1 cat "$DEVICE-fwinfo/$fw_file.txt" | while read file_string do file="${file_string#*:}" echo "Pushing $file" path="$DEVICE-fw/"$( basename $file ) $ADB push "$path" "$file" done } remove_files () { fw_file=$1 cat "$DEVICE-fwinfo/$fw_file.txt" | while read file do path="${file#*:}" echo "Removing $path" $ADB shell rm -f "$path" done } list_func () { echo "The following functionalities can be enabled:" for file in "$DEVICE-fwinfo/"*.txt do echo $( basename $file .txt ) done exit 0 } eval_fw_func () { command=$1 case "$FW_FUNC" in "all") for file in "$DEVICE-fwinfo/"*.txt do $command $( basename $file .txt ) done ;; *) $command $FW_FUNC ;; esac } if [ "$DEVICE" = "" ] || [ "$FW_FUNC" = "" ] then echo "Usage: $0 [DEVICE] [FUNCTIONALITY]" echo " $0 [DEVICE] [FUNCTIONALITY] remove" echo echo "Run \"$0 [DEVICE] list\" to get a list of functionalities that can be enabled" echo "or specify \"all\" to enable/remove all supported functionalities" echo exit 1 fi if [ ! -d "$DEVICE-fwinfo" ] then echo "$DEVICE is not supported" echo "The following devices are supported:" for dir in *-fwinfo do echo "${dir%-fwinfo}" done exit 1 fi if [ "$FW_FUNC" = "list" ] then list_func fi if [ "$FW_FUNC" != "all" ] && [ ! -f "$DEVICE-fwinfo/$FW_FUNC.txt" ] then echo "$FW_FUNC is not a functionality that can be enabled" echo list_func fi case "$ACTION" in "remove") prepare_adb eval_fw_func remove_files ;; *) eval_fw_func find_files prepare_adb $ADB shell mkdir -p /system/vendor/firmware eval_fw_func push_files ;; esac echo "rebooting the device" $ADB reboot echo "finished successfully"