« [Palm]WristPDA用SDK | Main | [iPod touch]曲再生の一時停止、再開、状態取得等ができるiPod touch用コマンドラインアプリケーションmmpctl »

2007.11.30

[iPod touch]WiFiをON/OFFするiPod touch用コマンドラインアプリケーションwifictlとWiFiSwitch.app

iPod touchが返ってきたので、iPod touch用いじりを再開。

Services.appのソースを発見したので、前から欲しいと思っていたWiFiのON/OFFをコントロールするコマンドラインアプリケーションを作ってみました。

名前は「wifictl」ということにしました。

SummerBoardからWiFiのON/OFFを一発で切り替えるフロントエンド、「WiFiSwitch.app」というものもついでに作りました。こっちはシェルスクリプトアプリケーションです。

インストール

いつもの野良リポジトリからどうぞ。

[iPod touch]野良ビルドのバイナリを置いたiPod touch / iPhone向けInstaller.appリポジトリ

「Utilities > wifictl」
「Utilities > WiFiSwitch」

をインストールしてください。

BSD Subsystemもインストールしていないと困るでしょう。

無保証です。

ソースコードは開示請求があれば公開します。Services.appにならい、GPL v3 or laterです。

wifictlの使い方

使い方: wifictl [オプション]

例)# wifictl -t

-o WiFiをonにします。
-f WiFiをoffにします。
-t WiFiをonとoffの間でトグルします。WiFiSwitch.appはこのオプションを使ってます。
-g WiFiの状態を数値で返します。on時は1、off時は0が返ってきます。
-h ヘルプを表示します。

WiFiSwitch.appの使い方

あらかじめwifictlをインストールしておく必要があります。
SummerBoardに表示されたWiFiSwitch.appをタップして起動です。
WiFiがoffのときに起動するとWiFiをonにします。
WiFiがonのときに起動するとWiFiをoffにします。
ワンタップでWiFiのon/offを切り替えられるわけです。

高度な使い方

本来、これはcron(もしくはlaunchd)を使った自動巡回のために作りました。

例えば以下のようなシェルスクリプトを書きます。

#!/bin/sh

off_flag=1

ifconfig en0 | grep "inet" >/dev/null

if [ $? -eq 1 ]; then
    if [ `wifictl -g` -eq 0 ]; then
    wifictl -o
    count=15
    while [ ${count} -ge 0 ]; do
        ifconfig en0 | grep "inet" >/dev/null
        if [ $? -eq 0 ]; then
        break
        fi
        count=`expr ${count} - 1`
        sleep 1
    done
    fi
else
    off_flag=0
fi

if [ $? -eq 0 ]; then
    #do something
    echo "do something"
    if [ ${off_flag} -eq 1 ]; then
    wifictl -f
    fi
fi

WiFiがoffの場合、onにして、オンラインになるまでの待ち時間を作っています。
「do something」のところにネットワークに接続する内容の処理を書きます。
これを「wificron.sh」という名前で「/var/root/bin」に実行権を付けて保存したとします。

iPod touch上のターミナル、もしくはssh越しのシェルから、「crontab -e」を実行し、起動したviで以下のように入力します。viの操作は……ググってください。

*/30     *       *       *       *       /var/root/bin/wificron.sh

「:wq」で保存して終了すると、以後30分おきにスクリプトが自動実行されます。
WiFiがつながる場所ならば、これでふだんはWiFiをoffにしておいても、スクリプト内でWiFiをonにし、処理が終わったら再度offにするということができます。
元々onだった場合は、WiFiはonのままです。

ちなみに、launchdでもplistの書き方次第でcronのような定期実行ができるはずです。

標準状態ではcronが動いていないかもしれません。
Community Sourceをインストールし、Installer.appからUlctlをダウンロードしてきて、「com.apple.cron」をloadしてみてください。

惜しむらくは、音楽を再生していない状態でロック状態に移行すると、「cronが止まる」ことです。
まあ、所詮はWiFiですし、ままごとですね。でも、こう……なんかwktkしませんか。

この気持ち、共有したい。

ちなみに、野良リポジトリにあるfliteとErica's Utilities収録のplayaudioで音声合成が、また、後でエントリをしますが、拙作のコマンドラインアプリケーションmmpctlでplayaudio後のpause状態から再生状態への復帰が可能です。

これによって、音楽を聴いている最中でも、処理結果を音声合成で、ヘッドフォン経由にてNotificationすることができます。
こういう音声インターフェイスが「来る」んじゃないかと思ってますが、なかなかこれというモバイルデバイスが出ませんね。iPhoneにはそれを期待してたんですけどね。

話題はちょっと変わって以前fliteでローマ字読み上げをしようと思って一生懸命テーブルを作っていたことがあるんですが、濁音辺りで挫折。僕が心の師匠と勝手に仰いでいる「カビパン男と私」さんが、最近「日本語テキスト読み上げ(ガイジン風)」という記事でやってくれてました! これで、ひらがなとかなら読み上げさせることができますね。

ちなみに、fliteで漢字仮名まじり文を読み上げさせようと思ってkakasiをiPod touch向けにビルドしてみたんですが、メモリ不足でターミナルが吹っ飛び、ターミナルが吹っ飛んだ後もkakasiがメモリを食らい続け、最後には強制的に再起動がかかりました。iPhoneDiskでマウント中だったので、そのあおりを食らって母艦までカーネルパニックを起こす始末。くわばらくわばら。

|

« [Palm]WristPDA用SDK | Main | [iPod touch]曲再生の一時停止、再開、状態取得等ができるiPod touch用コマンドラインアプリケーションmmpctl »