東芝から発売されているFlashAirを用いた開発を行う人々向けのまとめwikiです。※本wikiは東芝及びフィックスターズ、キオクシアとは何の関係もありません。お問合わせは管理者へお願いします。

注意

RC-S380をお使いの場合は、「NFP有効」のチェックがオフになっていることを確認してください。
既定ではオンになっており、オンの場合は通常のFelica関係の通信ができなくなります

NFC開発 PCの場合

PCの場合,NFC関係(特にFelica)を扱おうとした場合,選択肢としては以下のものになります.

SDK for NFC Starter Kit を使う

Sony公式のNFC開発ライブラリです.無償です.
Windowsマシンに接続されたPaSoRiにのみ対応しています.(※最新のPaSoRiは動作しない場合があるようです)
Felicaポートソフトウェアと連携するため,安定して動作します.

Felica Liteのアクセスに対応している他,最新のPaSoRiを使うとNFC Type-AやBも扱うことができます.
ただし,プロプライエタリのライブラリであり,商用利用には有料版のSDKを使用する必要があります.
また,他者の開発を支援するライブラリやソフトウェアとして配布することもできません.

また,使い方が少々わかりにくいのが難点.
ので,ページ下部にラッパーライブラリを置いておきました.ご利用ください.

詳しい使い方はこちら
無料のSDK for NFC Starter Kitを使ってFeliCa ICカードを読み書きするプログラムを開発する (1/4):CodeZine(コードジン)
http://codezine.jp/article/detail/7402

felicalibを使う

Takuya Murakami氏が開発したFelica用ライブラリです.
http://felicalib.tmurakam.org/

Windowsマシンに接続されたPaSoRiにのみ対応しています.
Felicaポートソフトウェアと連携するため,比較的安定して動作します.
(※最新のPaSoRiは動作しない場合があるようです.コントロールパネルから設定変更することで動くことが有ります.
当方RC-S330で動作確認しています)

かつてSony公式SDKが有料版しかなかった時代に作成されました.
BSDライセンスのオープンなライブラリで,作りが簡単であり,使いやすいのが利点です.

ただし,2008年と古いライブラリのため,
2バイト長アドレスに対応しておらず,NFC-SDカードの内容をすべて読み取る際には改造が必要です.

この点を改善したライブラリもあります.
https://sites.google.com/site/gpsnmeajp/tools/feli...

nfcpyを使う

LinuxやMacでFelicaを扱いたい場合は,nfcpyが一つの選択肢となります.
libusbを用いてPaSoRiと通信し,NFCのやり取りが可能となります.

カードエミュレーションや相互通信にも対応しており、
また他の種類のNFCリーダーにも対応しているようです。

Raspberry Piでの報告が多いです.

libpasoriを使う(非推奨)

felicalib同様,SonyのSDKが有料であった時代に作成されたライブラリです.
こちらはlibusbを用いてPaSoRi RC-S320という古いリーダーに対応しており,
Sonyのリソースに依存していません.

PC/SCを使う

最新のPaSoriはWindowsに搭載されているスマートカードAPIに対応しています.
このAPIを使えば,Sonyのライブラリに依存することなく利用できます.
https://qiita.com/gpsnmeajp/items/d4810b1751896094...

WindowsストアアプリAPIを使う(非推奨)

Windows 8以降に搭載されたストアアプリには,NFCを取り扱う機能があるようですが...
NDEF領域しか扱えないという噂もあります.

RC-S620Sを使う

マイコン用リーダライタですので,シリアル通信で扱えます.

Androidでアクセスする

AndroidでFelica Liteを読み書きしたい
http://qiita.com/gpsnmeajp/items/a3717b9995f7061f1...

SDK for NFC Starter Kit用ラッパー

felicalib_nfc_thruがひたすら面倒くさいので,ラッパを作りました.
felicalibとはちょっと違いますが,まあまあ似たような使い勝手で使えると思います.

サンプルコード

#include <stdio.h>
#include <stdint.h>

#include "felicaNFClibWrapper.h"

int main()
{
	//オープン
	char port[16]={};
	if(felicalite_open(port))
	{
		printf("open failed\n");
		felicalite_show_sdk_error();
		return -1;
	}
	printf("Port open: %s\n",port);

	//------------

	//カード捕捉
	uint16_t foundSystemCode = 0;
	uint8_t IDm[8] = {};
	uint8_t PMm[8] = {};

	printf("polling...\n");
	if(felicalite_capture(3000, IDm,PMm,&foundSystemCode)) //1000msでは失敗することがある
	{
		printf("card not found\n");
		felicalite_show_sdk_error();
		return -1;
	}
	printf(" FOUND\n  SYSTEM CODE:%04X\n", foundSystemCode);
	printf("  IDm:");
	for ( int i = 0; i<8; i++ )
		printf("%02X", IDm[i]);
	printf("\n  PMm:");
	for ( int i = 0; i<8; i++ )
		printf("%02X", PMm[i]);
	printf("\n");

	//------------

	//読み出し
	uint8_t readData[16] = {};
	int code = felicalite_read(IDm, 0x1780, FELICA_LITE_SERVICECODE_RO, readData);
	if ( code )
	{
		printf("Read Failed\n");
		felicalite_show_response_error(code);
	}
	printf("READ: ");
	for(int i=0;i<16;i++)
	{
		printf("%c",readData[i]);
	}
	printf("\n");

	//------------

	//書き込み
	uint8_t writeData[16] = "PiyoPiyo";
	code = felicalite_write(IDm, 0x1780, FELICA_LITE_SERVICECODE_RW, writeData);
	if ( code )
	{
		printf("Write Failed\n");
		felicalite_show_response_error(code);
	}
	printf("WRITE\n");

	//開放
	felicalite_release();
	printf("Card release\n");

	//終了
	felicalite_close();
	return 0;
}

ライブラリ

/*
Copyright (c) 2017, GPS_NMEA
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef FNLW53CDE9E998B24EE9BBDDB85AE9DF7D78
#define FNLW53CDE9E998B24EE9BBDDB85AE9DF7D78

#include <windows.h> //Felica NFC libの動作に必須
#include <stdio.h>
#include <stdint.h>

#include "felica_nfc_library.h"
#pragma comment(lib ,"felica_nfc_library.lib")

//こちらの解説&ソースを参考にさせていただきました
//http://codezine.jp/article/detail/7402

/*※注意

felica_nfc_library.h
felica_nfc_library.lib (x86版)
については,Sony公式SDKのICS-D010/20J SDK for NFC Starter Kit(開発・評価用の無償版SDKを
ダウンロードし,同フォルダに配置してご利用ください.
*/

#define FELICA_LITE_SYSTEMCODE 0x88B4
#define FELICA_NFC_SYSTEMCODE 0x12FC
#define FELICA_LITE_SERVICECODE_RW 0x0009
#define FELICA_LITE_SERVICECODE_RO 0x000B
#define felicalite_show(x) printf("%s",x)

//=== 基本関数 ===
//SDKの初期化とポートのオープン.(16文字以上確保した文字列)
//空の文字列の場合は自動でオープン,文字列を指定した場合は特定のポートをオープン
int felicalite_open(char *port);

//カード読み込み(捕捉時に得られたIDm, アドレス, サービスコード[FELICA_LITE_SERVICECODE_RO],ブロックデータ(16Byte) )
//※FELICA_LITE_SERVICECODE_RWを使うと,書込み可能なブロックのみ読み出せます
uint16_t felicalite_read(uint8_t IDm[8], uint16_t adr, uint16_t serviceCode, uint8_t data[16]);

//カードへの書き込み(捕捉時に得られたIDm, アドレス, サービスコード[FELICA_LITE_SERVICECODE_RW],ブロックデータ(16Byte) )
uint16_t felicalite_write(uint8_t IDm[8], uint16_t adr, uint16_t serviceCode, uint8_t data[16]);

//カードの捕捉(ポーリング) (タイムアウト[ミリ秒], IDm配列, PMm配列, システムコード用変数)
int felicalite_capture(uint32_t timeout, uint8_t IDm[8], uint8_t PMm[8], uint16_t *systemCode);

//カードの開放.次のカードを補足する前にかならず開放すること
//(アプリケーション終了時には自動で開放されます)
void felicalite_release();

//ポートのクローズとSDKの開放.
//(アプリケーション終了時に自動で開放されるため,明示的に呼び出さなくても可)
void felicalite_close();

//=== エラー情報関数 ===
//open, capture時のエラーの詳細を取得する
void felicalite_show_sdk_error();
//read, write時のエラーの詳細を取得する
void felicalite_show_response_error(uint16_t errcode);


//------------------------------------------------------------------------------------------------
uint16_t felicalite_read(uint8_t IDm[8], uint16_t adr, uint16_t serviceCode, uint8_t data[16])
{
	unsigned char cmd[17] = {0};

	cmd[0] = 17; //Command Length
	cmd[1] = 0x06; //Command (0x06 = Read Without Encryption)

				   //Copy IDm
	for ( int i = 0; i<8; i++ )
		cmd[i + 2] = IDm[i];

	cmd[10] = 0x01; //Service Num
	cmd[11] = serviceCode & 0xFF; //Service Code List 1-1
	cmd[12] = (serviceCode >> 8) & 0xFF; //Service Code List 1-2

	cmd[13] = 0x01; //Block Num
	cmd[14] = 0x00; //Block List [長さ(1=2byte,0=1byte 1bit] [アクセスモード 3bit] [SERVICEコードリスト順番 4bit] (0x80 = 2byte, 0x00 = 3byte)
	cmd[15] = adr & 0xFF;
	cmd[16] = (adr >> 8) & 0xFF;

	//---

	unsigned char res[512];
	unsigned short reslen = sizeof(res);

	//コマンドの発行
	if ( !felicalib_nfc_thru(cmd, sizeof(cmd), res, &reslen) )
		return 0xFFFF;

	// レスポンスのチェック
	if ( reslen < 12 )
		return 0xFFFE; //応答長さが不正
	if ( res[0] < 12 )
		return 0xFFFD; //応答長さ情報が不正
	if ( res[1] != 0x07 )
		return 0xFFFC; //応答コードが不正
	if ( res[10] != 0x00 )
		return ((uint16_t)res[10] << 8) | ((uint16_t)res[11]);

	for ( int i = 0; i<16; i++ )
		data[i] = res[13 + i];

	return 0;
}

uint16_t felicalite_write(uint8_t IDm[8], uint16_t adr, uint16_t serviceCode, uint8_t data[16])
{
	unsigned char cmd[17 + 16] = {0};

	cmd[0] = 17 + 16; //Command Length (Command + 1Block)
	cmd[1] = 0x08; //Command (0x08 = Write Without Encryption)

				   //Copy IDm
	for ( int i = 0; i<8; i++ )
		cmd[i + 2] = IDm[i];

	cmd[10] = 0x01; //Service Num
	cmd[11] = serviceCode & 0xFF; //Service Code List 1-1
	cmd[12] = (serviceCode >> 8) & 0xFF; //Service Code List 1-2

	cmd[13] = 0x01; //Block Num
	cmd[14] = 0x00; //Block List [長さ(1=2byte,0=1byte 1bit] [アクセスモード 3bit] [SERVICEコードリスト順番 4bit] (0x80 = 2byte, 0x00 = 3byte)
	cmd[15] = adr & 0xFF;
	cmd[16] = (adr >> 8) & 0xFF;

	//Copy Data
	for ( int i = 0; i<16; i++ )
		cmd[i + 17] = data[i];

	//---

	unsigned char res[512];
	unsigned short reslen = sizeof(res);

	//コマンドの発行
	if ( !felicalib_nfc_thru(cmd, sizeof(cmd), res, &reslen) )
		return 0xFFFF;

	// レスポンスのチェック
	if ( reslen < 12 )
		return 0xFFFE; //応答長さが不正
	if ( res[0] < 12 )
		return 0xFFFD; //応答長さ情報が不正
	if ( res[1] != 0x09 )
		return 0xFFFC; //応答コードが不正
	if ( res[10] != 0x00 )
		return ((uint16_t)res[10] << 8) | ((uint16_t)res[11]);
	return 0;
}

int felicalite_capture(uint32_t timeout, uint8_t IDm[8], uint8_t PMm[8], uint16_t *systemCode)
{
	DEVICE_INFO *devInfo;
	if ( !felicalib_nfc_poll_and_start_dev_access(DEVICE_TYPE_NFC_18092_212K | DEVICE_TYPE_NFC_18092_424K, timeout, &devInfo) )
		return -1;

	DEVICE_DATA_NFC_18092_212_424K *pf = (DEVICE_DATA_NFC_18092_212_424K *)devInfo->dev_info;
	//各種情報のコピー
	for ( int i = 0; i<8; i++ )
	{
		IDm[i] = pf->NFCID2[i];
		PMm[i] = pf->Pad[i];
	}

	//システムコードが入っているかチェック
	if ( pf->RD_size != 2 )
	{
		printf("DEBUG: SYSTEM CODE ERR\n");
		felicalite_release();
		return -2;
	}
	//システムコードのコピー
	*systemCode = (((uint16_t)pf->RD[0] << 8) & 0xFF00) | (uint16_t)pf->RD[1];

	return 0;
}

void felicalite_release()
{
	felicalib_nfc_stop_dev_access(RE_NOTIFICATION_SAME_DEVICE);
	felicalib_nfc_stop_poll_mode();
}

int felicalite_open(char *port)
{
	atexit(felicalite_close); //終了時に必ずファイナライズされるように指定

	if ( !felicalib_nfc_initialize() )//SDK初期化
		return -1;

	if ( !felicalib_nfc_open(port) )	//カードリーダーポートオープン
		return -2;

	return 0;
}

void felicalite_close()
{
	//カード開放
	felicalite_release();
	//ポート開放
	felicalib_nfc_close();
	//SDK開放
	felicalib_nfc_uninitialize();
}


//-------以下エラー解決補助用コード---------

void felicalite_show_response_error(uint16_t errcode)
{
	uint8_t errHigh = errcode >> 8;
	uint8_t errLow = errcode & 0xFF;

	if ( errcode == 0xFFFF )
	{
		felicalite_show_sdk_error();
		return;
	}
	if ( errcode == 0xFFFE )
	{
		felicalite_show("応答エラー: ");
		felicalite_show("応答長さが不正");
		return;
	}
	if ( errcode == 0xFFFD )
	{
		felicalite_show("応答エラー: ");
		felicalite_show("応答長さ情報が不正");
		return;
	}
	if ( errcode == 0xFFFC )
	{
		felicalite_show("応答エラー: ");
		felicalite_show("応答コードが不正");
		return;
	}

	felicalite_show("Felica Liteエラー: ");
	if ( errHigh == 0xFF )
	{
		if ( errLow == 0xA1 )
			felicalite_show("サービス数が0x01でない");
		else if ( errLow == 0xA2 )
			felicalite_show("ブロック数が0x01〜0x04の範囲外");
		else if ( errLow == 0x70 )
			felicalite_show("データ読み出しエラー");
		else
			felicalite_show("不明なエラー");

	} else if ( errHigh == 0x01 )
	{
		if ( errLow == 0xA6 )
			felicalite_show("サービスコードがRWまたはROではないか,不一致");
		else
			felicalite_show("不明なエラー");
	} else
	{
		if ( errLow == 0xA7 )
			felicalite_show("ブロックリストのアクセスモードが0でない");
		else if ( errLow == 0xA3 )
			felicalite_show("ブロックリストのサービスコードリスト順番が0でない");
		else if ( errLow == 0xA8 )
			felicalite_show("ブロック番号が既定ではないか,RO領域をRWで読み出そうとしている,あるいはD2が0でない");
		else if ( errLow == 0xB0 )
			felicalite_show("MACとMAC_Aブロックを同時にアクセスしている");
		else if ( errLow == 0xB1 )
			felicalite_show("認証が必要なブロックで認証していない");
		else if ( errLow == 0xB2 )
			felicalite_show("MAC_Aブロックのアクセス前にRCブロックへの書き込みがない");
		else
			felicalite_show("不明なエラー");
	}
	felicalite_show("\n");
}

void felicalite_show_sdk_error()
{
	unsigned long pErrInfo[2];

	if ( felicalib_nfc_get_last_error(pErrInfo) )
	{
		//		felicalite_show("Error occurred. CODE: (0x%08X : 0x%08X) / ", pErrInfo[0], pErrInfo[1]);
		felicalite_show("SDK Error: ");

		switch ( pErrInfo[0] )
		{
			case 0x80C00001: felicalite_show("FELICA_NFC_E_INVALID_ARGUMENT"); break; //引数が異常です。
			case 0x80C00002: felicalite_show("FELICA_NFC_E_NOT_IMPLEMENT"); break; //実装されていません。
			case 0x80C00003: felicalite_show("FELICA_NFC_E_INVALID_MODE"); break; //FeliCaライブラリが動作中です。
			case 0x80C00004: felicalite_show("FELICA_NFC_E_MEMORY_ALLOCATE"); break; //メモリが確保できません。
			case 0x80C00005: felicalite_show("FELICA_NFC_E_NOT_INITIALIZE"); break; //ライブラリが初期化されていません。
			case 0x80C00006: felicalite_show("FELICA_NFC_E_INVALID_PORT_LIST"); break; //ポートリスト名が不正です。
			case 0x80C00007: felicalite_show("FELICA_NFC_E_INVALID_PORT_NAME"); break; //ポート名が不正です。
			case 0x80C00008: felicalite_show("FELICA_NFC_E_INVALID_PLUGINS_DIR"); break; //プラグインディレクトリが不正です。
			case 0x80C00009: felicalite_show("FELICA_NFC_E_INVALID_PLUGIN_NAME"); break; //プラグインファイル名が不正です。
			case 0x80C0000a: felicalite_show("FELICA_NFC_E_INVALID_PLUGIN"); break; //プラグインファイルが不正です。
			case 0x80C0000b: felicalite_show("FELICA_NFC_E_NO_PLUGIN"); break; //プラグインファイルが存在しません。
			case 0x80C0000c: felicalite_show("FELICA_NFC_E_CREATE_THREAD"); break; //スレッドが生成できません。
			case 0x80C0000d: felicalite_show("FELICA_NFC_E_NOT_PORT_OPENED"); break; //ポートがオープンされていません。
			case 0x80C0000e: felicalite_show("FELICA_NFC_E_NO_CALLBACK_PARAM"); break; //コールバックパラメータが設定されていません。
			case 0x80C0000f: felicalite_show("FELICA_NFC_E_NOT_CREATE_MESSAGE"); break; //コールバック用メッセージが生成できません。
			case 0x80C00010: felicalite_show("FELICA_NFC_E_TIME_OUT"); break; //NFCライブラリでタイムアウトが発生しました。
			case 0x80C00011: felicalite_show("FELICA_NFC_E_CALLBACK"); break; //コールバック呼び出しに失敗しました。
			case 0x80C00012: felicalite_show("FELICA_NFC_E_ALREADY_INITIALIZED"); break; //ライブラリはすでに初期化されています。
			case 0x80C00013: felicalite_show("FELICA_NFC_E_PORT_OPENED"); break; //すでにポートがオープンされています。
			case 0x80C00014: felicalite_show("FELICA_NFC_E_DRIVER_STATUS"); break; //ドライバステータスが不正です。
			case 0x80C00015: felicalite_show("FELICA_NFC_E_INVALID_TARGET_DEVICE_TYPE"); break; //捕捉したターゲットデバイスタイプが不明です。
			case 0x80C00016: felicalite_show("FELICA_NFC_E_FORBIDDEN_OPERARION"); break; //同期/非同期排他エラーが発生しました。
			case 0x80C00050: felicalite_show("FELICA_NFC_E_TARGET_DEVICE_NOT_FOUND"); break; //捕捉デバイスが見つかりませんでした。
			case 0x80C00051: felicalite_show("FELICA_NFC_E_TARGET_DEVICE_TIMEOUT"); break; //捕捉デバイス使用開始要求が時間内にありませんでした。
			case 0x80C00052: felicalite_show("FELICA_NFC_E_TARGET_DEVICE_ACCESS"); break; //ターゲットデバイスアクセスでのエラーがドライバより通知されました。
			case 0x80C00053: felicalite_show("FELICA_NFC_E_TARGET_DEVICE"); break; //ターゲットデバイスアクセスでの不明エラーがドライバより通知されました。
			case 0x80C00071: felicalite_show("FELICA_NFC_E_RW_DEVICE_MODE"); break; //モード移行エラーがドライバ内で発生しています。
			case 0x80C00072: felicalite_show("FELICA_NFC_E_RW_DEVICE_INITIALIZE"); break; //FeliCaポートデバイスの初期化処理エラーです。
			case 0x80C00073: felicalite_show("FELICA_NFC_E_RW_DEVICE_TEMPERATURE_ERROR"); break; //FeliCaポートデバイスが温度異常状態です。
			case 0x80C00074: felicalite_show("FELICA_NFC_E_RW_DEVICE_TEMPERATURE_FATAL_ERROR"); break; //FeliCaポートデバイスが温度異常状態により、使用できない状態です。
			case 0x80C00075: felicalite_show("FELICA_NFC_E_RW_DEVICE_READER_WRITER_DISCONNECTED"); break; //FeliCaポートデバイスが切断されました。
			case 0x80C00076: felicalite_show("FELICA_NFC_E_RW_DEVICE_ERROR"); break; //FeliCaポートデバイスで不明なエラーが発生しています。
			case 0x80C00101: felicalite_show("FELICA_NFC_E_REGISTRY"); break; //レジストリアクセスに失敗しました。
			case 0x80C00102: felicalite_show("FELICA_NFC_E_INVALID_DIR"); break; //フォルダが存在しないか不正です。
			case 0x80C00103: felicalite_show("FELICA_NFC_E_INVALID_FILE"); break; //ファイルが存在しないか不正です。
			case 0x80C00104: felicalite_show("FELICA_NFC_E_FILE_ACCESS"); break; //ファイルアクセスに失敗しました。
			case 0x80A00001: felicalite_show("FELICA_NFCP_E_INVALID_ARGUMENT"); break; //プラグインへの引数が異常です。
			case 0x80A00002: felicalite_show("FELICA_NFCP_E_INITIALIZE_DRIVER"); break; //ドライバの初期化に失敗しました。
			case 0x80A00003: felicalite_show("FELICA_NFCP_E_MEMORY_ALLOCATE"); break; //メモリが確保できません。
			case 0x80A00004: felicalite_show("FELICA_NFCP_E_INVALID_PORT_NAME"); break; //ポート名が不正です。
			case 0x80A00005: felicalite_show("FELICA_NFCP_E_NOT_PORT_OPENED"); break; //ポートがオープンされていません。
			case 0x80A00006: felicalite_show("FELICA_NFCP_E_OPENED"); break; //すでにポートがオープンされています。
			case 0x80A00007: felicalite_show("FELICA_NFCP_E_INVALID_RESPONSE"); break; //ドライバからのレスポンスデータが不正です。
			case 0x80080000: felicalite_show("FELICA_NFC_E_DRIVER_ERROR"); break; //ドライバでエラーが発生しました※1
			default: felicalite_show("UNKNOWN");
		}

		felicalite_show(" : ");

		switch ( pErrInfo[1] )
		{
			case 0x00000001: felicalite_show("リーダ/ライタが抜かれました。"); break;
			case 0x00000002: felicalite_show("リーダ/ライタが見つかりません。"); break;
			case 0x00000003: felicalite_show("リーダ/ライタが見つかりません。"); break;
			case 0x00000005: felicalite_show("リーダ/ライタが抜かれました。"); break;
			case 0x00000015: felicalite_show("リーダ/ライタがエラーです。(初期化されていないか温度異常。)"); break;
			case 0x00000016: felicalite_show("リーダ/ライタが抜かれました。"); break;
			case 0x00000017: felicalite_show("RF通信エラー、カード状態エラー、リーダ/ライタ温度異常、またはカードからの受信データが異常です。"); break;
			case 0x00000020: felicalite_show("デバイスの最大オープン数を超えています。"); break;
			case 0x00000032: felicalite_show("APIの発行シーケンスが正しくありません。"); break;
			case 0x00000079: felicalite_show("アクセス権待ちタイムアウトまたはコマンドタイムアウトが発生しています。"); break;
			case 0x0000007A: felicalite_show("ドライバインタフェイスエラーです。(ライブラリ異常)"); break;
			case 0x000000AA: felicalite_show("ドライバが処理要求を受け付けられない状態です。"); break;
			case 0x000000E9: felicalite_show("RF通信エラー、カード状態エラー、リーダ/ライタ温度異常、またはカードからの受信データが異常です。"); break;
			case 0x0000045D: felicalite_show("USB通信エラーまたはリーダ/ライタレスポンスパケットが不正です。"); break;
			case 0x0000048F: felicalite_show("リーダ/ライタが抜かれました。"); break;
			case 0x000005AA: felicalite_show("システムリソースが不足しています。"); break;
			case 0x000006F8: felicalite_show("ドライバへの要求パラメータエラーです。"); break;
			default: felicalite_show("UNKNOWN");
		}
		felicalite_show("\n");
	} else
	{
		felicalite_show("SDK Error: unknown");
	}
}

#endif

メモ

RS-S380から,NFC-Port 100というドライバに切り替わっている.
RC-S956というドライバが以前からのもので,NFC-Port 100がLinuxにも対応したいわゆる標準規格ドライバに見える

hiro99ma blog: [nfc]RC-S380 + SDK for NFC Starter KitはおそらくFALP以外は...
http://hiro99ma.blogspot.com/2014/08/nfcrc-s380-sd...

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

スマートフォンの方は画面下部よりPC版に切り替えることをおすすめします

アクセス解析中

忍者アナライズ

GoogleAnalytics

編集にはIDが必要です