Ïðèâåò âñåì,
â îáùåì ñäåëàë çàïóñê ñêðèïòà ïî íàæàòèþ êíîïêè EZ SETUP (êðàñíàÿ). Ê ñ÷àñòüþ îáîøëîñü áåç ïåðåñáîðêè, õîòÿ è íåìíîãî êðèâîâàòî - âðåìÿ ðåàêöèè íà íàæàòèå ñîñòàâëÿåò 1-1.5 ñåê.
Ðàáîòàåò íà 1.9.2.7-7f, WL500gP. ÂÍÈÌÀÍÈÅ! Ñóäÿ ïî watchdog.c äëÿ äðóãèõ ìîäåëåé ìîæåò ïîòðåáîâàòüñÿ èçìåíèòü ìåõàíèçì îïðîñà (ì.á. äðóãèå áèòû è ìåõàíèçì ÷òåíèÿ).
È òàê, ÷òî ïîëó÷èëîñü. Îñíîâíîé ñêðèïò:
watch-ezbtn:
Code:
#!/bin/sh
EZBTNACTION=/tmp/local/sbin/ezbtn-action
if [ -x "$1" ]
then EZBTNACTION="$1"
fi
ezbtnstate=0
ezbtnpresscount=0
while true; do
sleep 1
if [ $ezbtnstate -ne `dd if=/dev/gpio/in count=1 2>/dev/null|od -L|awk '{print int($2 / 16) % 2; exit}'` ]
then if [ $ezbtnstate -eq 0 ]
then ezbtnstate=1;ezbtnpresscount=`expr $ezbtnpresscount + 1`;$EZBTNACTION press $ezbtnpresscount;
else ezbtnstate=0;$EZBTNACTION release $ezbtnpresscount;
fi
fi
done
Îí çàïóñêàåòñÿ ïðè çàãðóçêå èç post-boot ñòðîêîé
Code:
nohup /usr/local/sbin/watch-ezbtn&
Ïðè íàæàòèè è îòïóñêàíèè êíîïêè âûçûâàåò /tmp/local/sbin/ezbtn-action ñ äâóìÿ ïàðàìåòðàìè:
1. press èëè release
2. ïîðÿäêîâûé íîìåð íàæàòèÿ - óäîáíî äëÿ ðåàëèçàöèè ôóíêöèè âêë/âûêë åñëè íåò èëè ñëîæíî îïðîñèòü òåê ñîñòîÿíèå.
Ïðèìåð äëÿ ezbtn-action ì.á. âîò òàêîé (âêëþ÷àåò/âûêëþ÷àåò Wi-Fi):
Code:
#!/bin/sh
# it gets $1 as [press|release] [# of pressed]
# you can use `expr $2 % 2`to switch between on/off states of something
case "$1" in
"press")
if [ `expr $2 % 2` -eq 1 ]
then wl radio off
else wl radio on
fi;;
"release") ;;
*) exit;;
esac