2月 212014
 

■onCreateメソッド
D2xxManager#getInstanceメソッドでUSB Serial Converter用インスタンスを生成します。

MGCDRD01_src005

ライブラリが識別可能なUSBデバイスの追加するためにD2xxManager#setVIDPIDメソッドを呼び出して、REX-USB60シリーズのベンダーIDおよびプロダクトIDを追加します。
iPidTb[] 配列に格納した REX-USB60F, REX-USB60MI, REX-USB60MBの3製品のプロダクトIDを使って登録しています。
MGCDRD01_src006

USB接続状態を監視するブロードキャストレシーバーとしてmUsbReceiverの登録を行い、このブロードキャストレシーバーで受信するインテントを登録します。
MGCDRD01_src007

■onResumeメソッド
onResumeメソッドでは、Search_MyUsbSerialメソッドを使って接続されたUSBデバイスのUsbDevice オブジェクトを取得し、本プログラム(MagneticCardReader01)での使用を許可するため、UsbManager#requestPermissionメソッドを呼び出します。

MGCDRD01_src008

■Search_MyUsbSerialメソッド
ポートのオープンで使用するために、USBポートに接続されているデバイスのUsbDeviceオブジェクトを検索します。

MGCDRD01_src009

■onStopメソッド
onStopメソッドでは、End_MyUSBSerialメソッドを呼び出して、USB Serial Converterの終了処理を行います。

MGCDRD01_src010

■onDestroyメソッド
onDestroyメソッドでは、アプリ終了時の処理です。
USBポートの接続状態の監視処理を終了するためにUnrgisterReceiverメソッドを呼び出します。

MGCDRD01_src011

■onReceiveブロードキャストレシーバー
onCreateメソッドで登録されたUSB接続状態を監視するブロードキャストレシーバー処理。
USB Serial Converterを装着すると、「このUSBデバイスが接続されたときにMagneticCardReader01を開きますか….」といった実行の許可を求める画面が表示されます。
ここで実行を許可をしたときに、USB Serial Converterの初期化を行いますが、
そのための処理としてStart_MyUsbSerialメソッドを呼び出します。

MGCDRD01_src012

USB Serial Converterが取り外された時は、USB Serial Converterを終了するためにEnd_MyUsbSerialメソッドを呼び出します。

MGCDRD01_src013

■Start_MyUsbSerialメソッド
Start_MyUsbSerialメソッドでは、USB Serial Converterの初期化のためにconnectFunctionメソッドを呼び出し、その後、通信パラメーターを設定するためSetConfigメソッドを呼び出します。

MGCDRD01_src014a

■connectFunctionメソッド
connectFunctionメソッドは、ポートをオープンするためにD2xxManager#openByUsbDeviceメソッドを呼び出します。

MGCDRD01_src015a

さらに、データ受信処理のためのスレッドreadThreadを開始します。

MGCDRD01_src016a

■SetConfigメソッド
SetConfigメソッドでは、通信パラメータを設定するためにFT_DEVICEの以下の各メソッドを呼び出します。

  • setBaudRateメソッド:ボーレート
  • setDataCharacteristicsメソッド:データビット、ストップビット、パリティ
  • setFlowControlメソッド:フロー制御

■End_MyUsbSerialメソッド
End_MyUsbSerialメソッドでは、ReadThreadを停止させた後にポートをクローズします。

MGCDRD01_src017

■readThreadスレッド
USB Serial Converterからのデータ受信処理はブロックされるため、別スレッド readThreadとして処理します。

MGCDRD01_src018

そしてreadThreadのrunメソッド内で受信処理を行います。
FT_DEVICE #getQueueStatusメソッドで受信データが存在するかチェックして、受信データが存在すれば、データ受信はFT_DEVICE #readメソッド呼び出します。
取得されたバーコードデータは、readThreadからMainActivity内のハンドラーへメッセージで通知し、データ表示処理は、MainActivity内で処理します。

MGCDRD01_src019a

そしてreadThreadで取得された時期カードデータは、readThreadからMainActivity内のハンドラーへメッセージで通知し、データ表示処理は、MainActivity内で処理します。

MGCDRD01_src020a

上記 sendMessageが以下のハンドラー処理へ通知されます。
こちらのハンドラー内で受信したデータの表示処理等を行います。

MGCDRD01_src021

以上でUSB-Serialコンバータのサンプルプログラムにおける初期化からデータ受信までの一連の流れを通じて、D2xx.jarクラスドライバの使い方を説明しました。

クラスドライバの詳細については、FTDI社から提供されている仕様書およびデモプログラムのソースをご覧ください。

仕様書:
http://www.ftdichip.com/Support/Documents/AppNotes/AN_233_Java_D2xx_for_Android_API_User_Manual.pdf

デモプログラム:
http://www.ftdichip.com/Support/SoftwareExamples/Android/TN_147_Java_D2xx_for_Android_Demo_Source.zip

また、AndroidのUSB Host APIについても説明しておりません。これについて知りたい場合は、Googleの開発者向けサイトの以下を参照してください。
http://developer.android.com/guide/topics/connectivity/usb/host.html

これで今回の磁気カードリーダ用サンプルプログラム(MagneticCardReader01)の説明を終わります。

e2eStore会員登録されている方は、この記事で紹介したサンプルアプリケーションを
下記のリンクから自由にダウンロードしていただけます。

サンプルアプリケーション(MagneticCardReader01)のダウンロード

会員登録はこちらから…


関連記事
AndroidでRS-232C機器を使う(その1)
AndroidでRS-232C機器を使う(その2)
AndroidでRS-232C機器を使う(その3)
AndroidでRS-232C機器を使う(その4)
AndroidでRS-232C機器を使う(その5)


この記事で紹介した製品

REX-USB60F製品画像
REX-USB60F - USBシリアルコンバータ

RCL-USBMB製品画像
RCL-USBMB - USB Std.A to Micro USB B変換ケーブル

REX-USB60MI製品画像
REX-USB60MI - USBシルアルコンバータ(Micro-USBタイプ)

 返信する

以下のHTML タグと属性が利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(必須)

(必須)

*