Android-eigene NCI-Befehle

Die NFC-Controller-Schnittstelle (NCI) wird für die Interaktion mit einem NFC-Controller (NFCC) verwendet. Auf dieser Seite werden die Spezifikationen der proprietären NCI-Befehle für Android beschrieben.

NCI-Definitionen

Die proprietären NCI-Befehle von Android verwenden die proprietäre Gruppen-ID (GID) 0xF und den Android-Opcode-Identifikationscode (OID) 0xC.

Gängiges Paketformat

Das Android-NCI-Paketformat entspricht der NCI-Spezifikation für Steuerpakete mit den proprietären Group_ID 0xF- und Opcode_ID 0x0C-Typen. Bei jeder proprietären Android-Nachricht muss das erste Byte der Paketnutzlast auf den Android-Opcode (0x0C) gesetzt werden. Die Android-Kontrollpakete verwenden Message_Type und PBF, um Befehle, Antworten und Benachrichtigungen ähnlich wie Standardbefehle zu identifizieren.

Das Android-Paketformat ist in der folgenden Tabelle dargestellt:

0 1 2 3 4 5 6 7
Message_Type PBF Group_ID = 0xF (PROPRIETARY)
Reserviert für zukünftige Verwendung (RFU) Opcode_ID = 0x0C (ANDROID)
Payload_Length
Android_Opcode_ID
Android_Payload

Die zugewiesenen Android-Opcode-IDs sind in der folgenden Tabelle aufgeführt. Die Spezifikation für jedes Paket folgt in den folgenden Abschnitten.

Android-OID Mitteilungstyp Name der Nachricht
0x00 NCI_MT_CMD NCI_ANDROID_GET_CAPS_CMD
NCI_MT_RSP NCI_ANDROID_GET_CAPS_RSP
0x01 NCI_MT_CMD NCI_ANDROID_POWER_SAVING_CMD
NCI_MT_RSP NCI_ANDROID_POWER_SAVING_RSP
0x02 NCI_MT_CMD NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
NCI_MT_RSP NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
0x03 NCI_MT_NTF NCI_ANDROID_POLLING_FRAME_NTF
0x04 NCI_MT_CMD NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
NCI_MT_RSP NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP

Befehl zum Abrufen von Funktionen

Der Host verwendet NCI_ANDROID_GET_CAPS_CMD, um die Liste der von der NFCC unterstützten proprietären Android-Funktionen abzufragen. Der Befehl NCI_ANDROID_GET_CAPS_CMD akzeptiert keine Parameter.

Der NFCC muss mit der NCI_ANDROID_GET_CAPS_RSP-Antwort mit dem Status STATUS_OK und der Liste der unterstützten Funktionen antworten.

Wenn der NFCC NCI_ANDROID_GET_CAPS_CMD nicht unterstützt, muss der Host davon ausgehen, dass die Funktionen jeweils den angegebenen Standardwert haben. Wenn eine angegebene Funktion vom NFCC nicht in der Antwort zurückgegeben wird, muss der Host davon ausgehen, dass die Funktion den angegebenen Standardwert hat.

NCI_ANDROID_GET_CAPS_CMD

Nutzlastfelder Größe Wert/Beschreibung
0 Oktette

NCI_ANDROID_GET_CAPS_RSP

Nutzlastfelder Größe Wert/Beschreibung
Status 1 Oktett Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation.
Android_Version 2 Oktette Gibt die Version der Android-Anforderungen an, die vom NFCC implementiert wird.
0x0000 Android 15
Anzahl der Funktionen 1 Oktett Anzahl (n) der unterstützten Funktionen
Capabilities[0..n] (m + 2) * n Oktette Unterstützte Funktionen
Eingeben 1 Oktett Die Kennung der Funktion
Len 1 Oktett Länge (m) des Werts
Wert m Oktette Der Wert der Funktion
Proprietäre Android-Funktionen
Funktionsname ID Größe Wert/Beschreibung
Beobachtungsmodus 0x00 1 Oktett Unterstützung für den Beobachtungsmodus
0x00 (Standardeinstellung): Diese Funktion wird nicht unterstützt.
0x01 – Unterstützt die Funktion mit RF-Deaktivierung vom Host (erforderlich für Android 15 oder höher).
Alle anderen Werte sind „RFU“ (ohne Angabe).
Benachrichtigung zum Abfrageframe 0x01 1 Oktett Unterstützung für Benachrichtigungen zu Polling-Frames. 0x01, wenn unterstützt, 0x00 (Standard), wenn nicht unterstützt. Alle anderen Werte sind frei wählbar.
Energiesparmodus 0x02 1 Oktett Unterstützung für den Energiesparmodus 0x01, wenn unterstützt, 0x00 (Standardeinstellung), wenn nicht unterstützt. Alle anderen Werte sind frei wählbar.
Filter für die Abfrageschleife von Autotransact 0x03 1 Oktett Unterstützung für Polling-Loop-Filter in der Firmware, um den Beobachtungsmodus für bestimmte Muster zu umgehen, wenn der Beobachtungsmodus global aktiviert ist.
0x00 (Standard): Diese Funktion wird nicht unterstützt.
0x01: Unterstützt Polling-Loop-Filter.
Alle anderen Werte sind RFU.
0x04..0xFF 0 Oktette Reserviert für zukünftige Verwendung

Befehl zum Energiesparen

Um den NFCC in den Energiesparmodus zu versetzen, kann der Host den Befehl NCI_ANDROID_POWER_SAVING_CMD verwenden. Die NFCC muss mit NCI_ANDROID_POWER_SAVING_RSP antworten und einen Statuscode für Erfolg oder Fehler angeben.

Im Energiesparmodus darf der Host keinen Befehl an den NFCC senden und der NFCC darf keine Benachrichtigung oder Antwort an den Host senden. Die NFCC oder das eingebettete Secure Element (eSE) kann eingehende Zahlungsanfragen gemäß der festgelegten Routingkonfiguration automatisch akzeptieren, bevor der Energiesparmodus aktiviert wird.

Um zum Vollleistungsmodus zurückzukehren, kann der Host den NFCC zurücksetzen oder neu initialisieren.

NCI_ANDROID_POWER_SAVING_CMD

Nutzlastfelder Größe Wert/Beschreibung
Energiesparmodus 1 Oktett 0x00 Energiesparmodus deaktivieren
0x01 Energiesparmodus aktivieren

NCI_ANDROID_POWER_SAVING_RSP

Nutzlastfelder Größe Wert/Beschreibung
Status 1 Oktett Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation,

Befehl für den Beobachtungsmodus festlegen

Zum Aktivieren oder Deaktivieren des Beobachtungsmodus kann der Host den Befehl NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD verwenden. Der NFCC muss mit NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP antworten und einen Statuscode für Erfolg oder Misserfolg angeben.

Wenn der Beobachtungsmodus deaktiviert ist, muss der NFCC die Standardaktivität im Modus „Lauschen“ gemäß der technischen Spezifikation für Aktivitäten implementieren.

Wenn der Beobachtungsmodus aktiv ist, darf der NFCC während der Polling-Schleife im Listenermodus nicht auf Polling-Anfragen antworten, es sei denn, er wurde vom Host ausdrücklich dazu autorisiert. Der NFCC muss die RF_FIELD_INFO_NTF-Benachrichtigung (wie in Abschnitt 5.3 der NCI-Spezifikation definiert) senden, wenn er eine Feldaktivierung erkennt. Wenn die Erkennung des Polling-Modus aktiv ist, muss der NFCC die Polling-Aktivität gemäß der technischen Spezifikation für Aktivitäten implementieren. Der NFCC kann die Umfrageinformationen im Cache speichern, um sofort mit der Geräteaktivierung fortzufahren, sobald der Beobachtungsmodus deaktiviert wird.

Der NFCC sollte den Beobachtungsmodus deaktivieren, wenn der Host aus irgendeinem Grund heruntergefahren wird (z. B. wenn der Akku leer ist oder der Nutzer den Vorgang initiiert hat), damit SE-Transaktionen fortgesetzt werden können.

NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD

Nutzlastfelder Größe Wert/Beschreibung
Beobachtungsmodus 1 Oktett 0x00 Beobachtungsmodus deaktivieren (Standardeinstellung)
0x01 Beobachtungsmodus aktivieren

NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP

Nutzlastfelder Größe Wert/Beschreibung
Status 1 Oktett Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation.

Benachrichtigung in Abfrageschleife

Der NFCC muss die NCI_ANDROID_POLLING_FRAME_NTF-Benachrichtigung nach jedem Polling-Loop-Frame an den Host senden. Wenn die Benachrichtigungen RF_FIELD_INFO_NTF und NCI_ANDROID_POLLING_FRAME_NTF generiert werden, muss die NFCC nach RF_FIELD_INFO_NTF NCI_ANDROID_POLLING_FRAME_NTF senden.

Die NCI_ANDROID_POLLING_FRAME_NTF-Benachrichtigung ist unabhängig davon, ob der Beobachtungsmodus aktiv ist oder nicht. Wenn der Beobachtungsmodus aktiv ist, muss der NFCC immer eine NCI_ANDROID_POLLING_FRAME_NTF-Benachrichtigung senden, bevor die Transaktion fortgesetzt wird.

NCI_ANDROID_POLLING_FRAME_NTF

Nutzlastfelder Größe Wert/Beschreibung
Umfragedaten[0..n] (m + 3) * n Oktette Liste der Abfrageanfragen, die seit der letzten Benachrichtigung eingegangen sind. Jedes Ergebnis enthält den Typ (Technologie) der empfangenen Anfragen und personenbezogene Daten aus der Anfrage, je nach Technologie.
Eingeben 1 Oktett Weitere Informationen finden Sie unter Frame-Typen.
Flaggen 1 Oktett Siehe Flag-Byte.
Länge 1 Oktett Länge (m) des Berichts zu Umfragedaten, einschließlich Zeitstempel- und Gewinnfeldern.
Zeitstempel 4 Oktette Zeitstempel des Empfangs der Abfrageanfragen in Millisekunden, Big-Endian-Format.
Verstärkung 1 Oktett Stärke der Polling-Anfrage.
0xFF gibt an, dass der Wert nicht verfügbar ist.
Daten m – 5 Oktette Gibt die personenidentifizierbaren Daten zurück, die in der Abfrageanfrage enthalten sind.
Frame-Typen
Polling-Frame Eingeben Größe Wert/Beschreibung
Remote-Feld 0x00 1 Oktett 0x00 Feld deaktiviert
0x01 Feld ein
0x02..0xFF RFU
NFC-A 0x01 n Oktette Der Wert muss einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP)
NFC-B 0x02 n Oktette Der Wert muss ein AIF-Byte und einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP).
NFC-F 0x03 n-Oktette Der Wert muss einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP).
NFC-V 0x04 n Oktette Der Wert muss einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP).
Unbekannt 0x07 n Oktette Frame-Rohdaten
Definition des Flags-Byte
Flaggen
B0 b1 b2 b3 b4 B5 B6 b7
0 Kurzer Frame RFU RFU RFU RFU RFU RFU RFU
1 Langer Frame

Befehl zum Abfragen des Status des Beobachtungsmodus

Um den aktuellen Status des passiven Bestellmodus abzurufen, kann der Host den Befehl NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD verwenden. Die NFCC muss mit NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP antworten und einen Statuscode angeben, der den Erfolg oder Fehler angibt.

NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD

Nutzlastfelder Größe Wert/Beschreibung
0 Oktette

NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP

Nutzlastfelder Größe Wert/Beschreibung
Status 1 Oktett Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation,
Beobachtungsmodus 1 Oktett 0x00 Beobachtungsmodus deaktiviert
0x01 Beobachtungsmodus aktiviert