Interfejs sterownika NFC (NCI) służy do interakcji ze sterownikiem NFC (NFCC). Na tej stronie opisujemy specyfikacje zastrzeżonych poleceń NCI w Androidzie.
Definicje NCI
Własne polecenia NCI na Androidzie używają własnego identyfikatora grupy (GID) 0xF
i identyfikatora kodu operacji (OID) Androida 0xC
.
Powszechny format pakietu
Format pakietów NCI na Androidzie jest zgodny ze specyfikacją NCI dotyczącą 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 są 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.
Urządzenie 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 funkcji NCI_ANDROID_GET_CAPS_CMD
, host musi założyć, że każda z tych funkcji 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 danych | 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 funkcji | 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. Wszystkie pozostałe wartości są 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. Wszystkie pozostałe wartości są RFU. | |||||
Filtr pętli zapytania Auotransact | 0x03 | 1 oktet | Obsługa filtrów pętli zapytań w oprogramowaniu układowym umożliwiającej pominięcie trybu 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
, który wskazuje 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 danych | Rozmiar | Wartość/opis | |
---|---|---|---|
Tryb oszczędzania energii | 1 oktet | 0x00 | Wyłączanie trybu oszczędzania energii |
0x01 | Włączanie trybu oszczędzania energii |
NCI_ANDROID_POWER_SAVING_RSP
Pola danych | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Stan | 1 oktet | Zobacz 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 zaimplementować standardową aktywność w trybie słuchania zgodnie z 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 przechowywać w pamięci podręcznej informacje o ankietach, aby natychmiast aktywować urządzenie, gdy tylko tryb obserwacji zostanie wyłączony.
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 zapytań
NFCC musi wysłać powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
do hosta po każdym cyklu ankiety. Gdy generowane są powiadomienia RF_FIELD_INFO_NTF
i NCI_ANDROID_POLLING_FRAME_NTF
, NFCC musi wysłać powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
po powiadomieniu 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 żądań głosowania 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 | Sygnatura czasowa zmierzona w milisekundach od momentu otrzymania żądań sondowania (big endian). | |||||
Wzmocnienie | 1 oktet | Siła żądania sondowania.
0xFF oznacza, że wartość jest niedostępna. |
|||||
Dane | m – 5 oktetów | Zwraca dane umożliwiające identyfikację występujące w żądaniu sondowania. |
Typy ramek
Ramka sondowania | 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 ramki |
Definicja bajtu 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 danych | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Pola danych | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Zobacz kody stanu w tabeli 140 w specyfikacji NCI, | |
tryb obserwacji | 1 oktet | 0x00 | Tryb obserwacji jest wyłączony |
0x01 | Tryb obserwacji włączony |