magisk-ghid/bin/ghid.sh

49 lines
1.5 KiB
Bash

#!/system/bin/sh
# $1 setup
controller=$(getprop sys.usb.controller)
moddir=${0%bin/*}
selected=standard-keyboard
remove_ghid() {
rm /config/usb_gadget/g1/configs/b.1/fhid
rmdir /config/usb_gadget/g1/functions/hid.usb0
echo "$controller" >/config/usb_gadget/g1/UDC
}
enable_ghid() {
running=true
. "$moddir/definitions/$selected"
if [ ! -d /config/usb_gadget/g1/functions/hid.usb0 ]; then
mkdir /config/usb_gadget/g1/functions/hid.usb0
fi
current_protocols="$(cat /config/usb_gadget/g1/functions/hid.usb0/protocol)"
current_subclasses="$(cat /config/usb_gadget/g1/functions/hid.usb0/subclass)"
current_report_lengths="$(cat /config/usb_gadget/g1/functions/hid.usb0/report_length)"
if ! { [[ -e /config/usb_gadget/g1/functions/hid.usb0 -a "$current_protocols" == "$protocols" -a "$current_subclasses" == "$subclasses" -a "$current_report_lengths" == "$report_lengths" ]] && diff "$moddir/reports/$report_names" /config/usb_gadget/g1/functions/hid.usb0/report_desc } ; then
return 0
fi
echo $protocols >/config/usb_gadget/g1/functions/hid.usb0/protocol
echo $subclasses >/config/usb_gadget/g1/functions/hid.usb0/subclass
echo $report_lengths >/config/usb_gadget/g1/functions/hid.usb0/report_length
cp $report_names /config/usb_gadget/g1/functions/hid.usb0/report_desc
ln -s /config/usb_gadget/g1/functions/hid.usb0 /config/usb_gadget/g1/configs/b.1/fhid
echo "$controller" >/config/usb_gadget/g1/UDC
}
if ! [[ "$1" == "setup" ]]; then
exit 1
fi
shift
case "$1" in
""|"none" )
remove_ghid
;;
* )
enable_ghid
;;
esac