Привет всем,
в общем сделал запуск скрипта по нажатию кнопки 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