L'interfaccia del controller NFC (NCI) viene utilizzata per interagire con un controller NFC (NFCC). Questa pagina descrive le specifiche dei comandi NCI proprietari di Android.
Definizioni di NCI
I comandi NCI proprietari di Android utilizzano l'ID gruppo (GID) proprietario 0xF
e lo spazio di codice dell'identificatore opcode (OID) di Android 0xC
.
Formato pacchetto comune
Il formato del pacchetto NCI Android segue la specifica NCI per i pacchetti di controllo
utilizzando Group_ID 0xF
e Opcode_ID 0x0C
proprietari. Per ogni messaggio proprietario di Android, il primo byte del payload del pacchetto deve essere impostato sul codice operativo Android (0x0C
). I pacchetti di controllo Android utilizzano Message_Type
e PBF
per identificare comandi, risposte e notifiche in modo simile ai comandi standard.
Il formato del pacchetto Android è mostrato nella tabella seguente:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
riservato per l'uso futuro (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Gli identificatori di opcode Android assegnati sono elencati nella tabella seguente. La specifica per ogni pacchetto è riportata nelle sezioni successive.
Comando get capabilities
L'host utilizza NCI_ANDROID_GET_CAPS_CMD
per eseguire query sull'elenco delle funzionalità proprietarie di Android supportate da NFCC. Il comando NCI_ANDROID_GET_CAPS_CMD
non accetta parametri.
L'NFCC deve rispondere con la risposta NCI_ANDROID_GET_CAPS_RSP
con uno stato
di STATUS_OK
e l'elenco delle funzionalità supportate.
Se l'NFCC non supporta NCI_ANDROID_GET_CAPS_CMD
, l'host deve presumere
che ogni funzionalità assuma il valore predefinito specificato. Se una funzionalità specificata non viene restituita dal NFCC nella risposta, l'host deve presupporre che la funzionalità abbia il valore predefinito specificato.
NCI_ANDROID_GET_CAPS_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
N/D | 0 ottetti |
NCI_ANDROID_GET_CAPS_RSP
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 della specifica NCI. | |||||
Android_Version
|
2 ottetti | Identifica la versione dei requisiti Android implementata dal NFCC. | |||||
0x0000 | Android 15 | ||||||
Numero di funzionalità | 1 ottetto | Numero (n) di funzionalità supportate | |||||
Capabilities[0..n] | (m + 2) * n ottetti | Funzionalità supportate | |||||
Tipo | 1 ottetto | L'identificatore della funzionalità | |||||
Len | 1 ottetto | Lunghezza (m) del valore | |||||
Valore | m ottetti | Il valore della funzionalità |
Funzionalità proprietarie di Android
Nome della funzionalità | ID | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|---|
Modalità Osserva | 0x00 | 1 ottetto | Supporto della modalità di osservazione.
0x00 (predefinito) - Non supporta questa funzionalità. 0x01 - Supporta la funzionalità con disattivazione RF dall'host (richiesta per Android 15). 0x02 - Supporta la funzionalità senza disattivazione RF dall'host (richiesta per Android 16 e versioni successive). Tutti gli altri valori sono RFU. |
|||||
Notifica del frame di sondaggio | 0x01 | 1 ottetto | Supporto per le notifiche del frame di polling. 0x01 se supportato, 0x00 (valore predefinito) se non supportato. Tutti gli altri valori sono RFU. | |||||
Modalità di risparmio energetico | 0x02 | 1 ottetto | Supporto della modalità di risparmio energetico. 0x01 se supportato, 0x00 (valore predefinito) se non supportato. Tutti gli altri valori sono RFU. | |||||
Filtro del ciclo di polling di AutoTransact | 0x03 | 1 ottetto | Supporto dei filtri del ciclo di polling nel firmware per ignorare la modalità di osservazione per pattern specifici quando la modalità di osservazione è attivata a livello globale.
0x00 (predefinito) - Non supporta questa funzionalità 0x01 - Supporta i filtri del ciclo di polling Tutti gli altri valori sono RFU |
|||||
Numero di voci del frame di uscita supportate | 0x04 | 1 ottetto | Numero di voci del frame di uscita supportate. Sono necessarie almeno cinque voci del frame di uscita. | |||||
Annotazione della modalità Lettura | 0x05 | 1 ottetto | Supporto delle annotazioni in modalità Reader.
0x00 (impostazione predefinita) - Non supporta questa funzionalità. 0x01 - Supporta questa funzionalità. Tutti gli altri valori sono RFU. |
|||||
0x06..0xFF | 0 ottetti | Riservato per l'uso futuro |
Comando di risparmio energetico
Per passare alla modalità di risparmio energetico, l'host può utilizzare il comando
NCI_ANDROID_POWER_SAVING_CMD
. L'NFCC deve rispondere con
NCI_ANDROID_POWER_SAVING_RSP
con un codice di stato che indica l'esito positivo o negativo.
In modalità di risparmio energetico, l'host non deve inviare alcun comando al NFCC e l'NFCC non deve inviare alcuna notifica o risposta all'host. L'NFCC o l'elemento sicuro incorporato (eSE) può accettare automaticamente le richieste di pagamento in entrata in base alla configurazione di routing impostata prima di attivare la modalità di risparmio energetico.
Per tornare alla modalità di piena potenza, l'host può reimpostare o reinizializzare l'NFCC.
NCI_ANDROID_POWER_SAVING_CMD
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Modalità di risparmio energetico | 1 ottetto | 0x00 | Disattivare la modalità di risparmio energetico |
0x01 | Attivare la modalità di risparmio energetico |
NCI_ANDROID_POWER_SAVING_RSP
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 delle specifiche NCI. |
Impostare il comando della modalità di osservazione
Per attivare o disattivare la modalità Osserva, l'organizzatore può utilizzare il
comando NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
. L'NFCC deve rispondere con
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
con un codice di stato che indica l'esito positivo o
negativo.
Quando la modalità di osservazione è disattivata, l'NFCC deve implementare l'attività della modalità di ascolto standard come da specifiche tecniche dell'attività.
Quando la modalità di osservazione è attiva, l'NFCC non deve rispondere a nessuna richiesta di sondaggio
durante il ciclo di polling in modalità di ascolto, finché non è esplicitamente autorizzato dall'organizzatore.
L'NFCC deve inviare la notifica RF_FIELD_INFO_NTF
(come definita nella sezione
5.3 della specifica
NCI)
quando rileva l'attivazione del campo. Se il rilevamento della modalità di polling è attivo, l'NFCC
deve implementare l'attività della modalità di polling in base alle specifiche tecniche
dell'attività.
L'NFCC può memorizzare nella cache le informazioni del sondaggio per procedere immediatamente con l'attivazione del dispositivo non appena la modalità di osservazione viene disattivata.
L'NFCC deve disattivare la modalità di osservazione se l'host si spegne per qualsiasi motivo (ad esempio, batteria scarica o spegnimento avviato dall'utente) in modo che le transazioni SE possano procedere.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
modalità di osservazione | 1 ottetto | 0x00 | Disattivare la modalità di osservazione (impostazione predefinita) |
0x01 | Attivare la modalità di osservazione |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 della specifica NCI. |
Notifica del ciclo di polling
L'NFCC deve inviare la notifica NCI_ANDROID_POLLING_FRAME_NTF
all'host
dopo ogni frame del ciclo di polling. Quando vengono generate le notifiche RF_FIELD_INFO_NTF
e
NCI_ANDROID_POLLING_FRAME_NTF
, il NFCC deve inviare
NCI_ANDROID_POLLING_FRAME_NTF
dopo RF_FIELD_INFO_NTF
.
La notifica NCI_ANDROID_POLLING_FRAME_NTF
è indipendente dall'attivazione o meno della modalità di osservazione. Quando la modalità di osservazione è attiva, l'NFCC deve sempre
inviare una notifica NCI_ANDROID_POLLING_FRAME_NTF
prima di procedere con la
transazione.
NCI_ANDROID_POLLING_FRAME_NTF
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m +3) * n ottetti | Elenco delle richieste di polling ricevute dall'ultima notifica. Ogni risultato indica il tipo (tecnologia) delle richieste ricevute e i dati identificabili della richiesta a seconda della tecnologia. | |||||
Tipo | 1 ottetto | Vedi i tipi di frame. | |||||
Bandiere | 1 ottetto | Vedi byte di flag. | |||||
Lunghezza | 1 ottetto | Lunghezza (m) del report sui dati di polling, inclusi i campi timestamp e guadagno. | |||||
Timestamp | 4 ottetti | Timestamp misurato in millisecondi della ricezione delle richieste di polling, big endian. | |||||
Guadagno | 1 ottetto | Intensità della richiesta di polling.
0xFF indica che il valore non è disponibile. |
|||||
Dati | m - 5 ottetti | Restituisce i dati identificabili presenti nella richiesta di polling. |
Tipi di fotogrammi
Polling frame | Tipo | Dimensioni | Valore/Descrizione | |
---|---|---|---|---|
Campo remoto | 0x00 | 1 ottetto | 0x00 | Campo disattivato |
0x01 | Campo attivo | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n ottetti | Il valore deve includere un comando ISO 14443-3 (ad esempio REQ o WUP) | |
NFC-B | 0x02 | n ottetti | Il valore deve includere un byte AIF e un comando ISO 14443-3 (ad esempio, REQ o WUP) | |
NFC-F | 0x03 | n ottetti | Il valore deve includere un comando ISO 14443-3 (ad esempio REQ o WUP) | |
NFC-V | 0x04 | n ottetti | Il valore deve includere un comando ISO 14443-3 (ad esempio REQ o WUP) | |
Sconosciuto | 0x07 | n ottetti | Dati dei frame non elaborati |
Definizione del byte di flag
Bandiere | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | Frame breve | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Frame lungo |
Query observe mode status command
Per recuperare lo stato attuale della modalità di ordine passivo, l'host può utilizzare il comando
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
. L'NFCC deve rispondere
con NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
con un codice di stato
che indica l'esito positivo o negativo.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
N/D | 0 ottetti |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 delle specifiche NCI. | |
Maschera tecnologica | 1 ottetto | Maschera di bit che indica per quali tecnologie è attivata la modalità di osservazione:
|
Impostare il comando per le tecnologie di osservazione passiva
Per impostare le tecnologie di osservazione passiva, l'host può utilizzare il comando NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
. Questo comando attiva o disattiva la modalità di osservazione per le tecnologie specificate senza richiedere RF_DEACTIVATE_CMD
. L'NFCC deve rispondere con
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
con un codice di stato che indica
l'esito positivo o negativo.
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Maschera tecnologica | 1 ottetto | Maschera di bit che indica per quali tecnologie attivare la modalità di osservazione:
|
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 della specifica NCI. |
Impostare il comando del frame di uscita dell'osservatore passivo
Per configurare la tabella dei frame di uscita della modalità Osserva, l'organizzatore può utilizzare il comando
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. Questo comando
specifica i frame RF che attivano l'uscita dalla modalità di osservazione. Questo comando può
essere inviato solo in RFST_IDLE
. L'NFCC deve rispondere con
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
con un codice di stato che indica
l'esito positivo o negativo.
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Altro | 1 ottetto | 0x00 - Last message 0x01 - More messages to follow |
|||||
Timeout | 2 ottetti | Timeout in ms per ripristinare la modalità di osservazione (little endian). | |||||
Numero di voci RF Frame | 1 ottetto | Numero di campi di immissione del frame RF da seguire (n). 0x00 reimposta la tabella. | |||||
RF Frame entry [0..n] | (2+x)*n ottetti | ||||||
Qualifier-Type | 1 ottetto | Definisce il tipo di frame e le opzioni di corrispondenza. | |||||
Lunghezza del valore | 1 ottetto | Lunghezza "x" del campo Valore. | |||||
Valore | x ottetti | Stato di alimentazione (1), Dati di riferimento (n), Maschera (n). 1 <= n <= 16. |
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 delle specifiche NCI. |
Ottieni il comando del frame di uscita dell'osservatore passivo
Per recuperare la configurazione attuale della tabella del frame di uscita della modalità Osserva, l'host può utilizzare il comando NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. La
NFCC deve rispondere con NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
,
seguito da NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
.
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
N/D | 0 ottetti |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 delle specifiche NCI. |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Numero di voci di frame di uscita dalla modalità Osserva | 1 ottetto | Il numero di campi di inserimento del frame di uscita dalla modalità di osservazione da seguire (n). | |
Voce [0..n] | x+2 octets | Tipo di qualificatore (1), Lunghezza (1), Valore (x). |
Comando NCI vuoto
Per cancellare NCI, l'host può utilizzare il comando NCI_ANDROID_BLANK_NCI_CMD
. L'NFCC
deve rispondere con NCI_ANDROID_BLANK_NCI_RSP
con un codice di stato che indica
l'esito positivo o negativo.
NCI_ANDROID_BLANK_NCI_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Lunghezza della struttura | 1 ottetto | Lunghezza dei dati del frame | |||||
Dati del frame | n ottetti | Dati del frame |
NCI_ANDROID_BLANK_NCI_RSP
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 delle specifiche NCI. |
Impostare il comando di annotazione del ciclo di polling
Per impostare l'annotazione del ciclo di polling, l'organizzatore può utilizzare il
comando NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
per compilare la tabella dei frame
di polling personalizzati. Questa tabella definisce i frame RF personalizzati da inserire all'interno di un
ciclo di rilevamento standard. Questo comando può essere inviato solo in RFST_IDLE
. L'NFCC
deve rispondere con NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
con un codice di stato
che indica l'esito positivo o negativo.
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
Campi del payload | Dimensioni | Valore/descrizione | ||
---|---|---|---|---|
Numero di voci di frame RF | 1 ottetto | Numero di voci da seguire (n), compreso tra 0 e 4. n=0 disattiva la funzionalità. | ||
RF frame entry [1..n] | 2 + x ottetti | |||
Qualifier-Type | 1 ottetto | Definisce il tipo di frame, la tecnologia e la posizione nel ciclo di scoperta. | ||
Lunghezza | 1 ottetto | Lunghezza del valore (x). | ||
Valore | x ottetti | Tempo di attesa (1 byte) e frame RF (1-16 byte). |
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 delle specifiche NCI. |
Query sul comando di risparmio energetico
Per eseguire query sulla modalità di risparmio energetico, l'host può utilizzare il
comando NCI_ANDROID_QUERY_POWER_SAVING_CMD
. L'NFCC deve rispondere con
NCI_ANDROID_QUERY_POWER_SAVING_RSP
con un codice di stato che indica l'esito positivo
o negativo.
NCI_ANDROID_QUERY_POWER_SAVING_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
N/D | 0 ottetti |
NCI_ANDROID_QUERY_POWER_SAVING_RSP
Campi del payload | Dimensioni | Valore/descrizione | |
---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 della specifica NCI. |
Notifica di sospensione dell'osservatore passivo
L'NFCC deve inviare la notifica NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
all'host quando viene rilevato un frame di uscita, causando la sospensione
della modalità di osservazione.
NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
Tipo | 1 ottetto | Tipo di fotogramma: 0x00=Tipo A, 0x01=Tipo B | |||||
Lunghezza | 1 ottetto | Lunghezza del valore (n) | |||||
Valore | n ottetti | Ricevuto frame corrispondente a una voce di frame di uscita. |
Notifica di ripresa dell'osservatore passivo
L'NFCC deve inviare la notifica NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
all'host quando l'osservatore passivo viene ripristinato dopo un timeout o altre
condizioni.
NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
N/D | 0 ottetti |
Ottieni il comando di annotazione del ciclo di polling
Per leggere la tabella del frame di polling personalizzato dell'NFCC, l'host può utilizzare il
comando NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
. Questo comando può essere inviato
solo in RFST_IDLE
. L'NFCC deve rispondere con
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
con un codice di stato che indica
l'esito positivo o negativo e le informazioni sul frame di polling personalizzato.
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
Campi del payload | Dimensioni | Valore/descrizione | |||||
---|---|---|---|---|---|---|---|
N/D | 0 ottetti |
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
Campi del payload | Dimensioni | Valore/descrizione | ||
---|---|---|---|---|
Stato | 1 ottetto | Consulta i codici di stato nella tabella 140 della specifica NCI. | ||
Numero di voci di frame RF | 1 ottetto | Numero di voci da seguire (n), compreso tra 0 e 4. n=0 disattiva la funzionalità. | ||
RF frame entry [1..n] | 2 + x ottetti | Qualifier-Type | 1 ottetto | Definisce il tipo di frame, la tecnologia e la posizione nel ciclo di scoperta. |
Lunghezza | 1 ottetto | Lunghezza del valore (x). | ||
Valore | x ottetti | Tempo di attesa (1 byte) e frame RF (1-16 byte). |
Implementazione
Per le implementazioni di riferimento, consulta quanto segue: