2012年10月11日木曜日

SDK for NFC Wrapper Library - Polling


前回SDK for NFC Wrapper Libraryのプロトタイプを作りました。
ここから各NFCデバイスに向けての機能を肉付けしていきたいと思います。
現段階ではコマンドを発行することができないので、コマンド発行まで実装したいと思います。



デバイス使用権の獲得

コマンド発行するには、デバイス使用権の獲得をしなければなりません
こちらの記事を参照
デバイス使用権獲得にはtarget_numberと呼ばれる値が必要になります。
target_numberは各NFCデバイスごとの構造体にパースした後に取得することができるので、イベント発行前にデバイス使用権獲得のコードを仕込みます。


コマンドの発行

FeliCaのコマンドについてはこちらから参照できます
Sony Japan | FeliCa | 法人のお客様 | 技術情報
http://www.sony.co.jp/Products/felica/business/tech-support/index.html?j-short=tech-support
「FeliCaカードユーザーズマニュアル」を読むと一番簡単なコマンド「Polling」の仕様が書かれているので、こちらを実装したいと思います。
今回新しく以下のクラスを作りました。

ICommand.cs
FeliCaコマンドのインターフェイスです。

PollingCommand.cs
Pollingを発行するためのコマンド
システムコードやリクエストコードを指定することができます。

CommandResponse.cs
コマンドのレスポンスです。
レスポンス長と実際のレスポンスを分解することが役割です。

PollingCommandResponse.cs
Pollingコマンドのレスポンスです。
Pollingを発行して帰ってきたレスポンスを分解することが役割です。

FeliCaException.cs
コマンド発行中になんかしらのエラーが発生した際に投げられる例外です。

FeliCaLibWrapper.cs
FeliCaコマンドを実行するクラスです。

以上のクラスを使い、Pollingするまでのサンプルコードは以下です。


試行錯誤しています

まだ設計がふにゃふにゃとしているので、大きく仕様が変わる恐れがあります。
たとえば
FeliCaLibWrapperと書いているが、実際にはTypeAへのコマンドも投げられるので、NFCCommandExecutorとかFeliCaではなくてNFCという名前にした方がいいんじゃないか
とか
Pollingのタイムスロット数変えられないの?
とか
戻り値booleanじゃなくて、もっとExceptionを活用すべき
などなど…
自分自身もトライアンドエラーを繰り返しているので、いろいろもやもやと考えているところです。

FeliCaについてやりたいこと
・サンプルに付属していたc#ラッパークラスを別に新しく定義する
 ・FeliCaLibWrapperとfelica_nfc_dll_wrapper_basicと2つあるので、統合したい。
・ライブラリを叩いたときの戻り値で例外が発生したことを表しているが、Exceptionを使うことで実装がすっきりしそう。

ソースコード


https://github.com/bs-nfc/SDK-for-NFC-Wrapper-Library

カスタマー開発部 山下智樹

記載されている会社名、および商品名等は、各社の商標または登録商標です。

0 コメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...