■onCreateメソッド
D2xxManager#getInstanceメソッドでUSB Serial Converter用インスタンスを生成します。
ライブラリが識別可能なUSBデバイスの追加するためにD2xxManager#setVIDPIDメソッドを呼び出して、REX-USB60シリーズのベンダーIDおよびプロダクトIDを追加します。
iPidTb[] 配列に格納した REX-USB60F, REX-USB60MI, REX-USB60MBの3製品のプロダクトIDを使って登録しています。
USB接続状態を監視するブロードキャストレシーバーとしてmUsbReceiverの登録を行い、このブロードキャストレシーバーで受信するインテントを登録します。
■onResumeメソッド
onResumeメソッドでは、Search_MyUsbSerialメソッドを使って接続されたUSBデバイスのUsbDevice オブジェクトを取得し、本プログラム(MagneticCardReader01)での使用を許可するため、UsbManager#requestPermissionメソッドを呼び出します。
■Search_MyUsbSerialメソッド
ポートのオープンで使用するために、USBポートに接続されているデバイスのUsbDeviceオブジェクトを検索します。
■onStopメソッド
onStopメソッドでは、End_MyUSBSerialメソッドを呼び出して、USB Serial Converterの終了処理を行います。
■onDestroyメソッド
onDestroyメソッドでは、アプリ終了時の処理です。
USBポートの接続状態の監視処理を終了するためにUnrgisterReceiverメソッドを呼び出します。
■onReceiveブロードキャストレシーバー
onCreateメソッドで登録されたUSB接続状態を監視するブロードキャストレシーバー処理。
USB Serial Converterを装着すると、「このUSBデバイスが接続されたときにMagneticCardReader01を開きますか….」といった実行の許可を求める画面が表示されます。
ここで実行を許可をしたときに、USB Serial Converterの初期化を行いますが、
そのための処理としてStart_MyUsbSerialメソッドを呼び出します。
USB Serial Converterが取り外された時は、USB Serial Converterを終了するためにEnd_MyUsbSerialメソッドを呼び出します。
■Start_MyUsbSerialメソッド
Start_MyUsbSerialメソッドでは、USB Serial Converterの初期化のためにconnectFunctionメソッドを呼び出し、その後、通信パラメーターを設定するためSetConfigメソッドを呼び出します。
■connectFunctionメソッド
connectFunctionメソッドは、ポートをオープンするためにD2xxManager#openByUsbDeviceメソッドを呼び出します。
さらに、データ受信処理のためのスレッドreadThreadを開始します。
■SetConfigメソッド
SetConfigメソッドでは、通信パラメータを設定するためにFT_DEVICEの以下の各メソッドを呼び出します。
- setBaudRateメソッド:ボーレート
- setDataCharacteristicsメソッド:データビット、ストップビット、パリティ
- setFlowControlメソッド:フロー制御
■End_MyUsbSerialメソッド
End_MyUsbSerialメソッドでは、ReadThreadを停止させた後にポートをクローズします。
■readThreadスレッド
USB Serial Converterからのデータ受信処理はブロックされるため、別スレッド readThreadとして処理します。
そしてreadThreadのrunメソッド内で受信処理を行います。
FT_DEVICE #getQueueStatusメソッドで受信データが存在するかチェックして、受信データが存在すれば、データ受信はFT_DEVICE #readメソッド呼び出します。
取得されたバーコードデータは、readThreadからMainActivity内のハンドラーへメッセージで通知し、データ表示処理は、MainActivity内で処理します。
そしてreadThreadで取得された時期カードデータは、readThreadからMainActivity内のハンドラーへメッセージで通知し、データ表示処理は、MainActivity内で処理します。
上記 sendMessageが以下のハンドラー処理へ通知されます。
こちらのハンドラー内で受信したデータの表示処理等を行います。
以上でUSB-Serialコンバータのサンプルプログラムにおける初期化からデータ受信までの一連の流れを通じて、D2xx.jarクラスドライバの使い方を説明しました。
クラスドライバの詳細については、FTDI社から提供されている仕様書およびデモプログラムのソースをご覧ください。
仕様書:
http://www.ftdichip.com/Support/Documents/AppNotes/AN_233_Java_D2xx_for_Android_API_User_Manual.pdf
また、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)
この記事で紹介した製品