126 lines
2.6 KiB
Bash
Executable File
126 lines
2.6 KiB
Bash
Executable File
#!/bin/mksh
|
|
|
|
# Kernel constant definitions.
|
|
EV_KEY=1
|
|
EV_REL=2
|
|
EV_ABS=3
|
|
EV_FF=21
|
|
BTN_MOUSE=272
|
|
ASCII_KEYS="30 48 46 32 18 33 34 35 23 36 37 38 50 49 24 25 16 19 31 20 22 47 17 45 21 44"
|
|
INPUT_PROP_POINTER=0
|
|
INPUT_PROP_DIRECT=1
|
|
|
|
# Helper functions
|
|
bitmap_contains() {
|
|
hexstr="$1"
|
|
bitnum="$2"
|
|
|
|
char_from_right=$(( bitnum / 4 ))
|
|
bit_in_char=$(( bitnum % 4 ))
|
|
|
|
chars_per_group=16
|
|
group_index=$(( char_from_right / chars_per_group ))
|
|
char_in_group=$(( char_from_right % chars_per_group ))
|
|
|
|
set -A groups $hexstr
|
|
n=${#groups[@]}
|
|
|
|
idx=$(( n - 1 - group_index ))
|
|
if [ "$idx" -lt 0 ] || [ "$idx" -ge "$n" ]; then
|
|
return 1
|
|
fi
|
|
|
|
group=${groups[idx]}
|
|
|
|
while [ ${#group} -lt $chars_per_group ]; do
|
|
group="0$group"
|
|
done
|
|
|
|
pos=$(( chars_per_group - 1 - char_in_group ))
|
|
ch=${group:$pos:1}
|
|
|
|
case "$ch" in
|
|
0) v=0 ;; 1) v=1 ;; 2) v=2 ;; 3) v=3 ;;
|
|
4) v=4 ;; 5) v=5 ;; 6) v=6 ;; 7) v=7 ;;
|
|
8) v=8 ;; 9) v=9 ;;
|
|
a|A) v=10 ;; b|B) v=11 ;; c|C) v=12 ;; d|D) v=13 ;;
|
|
e|E) v=14 ;; f|F) v=15 ;;
|
|
*) return 1 ;;
|
|
esac
|
|
|
|
if [ $(( (v >> bit_in_char) & 1 )) -eq 1 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
ev_contains() {
|
|
evstr="$1"
|
|
evbit="$2"
|
|
|
|
evstr=$(print "$evstr" | tr -d ' \t\r\n')
|
|
|
|
val=$(( 16#${evstr} ))
|
|
|
|
if [ $(( (val >> evbit) & 1 )) -eq 1 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
export "$@"
|
|
|
|
SYSPATH="/sys/${DEVPATH}"
|
|
if [[ "$SYSPATH" = */event* ]]; then
|
|
SYSPATH="$SYSPATH/device"
|
|
fi
|
|
|
|
EV=$(cat "$SYSPATH/capabilities/ev")
|
|
KEY=$(cat "$SYSPATH/capabilities/key")
|
|
ABS=$(cat "$SYSPATH/capabilities/abs")
|
|
REL=$(cat "$SYSPATH/capabilities/rel")
|
|
PROPS=$(cat "$SYSPATH/properties")
|
|
|
|
case "$MODE" in
|
|
ID_INPUT)
|
|
echo 1
|
|
;;
|
|
ID_INPUT_MOUSE)
|
|
if bitmap_contains "$KEY" "$BTN_MOUSE" && ev_contains "$EV" "$EV_REL" ; then
|
|
echo 1
|
|
else
|
|
exit 1
|
|
fi
|
|
;;
|
|
ID_INPUT_KEYBOARD)
|
|
for i in $ASCII_KEYS; do
|
|
if ! bitmap_contains "$KEY" "$i"; then
|
|
exit 1
|
|
fi
|
|
done
|
|
echo 1
|
|
;;
|
|
ID_INPUT_TOUCHPAD)
|
|
if ev_contains "$EV" "$EV_REL" && bitmap_contains "$PROPS" "$INPUT_PROP_POINTER"; then
|
|
echo 1
|
|
else
|
|
exit 1
|
|
fi
|
|
;;
|
|
ID_INPUT_TOUCHSCREEN)
|
|
if ev_contains "$EV" "$EV_ABS" && bitmap_contains "$PROPS" "$INPUT_PROP_DIRECT"; then
|
|
echo 1
|
|
else
|
|
exit 1
|
|
fi
|
|
;;
|
|
ID_INPUT_JOYSTICK)
|
|
exit 1
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|