Java Communications API

正確にはWindows版の実装RXTXを触ってみました。ディスクプレイヤーをJavaから操作できたり、意外と可能性はたくさんありそうです。

これは古いやりかたです。こちらにJavaでシリアル通信をする今風の方法を書きました。(2014/05/16)


---------------------------------------------------

シリアル通信(RS232C)とか聴くとちょっと腰が引けてしまいますが、なんのことはなかった、専用APIを使ってポートに接続して、あとはStreamプログラミングすればいいだけでした。

シリアルといえばモデムや計測機器のような若干古めのデバイスが主かとおもっていたのですが、そんなこともないようですね。ブルーレイディスクプレイヤーでも採用されていて、

 panasonic ブルーレイディスク 取扱説明書(PDF)
 http://panasonic.biz/nwav/download/DMP-T1000_manual.pdf

26ページあたりからシリアル通信によるディスク操作コマンドのリファレンスが載っています。

Javaからシリアルポート(パラレルポート)に接続するには

Java Communications APIを使う。Windowsで使うにはAPI準拠のRXTXを使います。

RXTXをダウンロード&解凍したら、コンパイル&実行は、

 > javac -cp path_to\RXTXcomm.jar YourClass.java

 > java -cp path_to\RXTXcomm.jar
   -Djava.library.path="path_to\Windows\i368-mingw32" YourClass


サンプルコード

は、こちらがわかりやすい

 中盤の改行文字判定がバグあって、
  --if ( data != '\n' ) {
  ++if ( data == '\n' ) {
    break;
  }

シリアルポートに接続するところがCommunications APIで、接続さえすればあとは、InputStreamにコマンド文字列+CRを送ってやると、OutputStreamに応答文字列が返ってくる。コマンド文字列の例は、上記ディスクプレイヤーの取説を参照してみてください。

文字列+改行の送受信するだけなので、
InputStream/OutputStream使うよりは、PrintStream/BufferedReaderを使った方がラク。

 private BufferedReader in;
 private PrintStream out;

 this.in = new BufferedReader( new InputStreamReader(in) );
 this.out = new PrintStream(out);

 out.println("コマンド"); //コマンド送信
 String ack = in.readLine(); //応答受信


機器に直接接続しないで開発するには

シリアルポートのエミュレータを使う。例として、

 Virtual Serial Port Kit(15日試用可)

インストールしてAdd Virtual Port Pairを適当に設定すると、次のようになります。



この状態で、上記サンプルコードを2つ起動。1つはCOM1へ、もう1つはCOM2へ接続すると、標準入力からの文字列を相互通信します。

片方を接続機材のモック(コマンドに対する応答を返すプログラム)にすれば開発が進められる。



なかなか面白い。コマンドが公開されているデバイスをいろいろと調べてみたくなりました!


コメント

コメントしてください

closed.