4. ステート遷移

NFP ライブラリのステートは、以下のように遷移します。

図 4-1. NFP ライブラリのステート遷移図

NONE INIT RW_SEARCH RW_ACTIVE RW_DEACTIVE RW_MOUNT RW_MOUNT_ROM Initialize Finalize StartDetection StopDetection StopDetection StartDetection StopDetection Restore InitializeCreateInfo CreateApplicationArea GetTagInfo Mount Unmount OpenApplicationArea ReadApplicationArea WriteApplicationArea Flush GetTagInfo GetNfpCommonInfo GetNfpRegisterInfo GetNfpRomInfo MountRom Unmount GetTagInfo GetNfpRomInfo タグを検知 検知していたタグが離れた 検知していたタグが離れた 検知していたタグが離れた 関数呼び出しによる遷移 外的要因による遷移

注意:

図には書かれていませんが、各ステートで nn::nfp::Finalize() を呼び出すと NONE に遷移します。また、NONEINIT を除くステートに遷移している状態で無線オフモードまたはスリープモードに入るとステートが INIT に遷移します。

注意:

CTR 向けの NFC リーダー/ライター 使用時に、NONE, INIT 以外のステートで NFC リーダー/ライター との接続が切断されると、INIT に遷移します。

ステートは nn::nfp::NfpState で定義されており、nn::nfp::GetNfpState() で現在のステートを取得することができます。

各ステートは以下のような状態を示しています。

表 4-1. ステートが示す状態
ステート 状態の説明
NONE NFP ライブラリを初期化する前の状態です。
INIT NFP ライブラリの初期化は完了しているが、まだタグの探索を行っていない状態です。
RW_SEARCH タグの探索を行っている状態です。
RW_ACTIVE タグを検知した状態です。
RW_DEACTIVE 検知していたタグが通信可能範囲から離れた状態です。
RW_MOUNT 検知していたタグをマウントした状態です。検知していたタグが NFP タグでなければマウントできません。
RW_MOUNT_ROM 検知していたタグをマウントした状態です。RW_MOUNT との違いは、アクセス可能な情報が制限されていることです。
表 4-2. 各ステートで使用可能な関数
ステート 使用可能な関数(名前空間 nn::nfp は省略しています)
NONE Initialize()
INIT SetActivateEvent(), SetDeactivateEvent(), StartDetection()
RW_SEARCH StopDetection()
RW_ACTIVE GetTagInfo(), Mount(), MountRom(), Restore(), StopDetection()
RW_DEACTIVE StartDetection(), StopDetection()
RW_MOUNT CreateApplicationArea(), Flush(), GetNfpCommonInfo(), GetNfpRegisterInfo(), GetNfpRomInfo(), GetTagInfo(), OpenApplicationArea(), ReadApplicationArea(), StopDetection(), Unmount(), WriteApplicationArea()
RW_MOUNT_ROM GetNfpRomInfo(), GetTagInfo(), StopDetection(), Unmount()
NONE 以外 Finalize(), GetConnectionStatus(), InitializeCreateInfo()
すべて GetNfpState()

NFP ライブラリを使用することで、 SNAKE の消費電力が変動し、バッテリ持続時間に影響を与えます。 NFP ライブラリのステートと、消費電力の関係(バッテリ持続時間への影響)は以下の通りです。

ステート SNAKE のバッテリ持続時間
NONE 変化なし
INIT, RW_SEARCH, RW_DEACTIVE 1 % 未満の減少
RW_ACTIVE, RW_MOUNT, RW_MOUNT_ROM 約 8 % の減少

NFC リーダー/ライターのバッテリ持続時間についての情報は、以下の通りです。CTR 側のバッテリ持続時間は、赤外線通信使用時と同じになります。

ステート NFC リーダー/ライター との
接続状態
NFC リーダー/ライター の
バッテリ持続時間
NONE, INIT 切断 変化なし
INIT, RW_DEACTIVE 接続 約 40% の減少
RW_SEARCH 接続 約 94% の減少
RW_ACTIVE, RW_MOUNT, RW_MOUNT_ROM 接続 約 65 % の減少

可能な範囲で、消費電力を抑えられるステートに遷移することを推奨します。ただし、 nn::nfp::Initialize() は処理に 1 秒程度の時間を要するため、過剰な頻度で nn::nfp::Finalize() を呼ぶ必要はありません。