2007-08-17

IrDAポートを開いてみる

何気なくアドエスのレジストリを眺めていると「汎用 IrDA」なるものがCOM3に割り当てられていることに気付きました。
[HKEY_LOCAL_MACHINE\ExtModems\GenericInfraredModem]
"FriendlyName"="汎用 IrDA"
"Port"="COM3:"
"DeviceType"=dword:00000001
 
赤外線通信はあまり使ったことが無いので気にしていませんでしたが、
気付いてしまった以上何かに使ってみたいものです
 
具体的な用途は思い浮かびませんが、とりあえずポートを開いてみます。
シリアルポートを開くには CreateFileを使用するようです。
COMポートの指定方法としては以下のサポート情報も参考にしました。 今回は COM3なので、普通に書いておきます。
HANDLE hIrDA;

hIrDA = CreateFile(
        _T("COM3")                      ,
        GENERIC_READ | GENERIC_WRITE    ,
        0                               ,
        NULL                            ,
        OPEN_EXISTING                   ,
        0                               ,
        NULL                            );

 
ところが、この方法で実行してみてもINVALID_HANDLE_VALUEが返ってきます。
サポート情報にあるように「_T("\\\\.\\COM3")」としても同様でした。
 
しばらく悩んだのですが、WM6 SDKの ttyサンプルでCOM1を開こうとしている部分を見つけました。
// Assign the port name. If the port name is NULL, assign the default
// value as "COM1:".
if (*lpCmdLine == TEXT('\0')) 
 g_lptszDevName = TEXT("COM1:");
else
 g_lptszDevName = lpCmdLine;
 
どうやら、「COM3」ではなく「COM3:」と指定しなければいけなかったようです。 やはりSDKのサンプルは重要ですね。
HANDLE hIrDA;

hIrDA = CreateFile(
        _T("COM3:")                      ,
        GENERIC_READ | GENERIC_WRITE    ,
        0                               ,
        NULL                            ,
        OPEN_EXISTING                   ,
        0                               ,
        NULL                            );

 
試してみるとちゃんとハンドルが返ってきました。
当然肉眼では赤外線を確認することはできないので、 携帯電話のカメラでアドエスのレンズ部分を映しながら適当なデータを WriteFileしてやると かすかに点滅しているのが確認できました。
まだまだ使い方がよくわかりませんが、テレビリモコンとか作れたら面白そうですね。
 

0 件のコメント: