Hab ich was übersehen? (etwas länger...)

14/07/2010 - 10:58 von Ansgar Strickerschmidt | Report spam
Hallo NG,

ich bin in Sachen Skripting immer noch blutiger Anfànger. Dennoch stand
ich vor der Aufgabe, ein Skript zum Funktionieren zu bringen, das folgende
Aufgabe erfüllt:
Ein (Embedded-)Geràt (mit QT/Embedded-Oberflàche) ist mit einem
Touchscreen ausgestattet und zusàtzlich mit einer USB-Buchse, an die
optional eine Maus angeschlossen werden kann. Wenn eine Maus vorhanden
ist, soll der Touchscreen deaktiviert werden. Das ganze wird für den
Aufruf von Qt/Embedded über ein paar Variablen gesteuert.
Die verschiedenen Pointer-Devices werden über ihre Eintràge in
/sys/class/input erkannt. Ist nur der Touchscreen vorhanden, existiert in
/sys/class/input typischerweise etwas wie
input0 event0 mouse0 (ja, mouse0 auch für Touchscreen).
Steckt man nun eine (oder mehrere??) Màuse dazu, kommen eben Eintràge mit
Index 1,2, ... dazu.
Der Touchscreen wird über den Namen "TSC2007 Touchscreen" in
/sys/class/input/inputX/name identifiziert.

Hier sind die zwei Versionen der entscheidenden Funktion:

Die alte, die nicht immer richtig funktioniert hat:

<snip>
#!/bin/sh

# start with some defaults
PTRDEV=/dev/event0
PROTO=tslib

set_pointer_device()
{

IBASE=/sys/class/input

for item in `ls $IBASE | grep input`; do
MOUSE=`ls $IBASE/$item | grep mouse`
EVENT=`ls $IBASE/$item | grep ^event`
if [ ! -z "$MOUSE" -a ! -z "$EVENT" ]; then
NAME=`cat $IBASE/$item/name`
if [ "x$NAME" = "xTSC2007 Touchscreen" ]; then
# touchscreen (use last found)
PTRDEV="/dev/$EVENT"
PROTO=tslib
else
# non-touchscreen mouse (use first found)
PTRDEV="/dev/$MOUSE"
PROTO="IntelliMouse"
return
fi
fi

}

set_pointer_device
echo "using $PROTO:$PTRDEV"
(...)
<snap>

Meine neue Version (die soweit bislang bekannt funktioniert):

<snip>
#!/bin/sh

# start with some defaults
PTRDEV=/dev/event0
PROTO=tslib

set_pointer_device()
{
OLD_DIR=$PWD

cd /sys/class/input

for i in input* ; do
NUMBER="${i#input}"
if [ -z "$NUMBER" ]; then
echo "DEBUG: Fehler: input ohne nachfolgende Nummer??"
exit -1
fi

if [ ! -z "$(grep -F "TSC2007 Touchscreen" $i/name)" ];
then
PTRDEV="/dev/event$NUMBER"
PROTO="tslib"
else
PTRDEV="/dev/mouse$NUMBER"
PROTO="IntelliMouse"
fi
done

cd $OLD_DIR
}

set_pointer_device
echo "using $PROTO:$PTRDEV"
(...)
<snap>


Jetzt die FRAGE:

Bietet die alte Funktion, die ich leider ziemlich verwirrend finde,
irgendeine Funktionalitàt, die meine neue Funktion nicht enthàlt? Habe ich
was übersehen? Ich meine, dass bspw. ein Device "event1" mit einem
"input2" zusammengehört, sollte nicht vorkommen... allerdings: sollte sich
bei der Erkennung jemals eine Maus *vor* den Touchscreen mogeln (was ich
bisher nie beobachtet habe), würde der Touchscreen aktiv bleiben...

Allgemeine Tipps, wie man das noch eleganter machen könnte?

Ansgar

*** Musik! ***
 

Lesen sie die antworten

#1 Helmut
14/07/2010 - 11:13 | Warnen spam
Hallo, Ansgar,

Du meintest am 14.07.10:

Meine neue Version (die soweit bislang bekannt funktioniert):

<snip>
#!/bin/sh

# start with some defaults
PTRDEV=/dev/event0
PROTO=tslib

set_pointer_device()
{
OLD_DIR=$PWD

cd /sys/class/input

for i in input* ; do
NUMBER="${i#input}"
if [ -z "$NUMBER" ]; then
echo "DEBUG: Fehler: input ohne nachfolgende
Nummer??" exit -1
fi

if [ ! -z "$(grep -F "TSC2007 Touchscreen" $i/name)"
]; then
PTRDEV="/dev/event$NUMBER"
PROTO="tslib"
else
PTRDEV="/dev/mouse$NUMBER"
PROTO="IntelliMouse"
fi
done

cd $OLD_DIR
}

set_pointer_device
echo "using $PROTO:$PTRDEV"
(...)
<snap>


Jetzt die FRAGE:

Bietet die alte Funktion, die ich leider ziemlich verwirrend finde,
irgendeine Funktionalitàt, die meine neue Funktion nicht enthàlt?



Habe ich nicht geprüft - sorry.

Allgemeine Tipps, wie man das noch eleganter machen könnte?



Kein Pfadwechsel:

for i in /sys/class/input/input* ; do
NUMBER="${i##input}"
if [ -z "$NUMBER" ]; then
echo "DEBUG: Fehler: input ohne nachfolgende Nummer??" exit -1
fi

# ...

oder

for i in /sys/class/input/input* ; do

case $i in
*/input)
echo "DEBUG: Fehler: input ohne nachfolgende Nummer??"
exit 1
;;
*)
NUMBER="${i##input}"
# ...
;;
esac

# ...


Viele Gruesse
Helmut

"Ubuntu" - an African word, meaning "Slackware is too hard for me".

Ähnliche fragen