16:【技術情報】Java によるI/O制御、JNI 関連技術


[1] 16:【技術情報】Java によるI/O制御、JNI 関連技術 投稿者:Mirai くん (2002/03/18(月) 16:51)

1.コーナー開設の背景
 JavaによるI/O制御の実験は一段落しました。
 その成果は既に「Java の お勉強室」のほうにまとめましたが
 まだWindows Me/2000 だけでのこと。

 今後組み込みLinux上でJavaを実装する際には、再度必要となる知識です。
 ここでは、今回の成果に至るまでの技術資料や Tips について
 整理しておこうと思っています。

2.本コーナーで扱うテーマ
 ・Java によるI/O制御 関連の技術・書籍などの紹介
 ・JNI(Java Native Interface)実装方法の紹介

 などを主とします。

 みなさんからの質問・ご意見なども大歓迎ですので、よろしくお願いします。


[2] 関連書籍の紹介 投稿者:Mirai くん (2002/03/18(月) 16:52)

まず、今回の実験で最もよく利用した2冊です。

 ・JNI Java Native Interface プログラミング
  (C/C++ コードを用いた Java アプリケーション開発)
  ロブ・ゴードン 著 林秀幸 訳
  (株)ピアソン・エデュケーション 発行
  ISBN4-89471-080-3
  \4,500.- + 税
  ↑ JNI の基礎から書かれている、たぶん唯一の訳本でしょう。

 ・トランジスタ技術増刊 トラ技Beginners 3
  VBと製作で学ぶ初めてのパソコン応用工作
  (PC のパラレル&シリアル・ポートを使ったI/O制御の実際)
  渡辺 明禎 著
  CQ出版社 発行
  \1,857.- + 税
  ↑ 読み出した後にわかったのですが、VBだけでなく、
    VBA、Javaでのサンプルソースも掲載されていました。
    JNI の実装の具体例も記載されており大変参考になりました。

以下、そのほかの関連書籍です。

(1) ハード関連
 ・新電気ビギナーシリーズ
  初めて学ぶメカトロニクス入門 早わかり
  岩本 洋 監修 森田 克己・天野 一美 共著
  オーム社 雑誌局 発行
  ISBN4-274-94143-4
  \1,800.- + 税

 ・ハードウェア・デザイン・シリーズ 7
  パソコン・アダプタの製作&応用
  (シリアル・ポートとパラレル・ポートを活用しよう)
  トランジスタ技術編集部編
  CQ出版社 発行
  ISBN4-7898-3424-7
  \1,714.- + 税

 ・ハードウェア・デザイン・シリーズ 12
  パソコンのレガシィI/O 活用大全
  (割り込みとDMAからシリアル/パラレル・ポート、
   FDD/IDEインターフェースまで)
  桑野 雅彦 著
  CQ出版社 発行
  \1,714.- + 税

(2) デバイスドライバ 作成関連
 ・TRY COMPUTING シリーズ
  仮想デバイスドライバの作り方
  (Windows 95 の周辺機器を動かすための基礎知識)
  大貫広幸 著
  CQ出版社 発行
  ISBN4-7898-3384-4
  \2,381.- + 税

 ・TRY COMPUTING シリーズ
  Windows によるハードウェア制御
  (物理メモリへのアクセスからI/Oポートの操作まで)
  北山洋幸 著
  CQ出版社 発行
  ISBN4-7898-3388-7
  \2,200.- + 税

 ・Windows 2000 デバイスドライバ入門
  (基本I/O制御のテクニックからWDMドライバの作成まで)
  北山洋幸 著
  CQ出版社 発行
  ISBN4-7898-3692-4
  \2,500.- + 税

(3) Visual C++ 入門、クラスライブラリ作成 関連
 ・パーソナルプログラミングシリーズ
  Visual Basic プログラマのための Visual C++ 入門
  矢沢 久雄 著
  (株)アスキー 発行
  ISBN4-7561-3488-2
  \2,500.- + 税

 ・Visual C++ 6.0 実用マスターシリーズ3
  新Visual C++ 6.0 入門(スーパービギナー編)
  林 晴比古 著
  ソフトバンク パブリッシング(株)発行
  ISBN4-7973-0975-X
  \1,900.- + 税

 ・ifセレクション
  C&C++ プログラマのための I/O制御プログラミング入門
  中島 信行 著
  CQ出版社 発行
  ISBN4-7898-3364-X
  \2,524.- + 税

 ・技術者のためのVisual C++ 実践プログラミング技法
  北山洋幸 著
  技術評論社 発行
  ISBN4-7741-0802-2
  \3,280.- + 税

こうやって列記してみると、やはりハード絡みということもあり
CQ出版社のものが多いですね〜。


[3] I/O 制御アプリケーションの開発手順 投稿者:Mirai くん (2002/03/19(火) 07:07)

いくら、関連本ばかりあってもプログラムはできませんよね。
というわけで、開発手順です。

(1) GUI 部分を Java アプリケーションとして作成する
   VisualCafe などの IDE で、GUI 部分を作成します。
   ここまでは、「ニコチャン」のアプリの場合と同様ですね。

(2) Java 標準搭載されていないI/O制御部分の処理を
  専用のクラスとして作成する

  VisualCafe では、[追加]−[クラス]を選択すると
  クラスのプロトタイプが自動的に作成されます。

  こんな 感じ↓

  public class SERIAL {
  }

(3) このクラスに実装したいメソッドを宣言しておく
  ポイントは、かならず native と付けておくこと。

  こんな 感じ↓

  public class SERIAL {
    public native int SOPEN(); // COM1 PORT OPEN
    public native void SCLOSE(); // COM1 PORT CLOSE
    public native int ALLOFF(); // FAN OFF
    public native int ALLON(); // FAN ON REVERSE
    public native int DTRON(); // FAN ON NORMAL
  }


(4) 一旦、コンパイルしておく(SERIAL.java → SERIAL.class)
(5) インクルードファイルの自動作成

  javah -jni SERIAL

  により、native 関数のプロトタイプを作成する。
  作成された、SERIAL.h はこんな感じになる(一部のみ抜粋)


  /* DO NOT EDIT THIS FILE - it is machine generated */
  #include <jni.h>
  /* Header for class SERIAL */

  #ifndef _Included_SERIAL
  #define _Included_SERIAL
  #ifdef __cplusplus
  extern "C" {
  #endif
  /*
   * Class: SERIAL
   * Method: ALLOFF
   * Signature: ()I
   */
  JNIEXPORT jint JNICALL Java_SERIAL_ALLOFF
   (JNIEnv *, jobject);

  /*
   * Class: SERIAL
   * Method: ALLON
   * Signature: ()I
   */
  JNIEXPORT jint JNICALL Java_SERIAL_ALLON
   (JNIEnv *, jobject);

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

ここで、一旦Javaの世界を離れて、Visual C++ の世界に入ります。

(6) DLL 用のプロジェクトの作成
  ・Visual C++ を起動する
  ・[ファイル]−[新規作成]で、「Win32 Dynamic - Link Library」を選択する
  ・「単純な DLL プロジェクト」を選択
  ・フォルダ名はSERIALJとしておく(←別に、何でもいいんだけど)

(7) DLL 用のソースファイルを作成する
  上記のSERIAL.hのプロトタイプの書式により、各メソッドの処理を記述する。

  できあがりは、こんな感じ
  ↓(一部抜粋。全文は、http://www3.biwako.ne.jp/~mirai954/net_test/test3/source.htm に掲載)

  #include "stdafx.h"
  #include <stdio.h>
  #include "SERIAL.h"

  HANDLE comHandle; // SERIAL PORT用 HANDLE

  JNIEXPORT jint JNICALL
  Java_SERIAL_ALLOFF (JNIEnv* env, jobject thisObj) {
    jint retcode; // ERROR CODE
    BOOL success; // 終了ステータス

    // printf("ALLOFF Called.\n");
    // 回転方向(正回転)
    success = EscapeCommFunction(comHandle, CLRRTS);
    if (!success) {
      retcode = -1; // ERROR
    } else {
      // 電源(OFF)
      success = EscapeCommFunction(comHandle, CLRDTR);
      if (!success) {
        retcode = -1; // ERROR
      } else {
        retcode = 0; // NORMAL
      }
    }
    return retcode;
  }

(8) Visual C++ で(release モードで)ビルドする
  できあがった SERIALJ.DLL を、Java アプリケーションのフォルダにコピーしておく。

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

再び、Java の環境に戻る

(9) Java アプリケーションの Frame1 クラス内に、DLL のLOAD 処理を記述

  内容はこんな感じ
   ↓

  // SERIALJ.DLL をLOADする
  static {
    System.loadLibrary("SERIALJ");
  }

(10) 以上の全クラスを再度ビルドする

   実行すると見事! シリアルポートでの制御を行えます。


[4] ここまでのまとめ 投稿者:Mirai くん (2002/03/18(月) 16:54)

以上のように、Java でI/O制御を行うために必要となる知識・技術とは、
やはり

・JNI (Java Native Interface)
・Visual C++ 開発環境
・Windows API
・DLL

など、広範囲にわたることになります。

また、きちんとしたデバイスドライバを作成するためには、
さらに

・Windows 95/98/Me/2000 などのOSの仕組み
・VMM、VxD、OCX、WDM の仕組み

などの知識が必要となります。


[5] 簡単に I/O制御 したいなー 投稿者:しがとも (2002/03/20(水) 03:52)

 ドライバーって、いざ作るとなると、大変ですよね。
DIO、SIO、AD を、Windowsで、使用していますが、
ドライバーは、ボードメーカー提供の物を、使用しています。

 ドライバーを、複数のプロセスで、制御するのは難しいので、
私は MMF(Memory Mapped File)を、使って、1個のEXEで、
メーカー提供ドライバーを、OPENさせて使っています。

 DLLは、HDDの残容量を、VBで、調べるために作ったことが一度
だけあります。 
たぶん、DLLは、2度と作ることが無い(難しくて、作れない)
と、思ってます。

 DOSに比べて、 Windowsは、 I/O制御 複雑になりましたよね。


[6] Windows での割り込み処理なんて・・ 投稿者:Mirai くん (2002/03/20(水) 23:13)

正直言って、やりたくな〜い。

そういえば、
今回のシリアルポートのは割り込み制御しなかったんで
DLL といっても初級レベルですよね。

VB だと、MScomm コントロールがあったんで
これも初級レベル。

Air H" で、
「A社 → B社 と機種変更して、カードが認識されなくなった」
というのも、ドライバの作りこみの問題か??
と、もっぱらの噂になっています。
割り込みの絡むドライバって、たいへんなんでしょうね (^^ゞ


[7] 赤外線リモコン 投稿者:Mirai くん (2002/03/30(土) 02:13)

某雑誌を読んでいて見つけました。

「パソコンでコントロールできる赤外線リモコン」:クロッサム2+
 URL:ハル・コーポレション販売
   http://www.halcorp.co.jp/

これを使えば、おもちゃの扇風機なんかではなく
実際に、家電機器をコントロール出来てしまいますよね。
(エアコンのON/OFF や、TVのチャンネル切換えなど・・)

USB/RS232C のどちらのものもあるようですが
Java で通信することも考えて、RS232C タイプのものを
購入してみようと思っています。

なんか、Java でちょこっとアプリケーションを組めば、
いきなり製品になりそうなものができそうな気がしませんか?
(セキュリティーの対応は必要でしょうが・・)


[8] Re: 赤外線リモコン 投稿者:Mirai くん (2002/03/30(土) 11:52)

自己レスです。

「クロッサム2」で検索すると、かなりいろいろと HIT しますね。
 URL: 検索結果
  http://search.goo.ne.jp/search/search.jsp?MT=%A5%AF%A5%ED%A5%C3%A5%B5%A5%E0%A3%B2&SM=MC&DC=100&IM=0

 このリモコン用のフリーソフトなどが、Vector、窓の杜 などにも登録されている〜(知らんかった (^^ゞ )
 また、リモートコントロールでの同じような実験をしているひとも結構いたりします。
 (あるひとは、Java でコントロールさせようとしている・・)


[9] 情報家電コントローラ 投稿者:Mirai くん (2002/03/30(土) 12:55)

さらに検索してみたところ、企業などでも開発中のようですね。

 URL: 横川電機(情報家電コントローラを開発)
   http://www.yokogawa.co.jp/itbiz/


[10] Re: 赤外線リモコン 投稿者:しがとも (2002/04/02(火) 05:14)

 CS(S**P**TV)の録画予約 っていうのが使っていますよね。
チューナーから伸びる 赤外線の送信機が、VTRの録画開始
 してますね。
(不安が残りますね・・・ 垂れ流しなので・・・ 僕の宇宙撮れたかなー・・・)

 インターネット経由で、録画予約できるPC(ハードDiskのVTR?)を、見かけたことがありますが、原理は、PCに取り付けたリモコンの送信機で、市販のCSチューナーと、市販のVTR等を制御していましたね。
 RS-232C付きの VTRって、いまだに、高いですよね。
 赤外線リモコンは、コード体系とか、公開・解析 進んでるから、 I/Fとしては使いやすいんでしょうね。


[11] 【祝】マルチリモコン購入 投稿者:Mirai くん (2002/04/10(水) 13:59)

発言[7]で書いた
>「パソコンでコントロールできる赤外線リモコン」:クロッサム2+
> URL:ハル・コーポレション販売
>   http://www.halcorp.co.jp/

 大阪のヨドバシカメラで購入しました(\6,680.- + 税)。
 意外にもよく売れているのか? 黒/シルバーのものが各3台ずつあり。

 パッケージされている状態でリモコンの左右を見ても、
 RS232C らしきコネクタが見当たらない(@_@;)
 不安になりつつも、製品名は合っているので、ダメモトでとりあえず購入。
 帰りの電車の中で、開梱してみて、ようやく謎が解けました(^^ゞ

 正解はこちらに掲載 ↓
 URL: : http://www3.biwako.ne.jp/~mirai954/Multi/rimocon.htm

 なお、専用の232Cケーブルは別売で、ヨドバシカメラでは扱っていなかったため
 メーカに問い合わせてみるつもり。
 (Java で制御できるようになったら、面白そうですよね・・)


[12] Re:【祝】マルチリモコン購入 投稿者:しがとも (2002/04/12(金) 00:01)

>>専用の232Cケーブル
PS/2 のようですよね。
コンパクトモデムでも、使われていたような!?
デジカメ転送ケーブルでも、某C***さんは、使っていた
ような・・・

>>メーカに問い合わせてみるつもり。
 ピン配置の図面ないんですか?
 Mirai くん のことだからケーブル取り寄せてる間に
自作ケーブルで、バリバリ制御するんだろうな。(爆)

 


[13] Re[12]:【祝】マルチリモコン購入 投稿者:Mirai くん (2002/04/12(金) 00:17)

「しがとも」さん、こんばんは。
久しぶりにBBSでニアミス中??

>>専用の232Cケーブル

 ケーブルの途中にTTL/±12V のレベル変換回路が入っているようで、
 自作はやっかいなようですね。

 ケーブルはこんな感じみたいです ↓
  http://www.bi.wakwak.com/~zeiram/2001-2.html

 定価2,900.-って書いてあったんで、購入したほうが早いかと・・(^^ゞ

「しがとも」さん Wrote:
>Mirai くん のことだからケーブル取り寄せてる間に
>自作ケーブルで、バリバリ制御するんだろうな。(

 ただいま、Linux のインストールにはまっていまして、
 もうしばらくは、リモコン君にはお休みいただこうかと・・


[14] Re[13]:【祝】マルチリモコン購入 投稿者:しがとも (2002/04/13(土) 05:51)

>>ケーブルの途中にTTL/±12V のレベル変換回路が
>>入っているようで、
 作るとなると 
  MAX232が、 250円/個 で・・
  D-SUB9Pが、100円/個 で・・
  日本橋までの電車代が 2500円/往復 ・・・(爆)

 購入したほうが早くて、安いですね。


[15] Re[14]:【祝】マルチリモコン購入 投稿者:Mirai くん (2002/04/15(月) 01:32)

京都寺町電気街ガイド
 URL: http://homepage1.nifty.com/oji3/Teramati/

同ガイドのマップ
 URL: http://homepage1.nifty.com/oji3/Teramati/map.html

パーツショップは、京都にも1軒だけありますね。
場所は四条河原町の高島屋の近く。
ニノミヤ無線京都店内の奥の方。

ただし、半導体などはあまりなく
MAX232などは多分取り寄せになるでしょう。
(昔は、ひえん堂や、中川無線にも
 パーツ売り場があったんだけどな〜)

しかし、ほんとうに、滋賀県にはパーツショップなんて
ないんだろうか?
(コジマやミドリ電化なんかにもないのかな??)


[16] (株)ハル・コーポレーションのその後・・ 投稿者:Mirai くん (2002/04/27(土) 10:15)

WEB、メール、電話、FAX と何れの手段でも連絡がとれなかったので
購入したヨドバシカメラ梅田店へ相談していました。

さきほど、同店から連絡があり
やはり、この3月末でハル・コーポレーションは倒産しているとのこと。
オプションのケーブルについては代理店に在庫ありとのことで
入手可能なようです。

ユニークな商品で、ネット上でもわりと評判がよかっただけに残念ですね。


[17] リモコンのオプションケーブルを入手 投稿者:Mirai くん (2002/04/28(日) 11:06)

昨日の午後1時ころ、再度ヨドバシカメラ梅田店より
ケーブル入荷の連絡が入り、さっそく購入してきました(\2,900.- + 税)。
予想通り、ケーブルの途中にドライバ回路を内蔵していると思われる
四角い部分があります。

見た目はこんな感じ
URL: : http://www3.biwako.ne.jp/~mirai954/Multi/cable.htm

さっそくVAIOと接続して使ってみようと思います。
そして、コントロールの方法を習得したら
例によって、携帯電話→CGI→Java プログラム経由で制御してみるつもり・・

ところで、このリモコン&ケーブル、会社が倒産したということは
かなりのレア物ということ??
(ヤフオクで高く売れる・・ってことはないか (^^ゞ)


[18] 赤外線リモコン その後 投稿者:Mirai くん (2002/04/30(火) 15:27)

単体で TV や VTR のリモコン信号を登録するところまでは
すんなりといったのですが、いざパソコンからのコントロールとなると
パソコン〜リモコン間の通信仕様やコマンド体系についての情報が
皆無なのでした
(メーカの WEB には掲載されていたようなのですが、今となっては・・)

ということで、ネット上で、このリモコンと通信しているフリーソフトや
通信仕様を調べてみると
通信仕様については、BTRON の関連書籍でこんなのを見つけました。

「マイクロスクリプト入門」
 坂村 健 監修/PMC研究所 編
 パーソナルメディア(株) 発行
 ISBN4-89362-160-2
 \2,500.- +税

 URL: http://www.personal-media.co.jp/book/tron/msnyuumon.html

 第3編 マイクロスクリプトの応用
  第16章 周辺機器を制御する

 あたりに、コマンド体系が記載されているようなので、
 即、購入してきました。
 (大当たりで、かなり詳しく記載されていました・・)

現在、ハイパーターミナルで手動でコマンドを送って動作確認作業中。
なんか、応答が返ってきたり、こなかったりとかなり不安定な感じです。

こんなんだと、気分まで不安定になってきますね (^^ゞ


[19] Re:赤外線リモコン その後 投稿者:しがとも (2002/04/30(火) 16:40)

>現在、ハイパーターミナルで手動でコマンドを送って動作確認
>作業中。
 あ、楽しそうだなー。(爆)
良ければ、ゴールデンウィーク中 ラインモニター お貸し
しましょうか?

 交換条件は、 Air H"128Kの接続実験(速度実験)を、させて
頂くということで・・・(笑)


[20] クロッサム 2+ リモコン販売再開?? 投稿者:Mirai くん (2002/07/14(日) 20:40)

ヨドバシカメラを通じて倒産したと知らされていた会社ハル・コーポレーションと
製品であるクロッサム2+ リモコンですが、
ぬあ〜んと、別の会社に引き継がれて販売を再開しています。

なんで判ったかというと、 Mirai くんは、大阪のヨドバシカメラに行くたびに
リモコンの売り場をちょくちょく覗いていたのですが
昨日、同売り場で、クロッサム2+(USBタイプ)リモコン約10台が
展示されているのを発見、うれしくなって1台即購入してしまいました。
(USB接続ケーブルとCDROMが付属して¥10240+税です)

製造元:(株)スギヤマエレクトロン
     http://www.sugi-ele.co.jp/

以前公開されていた、「クロッサムエクスプローラ」というソフトも掲載されています。


[21] Re:[20] クロッサム 2+ リモコン販売再開?? 投稿者:しがとも (2002/07/17(水) 01:54)

> ¥10240

1万円の衝動買い・・・・ 大蔵省に突撃取材しなければ・・・


[22] Re[21] :クロッサム 2+ リモコン販売再開?? 投稿者:Mirai くん (2002/07/19(金) 18:13)

「しがとも」さん Wrote:
>1万円の衝動買い・・・・

 この1万円は、Mirai くん の ポケットマネーです (^^ゞ
 販売再開に対する、ご祝儀ということで・・・

 Mirai くんのように、すでにRS232Cタイプのものを持っているひとは
 購入不要でしょうが、未購入のひとにはお奨めです。

 今回の製品は、USB 接続ケーブルと専用ソフトが標準添付されていますので
 RS232Cタイプのものよりはお買い得でしょう。


[23] クロッサム 2+ リモコン(その後) 投稿者:Mirai くん (2002/08/05(月) 19:43)

昨日、久しぶりに梅田へ出たついでに、例によって
ヨドバシカメラを覗いてきました。

と、7月13日(土)時点では、約10台あったのが
昨日の時点では残り5台。

この1ヶ月間に、私以外にも4人くらいのひとが購入しているってこと?(@_@)
かなりマニアックな商品だと思うのですが、結構人気があるってことなんでしょうね。

もし、この BBS を読んで、購入されたかたがおられるのでしたら
感想を聞いてみたい気もしますが・・・ (^^ゞ


管理フォーム  
(入力しない場合、修正/削除ができません)

じょじょBBS ver.7.00
created by じょじょのWeb工房