FeliCa Tutorialの実行

Springfield > FeliCa Lesson

SDK for FeliCa Lite 1.2をインストールしたWindows XP PC
動作環境について、SDK for FeliCa User's Manualには以下の記述がある(p.6)。
Enterprise版
・カード:RC-S830, RC-S850, RC-S860の各シリーズ
・リーダ/ライタ:シリアルリーダ/ライタRC-S440, RC-S441, RC-S460, RC-S480
Professional版
・カード:RC-S830, RC-S850, RC-S860の各シリーズ
・リーダ/ライタ:シリアルリーダ/ライタRC-S440, RC-S441, RC-S460, RC-S480
Lite版
・カード:RC-S860
・リーダ/ライタ:RC-S310, RC-S320

SDK_for_Felica/FeliCa_Tutorial/doc/help/default.html
を参考にする。

D:\SDK_for_Felica\FeliCa_Tutorial\bin\felica_tutorial.exeをダブルクリックして起動する。

FeliCa Tutorialウィンドウが開く

● Step1 Prologueの画面が表示される。

● Step2 Load Libraryタブをクリックする。

[Path Settings]
○ Library Pathの設定
右側の[ Browse... ]ボタンをクリックしてfelica.dllとrw.dllの保存してあるbinフォルダをクリックすると次のように設定される。
Library Path  D:\SDK_for_Felica\FeliCa_Library\bin
[ Load Library ]ボタンをクリックする。
画面下のメッセージ欄に次のようなメッセージが表示されればよい。
「2005-08-10 11:30:10 dllの読み込みに成功しました」
正常終了するとパスがfelica_tutorial_conf.iniに保存され、次回デフォルトとして読み込まれます。

○ Plugins Home Directoryの設定
右側の[ Browse... ]ボタンをクリックしてFeliCa_library\bin\pluginsフォルダをクリックすると次のように設定される。
Plugin Home Directory  D:\SDK_for_Felica\FeliCa_Library\bin\plugins
[ Load Plugins ]ボタンをクリックする。
画面の下に次のようなメッセージが表示されればよい。
「2005:08-10 11:33:13 usb[1]
 .......(18行続く)
 2005-08-10 11:33:13 以上のプラグインを読み込み、初期化しました」
正常終了するとパスがfelica_tutorial_conf.iniに保存され、次回デフォルトとして読み込まれます。

[Library Version Information]
rw.dll [ GetVersion ]ボタンをクリックすると表示される。
felica.dll [ Get Version ]ボタンをクリックすると表示される。

[Reader Writer Information]
この時点では何も表示されていない。
USBリーダ・ライタ(RC-S320)を接続して
[ OPEN ]ボタンをクリックする。

リーダ・ライタの接続ポートを自動検索し、オープンします。
正常終了すると、リーダ・ライタの情報が表示されます。
Port Name USB0 Baud Rate [bps] 0
Encryption Mode Disable, CBC OFF
Access Key:kar ff ff ff ff ff ff ff ff
Access Key:kbr ff ff ff ff ff ff ff ff
画面下のメッセージ欄に次のように表示されます。
「2005-08-10 11:49:38 オープンに成功しました」

● Step3:Polling

Step3 Pollingタブをクリックする。
[ System Parameters ]
カードフォーマット固有のシステムパラメータです。
Pollingを行うには次のパラメータを設定しなければなりません。
FeliCa_Tutorialでは、これらのデータはfelica_tutorial_conf.iniから取得して自動的に表示されます。
System Code 00 00
System Key 0f 1e 2d 3c 4b 5a 69 78
Area Code 00 00
Area_0000 Key 01 23 45 67 89 ab cd ef
Poling を行うと、felica_tutorial_conf.ini に保存されます。

Check IDm
これ以降の処理でカードIDmのチェックを行うかどうかを設定します。
カードIDmのチェックとは、あらかじめカードのIDmを登録し、
その後別のカードに変えて読み書きを実行しようとした場合に、エラーを表示して処理を中止する事です。
Pollingボタンのクリックで設定されます。

PollingボタンのクリックでPollingが実行されます。
この時、ライブラリとプラグインが正常に読み込まれ、ポートがオープンされている必要があります。

[v] Check IDm [ Polling ]ボタンをクリックする。

リーダ・ライタにカードをかざしていなければ画面下のメッセージ欄に
! 2005-08-10 12:15:42 [rw.dll] カードを補足することが出来ませんでした
! 2005-08-10 12:15:42 [felica.dll] ポーリングに失敗しました
と表示される。
リーダ・ライタに付属のカードを乗せれば画面下のメッセージ欄に
2005-08-10 12:16:24 ポーリングに成功しました
2005-08-10 12:16:24 カードIDmのチェックを行うよう設定しました
2005-08-10 12:16:24 Card IDm:0101060158075705
などのように表示される。
学生証、職員証は別に作成されているのでLite版では読めない。

[ Polling and Call Back ]
[ Start ]ボタンをクリックする。
Startボタンのクリックで連続Pollingが開始します。カードをかざすとイラストが光ります。
この時、ライブラリとプラグインが正常に読み込まれ、ポートがオープンされている必要があります。
かざしたカードをリーダ・ライタから離すとイラストの光が消えます。
連続Polling中、別のタブに切り換えて読み書きを実行することも可能です。

[ Stop ]ボタンをクリックする。
Stopボタンのクリックで連続Pollingが終了します。

● Step4:Random

Step4 Randomタブをクリックする。

Random Service Typeでは、読み書き対象のブロックを自由に指定してアクセスすることが可能です。
1ブロック16バイトです。

[ Service ]
サービスコードは登録されたサービスを識別する番号です。
10ビットのサービスナンバーと6ビットのサービスタイプから構成されています。
このTutorialでの指定方法は、以下の2種類です。
カード操作の為、ここで指定したサービスコードを、サービスコードリストにリトルエンディアンで格納しています。

Service Code
2バイトを16進数で指定します。(例:[10][08])

Service Number
サービスナンバーを10進数で指定し、サービスタイプをRead/Write・Read Onlyラジオボタン、
Securityチェックボックスで指定します。

Type
読み書きデータの表示形式を指定します。
このTutorialでは、以下のフォーマットでRandom Service Typeを扱っています
※Type を変更すると、Write Data が崩れる場合があります。
Binary 全16バイトを16進数表示
ASCII 上位12バイトを英数字表示
Number 下位4バイトを10進数表示

[ Service ]
Service Code 10 09
Service Number 64 ◎Read/Write [ ]Security
[ Type ]
◎Binary Number of Blocks 10
ここまでは自動表示される。

カードをかざした状態で[ READ ]ボタンをクリックする。
Read Data欄に読み込まれたデータが表示される。
10081008....

メッセージ欄には
「... 読み取りが正常終了しました
 Card IDm:0101060158075705」
のように表示される。

Write Data
0 [v]00000000000000000000000000000000
1 [v]00000000000000000000000000000000
2 [ ]00000000000000000000000000000000
....
書き込むブロックに[v]とチェックを入れて数値をトリプルクリックすると数字を入力できるようになる。
書き込む数値を入力して
[ WRITE ]ボタンをクリックする。
メッセージ欄に次のように表示される。
「書き込みが正常終了しました
 Card IDm:0101060158075705」
[ READ ]ボタンをクリックすれば書き込まれたデータが表示される。

[v]Securityとチェックを入れると
Service Code 10 08と変わり
Key 10 08 10 08 10 08 10 08が表示され
[ Get Key Version ]ボタンがアクティブになるのでクリックする。
Key Version 1008と表示される。
画面下のメッセージ欄には
「キーバージョンの取得に成功しました」と表示される。

[ READ ]ボタンをクリックする。
メッセージ欄に
「[rw.dll]セキュリティ・プラグインを見つけることが出来ません
 [felica.dll]アクセスキーの生成に失敗しました」
のように表示される。Lite版ではセキュリティ・プラグインがないため。

● Step5:Cyclic

Step5 Cyclicタブをクリックする。

Cyclic Service Typeでは、新しいデータが常に最も古いブロックに上書きされます。
書き込むには、常にブロック番号0を指定します。
また、全く同じデータを続けて書き込むことはできません。
もし同じものを指定してもエラーにはなりませんが、実際の書き込みは行われません。
1ブロック16バイトです。

[ Service ]
Service Code 10 0d
Service Number 64 ◎Read/Write [ ]Security
[ Type ]
◎Binary Number of Blocks 10
ここまでは自動表示される。

カードをかざした状態で[ READ ]ボタンをクリックする。
Read Data欄に読み込まれたデータが表示される。
100c100c....

メッセージ欄には
「... 読み取りが正常終了しました
 Card IDm:0101060158075705」
のように表示される。

Write Data
|| 00000000000000000000000000000000
|| 00000000000000000000000000000000
|| 00000000000000000000000000000000
....
対象ブロックをスライダで選択し、数値をトリプルクリックすると数値を入力できるようになる。
書き込む数値を入力して
[ WRITE ]ボタンをクリックする。
メッセージ欄に次のように表示される。
「書き込みが正常終了しました
 Card IDm:0101060158075705」
[ READ ]ボタンをクリックすれば書き込まれたデータが表示される。
Cyclicでは、常にブロック番号0に対して書き込みが要求され、最古のデータが上書きされます。

● Step6:Purse

Step6 Purseタブをクリックする。
Purse Service Typeでは、読み書き対象として1ブロックを指定してアクセスします。
上位4バイトがPurse Data、続く4バイトがCash Back Data、続く6バイトがUser Data、
残り2バイトが実行IDです。1ブロック16バイトです。

Purse領域からDecrementで減算すると、その値がCash Back領域に保存されます。
保存された値以内であれば、 Cash Backの実行によって再びPurse領域に書き戻すことが可能です。
書き戻す値の大きさに関わらず、一度Cash Backを実行するとCash Back領域は0にクリアされます。
Purse Dataより大きい値をDecrementすることや、Cash Back Dataより大きい値をCash Backすることはできません。
Cash BackとDecrementでは、全く同じIDを続けて指定することはできません。

[ Service ]
Service Code 10 11
Service Number 64 ◎Direct ○Read [ ]Security

Number of Blocks 1
ここまでは自動表示される。

カードをかざした状態で[ READ ]ボタンをクリックする。
Read Data欄に読み込まれたデータが表示される。
Block Data
10270000000000000000000000000001//1ブロック全16バイトを16進数で表示します。
Purse Data(N) 10000 //上位4バイトを10進数で表示します。
Cash Back Data(N) 0 //5バイト目からの4バイトを10進数で表示します。
User Data(B) 000000000000 //9バイト目からの6バイトを16進数で表示します。
Execution ID(B) 0001 //下位2バイトを16進数で表示します。

メッセージ欄には
「... 読み取りが正常終了しました
 Card IDm:0101060158075705」
のように表示される。

[ Write Data ]

Directの場合
Block Dataに全16バイトを16進数で入力し、Writeボタンをクリックしてください。
領域の区分は上記の読み取り内訳の通りです。
尚、Purse DataとCash Back Dataはリトルエンディアンです。
Write Data
Block Data
00000000 00000000 000000000000 0000

Decrementの場合
Valueに10進数でPurseデータ以下の値を入力してください。
IDに2バイトの16進数を入力し、Writeボタンをクリックしてください。
IDは、現在カードに保持されているものと異なっている必要があります。
もし同じものを指定してもエラーにはなりませんが、実際の書き込みは行われません。
正常終了すると、Purse領域からValue分の値が差し引かれ、Cash Back領域に保存されます。
カードをかざした状態で[ READ ]ボタンをクリックする。
Read Data欄に読み込まれたデータが表示される。
Block Data
30f8caed000000000000000000000000
Purse Data(N) 3989502000
Cash Back Data(N) 0
User Data(B) 000000000000
Execution ID(B) 0000

Write Data
Block Data
Value(N) ◎Decrement
[3989502000 ]
Execution ID(B) 0001 //現在カードに保持されているIDと異る必要がある。
[ WRITE ]ボタンをクリックする。
[ READ ]ボタンをクリックする。
Purse領域からValue分の値が差し引かれ、Cash Back領域に保存されます。
Block Data
0000000030f8caed0000000000000000
Purse Data(N) 0
Cash Back Data(N) 3989502000
User Data(B) 000000000000
Execution ID(B) 0001

Cash Back/Decrementの場合
Cash Backラジオボタン選択時は、Cash Back領域からPurse領域に値を戻すことができます。
カードをかざした状態で[ READ ]ボタンをクリックする。
Read Data欄に読み込まれたデータが表示される。
Block Data
0000000030f8caed0000000000000001
Purse Data(N) 0
Cash Back Data(N) 3989502000
User Data(B) 000000000000
Execution ID(B) 0001

Write Data
Block Data
Value(N) ◎Cash Back ○Decrement
[3989502000 ]
Execution ID(B) 0000 //現在カードに保持されているIDと異る必要がある。
[ WRITE ]ボタンをクリックする。
[ READ ]ボタンをクリックする。
Cash Back領域からPurse領域に値が戻されます。
Block Data
30f8caed000000000000000000000000
Purse Data(N) 3989502000
Cash Back Data(N) 0
User Data(B) 000000000000
Execution ID(B) 0000

以上でチュートリアルの終了です。

Springfield > FeliCa Lesson

Copy right y.takase since 2005