felicalib を使用して Felica Lite の特定の箇所を読み取る (VC++ 編)

大学で、学生証を読み取って出欠管理をするソフトウェアを作った時の話


使うもの

・VisualStudio 2010 ←開発環境
・RC-320 ←カードリーダー
felicalib

必須
NFCポートソフトウェア


まず、今回使うfelicalibのファイルは
 ・felicalib.h
 ・felicalib.c
 ・felicaint.h
の3つなので、これらを一つのフォルダにまとめちゃいましょう (僕はこうしてた


次に、VisualStudio の設定


1. コンソールアプリ-> ☑空のプロジェクト -> [ソースファイル]にmain.cppを作成

プロジェクトのプロパティから -> 構成:すべての構成 ->
  ・ C/C++ -> [追加のインクルードディレクトリ]
  ・ リンカー -> [追加のライブラリディレクトリ]


2. ソリューションの、
  [ ソースファイル ]にfelicalib.c
  [ヘッダーファイル]にfelicaint.h felicalib.h を追加

それでは準備ができたところで始めましょう


まずは、FelicaLiteのマニュアルを読む。

・・・ほうほう。

#include <stdio.h> 
#include <string.h>
#include "felicalib.h" 
  
#define SYSTEM_CODE 0x88B4  //固定
#define SERVICE_CODE 0x000B //固定

// aa 読みだすブロック番号
#define READ_BLOCK_NUM 0xaa 

// bb 読みだすブロック数
#define READ_BLOCK_LENGTH bb

pasori *p; // pasori ポインタ
felica *f; // felica ポインタ
char ret[READ_BLOCK_LENGTH]; //読みだした値格納 
uint8 data[READ_BLOCK_LENGTH]; //readしたデータの受け口 
      
p = pasori_open(NULL); 
if (!p) printf("Card Reader isn't connected.\n"); 
else{
	pasori_init(p); //pasoriの初期化 

	f = felica_polling(p, SYSTEM_CODE, 0, 0);

	if (!f) printf("Card isn't placed.\n");
	else{
		//実装されている読み出し関数
		felica_read_without_encryption02(
			f 
			,SERVICE_CODE
			,0 //0でok
			,READ_BLOCK_NUM 
			,data //ここにデータが返ってくる
		);

		//uint8型のデータを char型のデータにコピー
		memcpy(ret,data,READ_BLOCK_LENGTH);

		printf("%s\n",ret); //表示してみる
		//解放する
		felica_free(f);
	}
}

こんな感じですね。

このソースだと while とかを使っていないので、実行時にカードを乗せている時のみ反応します。
felica_polling の後でwhileとsleepを使えば常に読み取り状態が作れますね
ではでは

Atsumi3

したいことをします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください