#!/bin/sh

# Exit on error
set -e

PATH='/sbin:/bin:/usr/sbin:/usr/bin'

if [ -x /usr/bin/logger ]; then
    LOGGER=/usr/bin/logger
elif [ -x /bin/logger ]; then
    LOGGER=/bin/logger
else
    unset LOGGER
fi

# for diagnostics
if [ -t 1 -a -z "$LOGGER" ] || [ ! -e '/dev/log' ]; then
    mesg() {
        echo "$@" >&2
    }
elif [ -t 1 ]; then
    mesg() {
        echo "$@"
        $LOGGER -t "${0##*/}[$$]" "$@"
    }
else
    mesg() {
        $LOGGER -t "${0##*/}[$$]" "$@"
    }
fi

DRIVER=$1
DEVICE_ID=$2

mesg "Driver $DRIVER"
mesg "Device_ID $DEVICE_ID"

if [ ! -d /sys/bus/hid/drivers/"$DRIVER" ] ; then
	mesg "Modprobing $DRIVER"
	modprobe "$DRIVER"
	sleep 0.05
	mesg "Modprobed $DRIVER"
fi

for GENERIC_DRIVER in "razer" "hid-generic"; do
	if [ -d /sys/bus/hid/drivers/"$GENERIC_DRIVER"/"$DEVICE_ID" ] ; then
		# Unbind from hid
		mesg "Unbinding $DEVICE_ID from $GENERIC_DRIVER"
		printf '%s' "$DEVICE_ID" > /sys/bus/hid/drivers/"$GENERIC_DRIVER"/unbind
		mesg "Binding $DEVICE_ID to $DRIVER"
		printf '%s' "$DEVICE_ID" > /sys/bus/hid/drivers/"$DRIVER"/bind
		sleep 0.1
		mesg "Finished binding $DEVICE_ID"
	fi
done

if [ -d /sys/bus/hid/drivers/"$DRIVER"/"$DEVICE_ID" ] ; then
	mesg "Changing group /sys/bus/hid/drivers/$DRIVER/$DEVICE_ID/"
	chgrp -R plugdev /sys/bus/hid/drivers/"$DRIVER"/"$DEVICE_ID"/
	mesg "Changed group /sys/bus/hid/drivers/$DRIVER/$DEVICE_ID/"
fi

