#!/bin/sh -e
# Find "real" keyboard devices and print their device path.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
#
# Copyright (C) 2009, Canonical Ltd.
#
# 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 2 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.


# print a list of input devices which are keyboard-like
keyboard_devices() {
    # standard AT keyboard
    for dev in `udevadm trigger --dry-run --verbose --property-match=ID_INPUT_KEYBOARD=1`; do
        walk=`udevadm info --attribute-walk --path=$dev`
	env=`udevadm info --query=env --path=$dev`
        if echo "$walk" | grep -q 'DRIVERS=="atkbd"'; then
            echo -n 'AT keyboard: '
	elif echo "$env" | grep -q '^ID_USB_DRIVER=usbhid'; then
            echo -n 'USB keyboard: '
	else
	    echo -n 'Unknown type: '
        fi
	udevadm info --query=name --path=$dev
    done

    # modules
    module=`udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*Extra Buttons'`
    module="$module
`udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*extra buttons'`"
    module="$module
`udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='Sony Vaio Keys'`"
    for m in $module; do
	evdev=`ls -d $m/event* 2>/dev/null`
	if [ -e "$evdev/dev" ]; then
	    echo -n 'module: '
	    udevadm info --query=name --path=$evdev
	fi
    done
}

keyboard_devices
