Tech Note 16: Using IR from NS Basic

September 22, 2002

© NSB Corporation. All rights reserved.


[英語版]

Contributed by Jim Smith, England.

このドキュメントは、Palmデバイスの赤外線(IR)ポートを使用して通信するNS Basicアプリケーションを実験または開発する人向けです。

現在、NS Basicはシリアルデータを切り替え、IRポートを経由してデータを送受信できる方法を提供しています。この切り替えは、Serialsetファンクションを使用することによって行えます。例:

Err=Serialset("IR",1)

このファンクションはシリアルポートを開いた後でのみ呼ぶことができます。

これはNS Basicの便利な機能ですが、IRハードウエアを持つ様々なデバイスとの通信を行うには限度があります。仮に他のPalmデバイスとの通信でも、特にリンクが物理的な限度に近い場合は、データの破損や損失を経験するかもしれません。生シリアルデータをIRハードウエアを通して送るこの方法は、SIR(serial infrared)として知られています。

多くのIR機能を持つデバイス(例えば、多くの携帯電話)はIrCommとして知られるIRDA標準のデータプロトコルを使用しています。これは、エラー修正、ハンドシェイク、および信頼性の高い、エラーのない赤外線リンクをつくる為の他の機能を含んでいます。これらの詳細はIRDA標準を参考にして下さい。http://www.irda.org/standards/standards.asp(英語)

多くのPalmデバイスはIrCommプロトコルを使用してIRポート経由で通信を可能にする必要なライブラリファイル(ドライバ)を含んでいます。残念ながらNS Basicは現在、これらのライブラリを使用する方法を提供していません。幸い、データを(シリアルポートでなく)IrCommライブラリに切り替えるハックユーティリティ(フリーウエア)があります。Matthias RingwaldによるこのユーティリティはComlinkと呼ばれ、http://www.freewarepalm.com/communication/comlink.shtmlからダウンロード可能です。
IRデバイス同士でIRポートを使ってこれらの2つの通信を見せる簡単なプログラム(Irtest.prj)を作成しましたので参考にして下さい。これを動作させるにはPalmデバイス2つ(わたしはIIIcとIIIxを使用)と、ComlinkおよびHackmasterが両方のデバイスにロードされていることが必要です。Comlinkをロードする方法はComlinkに付属するreadme.txtに含まれています。

お使いのデバイスにIrCommライブラリ入っていない場合、 ここからダウンロードできます:http://www.palm.com/support/downloads/irenhanc.html

最初にirtestをSIRモードで動作させます。Comlinkがenableでないことを確認して下さい。起動時のirtestのデフォルト設定は、Serialポートを使用するようになっています。"Serial"ボタンをクリックしてNSBのIR(SIR)を使用する方に切り替えて下さい。両方のPalmをNSB IRを使用する方にセットして、お互いのデバイスを向き合わせて下さい。1つのデバイスのReceiveボタンを押してデータ受信状態にして下さい。この状態でもう一つデバイスのAutosendボタンをタップして下さい。デバイスがデータの送信を始めます。"lost"文字の認識を助ける為にカウントが表示されます。受信したデータは受信側のデバイスに表示されます。もし部分的にIRリンクを妨げるとデータの損失が起こります。もしリンクを完全に数秒間妨げると、妨げを外した時にデータの流れが再度始まりますが、データの損失が起こります。SIRデータ通信を使った効果的な組み込みハンドシェイキングやエラー修正はありません。

次にComlinkを使用してIrCommプロトコルを試してみましょう。Comlinkを起動し"Enable"と"Ircomm"を選択して下さい。Irtestを起動し、Serial設定はそのままにします。最初のテストと同じように、1つのデバイスはReceiveにもう1つはAutosendにします(リンクが正しく構築できない可能性がありますので、受信デバイスを先にセットして下さい)。データ通信中に部分的に妨げをしてもデータの損失はありません。もし数秒間リンクを完全に妨げた場合、送信デバイスが送信を中止すること(カウンターが増えなくなります)に気が付くでしょう。妨げを取り除くとデータの通信が再開されます。欠けている文字はないはずです。

Irtestの他のボタンはCellphoneやプリンタを実験してみたい人には興味深いと思います。スクリーン上部にあるDataフィールドに、送信するテキスト文字列を入力することが出来ます。"Single"ボタンをタップすると、この文字列は1回送られます。"Single+CR"も1回だけ文字列を送りますが、"キャレッジリターン" CHR(13)文字が足されます。IRDAポートをオンにしたわたしの携帯電話を使用しIrtestのReceiveをオンにした状態で、文字列"ath"をDataフィールドに入力し"Single+CR"をタップすると、"ath OK"が受け取れます。受け取った文字列にある箱の文字はキャレッジリターンとラインフィードを意味します。(athは標準モデムコマンドの"on hook"です)受け取る"OK"は、モデムがコマンドを受け取り、受諾したことを意味します。同じように文字列"atdt1234"を送ると、携帯電話は1234をダイアルします。この方法で、多くの様々なコマンドを携帯電話へ送ることが出来ます。それらには携帯電話へのアドレス帳へアクセスするコマンドも含まれます。わたしの経験からこれはComlinkを使用しIrcommへセットした時のみ動作します。(もしNSB IRを使用すると、携帯電話からの応答がありません)(Siemens S25)

いくつかの興味深いことを見つけましたので、ご紹介します。わたしのPalm IIIx(OS 3.3)は"null event"問題に遭遇しました。これは異なったタイミングでIrtestの"maindisp"ループを止めるてしまうことです。時にはこれは数秒後に、時には1分以上経ってから起こります。これが起こった場合、ループを再開する簡単な方法は"Clearfield"ボタンをタップします。わたしの IIIc (OS 3.5.3)ではこの問題は起こっていません。

これまたIIIxでのみ起こることですが、Receiveをオンにした時に、たまに"778" ("not supported")エラーが起こります。これは周期的に起こります。この問題を解析する十分な時間がないので、フィルターを欠けた状態でこのエラーをプログラムから取り除いてあります。

ComlinkでSIR切り替えのオプションを使用する時に問題がありました。(わたしの両方のデバイスで致命的なエラーになります)SIRはNS Basicで提供されていますし、致命的エラーは起こりませんので、この問題に関する調査はしていません。

SIRに対しIrCommのデータ処理能力(スピード)が落ちることに気が付きました。しかし、これはプロトコルの特性(CRC & addressing etc)のオーバーヘッドがあるだけです。

2つのデバイスを同時に送受信にセットできることを見つけるかもしれません。わたしの実験ではSIRは全く望みがありません(かなりのデータ損失があります)が、IrCommを使用した場合はかなり成功しました。遅いIIIxの方がデータ損失があり、とくに受信フィールドが一杯になってくると時や、Clearfieldボタンをタップなどのイベントが起こると多いようです。送信されるデータ文字列やデバイスのスピードによりSerialReceiveパラメータを調節することによって、より確実な結果が得られるでしょう。

さらなる実験としてボーレートを変えてみることがあります(Ircommはautobaud negotiationsを行うことが出来ますが、わたしはこれをまだ立証していません)。ほかに、様々なSerialset設定を変えることによってIRリンクにどう影響するかをみてみてもよいでしょう。

このドキュメントがあなたのNS Basic InfraRedアプリケーション開発に役立てば幸いです。

追記

「4.0 のポートコードにバグがあり、IR enable flag が失われます。唯一のオプションとして、Dragonballチップセットのドキュメントを見て、UARTをご自身でプログラムしなければなりません(私も試みましたが、まだ成功していません)。 私の場合、顧客に成功しない旨を伝え、4.0は現状でサポートしてないという結論になりました。このバグは、Raw IRアクセスにのみ影響があります。高レベルのプロトコルは動作します。ユーザーAPIバグです。」-- John R. Hall

他のリンク

IR通信に関する興味深い情報はこちらへメールして下さい。