|
Q9:
IrDAで、リモコン信号をどの様にエミュレーションするのでしょうか?
|
A9:
まずは、IrDAプロトコルとリモコンのプロトコルが大きく違う事を理解する事だ。
IrDAプロトコルは赤外線通信プログラミングガイド,ソフトバンク,1995やIrDA公式ホームページ又はリンク・エボリューションより情報が入手出来る。
リモコンプロトコルはトランジスタ技術,
p261, Nov.,1996やIrHack(マイコンやゲームボーイリモコンの草分けK氏のホームページ)から情報を入手できる。
おそらく、あなたは、この大きな違いを理解すればするほど、その困難さに戸惑うことになる。もともとIrDAは、リモコン用に設計されている訳ではないので当然だ。
リモコンコン for WindowsがIrDAに対応した4カ月前の雑誌のプログラミング講座で、IrDAデバイスのリモコン転用を試みる記事(Windows
Magazine, p207, Oct.., 1996 )が掲載され、その記事の著者は、不可能であると断言した。これは、間違っていない。常識的には不可能である。
Windows95、Palm、WindowsCEではAPIの制御下で赤外線の物理ポートにアクセス可能であるが、Windows95OSR2,98,98SE,Me,2000では、そのままでは、APIからのダイレクトなアクセスは不可能である。 Windows95OSR2,98,98SEでは、ドライバINFファイルの書き換えでAPIでの制御が可能となるが、その方法はらんちゃの作者のホームページに詳しく紹介されている。WindowsMe,2000では、現在のところ有効な手段はなく、WDMカーネルドライバからの作成を要する。
赤外線ドライバとのコンフリクトも致命的である。Windows95OSR2,98,98SEの場合であれば、私の解析によるコンフリクト解消方法がありソースコードを公開している。
この赤外線ドライバ制御方法は、SONYのノートPCにバンドルされたIntellisync
Corporationの赤外線転送ソフトのTranxitにも採用された方式である。WindowsMe,2000の赤外線ドライバとのコンフリクトを解消する方法はユーザーに、赤外線ドライバを手動で無効にしてもらう方法しか現在のところ手段はない。プログラムからWindowsMe,2000の赤外線ドライバを制御する方法は、今から私の挑戦する課題でもある。WDMモデルのデバイス削除のIRPを発行を行えばなんとかなるのではないかと考えているが、初期実験は失敗に終わっている。
リモコン信号はマイクロ秒単位で制御されるが、WindowsやWindowsCEでは制御可能な単位が1,000ms、Palm
OSでは10,000msなので、特にPalm OSやWindowsCEの非力なCPUのマシンでは、OSに頼ってAPIで制御していてはとても間に合わない。高度なエミュレーションを行うにはCPUの制御、UARTの制御などハードウェアに関する知識も必要だ。
これらの理由で、開発言語はVBでは不可能で、カーネルドライバを作れる知識と、最近ではC言語でドライバを作成出来る様になったが、アセンブラが書ける知識も望まれる。
エミュレーションの方法にはいくつかの種類がある。
高性能な順に以下のとおりである。
|
1.学習リモコン制御:
クロッサム2などのRS232Cを備えた学習リモコンを制御する方式
これはIrDAエミュレーションではなく、もともと学習リモコンなので、最も正確なリモコン信号が得られる。
クロッサム2の制御コードはハルコーポレーションより公式に公開されていた。
リモコンコン for Windowsの初代バージョンはクロッサム2の専用制御ソフトであった。 |
|
2.「TV-Remote」モードの利用:
アルプスIRマルチステーションなどリモコン専用制御命令で制御する方式
学習リモコンの制御と同等に正確な信号が得られる。
「TV-Remote」モードを利用するには、赤外線通信装置を分解して、制御チップのメーカー型番を調べ、データシートを入手しプログラムを組めば良い。
アルプスIRマルチステーション/富士通 IRコマンダの制御命令は、解析され、PC
WAVE, p150,(4), 1997に公開された。
リモコンコン for Windowsは、数種類の「TV-Remote」モードを制御する事が可能である。 |
|
3.擬似的「TV-Remote」
非常に高度なテクニックでプログラムも複雑であり、CPUやIrDAコントローラーのレジスタを制御して、IrDAモジュールからIrDA非互換のリモコン信号を送信する方法である。
リモコンコン for Palm OS(R)は、擬似的「TV-Remote」でドライブしている。
Palm Developer Knowledge BaseのFAQにIrDAリモコンエミュレーションテクニックが推察されてい
た。
ここで紹介されていたenterprising
developerとは私の事だろうか? |
|
4.CPU性能依存型IrDAエミュレーション
擬似的TV-Remoteに近いが、IrDA互換信号であり飛距離はIrDAモジュールのスペックまでとなる。下記の非依存型に比べれば飛距離が出るが、実用性を考えれば、Q5で紹介したなんらかの対策が望まれる。
高性能なCPUの機種であればAPIとバッファをうまく使えば、おそらくはAPIレベルでプログラムが作成できるが、モバイル端末など性能があまり高くないCPU搭載機では標準ドライバでは処理が追いつかず、専用のドライバを組むか、レジスタを制御するプログラムを組む必要がある。
リモコンコン for WindowsCEは、CPU性能依存型IrDAエミュレーションでドライブしている。 |
|
5.CPU性能非依存型IrDAエミュレーション
WindowsやWindowsCEマシンなど、CPU性能に大きく差のある場合には有効だが、実用的な信号到達距離は望めず、5つのエミュレーション方式の中で最も飛距離が出ない方法である。
APIレベルでプログラムが作成できる最も簡単な方法である。
リモコンコンfor Windowsはこの方法である。 |
2000年後半から、IrDAリモコンエミュレーションにとって、大きな障害が発生した。
IrDA1.2規格の登場だ。ただでさえ飛距離の面で苦しいIrDAリモコンエミュレーションであるが、IrDA1.2は省電力設計の為に、赤外線データ通信の際の飛距離は、スペック上わずか20cmである。そればかりか、リモコン信号を学習させる際にリモコンの強力な赤外線を受信すると、ゲインコントロールがうまく働かず無反応となる。この現象はPalm
OS機のSony
クリエで顕著に現れる。同じIrDA1.2を採用しているWindowsCE機のカシオペアE-700での検証はPocketPCへの移植が完成後に行う予定だが、クリエ同様の結果が予想されるがまだ答えは出ていない。
|
|