◎Irマルチステーション用リモコンソフト IRcom Ver 0.01 97.3.31 ●これはなんですか? アルプス電気製の赤外線データ通信アダプタ「Irマルチステーション」は、 本来、IrDA対応のPDAやノートパソコン等とデータ通信を行なうための ものですが、おまけ機能?として家庭用AV機器のリモコン波?を出したり、 いわゆる学習リモコンの真似などもできたりします。 Windows用としてはこのリモコン機能を使うシェアウェアなどがあるよう ですが、こういう機能こそcron等が使えるUnixで動かすのがイイと思い ませんか?(^^; というわけで、Irマルチステーションのリモコン機能を使うプログラムが このIRcomです。 IRcomを使えば ・Irマルチステーションにあらかじめプリセットされている TV/VTRをリモコン操作 ・学習リモコンのようにリモコンの赤外線を録音?してファイルに 保存し、その赤外線データを送信する ことができます。 ●作者 林 謙一 xg2k-hys@asahi-net.or.jp ●注意 以下の事項に納得した方のみしか本ソフトウェアIRcomを利用しては いけません。 ものがものだけに禁止事項が多いですのでよく読んでください。 ・本ソフトウェアを使用することによってIRマルチステーション、 および本ソフトウェアを動作しているコンピュータの、ハードウェア ソフトウェアが致命的破壊を被る可能性があります。 ・本ソフトウェアによってリモコン操作しようとした電子電気機器が 致命的破壊を被る可能性があります。 使用者の自己責任においてリモコン操作機能を使用するように してください。また、電器機器が故障した場合、自己の責任 において対処してください。電器メーカの想定していない環境、 状況での故障となりますので、メーカとしても有償修理あるいは 修理の拒否ということもありえます。 ・本ソフトウェアを使用することによって生じる損害、不利益等に ついて、林は一切の責任を負いません。 ・本ソフトウェアに付随する資料の内容によって生じる損害、不利益等 について、林は一切の責任を負いません。 ・本ソフトウェアに関してアルプス電気さんに質問することは絶対に しないでください。 ・本ソフトウエアおよびIRマルチステーションを 民事、刑事を問わず、 いかなる犯罪にも使用することを禁止します。 また、犯罪に使用されたとしても、林およびアルプス電気さんは いっさいその責は負いません。責を負うのは使用者自身です。 ・本ソフトウェアを医療機器など人命、あるいはあなたが大切に思う 生物の命にかかわるような機器にたいして、またそれらの 機器の近くで使うことを禁止します。 ・本ソフトウェアを公共機関や金融機関等、他人の財産をあつかう ような環境、あるいはその近くで使うことを禁止します。 ・本ソフトウェアをオーディオビデオ機器以外のもの、例えば エアコン、ヒーター、ストーブ等に対して使用することを禁止します。 火事の原因にもなりえますので。(なお、AV機器が火を吹かない という保証もありませんので自己の責任において使用してください) ・IRcom Ver 0.01 は試作バージョンで、なおも開発中ですので 再配布を禁じます。 ・ソースを読むことによって精神的障害、およびあなたの コーディングスタイルに重大な影響を与える可能性があります。(^^; 上記の注意点をすべてちゃんと読んだのち、納得した場合、さらに 以下の事項にも目をとおして、納得してください。 ・赤外線リモコンの操作は基本的に送信のみですので、例えば応答信号 をうけとって、機器が正しく動作したかどうかを判別する方法は ありません。 ・学習リモコン機能ですが、現在のところ学習できるが、なぜか それを送信しても反応しない機器(機能)もあります。 (例:林の持ってるMDデッキのリモコンのいくつかのボタン(;_;)) ・リモコンのボタンを押し続けるような操作は利用できません。 ●動作環境 *Unix系OS ・PC/AT互換機 Linux 2.0.28 ●ソースセットの内容物 README このファイル(JIS) HISTORY 開発履歴(JIS) install-sh setup obj/ src/ ircom.c command.c command.h common.h parse.c parse.h sendcmd.c sendcmd.h tty.c tty.h Makefile.in config.h.in configure* configure.in ●Unix系OSでコンパイルする方法 ttyがつかえるUnix系OSならほぼ問題なくコンパイルできると思います。 (シリアルポートのRTS端子が独立してコントロールできないOSは 使用できません。) 1. ./setup os名 (os名は適当でいいです。c.f. linux, newsos4 ... unameが使える環境であれば ./setup だけでもいいです) 2. cd obj/os名 3. ./configure 4. obj/os名 に出来上がるcommon.h の #define RSPORT をお使いになるttyデバイスのスペシャルファイル に変更してください また、#define DEFAULT_MAKER によくつかうTV or VTRの メーカーコードを指定しておくと便利です。 5. make OSの種類とRSPORTのスペシャルファイルの例 ・Linux 1.2.X 1.3.X 2.0.X #define RSPORT "/dev/cua1" ・BSD/OS 2.X #define RSPORT "/dev/tty01" ・NEWS-OS 4.2系 #define RSPORT "/dev/tty00" ・NEWS-OS 6.1系 #define RSPORT "/dev/term/00" ・SunOS 4.1.4 #define RSPORT "/dev/ttya" ・Solaris2.3(SunOS 5.3) #define RSPORT "/dev/ttya" ・NetBSD 1.0 #define RSPORT "/dev/tty01" ・EWS4800 Rel.4.4 Rev01 #define RSPORT "/dev/term/00" ・FreeBSD 2.0.5R 2.1.0R #define RSPORT "/dev/cuaa0" ・NEXTSTEP 3.3J #define RSPORT "/dev/ttya" ・IRIX #define RSPORT "/dev/ttyf1" ●IRcomを使うために用意するもの&準備 ・アルプス電気製 IRマルチステーション IR001 (AT互換機よりはPC98を扱ってるところでよくみかけます) (IRcomを作るために参考にしたPC WAVEの記事によれば、 富士通からまったく同じものが「IRコマンダ」という名前で 出ているようです) 同梱の接続ケーブル、変換アダプタでパソコンorワークステーション とIRマルチステーションを接続してください。 ●IRcomの使い方 ircomから「tty not respond.」のようなメッセージが 出てきたり、どうもデータ転送がされてないような気がする 場合、途中で中断したい場合はCTRL-Cで中断して下さい。 中断したときはIRマルチステーションの電源を入れ直して下さい。 ・usage ircom オプション オプションの説明 filename : リモコンデータファイル名、スクリプトファイル名 文字列 command : プリセットコマンド(後述) maker : プリセットコマンド用メーカー名(後述) second : 秒(正数) -h 簡単なオプションの説明を表示します。 -r filename リモコンの赤外線データを学習し、filenameで 指定したファイル名で保存します。 -p filename -rオプションで保存した赤外線データを送信します。 -M maker プリセットコマンド用メーカー名を指定します。 -P command プリセットコマンドを送信します。-Mオプションが 先に指定されていればそのメーカのプリセットコマンド となります。 -w second 指定した秒数、sleepします。 早送り、巻戻し等、動作に時間のかかるコマンドの後に 指定して使用します。 -f filename filenameで指定したシーケンスファイルにしたがって、 プリセットコマンドや赤外線データファイルを順に送信します。 -z IRマルチステーションのバージョン番号等を表示します。 -v -r -p -P -fオプション等の動作を標準エラー出力に 簡単にレポートします。 -D ttydevice IRマルチステーションと通信を行なうttyデバイスを変更します。 -S まだ使えません オプションは書いた順番どおりに左から右に解釈、実行されます。 同じオプションを何度書いてもかまいません。 ただし、-M -v オプションについてはそれが効果をおよぼす オプションよりも左側に書かないと効果がありません。 また、その性格上、-D オプション、-S オプションは最も左側で 指定するようにしてください。 -h オプションは実行された瞬間、usageを表示してircomを終了 します。 環境変数IRCOMTTYで-Dオプションで指定しなかった場合の デフォルトのシリアルポートの設定ができます。 環境変数IRCOMMAKERで-Mオプションで指定しなかった場合の デフォルトのメーカー名の設定ができます。 ・プリセットコマンド用メーカー名一覧 大文字小文字は区別していません(どちらでもよい) ビクター victor_tv_a victor_tv_b victor_tv_c victor_vtr_a victor_vtr_b victor_vtr_c 三洋 sanyo_tv_a sanyo_tv_b sanyo_tv_c sanyo_vtr_a sanyo_vtr_b sanyo_vtr_c sanyo_vtr_d シャープ sharp_tv_a sharp_tv_b sharp_vtr_a sharp_vtr_b sharp_vtr_c 富士通ゼネラル fgeneral_tv_a fgeneral_tv_b ソニー sony_tv sony_vtr_a sony_vtr_b sony_vtr_c 東芝 toshiba_tv toshiba_vtr_a toshiba_vtr_b NEC nec_tv nec_vtr_a nec_vtr_b 日立 hitachi_tv hitachi_vtr_a hitachi_vtr_b 松下 matsushita_tv_a matsushita_tv_b matsushita_vtr_a matsushita_vtr_b matsushita_vtr_c 三菱 mitsubishi_tv mitsubishi_vtr_a mitsubishi_vtr_b mitsubishi_vtr_c mitsubishi_vtr_d ・プリセットコマンド TV 電源入/切 power 選局次 ch_up または ch_+ 選曲前 ch_down または ch_- 音量大 vol_up または vol_+ 音量小 vol_down または vol_- テレビ/ビデオ切替 select VTR 電源入/切 power 巻戻し rew 再生 play 早送り ff 録画 rec 停止 stop 一時停止 pause 選局次 ch_up または ch_+ 選曲前 ch_down または ch_- テレビ/ビデオ切替 select ・シーケンスファイルの文法 -基本ルール ・先頭文字が'#'のものは行末までコメント ・先頭文字が'%'のものは特殊コマンド(%dirまたは%waitのみ有効) ・先頭文字が'#'でも'%'でもないものはプリセットコマンド送出か、 -rオプションで保存した赤外線データの送出のどちらかになる ・1行1コマンド ・-fコマンドで実行した場合、ファイルの先頭から後ろにむかって 1つ(1行)づつ実行される - コメント 例 # comment - 特殊コマンド ・%dir directory -rオプションであらかじめ保存しておいた赤外線データの 置いてあるディレクトリを指定します。 例 %dir /usr/local/lib/IRcom/ ・%wait 秒 sleepする時間を指定します。単位は秒 (あまり正確ではありません) 例 %wait 120 - プリセットコマンド 書式は メーカー名 プリセットコマンド ・メーカ名とプリセットコマンドの間は1バイトスペース(0x20) で区切ってください。 ・メーカ名は前述のメーカ名のところを参照してください ・プリセットコマンドは前述のプリセットコマンドのところを 参照してください 例 sony_tv ch_up sony_vtr_b power sharp_tv_b vol_down - 保存した赤外線データの送出 書式は ファイル名 ・ファイル名は絶対パスまたは、 パスの最初の文字が'/'ではない場合、その先頭に %dirで指定したディレクトリパスが追加されたものと なります。 例 %dir /usr/local/lib/IRcom/ VTR/rec.rem TV/power.rem CD/play.rem この場合、それぞれ /usr/local/lib/IRcom/VTR/rec.rem /usr/local/lib/IRcom/TV/power.rem /usr/local/lib/IRcom/CD/play.rem を指定したものと同じ意味にないrます。 ●使い方の例 0.接続確認 ircom -z ALPS Ir MultiStation F/W Ver. 1.00 という文字列が表示されればOK 1.ソニーのテレビの電源をON(またはOFF)する ircom -M sony_tv -P power 2.(電源OFF状態だとして)ソニーの8mmビデオを電源ONしてテープを巻戻し してテープを再生、60秒再生したら停止して電源OFF ircom -M sony_vtr_b -P power -P rew -w 180 -P play -w 60 -P stop -P off 3.(電源ON状態だとして)シャープのテレビの音量を下げ、三洋のテレビの 音量を上げる ircom -M sharp_tv_a -P vol_down -M sanyo_tv_b -P vol_up 4.赤外線データをファイルに保存する ircom -v -r hogehoge.rem 実行したら15秒以内にデータを記録したいリモコンを IRマルチステーションにむけてボタンを押す うまくいけばhogehoge.remにデータが保存される 5.保存しておいた赤外線データを送信する ircom -p hogehoge.rem (-rオプションで記録できたのに送信してもうまくいかないことが あります) 6.赤外線データの保存&送信(うまく記録できたかどうかのチェックするのに便利) ircom -r hogehoge.rem -w 5 -p hogehoge.rem 7.シーケンスファイルにしたがってリモコン操作 ircom -f sequence.seq ●シーケンスファイルの例 # 赤外線データの保存場所の指定 %dir /usr/local/lib/IRcom # # テレビのON(プリセットコマンド) sony_tv power # # CDプレイヤーのON、トラック2の指定(保存しておいたデータの送信) CD/power.rem CD/Tr2.rem #↑/usr/local/lib/IRcom/CD/power.rem、/usr/local/lib/IRcom/CD/Tr2.rem #↑にそれぞれの機能に対応するリモコンのボタンのデータを保存済みの場合 # # VTRのON、巻戻し(180秒で完全に巻戻しできるとして)、録画開始 # 1時間たったら停止して巻戻しして、OFF (プリセットコマンド) sony_vtr_b power sony_vtr_b rew %wait 180 sony_vtr_b rec %wait 3600 sony_vtr_b stop %wait 180 sony_vtr_b power ●参考資料 ・電波実験社 PC WAVE 1997年4月号P.150-151 「WWWサーバInterTVで遊ぶ」中の清水隆夫氏によるIRマルチステーション の制御コマンド一覧表 ●今後の課題 ・9600baud以外の通信速度に対応 ・ソースの整理 ●皆様への要望 ・バグレポート、改善要求は大歓迎です。 (xg2k-hys@asahi-net.or.jpまでどうぞ) ・苦情、損害賠償要求は一切受け付けませんのであしからず ●その他 ・本来、MDの文字打ち込みを自動的にやりたかったから買ったのに MDリモコンの[name]ボタンの学習はできるけど送信がうまくいかないとは… (T^T) あとは人間が読む文字列からMDの文字打ち込みシーケンスに変換する コンパイラを作ればすぐできると思ったのに〜。 ・実はVTRを指定のチャンネルにする方法がなかったりします。(^^;; (リモコンにup/downしかないから)なんかいい方法ないかなぁ