SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

無料のSDK for NFC Starter Kitを使ってFeliCa ICカードを読み書きするプログラムを開発する


  • X ポスト
  • このエントリーをはてなブックマークに追加

Read Without Encryptionコマンド

 最後に読み出しです。先ほど書き込んだデータを、「Read Without Encryption」コマンドで読み出してみましょう。

Read Without Encryptionコマンドパケットデータ
パラメータ名 サイズ データ 備考
コマンドコード 1 0x06 -
IDm 8 - -
サービス数 1 m m=1
サービスコードリスト 2m - リトルエンディアン
ブロック数 1 n 1≦n≦4
ブロックリスト N - 2n≦N≦3n

 パラメータは、「Write Without Encryption」コマンドとほとんど同じです。ただし、「サービスコードリスト」には「0x000B」をリトルエンディアンで指定します。つまり、「0x0B」「0x00」となります。サービスコード0x000Bは、読み出し専用または読み書き可能なブロックへのアクセスを意味します。

 S_PAD3ブロック、つまりブロック番号0x03のデータを読み出すプログラムは、次のようになります。

unsigned char pCom[] = {
    0x11,                                           // データ長
    0x06,                                           // コマンドコード
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // IDm
    0x01,                                           // サービス数
    0x0B, 0x00,                                     // サービスコード
    0x01,                                           // ブロック数
    0x00, 0x03, 0x00                                // ブロック
};

unsigned char pRes[512];

unsigned short usComLen = 0x11;
unsigned short usResLen = sizeof(pRes);

// 配列 unsigned char pIDm[8] に、
// 目的のシステムの IDm が格納されているものとする
memcpy_s(&pCom[2], sizeof(pCom) - 2, pIDm, 8);

bSuccess = felicalib_nfc_thru(pCom, usComLen, pRes, &usResLen);
if (! bSuccess)
{
    // エラー処理...
}

 コマンドの発行に成功すると、実行結果がレスポンスとして第3引数に格納されます。

Read Without Encryptionレスポンスパケットデータ
パラメータ名 サイズ データ 備考
レスポンスコード 1 0x07 -
IDm 8 - -
ステータスフラグ1 1 - 読み出し成功時は0x00
ステータスフラグ2 1 - -
ブロック数 1 n ステータスフラグ1が0x00の場合のみ
ブロックデータ 16n - ステータスフラグ1が0x00の場合のみ

 「レスポンスコード」の前に、自分自身を含むデータ長が1バイト付加されます。読み出しに失敗した場合のデータ長は12、1ブロックの読み出しに成功した場合のデータ長は29になります。

 「ステータスフラグ1」には、読み出しの成否が格納されます。成功時は「0x00」、失敗時はそれ以外の値になります。

 読み出しに成功した場合、「ブロックデータ」に読み出した結果が格納されます。この例では"codezine.jp\0\0\0\0\0"が格納されているはずです。

 「felica_lite_s_dump」ツールで本カードのダンプを取っても、次のように、S_PAD3ブロックの内容が書き換えられたことが確認できます。

......
Block[00], S_PAD0 =00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block[01], S_PAD1 =00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block[02], S_PAD2 =00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block[03], S_PAD3 =63 6f 64 65 7a 69 6e 65 2e 6a 70 00 00 00 00 00
Block[04], S_PAD4 =00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block[05], S_PAD5 =00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Block[06], S_PAD6 =00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
......

おわりに

 「SDK for NFC」に関するチュートリアル的な解説を見たことがなかったので、本記事を書いてみました。FeliCaプログラミングの取っ掛かりがつかめず困っている方の手助けとなれば幸いです。

参考文献

  1. Visual Studio Express 2012,Microsoft
  2. SDK for NFC,SONY
  3. FeliCaトップページ,SONY
  4. FeliCa Lite-Sカード通販ページ,ステルス・ネットワークス(株)
  5. FeliCa Liteカード通販ページ,(株)オレンジタグス
  6. FeliCa Lite-Sユーザーズマニュアル,SONY
  7. FeliCa Lite-Sスターターマニュアル,SONY
修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

小國 健(オグニ ツヨシ)

岩国市生まれ。都内在住。(株)NTTデータ勤務。金融系システムの企画・開発を担当。写真は0歳当時の自分。デバッガの解説「WinDbg. From A to Z!」もよろしくお願いします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7402 2013/10/16 11:39

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング