⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 input.agent

📁 这是关于usb等方面的热拔插源代码
💻 AGENT
字号:
#!/bin/sh## input-specific hotplug policy agent.## This should handle 2.6.* input hotplugging,# with a consistent framework for adding device and driver# specific handling.## Normally, adding a input device will modprobe handler(s) for# this device.## Kernel input hotplug params include (not all of them may be available):#	#	ACTION=%s [add or remove]#	PRODUCT=%x/%x/%x/%x#	NAME=%s#	PHYS=%s#	EV=%lx#	KEY=%lx %lx ...#	REL=%lx#	ABS=%lx %lx ...#	MSC=%lx#	LED=%lx#	SND=%lx#	FF=%lx %lx ...## HISTORY:## 30-Jul-2003	initial version#cd /etc/hotplug. ./hotplug.functions# DEBUG=yes export DEBUG# generated by module-init-toolsMAP_CURRENT=$MODULE_DIR/modules.inputmap# accumulates list of modules we may care aboutDRIVERS=""if [ "$ACTION" = "" ]; then    mesg Bad INPUT agent invocation, no action    exit 1fi# we can't "unset IFS" on bash1, so save a copyDEFAULT_IFS="$IFS"## Each modules.inputmap format line corresponds to one entry in a# MODULE_DEVICE_TABLE(input,...) declaration in a kernel file.#matchBits=0; i_bustype=0; i_vendor=0; i_product=0; i_version=0; i_evBits=0input_join_words (){    local name="$1" array="$2" tmp    if [ "$array" = '' ]; then	return    fi    set $array    tmp="$1"    shift    while [ "$#" -gt 0 ]; do	tmp="$tmp:$1"	shift    done    eval "$name=\"$tmp\""}input_convert_vars (){    if [ "$PRODUCT" != "" ]; then	IFS=/	set $PRODUCT ''	IFS="$DEFAULT_IFS"	i_bustype=$((0x$1))	i_vendor=$((0x$2))	i_product=$((0x$3))	i_version=$((0x$4))    fi    if [ "$EV" != "" ]; then	i_evBits=$((0x$EV))    fi    input_join_words i_keyBits "$KEY"    input_join_words i_relBits "$REL"    input_join_words i_absBits "$ABS"    input_join_words i_mscBits "$MSC"    input_join_words i_ledBits "$LED"    input_join_words i_sndBits "$SND"    input_join_words i_ffBits  "$FF"}INPUT_DEVICE_ID_MATCH_BUS=1INPUT_DEVICE_ID_MATCH_VENDOR=2INPUT_DEVICE_ID_MATCH_PRODUCT=4INPUT_DEVICE_ID_MATCH_VERSION=8INPUT_DEVICE_ID_MATCH_EVBIT=$((0x010))INPUT_DEVICE_ID_MATCH_KEYBIT=$((0x020))INPUT_DEVICE_ID_MATCH_RELBIT=$((0x040))INPUT_DEVICE_ID_MATCH_ABSBIT=$((0x080))INPUT_DEVICE_ID_MATCH_MSCBIT=$((0x100))INPUT_DEVICE_ID_MATCH_LEDBIT=$((0x200))INPUT_DEVICE_ID_MATCH_SNDBIT=$((0x400))INPUT_DEVICE_ID_MATCH_FFBIT=$((0x800))input_match_bits (){    local mod_bits=$1 dev_bits=$2    if [ "$dev_bits" = "" ]; then	return 0    fi    mword=$((0x${mod_bits##*:}))    dword=$((0x${dev_bits##*:}))    while true; do	if [ $(( $mword & $dword != $mword )) -eq 1 ]; then	    return 1	fi	mod_bits=${mod_bits%:*}	dev_bits=${dev_bits%:*}	case "$mod_bits-$dev_bits" in	    *:*-*:* )		: continue	    ;;	    *:*-*|*-*:* )		return 0	    ;;	    * )		return 1	    ;;	esac    done}## stdin is "modules.inputmap" syntax# on return, all matching modules were added to $DRIVERS#input_map_modules (){    local line module    local relBits mscBits ledBits sndBits keyBits absBits ffBits    while read line    do        # comments are lines that start with "#" ...	# be careful, they still get parsed by bash!	case "$line" in	\#*) continue ;;	esac	set $line	module="$1"	matchBits=$(($2))	bustype=$(($3))	vendor=$(($4))	product=$(($5))	version=$(($6))	evBits="$7"	keyBits="$8"	relBits="$9"	shift 9	absBits="$1"	cbsBits="$2"	ledBits="$3"	sndBits="$4"	ffBits="$5"	driverInfo=$(($6))	: checkmatch $module	: bustype $bustype $i_bustype        if [ $INPUT_DEVICE_ID_MATCH_BUS -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_BUS )) ] && 	   [ $bustype -ne $i_bustype ]; then	    continue	fi	: vendor $vendor $i_vendor        if [ $INPUT_DEVICE_ID_MATCH_VENDOR -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_VENDOR )) ] && 	   [ $vendor -ne $i_vendor ]; then	    continue	fi	: product $product $i_product        if [ $INPUT_DEVICE_ID_MATCH_PRODUCT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_PRODUCT )) ] && 	   [ $product -ne $i_product ]; then	    continue	fi	# version i_version $i_version < version $version        if [ $INPUT_DEVICE_ID_MATCH_VERSION -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_VERSION )) ] && 	   [ $version -ge $i_version ]; then	    continue	fi	: evBits $evBits $i_evBits        if [ $INPUT_DEVICE_ID_MATCH_EVBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_EVBIT )) ] && 	   input_match_bits "$evBits" "$i_evBits"; then	    continue	fi	: keyBits $keyBits $i_keyBits        if [ $INPUT_DEVICE_ID_MATCH_KEYBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_KEYBIT )) ] && 	   input_match_bits "$keyBits" "$i_keyBits"; then	    continue	fi	: relBits $relBits $i_relBits        if [ $INPUT_DEVICE_ID_MATCH_RELBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_RELBIT )) ] && 	   input_match_bits "$relBits" "$i_relBits"; then	    continue	fi	: absBits $absBits $i_absBits        if [ $INPUT_DEVICE_ID_MATCH_ABSBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_ABSBIT )) ] && 	   input_match_bits "$absBits" "$i_absBits"; then	    continue	fi	: mscBits $mscBits $i_mscBits        if [ $INPUT_DEVICE_ID_MATCH_MSCBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_MSCBIT )) ] && 	   input_match_bits "$mscBits" "$i_mscBits"; then	    continue	fi	: ledBits $ledBits $_ledBits        if [ $INPUT_DEVICE_ID_MATCH_LEDBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_LEDBIT )) ] && 	   input_match_bits "$ledBits" "$i_ledBits"; then	    continue	fi	: sndBits $sndBits $i_sndBits        if [ $INPUT_DEVICE_ID_MATCH_SNDBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_SNDBIT )) ] && 	   input_match_bits "$sndBits" "$i_sndBits"; then	    continue	fi	: ffBits $ffBits $i_ffBits        if [ $INPUT_DEVICE_ID_MATCH_FFBIT -eq $(( $matchBits & $INPUT_DEVICE_ID_MATCH_FFBIT )) ] && 	   input_match_bits "$ffBits" "$i_ffBits"; then	    continue	fi	: driverInfo $driverInfo	if [ $matchBits -eq 0 -a $driverInfo -eq 0 ]; then		continue	fi	# It was a match!	case " $DRIVERS " in	    *" $module "* )		: already found	    ;;	    * )		DRIVERS="$module $DRIVERS"	    ;;	esac	: drivers $DRIVERS    done}## What to do with this INPUT hotplug event?#case $ACTION inadd)    input_convert_vars    FOUND=false    LABEL="INPUT product $PRODUCT"    if [ -r $MAP_CURRENT ]; then	load_drivers input $MAP_CURRENT "$LABEL"    fi    if [ "$DRIVERS" != "" ]; then	FOUND=true    fi    if [ "$FOUND" = "false" ]; then	debug_mesg "... no modules for $LABEL"	exit 2    fi    ;;remove)    : nothing so far    ;;*)    debug_mesg INPUT $ACTION event not supported    exit 1    ;;esac

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -