« PLANEX MZK-WNH および MZK-W300NH2 用 OpenWrt のビルド方法 | トップページ | ネットワークネームスペース機能使用時の Trema 停止エラー軽減方法 »

2013年3月10日 (日)

PLANEX MZK-WNH//MZK-W300NH2 用 OpenWrt にボタンの仕掛けを追加

先日公開した PLANEX MZK-WNH/MZK-W300NH2 用 OpenWrt において config ファイルからボタンを扱う仕掛けを用意しました。

http://wiki.openwrt.org/doc/howto/hardware.button を参考にしましたが定義ファイルには既存の /etc/config/system を使うのではなくて、新たに /etc/config/button という設定ファイルを用いています。

使い方はサンプルを見ていただければわかると思います。どのボタンで pressed(押す)、released(離す) のアクションが起きた時に何をするかを handler で指定します。
min, max は直前の状態がどれだけの秒数続いたかの条件です。例えば、released のアクションにおいて min が 8 だと最低でも8 秒は押しっぱなし(pressed)の状態が続いていたことが条件になります。これにより、ボタンを長押しした時は動作を変える、ということができます。

使えるボタンは、wps と reset です。

以下、ボタンを扱う仕掛けの設定手順です。

■手順1 /etc/hotplug2.rules の変更

/etc/hotplug2.rules ファイルの "^button" の箇所の "^" を削除します。

変更前:
SUBSYSTEM ~~ (^net$|^input$|^button$|^usb$|^ieee1394$|^block$|^atm$|^zaptel$|^tty$) {
変更後:
SUBSYSTEM ~~ (^net$|^input$|button$|^usb$|^ieee1394$|^block$|^atm$|^zaptel$|^tty$) {

■手順2 /etc/hotplug2.d/button の下に制御スクリプトを作成

まずディレクトリをつくります:

root@OpenWrt:/# mkdir -p /etc/hotplug2.d/button

以下のファイルを /etc/hotplug2.d/button/01-button として作成します。http://ranosgrant.cocolog-nifty.com/openwrt-aa-r35864/01-button

内容は以下:

#!/bin/sh
. /lib/functions.sh

chk_minmax() {
	[ -z "$min" -a -z "$max" ] || 
	[ -z "$min" -a -n "$max" -a "$max" -ge "$SEEN" ] ||
	[ -n "$min" -a -z "$max" -a "$min" -le "$SEEN" ] ||
	[ -n "$min" -a -n "$max" -a "$min" -le "$SEEN" -a "$max" -ge "$SEEN" ]
}

do_button () {
	config_get button "$1" button
	config_get action "$1" action
	config_get handler "$1" handler
	config_get min "$1" min
	config_get max "$1" max

	[ "$button" = "$BUTTON" -a "$action" = "$ACTION" ] &&
		chk_minmax && eval "$handler"
}

config_load button
config_foreach do_button button

ファイル転送する方法がない場合の技:
ファイルの内容をメモ帳やWebブラウザで開いてコピーしたのち、telnet 画面から以下を実行した状態で貼付けして、最後に Ctrl-D で終了します:
  # cat - > /etc/hotplug2.d/button/01-button

■手順3 /etc/config/button を作成

サンプルをここに用意しました。
http://ranosgrant.cocolog-nifty.com/openwrt-aa-r35864/button

内容は以下:

config button 'reset_pressed'
	option button reset
	option action pressed
	option handler 'logger reset_pressed'
	
config button 'reset_released'
	option button reset
	option action released
	option handler 'logger reset_released'
	
config button 'wps_pressed'
	option button wps
	option action pressed
	option handler 'logger wps_pressed'
	
config button 'wps_released'
	option button wps
	option action released
	option handler 'logger wps_released'
	
config button 'wps_long_holding'
	option button wps
	option action released
	option handler 'logger wps_long_holding'
	option min 8
	
config button 'wps_short_holding'
	option button wps
	option action released
	option handler 'logger wps_short_holding'
	option max 1
	
config button 'wps_middle_holding'
	option button wps
	option action released
	option handler 'logger wps_middle_holding'
	option min 2
	option max 7

動作確認だけは上記でして、後は好きにいじってください。

■動作確認
logread -f コマンドを実行してボタンを押した時に、表示される文字列を確認してください。

サンプルで handler に指定している logger は引数で指定された文字列をログに書き込みをするコマンドです。このログの内容は、logread コマンドで確認できます。

logread に -f オプションを付けるとずっとログ監視し続け追加がされた行のみ表示していってくれます。

WPSボタンを押してすぐに離した場合の例:

root@OpenWrt:/# logread -f
Jan  1 01:59:06 OpenWrt user.notice root: wps_pressed
Jan  1 01:59:06 OpenWrt user.notice root: wps_released
Jan  1 01:59:06 OpenWrt user.notice root: wps_short_holding

WPSボタンを4秒押し続けて離した場合の例:

root@OpenWrt:/# logread -f
Jan  1 02:00:08 OpenWrt user.notice root: wps_pressed
Jan  1 02:00:12 OpenWrt user.notice root: wps_released
Jan  1 02:00:12 OpenWrt user.notice root: wps_middle_holding

上記の時刻の箇所を見てください。pressed から4秒後に released していることで wps_middle_holding が出力されています。

p.s.
WPSボタンを利用する場合は、押しやすいので間違えて押しても反応しないようにある程度押し続けた場合だけ処理するようにした方が良いと思います。

« PLANEX MZK-WNH および MZK-W300NH2 用 OpenWrt のビルド方法 | トップページ | ネットワークネームスペース機能使用時の Trema 停止エラー軽減方法 »

openwrt」カテゴリの記事

PLANEX MZK-W300NH2」カテゴリの記事

PLANEX MZK-WNH」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1776113/50687510

この記事へのトラックバック一覧です: PLANEX MZK-WNH//MZK-W300NH2 用 OpenWrt にボタンの仕掛けを追加:

« PLANEX MZK-WNH および MZK-W300NH2 用 OpenWrt のビルド方法 | トップページ | ネットワークネームスペース機能使用時の Trema 停止エラー軽減方法 »

最近のトラックバック

無料ブログはココログ