1.コーナー開設の背景
JavaによるI/O制御の実験は一段落しました。
その成果は既に「Java の お勉強室」のほうにまとめましたが
まだWindows Me/2000 だけでのこと。
今後組み込みLinux上でJavaを実装する際には、再度必要となる知識です。
ここでは、今回の成果に至るまでの技術資料や Tips について
整理しておこうと思っています。
2.本コーナーで扱うテーマ
・Java によるI/O制御 関連の技術・書籍などの紹介
・JNI(Java Native Interface)実装方法の紹介
などを主とします。
みなさんからの質問・ご意見なども大歓迎ですので、よろしくお願いします。
まず、今回の実験で最もよく利用した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出版社のものが多いですね〜。
いくら、関連本ばかりあってもプログラムはできませんよね。
というわけで、開発手順です。
(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) 以上の全クラスを再度ビルドする
実行すると見事! シリアルポートでの制御を行えます。
以上のように、Java でI/O制御を行うために必要となる知識・技術とは、
やはり
・JNI (Java Native Interface)
・Visual C++ 開発環境
・Windows API
・DLL
など、広範囲にわたることになります。
また、きちんとしたデバイスドライバを作成するためには、
さらに
・Windows 95/98/Me/2000 などのOSの仕組み
・VMM、VxD、OCX、WDM の仕組み
などの知識が必要となります。
ドライバーって、いざ作るとなると、大変ですよね。
DIO、SIO、AD を、Windowsで、使用していますが、
ドライバーは、ボードメーカー提供の物を、使用しています。
ドライバーを、複数のプロセスで、制御するのは難しいので、
私は MMF(Memory Mapped File)を、使って、1個のEXEで、
メーカー提供ドライバーを、OPENさせて使っています。
DLLは、HDDの残容量を、VBで、調べるために作ったことが一度
だけあります。
たぶん、DLLは、2度と作ることが無い(難しくて、作れない)
と、思ってます。
DOSに比べて、 Windowsは、 I/O制御 複雑になりましたよね。
正直言って、やりたくな〜い。
そういえば、
今回のシリアルポートのは割り込み制御しなかったんで
DLL といっても初級レベルですよね。
VB だと、MScomm コントロールがあったんで
これも初級レベル。
Air H" で、
「A社 → B社 と機種変更して、カードが認識されなくなった」
というのも、ドライバの作りこみの問題か??
と、もっぱらの噂になっています。
割り込みの絡むドライバって、たいへんなんでしょうね (^^ゞ
某雑誌を読んでいて見つけました。
「パソコンでコントロールできる赤外線リモコン」:クロッサム2+
URL:ハル・コーポレション販売
http://www.halcorp.co.jp/
これを使えば、おもちゃの扇風機なんかではなく
実際に、家電機器をコントロール出来てしまいますよね。
(エアコンのON/OFF や、TVのチャンネル切換えなど・・)
USB/RS232C のどちらのものもあるようですが
Java で通信することも考えて、RS232C タイプのものを
購入してみようと思っています。
なんか、Java でちょこっとアプリケーションを組めば、
いきなり製品になりそうなものができそうな気がしませんか?
(セキュリティーの対応は必要でしょうが・・)
自己レスです。
「クロッサム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 でコントロールさせようとしている・・)
さらに検索してみたところ、企業などでも開発中のようですね。
URL: 横川電機(情報家電コントローラを開発)
http://www.yokogawa.co.jp/itbiz/
CS(S**P**TV)の録画予約 っていうのが使っていますよね。
チューナーから伸びる 赤外線の送信機が、VTRの録画開始
してますね。
(不安が残りますね・・・ 垂れ流しなので・・・ 僕の宇宙撮れたかなー・・・)
インターネット経由で、録画予約できるPC(ハードDiskのVTR?)を、見かけたことがありますが、原理は、PCに取り付けたリモコンの送信機で、市販のCSチューナーと、市販のVTR等を制御していましたね。
RS-232C付きの VTRって、いまだに、高いですよね。
赤外線リモコンは、コード体系とか、公開・解析 進んでるから、 I/Fとしては使いやすいんでしょうね。
発言[7]で書いた>「パソコンでコントロールできる赤外線リモコン」:クロッサム2+
> URL:ハル・コーポレション販売
> http://www.halcorp.co.jp/
大阪のヨドバシカメラで購入しました(\6,680.- + 税)。
意外にもよく売れているのか? 黒/シルバーのものが各3台ずつあり。
パッケージされている状態でリモコンの左右を見ても、
RS232C らしきコネクタが見当たらない(@_@;)
不安になりつつも、製品名は合っているので、ダメモトでとりあえず購入。
帰りの電車の中で、開梱してみて、ようやく謎が解けました(^^ゞ
正解はこちらに掲載 ↓
URL: : http://www3.biwako.ne.jp/~mirai954/Multi/rimocon.htm
なお、専用の232Cケーブルは別売で、ヨドバシカメラでは扱っていなかったため
メーカに問い合わせてみるつもり。
(Java で制御できるようになったら、面白そうですよね・・)
>>専用の232Cケーブル
PS/2 のようですよね。
コンパクトモデムでも、使われていたような!?
デジカメ転送ケーブルでも、某C***さんは、使っていた
ような・・・>>メーカに問い合わせてみるつもり。
ピン配置の図面ないんですか?
Mirai くん のことだからケーブル取り寄せてる間に
自作ケーブルで、バリバリ制御するんだろうな。(爆)
「しがとも」さん、こんばんは。
久しぶりにBBSでニアミス中??>>専用の232Cケーブル
ケーブルの途中にTTL/±12V のレベル変換回路が入っているようで、
自作はやっかいなようですね。
ケーブルはこんな感じみたいです ↓
http://www.bi.wakwak.com/~zeiram/2001-2.html
定価2,900.-って書いてあったんで、購入したほうが早いかと・・(^^ゞ
「しがとも」さん Wrote:>Mirai くん のことだからケーブル取り寄せてる間に
>自作ケーブルで、バリバリ制御するんだろうな。(
ただいま、Linux のインストールにはまっていまして、
もうしばらくは、リモコン君にはお休みいただこうかと・・
>>ケーブルの途中にTTL/±12V のレベル変換回路が
>>入っているようで、
作るとなると
MAX232が、 250円/個 で・・
D-SUB9Pが、100円/個 で・・
日本橋までの電車代が 2500円/往復 ・・・(爆)
購入したほうが早くて、安いですね。
京都寺町電気街ガイド
URL: http://homepage1.nifty.com/oji3/Teramati/
同ガイドのマップ
URL: http://homepage1.nifty.com/oji3/Teramati/map.html
パーツショップは、京都にも1軒だけありますね。
場所は四条河原町の高島屋の近く。
ニノミヤ無線京都店内の奥の方。
ただし、半導体などはあまりなく
MAX232などは多分取り寄せになるでしょう。
(昔は、ひえん堂や、中川無線にも
パーツ売り場があったんだけどな〜)
しかし、ほんとうに、滋賀県にはパーツショップなんて
ないんだろうか?
(コジマやミドリ電化なんかにもないのかな??)
WEB、メール、電話、FAX と何れの手段でも連絡がとれなかったので
購入したヨドバシカメラ梅田店へ相談していました。
さきほど、同店から連絡があり
やはり、この3月末でハル・コーポレーションは倒産しているとのこと。
オプションのケーブルについては代理店に在庫ありとのことで
入手可能なようです。
ユニークな商品で、ネット上でもわりと評判がよかっただけに残念ですね。
昨日の午後1時ころ、再度ヨドバシカメラ梅田店より
ケーブル入荷の連絡が入り、さっそく購入してきました(\2,900.- + 税)。
予想通り、ケーブルの途中にドライバ回路を内蔵していると思われる
四角い部分があります。
見た目はこんな感じ
URL: : http://www3.biwako.ne.jp/~mirai954/Multi/cable.htm
さっそくVAIOと接続して使ってみようと思います。
そして、コントロールの方法を習得したら
例によって、携帯電話→CGI→Java プログラム経由で制御してみるつもり・・
ところで、このリモコン&ケーブル、会社が倒産したということは
かなりのレア物ということ??
(ヤフオクで高く売れる・・ってことはないか (^^ゞ)
単体で TV や VTR のリモコン信号を登録するところまでは
すんなりといったのですが、いざパソコンからのコントロールとなると
パソコン〜リモコン間の通信仕様やコマンド体系についての情報が
皆無なのでした
(メーカの WEB には掲載されていたようなのですが、今となっては・・)
ということで、ネット上で、このリモコンと通信しているフリーソフトや
通信仕様を調べてみると
通信仕様については、BTRON の関連書籍でこんなのを見つけました。
「マイクロスクリプト入門」
坂村 健 監修/PMC研究所 編
パーソナルメディア(株) 発行
ISBN4-89362-160-2
\2,500.- +税
URL: http://www.personal-media.co.jp/book/tron/msnyuumon.html
第3編 マイクロスクリプトの応用
第16章 周辺機器を制御する
あたりに、コマンド体系が記載されているようなので、
即、購入してきました。
(大当たりで、かなり詳しく記載されていました・・)
現在、ハイパーターミナルで手動でコマンドを送って動作確認作業中。
なんか、応答が返ってきたり、こなかったりとかなり不安定な感じです。
こんなんだと、気分まで不安定になってきますね (^^ゞ
>現在、ハイパーターミナルで手動でコマンドを送って動作確認
>作業中。
あ、楽しそうだなー。(爆)
良ければ、ゴールデンウィーク中 ラインモニター お貸し
しましょうか?
交換条件は、 Air H"128Kの接続実験(速度実験)を、させて
頂くということで・・・(笑)
ヨドバシカメラを通じて倒産したと知らされていた会社ハル・コーポレーションと
製品であるクロッサム2+ リモコンですが、
ぬあ〜んと、別の会社に引き継がれて販売を再開しています。
なんで判ったかというと、 Mirai くんは、大阪のヨドバシカメラに行くたびに
リモコンの売り場をちょくちょく覗いていたのですが
昨日、同売り場で、クロッサム2+(USBタイプ)リモコン約10台が
展示されているのを発見、うれしくなって1台即購入してしまいました。
(USB接続ケーブルとCDROMが付属して¥10240+税です)
製造元:(株)スギヤマエレクトロン
http://www.sugi-ele.co.jp/
以前公開されていた、「クロッサムエクスプローラ」というソフトも掲載されています。
> ¥10240
1万円の衝動買い・・・・ 大蔵省に突撃取材しなければ・・・
「しがとも」さん Wrote:>1万円の衝動買い・・・・
この1万円は、Mirai くん の ポケットマネーです (^^ゞ
販売再開に対する、ご祝儀ということで・・・
Mirai くんのように、すでにRS232Cタイプのものを持っているひとは
購入不要でしょうが、未購入のひとにはお奨めです。
今回の製品は、USB 接続ケーブルと専用ソフトが標準添付されていますので
RS232Cタイプのものよりはお買い得でしょう。
昨日、久しぶりに梅田へ出たついでに、例によって
ヨドバシカメラを覗いてきました。
と、7月13日(土)時点では、約10台あったのが
昨日の時点では残り5台。
この1ヶ月間に、私以外にも4人くらいのひとが購入しているってこと?(@_@)
かなりマニアックな商品だと思うのですが、結構人気があるってことなんでしょうね。
もし、この BBS を読んで、購入されたかたがおられるのでしたら
感想を聞いてみたい気もしますが・・・ (^^ゞ