abc NFCTag ライブラリマニュアル このマニュアルは、NFCTag ライブラリの 仕様について記載します。 Ver. 1.
ご注意 ● このソフトウェアおよびマニュアルの、一部または全部を無断で使用、複製することはできません。 ● このソフトウェアおよびマニュアルは、本製品の使用許諾契約書のもとでのみ使用することができます。 ● このソフトウェアおよびマニュアルを運用した結果の影響については、一切の責任を負いかねますのでご了 承ください。 ● このソフトウェアの仕様、およびマニュアルに記載されている事柄は、将来予告なしに変更することがありま す。 ● このマニュアルの著作権はカシオ計算機株式会社に帰属します。 ● 本書中に含まれている画面表示は、実際の画面とは若干異なる場合があります。予めご了承ください。 © 2012 カシオ計算機株式会社 Microsoft, MS, ActiveSync, Active Desktop, Outlook, Windows, Windows NT, および Windows ロゴは、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。Microsoft 社の製品は、OEM 各社に、Microsoft Corporation の 100%出資子会
変更履歴 バージョン 1.00 変更日付 2012.
目次 1. 概要···················································································································································································1 2. 動作環境 ·········································································································································································2 3.
1.
2. 動作環境 NFCHFTag ライブラリの動作環境を以下に示します。 対象機種 • DT-X8 • IT-9000 対象 OS • Microsoft WindowsCE 6.0 • Microsoft WindowsMobile 6.5 開発環境とプログラミング言語 Visual C++ 開発環境 Microsoft Visual Studio 2005 + SP1 Microsoft Visual Studio 2008 + SP1 ○ ○ Visual Basic, Visual C# ○ ○ 提供ファイル ファイル NFCHFTagLib.h NFCHFTagLib.lib NFCHFTagLib.dll NFCHFTagLibNet.dll Visual C++ ○ ○ ○ - Visual Basic, Visual C# ○ ○ 使用方法 Visual C++の場合 • プログラムソース内に NFCHFTagLib.h と NFCLib.h をインクルードし、リンカの依存ファイルとして NFCHFTagLib.lib を指定してください。 • NFCHFTagLib.
名前空間とクラス クラスライブラリ NFCHFTagLibNet.dll では、関数および定数の参照用として、下記のクラスが用意されて います。 名前空間 CaLib クラス名 NFCHFTagLibNet.Api NFCHFTagLibNet.Def 内容 関数参照用クラス 定数参照用クラス クラス定義の詳細については、Microsoft Visual Studio で NFCHFTagLibNet.
3.
HFTag ライブラリの下記 API について、ISO15693 タグの種類により対応状況が異なります。対応状況に ついて、下記の表を参照してください。 NFCHFTagLockDSFID NFCHFTagGetSystemInf o NFCHFTagGetSecuritySta tus Tag-it HF-I Standard NFCHFTagWriteDSFID Tag-it HF-I Pro NFCHFTagLockAFI Tag-it HF-I Plus NFCHFTagWriteAFI my-d Light NFCHFTagReadMulti my-d V10 Plain NFCHFTagLock ICODE SLI-S NFCHFTagWrite ICODE SLI-L NFCHFTagRead ICODE SLI 関数名 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ − ○ − − ○ − ○ ※1 ○ ※1 ○ ○ ※1 ○ ※1 − ○ ※1 ○ ※1 − ○ ○ ○ ○ ○
■関数呼び出し手順 1. アプリケーション開始時に、NFCHFTagOpen関数により、NFC デバイスの電源を ON にします。(※1) 2. 通信処理開始時に、NFCHFTagPolling関数により、通信可能範囲内にある ISO15693 カードを検索/ 起動します。 3. ISO15693 カードの起動に成功、かつ、そのカードの詳細な情報が必要な場合は、 NFCHFTagGetCardResponse関数により、応答情報を取得します。(任意) 4. ISO15693 カードとの通信を行います。(ISO15693カードとの通信を参照) 5. ISO15693 カードとの通信が終了した場合は、NFCHFTagRadioOff関数により、電波出力を停止しま す。 6.
3.
3.
3.
また、NULL を指定した場合は、常に続行します。 byAFI NFCPollingCard 関数により、起動を許可する ISO15693 カードの AFI を指定してください。0x00 を指 定すると、全ての ISO15693 カードの起動を許可します。 (範囲:0x00∼0xFF) dwParam IC カード検索を行う際の動作モードの指定。以下の機能を使用しない場合、0 を指定してください。 NFC_PL_SAVE : 電波の送信間隔を長めに調整した状態で、IC カードを検索することで、 消費電力を抑えることができます。ただし、送信間隔が長くなるため、IC カードの検出レスポンスが低下します。長時間連続して IC カードの待ち 受けを行う場合に使用してください。 dwReserved 現在のバージョンではこの引数を使用しません。0 を指定してください。 戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_ERROR_CALLBACK NFC_ERROR_MODULE NFC_ERROR_STOP NF
3.
3.
戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM : 正常終了 : NFC ドライバエラー DeviceEmulator では発生しません : 未オープンエラー : パラメータエラー 13
3.
3.
dwTargetNo 通信したい IC カードに対応するカード番号を指定してください。。通常は 0 を指定してください。。 NFCPollingCard 関数により複数 IC カードの起動に成功した状態で、2 枚目以降の IC カードと通信す る場合、1 以上の値を指定します。詳細は NFCHFTagGetCardResponseEx 関数の説明を参照してく ださい。 dwOption ブロックのセキュリティ状態の取得の有無を指定してください。。 NFC_HFTAG_DEFAULT : 指定ブロックのセキュリティ状態の取得無効 NFC_HFTAG_SECURITY : 指定ブロックのセキュリティ状態の取得有効 NFC_HFTAG_SECURITY を指定した場合、関数成功時に pbyData に格納されるデータの書式は以下 のとおりとなります。 1byte Status 4bytes ブロックデータ Status は以下の値となります。 0x00 0x01 : ロックなし(書込み許可) : ロックあり(書込み禁止) 戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_P
3.
dwTargetNo 通信したい IC カードに対応するカード番号を指定してください。通常は 0 を指定してください。 NFCPollingCard 関数により複数 IC カードの起動に成功した状態で、2 枚目以降の IC カードと通信す る場合、1 以上の値を指定します。詳細は NFCHFTagGetCardResponseEx 関数の説明を参照してく ださい。 dwReserved 現在のバージョンではこの引数を使用しません。0 を指定してください。 戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_ACCESS : 正常終了 : NFC ドライバエラー DeviceEmulator では発生しません : 未オープンエラー : パラメータエラー : タイムアウトエラー DeviceEmulator では発生しません : カード未起動エ
3.
NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_ACCESS : NFC ドライバエラー DeviceEmulator では発生しません : 未オープンエラー : パラメータエラー : タイムアウトエラー DeviceEmulator では発生しません : カード未起動エラー DeviceEmulator では発生しません : モジュール未応答エラー DeviceEmulator では発生しません : 本体 OFF 発生エラー DeviceEmulator では発生しません : 電波自動停止エラー DeviceEmulator では発生しません : カードポーリング中に実行エラー 20
3.
ロックサイズ)×dwBlockNumber となります。また、格納されるデータの最大値は NFC_MAXSIZE_DATA(※1)となります。 dwActualSize 関数成功時に、読み出したデータのサイズを格納します。 dwTargetNo 通信したい IC カードに対応するカード番号を指定してください。通常は 0 を指定してください。 NFCPollingCard 関数により複数 IC カードの起動に成功した状態で、2 枚目以降の IC カードと通信す る場合、1 以上の値を指定します。詳細は NFCHFTagGetCardResponseEx 関数の説明を参照してく ださい。 dwReserved 現在のバージョンではこの引数を使用しません。0 を指定してください。 戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_ACCESS
3.
"7" "0", Y ゲーム "8" "0", Y データ記憶 可搬型ファイル "9" "0", Y 物流管理 "A" "0", Y 宅急便 "B" "0", Y 郵便 "C" "0", Y 航空手荷物 "D" "0", Y RFU "E" "0", Y RFU "F" "0", Y RFU 備考:X と Y は"1"∼"F"の範囲で指定 ※ カードが AFI を使用するかどうかは、任意となります。 dwTargetNo 通信したい IC カードに対応するカード番号を指定してください。通常は 0 を指定してください。 NFCPollingCard 関数により複数 IC カードの起動に成功した状態で、2 枚目以降の IC カードと通信す る場合、1 以上の値を指定します。詳細は NFCHFTagGetCardResponseEx 関数の説明を参照してく ださい。 dwReserved 現在のバージョンではこの引数を使用しません。0 を指定してください。 戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_NOT
3.
NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_ACCESS : カード未起動エラー DeviceEmulator では発生しません : モジュール未応答エラー DeviceEmulator では発生しません : 本体 OFF 発生エラー DeviceEmulator では発生しません : 電波自動停止エラー DeviceEmulator では発生しません : カードポーリング中に実行エラー 26
3.
NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_ACCESS : NFC ドライバエラー DeviceEmulator では発生しません : 未オープンエラー : パラメータエラー : タイムアウトエラー DeviceEmulator では発生しません : カード未起動エラー DeviceEmulator では発生しません : モジュール未応答エラー DeviceEmulator では発生しません : 本体 OFF 発生エラー DeviceEmulator では発生しません : 電波自動停止エラー DeviceEmulator では発生しません : カードポーリング中に実行エラー 28
3.
NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_ACCESS : カード未起動エラー DeviceEmulator では発生しません : モジュール未応答エラー DeviceEmulator では発生しません : 本体 OFF 発生エラー DeviceEmulator では発生しません : 電波自動停止エラー DeviceEmulator では発生しません : カードポーリング中に実行エラー 30
3.
bit 0 フラグ名 DSFID 1 AFI 2 メモリサイズ 3 IC リファレンス 値 0 1 0 1 0 1 0 4 5 6 7 RFU RFU RFU RFU 1 0 0 0 0 内容 DSFID はサポートされていない/存在しない DSFID はサポートされている/存在する AFI はサポートされていない/存在しない AFI はサポートされている/存在する メモリサイズ情報はサポートされていない/存在しない メモリサイズ情報はサポートされている/存在する IC リファレンス情報はサポートされていない/存在しな い IC リファレンス情報はサポートされている/存在する 将来拡張用のリザーブ 将来拡張用のリザーブ 将来拡張用のリザーブ 将来拡張用のリザーブ pUID 関数成功時に、カードからの UID を格納します。。8 バイト領域のポインタを指定してください。 pDSFID 関数成功時に、カードからの DSFID を格納します。。1 バイト領域のポインタを指定してください。 pAFI 関数成功時に、カードからの AFI を格納します。。1 バイト領域のポインタを指定してく
戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_ACCESS : 正常終了 : NFC ドライバエラー DeviceEmulator では発生しません : 未オープンエラー : パラメータエラー : タイムアウトエラー DeviceEmulator では発生しません : カード未起動エラー DeviceEmulator では発生しません : モジュール未応答エラー DeviceEmulator では発生しません : 本体 OFF 発生エラー DeviceEmulator では発生しません : 電波自動停止エラー DeviceEmulator では発生しません : カードポーリング中に実行エラー 33
3.
の領域のポインタを指定してください。 例)dwBlockNumber に 4 を指定した場合、4 バイト領域のポインタを指定します。 pdwActualSize 関数成功時に、カードから取得したセキュリティ情報のサイズを格納します。。 dwTargetNo 通信したい IC カードに対応するカード番号を指定してください。通常は 0 を指定してください。 NFCPollingCard 関数により複数 IC カードの起動に成功した状態で、2 枚目以降の IC カードと通信す る場合、1 以上の値を指定します。詳細は NFCHFTagGetCardResponseEx 関数の説明を参照してく ださい。 dwReserved 現在のバージョンではこの引数を使用しません。0 を指定してください。 戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_ERROR_TIMEOUT NFC_NOT_ACTIVATION NFC_ERROR_MODULE NFC_ERROR_SUSPEND NFC_ERROR_AUTOOFF NFC_ERROR_INVALID_
3.
3.
3.
3.
3.
戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM : 正常終了 : NFC ドライバエラー DeviceEmulator では発生しません : 未オープンエラー : パラメータエラー 補足 IC カードの検索方式 通常起動 : 多段起動/ : 多段起動 2 一括起動 : 1 回の検索で 1 枚の IC カードを起動します 段数に指定した回数まで異なる IC カードを連続して起動します (1 回の検索で 1 枚しか起動することができません)※ 1 回の検索で同一タイプの複数枚の IC カードを起動します 段数に指定した回数まで検索を行います ※ 注意 IC カードを 1 つ起動するたびに、起動した IC カードの Uid をドライバに記録し、その記 録した IC カードと重複する IC カードの二重起動を防止します。この記録は、指定した 枚数の IC カードを起動したとき、タイムアウト時間を経過したとき、コールバック関数が FALSE を返したとき、およびNFCHFTagStopPolling関数を実行したときにクリアします。 41
3.
3.
pbyUid 関数成功時に、カードからのUidを格納します。 バッファサイズは(8×NFCHFTagSetPollingMode関数の dwNum)以上確保してください。 データ書式 8バイト 1枚目のUid 8バイト 2枚目のUid pdwDiscoveredNum NFCHFTagPolling関数で起動に成功した IC カードの枚数を取得します。 NFCHFTagRead関数やNFCHFTagWrite関数などの dwTargetNo に指定可能な値の最大は、(本パラ メータで取得した値-1)となります。 例) 本パラメータで 2 を取得した場合 NFCHFTagRead関数の dwTargetNo に指定可能な値は 0∼1 となります。 pdwReserved 現在のバージョンではこの引数を使用しません。NULL を指定してください。 戻り値 以下の値を返します。 NFC_OK NFC_NOT_DEVICE NFC_POF NFC_PRM NFC_NOT_ACTIVATION NFC_ERROR_INVALID_ACCESS : 正常終了 : NFC ドライバエラー DeviceEmula
4. プログラミング上の注意点 4.1 電波停止の通知について ウィンドウメッセージ通知を使用する場合 電波を手動で停止する場合 1. WM_CREATE メッセージを受け取った場合は、NFCHFTagOpen関数を実行し、読み取り待機状態に します。 2. WM_COMMAND、WM_KEYDOWN 等のメッセージを受け取った場合は、NFCHFTagPolling関数によ り、通信可能範囲内にある ISO15693 カードを検索/起動します。 3. ISO15693 カードの起動に成功、かつ、そのカードの詳細な情報が必要な場合は、 NFCHFTagGetCardResponse関数により、応答情報を取得します。(任意) 4. ISO15693 カードとの通信を行います※。 5. ISO15693 カードとの通信が終了した場合は、NFCHFTagRadioOff関数により、電波出力を停止しま す。 6.
電波を自動で停止し、停止タイミングを通知する場合 1. WM_CREATE メッセージを受け取った場合は、NFCHFTagOpen関数を実行し、読み取り待機状態に します。 2. NFCHFTagSetEventNotification関数により、ウィンドウメッセージ通知を有効に設定します。 3. NFCHFTagSetAutoRadioOff関数により、電波自動停止を有効に設定します。 4. WM_COMMAND、WM_KEYDOWN 等のメッセージを受け取った場合は、NFCHFTagPolling関数によ り、通信可能範囲内にある ISO15693 カードを検索/起動します。 5. ISO15693 カードの起動に成功、かつ、そのカードの詳細な情報が必要な場合は、 NFCHFTagGetCardResponse関数により、応答情報を取得します。(任意) 6. ISO15693 カードとの通信を行います※。 7.
イベント通知を使用する場合 電波を手動で停止する場合 1. アプリケーション開始時に、NFCHFTagOpen関数により、読み取り待機状態にします。 2. 通信処理開始時に、NFCHFTagPolling関数により、通信可能範囲内にある ISO15693 カードを検索/ 起動します。 3. ISO15693 カードの起動に成功、かつ、そのカードの詳細な情報が必要な場合は、 NFCHFTagGetCardResponse関数により、応答情報を取得します。(任意) 4. ISO15693 カードとの通信を行います※。 5. ISO15693 カードとの通信が終了した場合は、NFCHFTagRadioOff関数により、電波出力を停止しま す。 6.
電波を自動で停止し、停止タイミングを通知する場合 ■ メインスレッド 1. アプリケーション開始時に、CreateEvent 関数により、電波自動停止タイミング通知イベントハンドルを 作成します。 2. CreateThread 関数により、電波自動停止を監視するスレッドを作成します。 3. NFCHFTagOpen関数により、読み取り待機状態にします。 4. NFCHFTagSetEventNotification関数により、イベント通知を有効に設定します。 5. NFCHFTagSetAutoRadioOff関数により、電波自動停止を有効に設定します。 6. 通信処理開始時に、NFCHFTagPolling関数により、通信可能範囲内にある ISO15693 カードを検索/ 起動します。 7. ISO15693 カードの起動に成功、かつ、そのカードの詳細な情報が必要な場合は、 NFCHFTagGetCardResponse関数により、応答情報を取得します。(任意) 8. ISO15693 カードとの通信を行います※。 9.
■ NFCHFTag スレッド 1. WaitForSingleObject 関数により、電波自動停止タイミング通知イベントハンドルに対して待機しま す。 2. アプリケーション終了時に通知イベントを受け取った場合、電波自動停止の監視を終了します。 3.
4.2 ISO15693 カードとの通信について 以下は「電波停止の通知について」におけるカードとの通信部分の手順です。 1.
4.3 検索方式について 多段起動を使用する ISO15693 カードと通信する (ア) NFCHFTagSetPollingMode関数により、検索方式に多段起動 (NFC_PLMODE_MULTISTEP)を、段数に連続起動するカード枚 数 CARD_NUM を指定します。 (イ) iCount=0 をセットします。 (ウ) iCount
多段起動 2 を使用する ISO15693 カードと通信する 1. NFCHFTagSetPollingMode関数により、検 索方式に多段起動 (NFC_PLMODE_MULTISTEP2)を、段数 に連続起動するカード枚数 CARD_NUM を指定します。 2. iCount=0 をセットします。 3. iCount
一括起動を使用する ISO15693 カードと通信する 1. NFCHFTagSetPollingMode関数により、検索方式に一括起 動(NFC_PLMODE_PACKAGE)を、段数に一括起動する枚 数を指定します。 2. NFCHFTagPolling関数により通信範囲内のカードを検索し ます。 3. IC カードが起動して応答があったら、次の処理へ進みま す。 4. k に起動した枚数を、dwTargetNo に 0 をセットします。 (NFCHFTagRead関数やNFCHFTagWrite関数などの引数) 5. dwTargetNo が k よりも小さい場合、次の処理に進みます。 6. NFCHFTagRead関数やNFCHFTagWrite関数などにより、カ ードとのデータアクセスを行います。(必要な動作に応じて 各種関数を実行) 7. 他のブロックにもアクセスする場合は、6.に戻って処理を繰 り返します。 8. 次のカードと通信する場合、dwTargetNo に 1 加算し、5.に 戻って同様の処理を繰り返します。 9. 5.
4.
Tag-itTM に対し HFTagWrite 関数を実行する場合 1. TargetID 配列を初期化します。0 クリア状態等に初期化します。 2. カウンタ変数 i に 0 をセットし、クリアします。 3. カウンタ変数 i が定数 N より小さい場合、次の処理に進みます。定数 N はループ回数の上限を表して おり、回数制限を設けることで、無限ループ化を回避します。 4. NFCHFTagPolling 関数により通信範囲内のカードを検索します。 5. IC タグ(Tag-itTM)を発見し、IC タグの起動に成功した場合、NFCHFTagGetCardResponse 関数により 起動したカードの UID を取得します。 6. TargetID が初期状態の場合、取得した UID をセットします。 7. TargetID[6]をチェックします。TargetID[6]が 0x07 の場合、Tag-itTM シリーズの IC タグであるため、 次の処理に進みます。 8.
TargetID初期化 iCount=0 No iCount
Tag-itTM に対し HFTagLock 関数を実行する場合 1. TargetID 配列を初期化します。0 クリア状態等に初期化します。 2. カウンタ変数 i に 0 をセットし、クリアします。 3. カウンタ変数 i が定数 N より小さい場合、次の処理に進みます。定数 N はループ回数の上限を表して おり、回数制限を設けることで、無限ループ化を回避します。 4. NFCHFTagPolling 関数により通信範囲内のカードを検索します。 5. IC タグ(Tag-itTM)を発見し、IC タグの起動に成功した場合、NFCHFTagGetCardResponse 関数により 起動したカードの UID を取得します。 6. TargetID が初期状態の場合、取得した UID をセットします。 7. TargetID[6]をチェックします。TargetID[6]が 0x07 の場合、Tag-itTM シリーズの IC タグであるため、 次の処理に進みます。 8.
TargetID初期化 iCount=0 No iCount
Tag-itTM に対し NFCHFTagWriteAFI、NFCHFTagWriteDSFID 関数を実行する場合 1. TargetID 配列を初期化します。0 クリア状態等に初期化します。 2. カウンタ変数 i に 0 をセットし、クリアします。 3. カウンタ変数 i が定数 N より小さい場合、次の処理に進みます。定数 N はループ回数の上限を表して おり、回数制限を設けることで、無限ループ化を回避します。 (※1) 4. NFCHFTagPolling 関数により通信範囲内のカードを検索します。 5. IC タグ(Tag-itTM)を発見し、IC タグの起動に成功した場合、NFCHFTagGetCardResponse 関数により 起動したカードの UID を取得します。 6. TargetID が初期状態の場合、取得した UID をセットします。 7. TargetID[6]をチェックします。TargetID[6]が 0x07 の場合、Tag-itTM シリーズの IC タグであるため、 次の処理に進みます。 8.
TargetID初期化 iCount=0 No iCount
カシオ計算機お問い合わせ窓口 製品に関する最新情報 ●製品サポートサイト(カシオペア・ハンディターミナル) http://casio.