Skip to content
Kazzz edited this page Mar 4, 2011 · 4 revisions

** What's new.('2010.03.04 ) **

各種バグFIXを行いました。

今回の修正により、2.3.3系をmaster本流としました。

2.3.2系はbranchとして暫く残しますが、今後保守はしない予定です。

** nfc-felica-lib **

  • CommandPacketクラスでコマンド長が127バイトを超えた際に例外が発生するバグをFIXしました
  • 同クラスにおいてコマンド長が255バイトを超えた場合は例外をスローするように修正しました

*thanks @zaki50!

** What's new.('2010.02.25 ) **

各種アップデートを行いました。

** nfc-felica-lib **

  • android 2.3.3のOTA開始に合わせて、2.3.3用のブランチを作成しました。
  • android.nfc.Tagクラスから@hideが取れてFeliCaはNfcFクラスで直接扱うことができるようになりました。結果リフレクションが不要になったのでNfcWrapperは除去しました。
  • FeliCaTag、FeliCaTagクラス内部のnfcTagフィールドの型をandroid.nfc.Tagクラスに変更しました

** What's new.('2010.02.20 ) **

FeliCa Lite対応のため、各種アップデートを行いました。

** nfc-felica **

**NFCFeliCaReader

  • FeliCa Liteの読みこみ/書き込みに対応しました。
  • FeliCa Liteのデータの書き込みのため、FeliCaLiteWriterアクティビティを追加しました。

** nfc-felica-lib **

  • FeliCa仕様とNfc仕様を分離するためnet.kazzz.nfcパッケージを追加しました
  • FeliCaLibクラスからリフレクションを用いているコードをNfcWrapperに分離しました。※
  • FeliCaLibクラスにMemoryConfigurationBlockクラスを追加しました
  • FeliCaクラスをFeliCaTagクラスに変更しました。
  • FeliCaLiteTagクラスを追加しました。(polling、readWithoutEncryption、writeWithoutEncryptionメソッドを実装)
  • FeliCaTagクラス、FeliCaLiteTagクラスのルートとしてNfcTagクラスを追加しました。
  • net.kazzz.felica.commandパッケージに WriteResponseクラスを追加しました。
  • net.kazzz.utilパッケージを追加、IPredicateインタフェース及びFinder等のユーティリティを追加しました

なお、今回のアップデートに関しては、以前にコメント頂いたちきん(mokemokechicken)さんのコードを参考にさせて頂きました。 AndroidのNFC機能でFeliCaの読み書きをする (ゆめ技:ゆめみスタッフブログ) ちきん(mokemokechicken)さん、ありがとうございました。

felica-Lite


nfc-felica

nfc-felicaとは

Android 2.3からサポートされたNFC API(一部隠されたAPI)を使ってFeliCaカードにアクセスするためのクラス群を提供します。 FeliCa SDK等のライブラリィを必要とせずにFeliCaカードにアクセスし通信を行うことができます。 Suica/Pasmoのデータとサイバネ駅データベース(StationCode.db)により使用履歴を日本語でフォーマットできます。


サンプルアプリケーション(NFCFeliCaReader)の動かし方

プロジェクトはそのままNFCFeliCaReaderという名前のアプリケーションになっています。 アプリケーションをインストール後、SDKのNfcDemo同様にFeliCaカードをNfc機能を搭載したAndroidスマートフォンに翳すことで、インテント"android.nfc.action.TAG_DISCOVERED"がブロードキャストされますので、これを受信するActivityが起動してカードのデータを読み込みます。

Rev5よりタグ情報を読み込んだ後に「使用履歴」ボタンを押下することで、Suica/Pasmoの使用履歴を見ることができるようになりました。


nfc-felica

nfc-felicaとは

Android 2.3からサポートされたNFC API(一部隠されたAPI)を使ってFeliCaカードにアクセスするためのクラス群を提供します。 FeliCa SDK等のライブラリィを必要とせずにFeliCaカードにアクセスし通信を行うことができます。 Suica/Pasmoのデータとサイバネ駅データベース(StationCode.db)により使用履歴を日本語でフォーマットできます。


サンプルアプリケーション(NFCFeliCaReader)の動かし方

プロジェクトはそのままNFCFeliCaReaderという名前のアプリケーションになっています。 アプリケーションをインストール後、SDKのNfcDemo同様にFeliCaカードをNfc機能を搭載したAndroidスマートフォンに翳すことで、インテント"android.nfc.action.TAG_DISCOVERED"がブロードキャストされますので、これを受信するActivityが起動してカードのデータを読み込みます。

Rev5よりタグ情報を読み込んだ後に「使用履歴」ボタンを押下することで、Suica/Pasmoの使用履歴を見ることができるようになりました。


コードについて

FeliCa PICC側にどのようなデータを送っているかは、NFCFeliCaReader.javaを追うことで理解できると思います。(FeliCaコマンドをそのまま送っても駄目な理由も分かります)

処理自体は全てFeliCa.java FeliCaLib.javaで行っています。

Rev5で以下を更新しました。

  • Suica/PasmoのデータをフォーマットするSuicaクラスを追加
  • Suica/Pasmo/IRuCaにおける駅コード/名称データベース(StationCode.db)とそのユーティリティクラスDBUtilを追加
  • ユーティリティをUtilクラスに集約

注意事項

一部隠蔽(@hide)されたクラスとAPIを使用しているため、一切の予告なしにAndroid SDKの更新によって機能が使えなくなる可能性があります。自己責任で利用ください

本機能はAndroid 2.3を搭載し、NFCチップ(SAMSUNG NXP's PN544 NFC chip)を搭載したAndroidスマートフォン上でのみ動作します。(2011/01/30 現在、確認できているのは Nexus Sのみです)

現時点(2011/01/30)においては以下のコマンドしか動作確認していません。

  • Polling
  • Request Service
  • Request Response
  • Read Without Encryption
  • Request System Code

なお、Read/Write等認証(Authentication)が必要なコマンドは個別に契約が必要ですので本ライブラリィでは使えません。

参考: FeliCa公式仕様 FeliCaカード ユーザーズマニュアル FeliCa技術方式の各種コードについて


サイバネ駅データベース(StationCode.db)について

全てのソースコードは記載通りApache 2.0ライセンスの元に再利用可能ですが、Suicaクラスからアクセスしているサイバネ駅コードデータベース(StationCode.db)の原データに関しては有志の皆様の無償協力のもとで作成されたものであり、対価の発生する配布、商用での利用は作成元のご意向で許可されておりません。(個人利用、無償で利用する分に関してはなんら制限はありません) 仮に本プロジェクトのコードを商用で利用する場合、データベースのデータを分離して再利用して頂くことになりますのでご注意ください。

駅コード/店舗コード、サイバネ駅コードデータベースは以下のサイトで公開されているExcelデータをインポートして作成しました。 IC SFCard Fan 謹んで御礼申し上げます。


謝辞

本プロジェクトとそのコードは以下の方々のご協力無しでは実現しませんでした。この場を借りてお礼申し上げます。

若さん(waka21)

私がどうしても分からなかった部分を解決してくださいました。感謝しております。

adamrockerさん(Gingerbread(Android2.3)でNFC書出しへの道のり-throw Life)

今や我らのGoogle API Expertでらっしゃいます。Nfcの隠しクラスとそのAPIに関してBlogで詳しくまとめてくださったおかげでこのプロジェクトがあります。

vvakameさん(ABC2011WinterのためにもっとNFCについて調べた)

vvakameさんの元気の良さとそのやる気にはいつも励まされます。ABC(Android Bazaar and Conference)のためにまとめた上記リンク先の資料が非常に参考になりました。

Suica/Pasmoのデータフォーマット解析に関しては以下のサイトを全面的に参考にさせて頂きました

suica - FeliCa Library Wiki - SourceForge.JP

TwitterのAndroidクラスタの方々にはいろいろと刺激されました。このプロジェクトは皆さんのおかげです。


※「FeliCa」は、ソニー株式会社が開発した非接触ICカードの技術方式です。

※「FeliCa」は、ソニー株式会社の登録商標です。

※ 本プロジェクトは SONYまたはFeliCa技術を用いるその他企業ともいかなる関係もありません。