FeliCa/開発環境

エディション

  • Lite - 暗号機能の利用できないバージョン。
  • Professional - 暗号機能の利用できるバージョン。
  • Enterprise - 発行機能を持ったバージョン。

完全にオリジナルのFeliCaアプリケーション(独自フォーマットのカードと独自のアプリケーション)を作る場合最低1つのEnterpriseライセンスが必要。

既に発行されたカードを処理するアプリケーションはLiteやProfessionalで実現可能。

どのエディションのSDKも法人名義での購入が必要。個人での購入は不可。

利用

SDKのランタイムライブラリはFeliCaポートソフトウェアとして配布されており、PaSoRiをインストールした場合や、PCに予めFeliCaポートが備わっている場合は既にインストールされている。

ランタイムライブラリを直接呼び出すことにより、SDKなしでもPaSoRiをはじめとしたFeliCaポートを制御することが出来る。→felicalib

スレのサンプルコード

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct {
unsigned char* system_code; // システムコード (2byte)
unsigned char time_slot; // タイムスロット (0x00, 0x01, 0x03, 0x07, 0x0f のいづれか)
} POLLING;

typedef struct {
unsigned char* card_idm; // カードの IDm (8byte)
unsigned char* card_pmm; // カードの PMm (8byte)
} CARD_INFORMATION;

typedef BOOL (*INITIALIZE_LIBRARY)(void);
typedef BOOL (*DISPOSE_LIBRARY)(void);
typedef BOOL (*OPEN_READER_WRITER_AUTO)(void);
typedef BOOL (*POLLING_AND_GET_CARD_INFORMATION)(POLLING*, unsigned char*, CARD_INFORMATION*);

void print_binary(unsigned char* binary, int length)
{
int i;
for (i = 0; i <= length - 1; i++) {
printf("%02X ", binary[i]);
}
printf("\n");
}

int main(void)
{
HINSTANCE hInstDLL;
INITIALIZE_LIBRARY initialize_library;
DISPOSE_LIBRARY dispose_library;
OPEN_READER_WRITER_AUTO open_reader_writer_auto;
POLLING_AND_GET_CARD_INFORMATION polling_and_get_card_information;
POLLING polling;
CARD_INFORMATION card_information;
unsigned char system_code[2];
unsigned char number_of_cards;
unsigned char card_idm[8];
unsigned char card_pmm[8]; 

/* FeliCa.DLL のロード */
if((hInstDLL=LoadLibrary("C:\\Program Files\\Common Files\\Sony Shared\\FeliCaLibrary\\felica.dll"))==NULL)
{
printf("FeliCa.DLLをロードできない。\n");
abort();
}
/* 関数へのポインタを取得 */
initialize_library = (INITIALIZE_LIBRARY)GetProcAddress(hInstDLL,"initialize_library");
dispose_library = (DISPOSE_LIBRARY)GetProcAddress(hInstDLL,"dispose_library");
open_reader_writer_auto = (OPEN_READER_WRITER_AUTO)GetProcAddress(hInstDLL,"open_reader_writer_auto");
polling_and_get_card_information = (POLLING_AND_GET_CARD_INFORMATION)GetProcAddress(hInstDLL,"polling_and_get_card_information");


/* FeliCaライブラリの初期化 */
if(!initialize_library())
{
printf("FeliCaライブラリ初期化失敗。\n");
abort();
}

/* リーダライタのオープン */
if(!open_reader_writer_auto())
{
printf("リーダライタをオープンできない。\n");
abort();
}


system_code[0] = 0xff;
system_code[1] = 0xff;
polling.system_code = system_code;
polling.time_slot = 0x00;
number_of_cards = 0x00;
card_information.card_idm = card_idm;
card_information.card_pmm = card_pmm;

/* カードのポーリング */
if(!polling_and_get_card_information(&polling, &number_of_cards, &card_information))
{
printf("ポーリング失敗。\n");
abort();
}
else
{
/* カード情報の表示 */
printf("IDm : ");
print_binary(card_idm, 16);
printf("PMm : ");
print_binary(card_pmm, 32);
}

/* FeliCaライブラリの開放 */
if(!dispose_library())
{
printf("FeliCaライブラリ開放失敗。\n");
abort();
}

/* FeliCa.DLLを開放する */
if(!FreeLibrary(hInstDLL))
{
abort();
}

return EXIT_SUCCESS;
}
  • ライブラリを動的にロードする以外は↑のコードと同様

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-09 (金) 08:04:27 (994d)