|
Unofficial "CLDC 1.1 + MIDP 2.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface CommConnection
このインタフェースは論理的なシリアル・ポート接続を定義します。 "論理的"なシリアル・ポートはバイト・データが順次転送される論理的な接続と定義されます。 論理的なシリアル・ポートはオペレーティング・システムが定義するもので、必ずしも物理的な RS-232C シリアル・ポートであるとは限りません。 例えば"論理的"なシリアル・ポートとしてオペレーティング・システムが提供するものには、IrDA による IrCOMM ポートなどがあります。
COMM ポートには明示的な識別子とセミコロン(;)で分割された埋め込み構成パラメータから構成される Generic Connection フレームワーク文字列を用いてアクセスします。
同時に1つのアプリケーションだけを特定のシリアル・ポートに接続することができます。
既にオープンされているシリアル・ポートをアプリケーションが Connector.open
系メソッドで開こうとすると IOException
を throw します。
接続を開くために使用する URI はタイプとパラメータから構成されます。 RFC2396 で定義されたスキームは以下の通りです。
comm:<ポート識別子>[<オプション・パラメータ>]
最初のパラメータはポート識別子でなければなりません。この識別子は論理的な装置名です。 通常、これらの識別子はデバイス特有であり慎重に使用しなければなりません。
特定のデバイスとOSにおいて有効な識別子は、システム・プロパティ"microedition.commports"
を System
クラスの getProperty()
メソッドで呼び出すことで取得することができます。
これにより"comm:"
に結合して使用可能なポート識別子を、カンマ(,)区切りで連結した状態のリストを返します。
シリアル・ポート接続を開く際に使用する URI 文字列にする際はポート識別子の前に"comm:"
を前に置きます。
接続を開くための文字列には以下のポート命名規則が適用されます。
正しいパラメータは以下のパラメータ定義によって定義されます。
IllegalArgumentException
を throw します。
IOException
を throw します。
"baudrate"
パラメータが指定された場合、setBaudRate(int)
メソッドでの指定と同等に扱います。
例えば要求されたボーレートをサポートしていないのであれば、システムは有効なボーレートを代入するかもしれません。
これは設定後に getBaudRate()
メソッドを呼び出して設定値と比較することで発見することができます。
パラメータ | デフォルト | 説明 |
---|---|---|
baudrate | プラットフォームに依存 | ポートの速度(単位: bps)。 本来の意味のボーレートではありません。 |
bitsperchar | 8 | 1単位あたりのビット数(7 また 8 )です。 |
stopbits | 1 | 1単位あたりのストップビット数(1 または 2 )です。 |
parity | none | パリティに指定できるのは、odd ( 奇数 )、even ( 偶数 )、none ( なし ) のいずれかです。 |
blocking | on | on を指定すると、要求する全てのキャラクタを取得できるまでブロックします。 |
autocts | on | on を指定すると、データを送信する際に(送信時のハードウェア・フロー制御を行う)CTS ラインがオンになるのを待ちます。 |
autorts | on | on を指定すると、内部バッファに余裕がある際に(受信時のハードウェア・フロー制御を行う)RTS ラインをオンにします。
off を指定すると常に RTS ラインはオンになります。 |
URI は以下で指定する BNF 構文規則に従わなければなりません。
URI がこの構文規則に合致しない場合は IllegalArgumentException
を throw します。
<COMM 接続文字列> | ::= "comm: "<ポート識別子>[<オプション・リスト>] ; |
<ポート識別子> | ::= アルファベットと数字キャラクタによる文字列 |
<オプション・リスト> | ::= *(<ボーレート文字列>| <1単位あたりのビット数>| <ストップビット>| <パリティ>| <ブロッキング>| <自動 CTS>| <自動 RTS>) ; ; オプションがオプション・リストに含まれる前のオプショ ; ンと同じなら、そのオプションは前のオプションを上書 ; きします。 |
<ボーレート文字列> | ::= ";baudrate= "<ボーレート> |
<ボーレート> | ::= 数字文字列 |
<1単位あたりのビット数> | ::= ";bitsperchar= "<ビット数> |
<ビット数> | ::= "7 " | "8 " |
<ストップビット> | ::= ";stopbits= "<ストップビット数> |
<ストップビット数> | ::= "1 " | "2 " |
<パリティ> | ::= ";parity= "<パリティ値> |
<パリティ値> | ::= "even " | "odd " | "none " |
<ブロッキング> | ::= ";blocking= "<オン・オフ> |
<自動 CTS> | ::= ";autocts= "<オン・オフ> |
<自動 RTS> | ::= ";autorts= "<オン・オフ> |
<オン・オフ> | ::= "on " | "off " |
シリアル・ポートへのアクセスは、権限の無いデータの送信や受信を防ぐために制限されます。
シリアル・ポート接続に適用されるセキュリティ・モデルは実装するプロファイルにて定義されます。
セキュリティ・モデルは Connector
クラスの open()
メソッドで使用可能なシリアル・ポート接続文字列に適用されるでしょう。
プロファイルによる認証の結果、アプリケーションによるシリアル・ポートへのアクセスを許可しない場合には Connector
クラスの open()
メソッドの呼び出し時に SecurityException
を throw します。
また、他のオープン系メソッド(openInputStream()
、openOutputStream()
、openDataInputStream()
、openDataOutputStream()
)を呼び出した際にもセキュリティ・モデルが適用されるかもしれません。
CommConnection
を使用した簡単なループバック・プログラムの記述例を以下に示します。
CommConnection cc = (CommConnection) Connector.open("comm:com0;baudrate=19200"); int baudrate = cc.getBaudRate(); InputStream is = cc.openInputStream(); OutputStream os = cc.openOutputStream(); int ch = 0; while(ch != 'Z') { os.write(ch); ch = is.read(); ch++; } is.close(); os.close(); cc.close();
CommConnection
をオープンするためのポート識別子を取得するプログラムの記述例を以下に示します。
String port1; String ports = System.getProperty("microedition.commports"); int comma = ports.indexOf(','); if (comma > 0) { // 使用可能ポート・リストから最初のポートを切り出します。 port1 = ports.substring(0, comma); } else { // 使用可能なシリアル・ポートは1つのみです。 port1 =ports; }
英数字の自由な組み合わせを使用することで、プラットフォーム命名規則に合わせた論理的なポート名を定義することができます。 しかしながら、このクラスの実装において提案する規約に従ってポート名を命名することを推奨します。
仮想マシン実装は以下の規約に基づくべきです。
COM#
(RS-232(さかき注:現 EIA-232)を示す COM
に、ポートに割り当てられた連番 # を組み合わせた文字列です)。
IR#
(IrDA の IrCOMM ポートを示す IR
に、ポートに割り当てられた連番 # を組み合わせた文字列です)。
"IR#"
を探すかもしれません。
代替手段として考えられるのは利用可能なポートに関して試行錯誤を行うアプローチです。
メソッドの概要 | |
---|---|
int |
getBaudRate()
シリアル・ポート接続のボーレートを返します。 |
int |
setBaudRate(int baudrate)
シリアル・ポート接続にボーレートを設定します。 |
インタフェース javax.microedition.io.InputConnection から継承されたメソッド |
---|
openDataInputStream, openInputStream |
インタフェース javax.microedition.io.OutputConnection から継承されたメソッド |
---|
openDataOutputStream, openOutputStream |
インタフェース javax.microedition.io.Connection から継承されたメソッド |
---|
close |
メソッドの詳細 |
---|
int getBaudRate()
setBaudRate(int)
int setBaudRate(int baudrate)
getBaudRate()
メソッドを呼び出して取得した値と設定した値を比較することで、代替ボーレートが適用されたか否かを判定することができます。
baudrate
- この接続に設定するボーレートを渡します(単位: bps)。
getBaudRate()
|
Unofficial "CLDC 1.1 + MIDP 2.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
公式仕様書原文の著作権表記等(※): Mobile Information Device Profile Specification ("Specification") Version: 2.0 Status: FCS Release: November 5, 2002 Copyright 2002 Sun Microsystems, Inc. and Motorola, Inc. All rights reserved. | ※ただしこの API リファレンスは英語仕様を一語一句正確に翻訳したものではなく、一度私が英語の仕様原文を読んだ上で元の意味と構造をなるべく保つように書き起こしたものです。このため一部は完全に異なる説明となっています。また CLDC 1.1 部分は同仕様の範囲外であるため、まったく参考とはしていません。 ※仕様書のライセンス上、問題は無いと考えておりますが、万が一問題があるとお考えの関係者の方がいらっしゃいましたらメールにて連絡をいただけると幸いに存じます(第一言語に日本語、第二言語に英語を希望しますが、返信は基本的に日本語で行います)。 |