Interfejs sterownika NFC (NCI) służy do interakcji ze sterownikiem NFC (NFCC). Ta strona zawiera specyfikacje zastrzeżonych poleceń NCI na Androida.
Definicje NCI
Własne polecenia NCI na Androidzie używają własnego identyfikatora grupy (GID) 0xF
i identyfikatora kodu operacji (OID) Androida 0xC
.
Popularny format pakietów
Format pakietów NCI na Androidzie jest zgodny ze specyfikacją NCI dla pakietów sterujących, która wykorzystuje zastrzeżone elementy Group_ID 0xF
i Opcode_ID 0x0C
. W przypadku każdego zastrzeżonego komunikatu Androida pierwszy bajt danych pakietu musi być ustawiony na kod operacji Androida (0x0C
). Pakiety sterujące Androida używają wartości Message_Type
i PBF
do identyfikowania poleceń, odpowiedzi i powiadomień w sposób podobny do poleceń standardowych.
Format pakietów Androida przedstawiono w tabeli poniżej:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
zarezerwowany do użycia w przyszłości (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Przypisane identyfikatory instrukcji kodu źródłowego Androida zostały wymienione w tabeli poniżej. Specyfikacje poszczególnych pakietów znajdziesz w następnych sekcjach.
OID Androida | Typ wiadomości | Nazwa wiadomości |
---|---|---|
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 |
Polecenie Get capabilities
Użytkownik korzysta z funkcji NCI_ANDROID_GET_CAPS_CMD
, aby zapytać o listę zastrzeżonych funkcji Androida obsługiwanych przez NFCC. Polecenie NCI_ANDROID_GET_CAPS_CMD
nie przyjmuje żadnych parametrów.
NFCC musi odpowiedzieć za pomocą odpowiedzi NCI_ANDROID_GET_CAPS_RSP
ze stanem STATUS_OK
i listą obsługiwanych funkcji.
Jeśli NFCC nie obsługuje właściwości NCI_ANDROID_GET_CAPS_CMD
, host musi założyć, że każda z tych właściwości przyjmuje wartość domyślną. Jeśli NFCC nie zwróci określonej możliwości w odpowiedzi, host musi założyć, że ta możliwość ma wartość domyślną.
NCI_ANDROID_GET_CAPS_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_GET_CAPS_RSP
Pola danych | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. | |||||
Android_Version
|
2 oktety | Określa wersję wymagań Androida, która jest implementowana przez NFCC. | |||||
0x0000 | Android 15 | ||||||
Liczba funkcji | 1 oktet | Liczba (n) obsługiwanych funkcji | |||||
Capabilities[0..n] | (m + 2) * n oktetów | Obsługiwane funkcje | |||||
Typ | 1 oktet | Identyfikator możliwości | |||||
Len | 1 oktet | Długość (m) wartości | |||||
Wartość | m bajtów | Wartość tej funkcji |
Własne funkcje Androida
Nazwa możliwości | ID | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|---|
Tryb obserwacji | 0x00 | 1 oktet | Obsługa trybu obserwacji.
0x00 (domyślnie) – ta funkcja nie jest obsługiwana. 0x01 – obsługa funkcji z wykorzystaniem dezaktywacji RF na hoście (wymagane w przypadku Androida 15 lub nowszego). Wszystkie pozostałe wartości są opcjonalne. |
|||||
Powiadomienie o ramce ankiety | 0x01 | 1 oktet | Obsługa powiadomień o ramce ankiety. 0x01, jeśli jest obsługiwana, 0x00 (domyślnie), jeśli nie jest obsługiwana. Pozostałe wartości to RFU. | |||||
Tryb oszczędzania energii | 0x02 | 1 oktet | Obsługa trybu oszczędzania energii. 0x01, jeśli jest obsługiwana, 0x00 (domyślnie), jeśli nie jest obsługiwana. Pozostałe wartości to RFU. | |||||
Filtr pętli zapytań Auotransact | 0x03 | 1 oktet | Obsługa filtrów pętli zapytań w oprogramowaniu układowym, aby pomijać tryb obserwacji w przypadku określonych wzorców, gdy tryb obserwacji jest włączony globalnie.
0x00 (domyślnie) – ta funkcja nie jest obsługiwana 0x01 – obsługa filtrów pętli zapytania Inne wartości są opcjonalne |
|||||
0x04,0xFF | 0 oktetów | Zarezerwowany do użycia w przyszłości |
Polecenie oszczędzania energii
Aby przełączyć NFCC w tryb oszczędzania energii, gospodarz może użyć polecenia NCI_ANDROID_POWER_SAVING_CMD
. NFCC musi odpowiedzieć, przesyłając kod stanu NCI_ANDROID_POWER_SAVING_RSP
wskazujący na powodzenie lub niepowodzenie.
W trybie oszczędzania energii host nie może wysyłać żadnych poleceń do NFCC, a NFCC nie może wysyłać żadnych powiadomień ani odpowiedzi do hosta. NFCC lub wbudowany element zabezpieczeń (eSE) może automatycznie akceptować przychodzące żądania płatności zgodnie z konfiguracją routingu ustawioną przed włączeniem trybu oszczędzania energii.
Aby powrócić do trybu pełnej mocy, host może zresetować lub ponownie zainicjować NFCC.
NCI_ANDROID_POWER_SAVING_CMD
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Tryb oszczędzania energii | 1 oktet | 0x00 | Wyłącz tryb oszczędzania energii |
0x01 | Włączanie trybu oszczędzania energii |
NCI_ANDROID_POWER_SAVING_RSP
Pola danych | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Stan | 1 oktet | kody stanu w tabeli 140 w specyfikacji NCI, |
Polecenie ustawiania trybu obserwacji
Aby włączyć lub wyłączyć tryb obserwacji, gospodarz może użyć polecenia NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
. NFCC musi odpowiedzieć kodem NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
z kodem stanu wskazującym na powodzenie lub niepowodzenie.
Gdy tryb obserwacji jest wyłączony, NFCC musi wdrożyć standardowe działanie w trybie nasłuchiwania zgodnie ze specyfikacją techniczną aktywności.
Gdy tryb obserwacji jest aktywny, NFCC nie może odpowiadać na żadne żądania ankiety podczas pętli ankiety w trybie słuchania, dopóki host nie zezwoli na to wyraźnie. NFCC musi wysłać powiadomienie RF_FIELD_INFO_NTF
(zgodnie z sekcją 5.3 specyfikacji NCI), gdy wykryje aktywację w polu. Jeśli wykrywanie w trybie ankiety jest aktywne, NFCC musi zaimplementować aktywność w trybie ankiety zgodnie z specyfikacją techniczną aktywności.
NFCC może zapisać informacje o ankiecie w pamięci podręcznej, aby można było rozpocząć aktywację urządzenia od razu po wyłączeniu trybu obserwacji.
NFCC powinien wyłączyć tryb obserwacji, jeśli host zostanie wyłączony z dowolnego powodu (np. z powodu wyczerpania baterii lub wyłączenia przez użytkownika), aby transakcje SE mogły być kontynuowane.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Pola danych | Rozmiar | Wartość/opis | |
---|---|---|---|
tryb obserwacji | 1 oktet | 0x00 | Wyłącz tryb obserwacji (domyślnie), |
0x01 | Włączanie trybu obserwacji |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Pola danych | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Powiadomienie o pętli odpytywania
NFCC musi wysłać powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
do hosta po każdym cyklu ankiety. Gdy zostaną wygenerowane powiadomienia RF_FIELD_INFO_NTF
i NCI_ANDROID_POLLING_FRAME_NTF
, NFCC będzie musiało wysłać NCI_ANDROID_POLLING_FRAME_NTF
po RF_FIELD_INFO_NTF
.
Powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
jest wysyłane niezależnie od tego, czy tryb obserwacji jest aktywny. Gdy tryb obserwacji jest aktywny,
NFCC musi zawsze wysłać powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
, zanim przejdzie do transakcji.
NCI_ANDROID_POLLING_FRAME_NTF
Pola danych | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m + 3) * n oktetów | Lista próśb o głosowanie otrzymanych od ostatniego powiadomienia. Każdy wynik zawiera typ (technologię) otrzymanych żądań oraz dane umożliwiające identyfikację z żądania w zależności od technologii. | |||||
Typ | 1 oktet | Zobacz typy ramek. | |||||
Flagi | 1 oktet | Zobacz bajt flagi. | |||||
Długość | 1 oktet | Długość (m) raportu danych ankiety, w tym pola sygnatury czasowej i wzmocnienia. | |||||
Sygnatura czasowa | 4 oktety | Znak czasu zliczany w milisekundach od momentu otrzymania żądań sondowania (big endian). | |||||
Wzmocnienie | 1 oktet | Siła żądania odpytywania.
0xFF oznacza, że wartość jest niedostępna. |
|||||
Dane | m – 5 oktetów | Zwraca dane możliwe do zidentyfikowania obecne w żądaniu odpytywania |
Typy ramek
Ramka ankiety | Typ | Rozmiar | Wartość/opis | |
---|---|---|---|---|
Pole zdalne | 0x00 | 1 oktet | 0x00 | Pole wyłączone |
0x01 | Pole włączone | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n oktetów | Wartość musi zawierać polecenie ISO 14443-3 (np. REQ lub WUP) | |
NFC B | 0x02 | n oktetów | Wartość musi zawierać bajt AIF i polecenie ISO 14443-3 (np. REQ lub WUP). | |
NFC-F | 0x03 | n oktetów | Wartość musi zawierać polecenie ISO 14443-3 (np. REQ lub WUP). | |
NFC-V | 0x04 | n oktetów | Wartość musi zawierać polecenie ISO 14443-3 (np. REQ lub WUP). | |
Nieznane | 0x07 | n oktetów | Nieprzetworzone dane o ramkach |
Definicja bajtów flagi
Flagi | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | B7 | |
0 | Krótka klatka | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Długa ramka |
Zapytanie o stan trybu obserwacji
Aby pobrać bieżący stan trybu biernego zamówienia, host może użyć polecenia NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
. NFCC musi odpowiedzieć za pomocą NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
z kodem stanu wskazującym na powodzenie lub niepowodzenie.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Pola danych | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Zapoznaj się z kodami stanu w tabeli 140 w specyfikacji NCI. | |
tryb obserwacji | 1 oktet | 0x00 | Tryb obserwacji jest wyłączony |
0x01 | Tryb obserwacji włączony |