NTTドコモが発売している携帯電話504iシリーズ以降にはIrDA規格に準拠した赤外線デバイスが備えられています。この赤外線デバイスを使用してWindows上で稼動するJava SEとOBEXプロトコル(IrMCもこのプロトコルを使用します)による赤外線を行えればいろいろと便利ではないかと思い、実装を行ってみました。このページではそのライブラリについて取り扱います。
なお、同社の携帯電話に限らず、OBEXにて通信を行うPalm OS機や他社携帯電話とも接続可能です。その他にも任意のデバイスで通信を行うことができるため、その部分の実装を追加すれば赤外線以外の通信経路でOBEXプロトコルを扱う機器と通信を行うことも可能です。
Java SEには、現在のところ標準でOBEXプロトコルを扱うAPIというものが存在しません。そこでNTTドコモが同社の携帯電話504iシリーズに搭載したOBEXプロトコルを扱うAPIを設計の下敷きとして、Java SEで504i/505iシリーズと赤外線による通信を行うためのライブラリを作成してみました(このライブラリは赤外線による通信の他、TCP/IPによるOBEX通信もサポートしています)。
504i向け赤外線によるOBEX通信APIを元にした設計を採用したのは以下の理由からです。
前述のように、現在のJava SE仕様にはOBEXプロトコルおよび赤外線デバイスを扱うAPIが存在しないため、今回の実装では筆者が独自に仕様を策定することになります。この際に候補となるAPIはBluetooth向けのOBEX仕様とNTTドコモによる504iシリーズ向けの仕様の二つが存在しました。このうち後者の方が実際に使用している開発者が多いのではないかという判断から、504iシリーズに搭載されている赤外線OBEX通信APIを概ね継承した設計としました。しかしそのままでは汎用性に欠ける部分および実装上必ずしも真似る必要がないと判断した部分については独自の実装を行いました。
ただし、あくまで下敷きにしただけで完全に互換性があるわけではないこと、Java SE上で動作するiアプリエミュレータに邪魔にならないこと、NTTドコモが使用すべきパッケージ名を汚染すべきではないことから、独自のパッケージ名personal.sakaki.ioの中に実装することにしました。ご存知のようにパッケージ名はドメイン名をひっくり返したものを使用すべきなのですが、筆者は独自のドメイン名を持っていないため、このようなパッケージ名を採用しました。
このOBEXライブラリは赤外線通信部分にネイティブコードを含んでいるため、該当する処理はWindows2000/XPおよび98/98SE/Meでのみ動作します。作者はWindowsXPのみで動作確認を行っていることから、その他の環境では正常に動作しない可能性があります。
その他の動作条件については以下の通りです。なお、赤外線通信を行わないのであれば、環境を問わずJava 1.1以降で動作するものと思います。
| OS | Windows2000/XPを推奨、Windows98/98SE/Meでも動作すると思われます。 |
|---|---|
| Java実行環境 | Java 1.1をフルスペックでサポートするWindows上のJava VM Microsoft VM for Java Build 3154以降(それ以前は不可) |
| IrDAデバイス | WindowsがIrDAデバイスとして認識するもの(CIRおよびConsumer IRとして認識されているものは不可)。 |
作者は以下の環境で動作確認を行いました。
| OS | Windows XP Professional / Service Pack 2 |
|---|---|
| Java実行環境 | Java SE 1.6.0_07のみ |
| IrDAデバイス | リンク・エボリューション製 IrSTICK(旧Sigmatel Inc社製チップ採用) 株式会社クエスト製 USB IrDA(KC Technology, Inc社製チップ採用) |
| マシン | Intel D875PBZ / Pentium 4 630 / RAM 2GB |
| 赤外線対応機器 | 504i各機種および504iS各機種、505i〜506iSの一部、FOMA P2101V/N2051/F2051/P2102V、FOMA 900i〜905iシリーズの一部、PalmIIIc、その他 |
赤外線OBEX通信ライブラリには同ライブラリとそのAPIリファレンスの他、以下のようなサンプルアプリケーションが付属しています。
赤外線OBEX通信ライブラリの動作テストが主な目的のアプリケーションです。コマンドベースでファイルを転送することができるため、ちょっとしたファイルの転送時にも便利に使えると思います。
このブリッジを使用することで、NTTドコモのiアプリ開発ツールであるiαppli Development Kitを使用して、実際の504i/505iシリーズと赤外線通信を行うことができるようになります(最新のiDKでは本処理は不要です。iDKの一部ファイルを所定のマニュアル記載の方法で置き換えるだけで通信可能です)。
このOBEXライブラリは以下の使用条件に同意する場合に限って使用することができます。これらの使用条件は配布パッケージに同梱される全てのファイルに対して適用されます。
上記の他、筆者が必要だと判断して追加および変更する使用条件は全ての配布パッケージにさかのぼって適用されます。
上記の使用条件に同意する場合に限ってOBEXライブラリをダウンロードして条件の範囲内で使用することができます。同意する場合は以下のリンクをクリックしてダウンロードしてください。
使用条件に同意して赤外線OBEX通信ライブラリをダウンロードします。
このOBEXライブラリを実行した結果、動作したか否かという情報およびここはこうした方がいいのではないかという提案等がありましたら Overflow!コミュニケーションボード へ書き込んでください。よろしくお願いします。現在掲示板は設置しておりません。
OBEX認証関連を機能制限で使用不可能にしていた点を修正し、動作可能なように変更したバージョンを公開しました。今回は環境を含めてかなり色々と変わったので新たな不具合が発生している可能性を排除できません。何か問題があるようでしたらメールにてお知らせいただければと思います。
OBEXCommon クラスに追加した getLength メソッドを getCount メソッドへ名前を変更しました。
obexnative.dll のAccpet系処理でバッファオーバーフローが発生していた不具合を修正しました。
ObexConnectionクラスのopenOutputStream()メソッドが返すOutputStreamオブジェクトのclose()メソッドを呼び出すとクラッシュする不具合を修正しました。ご指摘下さった じぇいむす さん、ありがとうございました。
1.2を指定しています)。
ObexServerConnectionにSETPATHオペレーションで受け取ったflagsの状態を返すisSetPath_????系のメソッドを追加しました。
ObexClientConnectionにSETPATHオペレーションで送信するflagsの状態を設定するsetSetPath_????系のメソッドを追加しました。
