A interface do controlador NFC (NCI, na sigla em inglês) é usada para interagir com um controlador NFC (NFCC). Esta página descreve as especificações dos comandos NCI proprietários do Android.
Definições de NCI
Os comandos NCI proprietários do Android usam o ID do grupo proprietário (GID) 0xF
e o espaço de código do identificador de opcode (OID) do Android 0xC
.
Formato de pacote comum
O formato de pacote NCI do Android segue a especificação NCI para pacotes de controle
usando os Group_ID 0xF
e Opcode_ID 0x0C
proprietários. Para cada mensagem proprietária do Android, o primeiro byte da carga útil do pacote precisa ser definido como o opcode do Android (0x0C
). Os pacotes de controle do Android usam Message_Type
e PBF
para identificar comandos, respostas e notificações de maneira semelhante aos comandos padrão.
O formato de pacote do Android é mostrado na tabela a seguir:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
reservado para uso futuro (RFU, na sigla em inglês) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Os identificadores de opcode do Android atribuídos estão listados na tabela a seguir. A especificação de cada pacote está nas próximas seções.
Comando "get capabilities"
O host usa NCI_ANDROID_GET_CAPS_CMD
para consultar a lista de recursos
proprietários do Android compatíveis com o NFCC. O comando NCI_ANDROID_GET_CAPS_CMD
não usa parâmetros.
O NFCC precisa responder com a resposta NCI_ANDROID_GET_CAPS_RSP
com um status
de STATUS_OK
e a lista de recursos e funcionalidades compatíveis.
Se o NFCC não oferecer suporte a NCI_ANDROID_GET_CAPS_CMD
, o host precisará presumir que cada recurso usa o valor padrão especificado. Se uma capacidade especificada não for retornada pelo NFCC na resposta, o host vai presumir que ela tem o valor padrão especificado.
NCI_ANDROID_GET_CAPS_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_GET_CAPS_RSP
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da especificação da NCI (em inglês). | |||||
Android_Version
|
2 octetos | Identifica a versão dos requisitos do Android implementada pelo NFCC. | |||||
0x0000 | Android 15 | ||||||
Número de recursos | 1 octeto | Número (n) de recursos compatíveis | |||||
Capabilities[0..n] | (m + 2) * n octetos | Recursos compatíveis | |||||
Tipo | 1 octeto | O identificador do recurso | |||||
Len | 1 octeto | Comprimento (m) do valor | |||||
Valor | m octetos | O valor da capacidade |
Recursos proprietários do Android
Nome da capacidade | ID | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|---|
Modo de observação | 0x00 | 1 octeto | Suporte para o modo de observação.
0x00 (padrão): não é compatível com esse recurso. 0x01: oferece suporte ao recurso com desativação de RF do host (necessário para Android 15). 0x02: oferece suporte ao recurso sem desativação de RF do host (necessário para o Android 16 e versões mais recentes). Todos os outros valores são RFU. |
|||||
Notificação de quadro de pesquisa | 0x01 | 1 octeto | Suporte para notificações de frames de sondagem. 0x01 se compatível, 0x00 (padrão) se não for. Todos os outros valores são RFU. | |||||
Modo de economia de energia | 0x02 | 1 octeto | Compatibilidade com o modo de economia de energia. 0x01 se compatível, 0x00 (padrão) se não for. Todos os outros valores são RFU. | |||||
Filtro de loop de pesquisa do Auotransact. | 0x03 | 1 octeto | Suporte a filtros de loop de polling no firmware para ignorar o modo de observação em padrões específicos quando ele está ativado globalmente.
0x00 (padrão): não é compatível com esse recurso 0x01: compatível com filtros de loop de pesquisa Todos os outros valores são RFU |
|||||
Número de entradas de frame de saída aceitas | 0x04 | 1 octeto | Número de entradas de frame de saída compatíveis. É necessário ter pelo menos cinco entradas de frame de saída. | |||||
Anotação do modo leitor | 0x05 | 1 octeto | Suporte para anotação no modo de leitura.
0x00 (padrão): não é compatível com esse recurso. 0x01 - Tem suporte a esse recurso. Todos os outros valores são RFU. |
|||||
0x06..0xFF | 0 octetos | Reservado para uso futuro |
Comando de economia de energia
Para fazer a transição do NFCC para o modo de economia de energia, o host pode usar o comando NCI_ANDROID_POWER_SAVING_CMD
. O NFCC precisa responder com
NCI_ANDROID_POWER_SAVING_RSP
e um código de status indicando sucesso ou falha.
No modo de economia de energia, o host não pode enviar comandos ao NFCC, e o NFCC não pode enviar notificações ou respostas ao host. O NFCC ou elemento seguro incorporado (eSE) pode aceitar automaticamente solicitações de pagamento recebidas de acordo com a configuração de roteamento definida antes de ativar o modo de economia de energia.
Para voltar ao modo de energia total, o host pode redefinir ou reinicializar o NFCC.
NCI_ANDROID_POWER_SAVING_CMD
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Modo de economia de energia | 1 octeto | 0x00 | Desativar o modo de economia de energia |
0x01 | Ativar o modo de economia de energia |
NCI_ANDROID_POWER_SAVING_RSP
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação NCI. |
Definir comando do modo de observação
Para ativar ou desativar o modo de observação, o organizador pode usar o
comando NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
. O NFCC precisa responder com
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
e um código de status indicando sucesso ou
falha.
Quando o modo de observação está desativado, o NFCC precisa implementar a atividade padrão do modo de escuta, conforme a Especificação técnica de atividade.
Quando o modo de observação está ativo, o NFCC não pode responder a nenhuma solicitação de pesquisa
durante o loop de pesquisa no modo de escuta, até que seja explicitamente autorizado pelo host.
O NFCC precisa enviar a notificação RF_FIELD_INFO_NTF
(conforme definido na seção 5.3 da especificação
NCI)
quando detectar a ativação do campo. Se a descoberta do modo de pesquisa estiver ativa, o NFCC
precisará implementar a atividade do modo de pesquisa de acordo com a Especificação técnica de
atividade.
O NFCC pode armazenar em cache as informações da pesquisa para prosseguir imediatamente com a ativação do dispositivo assim que o modo de observação for desativado.
O NFCC desativa o modo de observação se o host for desligado por qualquer motivo (por exemplo, bateria descarregada ou desligamento iniciado pelo usuário) para que as transações SE possam continuar.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
modo de observação | 1 octeto | 0x00 | Desativar o modo de observação (padrão) |
0x01 | Ativar o modo de observação |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da especificação da NCI (em inglês). |
Notificação de loop de pesquisa
O NFCC precisa enviar a notificação NCI_ANDROID_POLLING_FRAME_NTF
ao host
após cada frame de loop de polling. Quando as notificações RF_FIELD_INFO_NTF
e NCI_ANDROID_POLLING_FRAME_NTF
são geradas, o NFCC precisa enviar NCI_ANDROID_POLLING_FRAME_NTF
depois de RF_FIELD_INFO_NTF
.
A notificação NCI_ANDROID_POLLING_FRAME_NTF
é independente de o modo de observação estar ativo ou não. Quando o modo de observação está ativo, o NFCC sempre precisa
enviar uma notificação NCI_ANDROID_POLLING_FRAME_NTF
antes de prosseguir com a
transação.
NCI_ANDROID_POLLING_FRAME_NTF
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m +3) * n octetos | Lista de solicitações de sondagem recebidas desde a última notificação. Cada resultado informa o tipo (tecnologia) das solicitações recebidas e os dados identificáveis da solicitação, dependendo da tecnologia. | |||||
Tipo | 1 octeto | Consulte tipos de frames. | |||||
Flags | 1 octeto | Consulte byte de flag. | |||||
Duração | 1 octeto | Comprimento (m) do relatório de dados de pesquisa, incluindo campos de carimbo de data/hora e ganho. | |||||
Carimbo de data/hora | 4 octetos | Carimbo de data/hora medido em milissegundos da recepção das solicitações de polling, big-endian. | |||||
Ganho | 1 octeto | Intensidade da solicitação de pesquisa.
0xFF indica que o valor não está disponível. |
|||||
Dados | m - 5 octetos | Retorna os dados identificáveis presentes na solicitação de pesquisa. |
Tipos de frames
Frame de sondagem | Tipo | Tamanho | Valor/descrição | |
---|---|---|---|---|
Campo remoto | 0x00 | 1 octeto | 0x00 | Campo desativado |
0x01 | Campo em | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n octetos | O valor precisa incluir um comando ISO 14443-3 (por exemplo, REQ ou WUP). | |
NFC-B | 0x02 | n octetos | O valor precisa incluir um byte AIF e um comando ISO 14443-3 (por exemplo, REQ ou WUP) | |
NFC-F | 0x03 | n octetos | O valor precisa incluir um comando ISO 14443-3 (por exemplo, REQ ou WUP). | |
NFC-V | 0x04 | n octetos | O valor precisa incluir um comando ISO 14443-3 (por exemplo, REQ ou WUP). | |
Desconhecido | 0x07 | n octetos | Dados brutos de frame |
Definição de byte de flag
Flags | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | Frame curto | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Frame longo |
Comando para consultar o status do modo de observação
Para recuperar o status atual do modo de pedido passivo, o host pode usar o
comando NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
. O NFCC precisa responder
com NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
e um código de status
indicando sucesso ou falha.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação NCI. | |
Máscara de tecnologia | 1 octeto | Máscara de bits que indica para quais tecnologias o modo de observação está ativado:
|
Definir comando de tecnologias de observador passivo
Para definir tecnologias de observador passivo, o host pode usar o comando
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
. Esse comando ativa ou
desativa o modo de observação para as tecnologias especificadas sem exigir
RF_DEACTIVATE_CMD
. O NFCC precisa responder com
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
e um código de status indicando
sucesso ou falha.
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Máscara de tecnologia | 1 octeto | Máscara de bits que indica para quais tecnologias ativar o modo de observação:
|
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da especificação da NCI (em inglês). |
Definir comando de frame de saída do observador passivo
Para configurar a tabela de frames de saída do modo de observação, o host pode usar o comando
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. Esse comando especifica frames de RF que acionam uma saída do modo de observação. Esse comando só pode ser enviado em RFST_IDLE
. O NFCC precisa responder com
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
e um código de status indicando
sucesso ou falha.
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Mais | 1 octeto | 0x00 - Última mensagem 0x01 - Mais mensagens a seguir |
|||||
Tempo limite | 2 octetos | Tempo limite em ms para restaurar o modo de observação (little endian). | |||||
Número de entradas de frame de RF | 1 octeto | Número de campos de entrada de frame de RF a serem seguidos (n). 0x00 redefine a tabela. | |||||
Entrada de frame de RF [0..n] | (2+x)*n octetos | ||||||
Qualifier-Type | 1 octeto | Define o tipo de frame e as opções de correspondência. | |||||
Comprimento do valor | 1 octeto | Comprimento "x" do campo "Valor". | |||||
Valor | x octetos | Estado de energia (1), dados de referência (n), máscara (n). 1 <= n <= 16. |
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação NCI. |
Receber comando de frame de saída do observador passivo
Para recuperar a configuração atual da tabela de frames de saída do modo de observação, o
host pode usar o comando NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. O
NFCC precisa responder com NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
,
seguido de NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
.
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação NCI. |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Número de entradas de frame de saída do modo de observação | 1 octeto | O número de campos de entrada de frame de saída do modo de observação a serem seguidos (n). | |
Entrada [0..n] | x+2 octetos | Qualifier-Type (1), Length (1), Value (x). |
Comando NCI em branco
Para limpar o NCI, o host pode usar o comando NCI_ANDROID_BLANK_NCI_CMD
. O NFCC
precisa responder com NCI_ANDROID_BLANK_NCI_RSP
e um código de status indicando
sucesso ou falha.
NCI_ANDROID_BLANK_NCI_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Comprimento da armação | 1 octeto | Duração dos dados de frame | |||||
Dados do frame | n octetos | Dados de frames |
NCI_ANDROID_BLANK_NCI_RSP
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação NCI. |
Definir comando de anotação de loop de pesquisa
Para definir a anotação de loop de polling, o host pode usar o
comando NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
para preencher a tabela de frames
de polling personalizada. Essa tabela define frames de RF personalizados para serem inseridos em um loop de descoberta padrão. Esse comando só pode ser enviado em RFST_IDLE
. O NFCC precisa responder com NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
e um código de status indicando sucesso ou falha.
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
Campos de payload | Tamanho | Valor/descrição | ||
---|---|---|---|---|
Número de entradas de frame de RF | 1 octeto | Número de entradas a seguir (n), entre 0 e 4. n=0 desativa o recurso. | ||
Entrada de frame RF [1..n] | 2+x octetos | |||
Qualifier-Type | 1 octeto | Define o tipo de frame, a tecnologia e a posição no loop de descoberta. | ||
Duração | 1 octeto | Comprimento do valor (x). | ||
Valor | x octetos | Tempo de espera (1 byte) e frame de RF (1 a 16 bytes). |
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação NCI. |
Consultar comando de economia de energia
Para consultar o modo de economia de energia, o host pode usar o comando
NCI_ANDROID_QUERY_POWER_SAVING_CMD
. O NFCC precisa responder com
NCI_ANDROID_QUERY_POWER_SAVING_RSP
e um código de status indicando sucesso ou
falha.
NCI_ANDROID_QUERY_POWER_SAVING_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_QUERY_POWER_SAVING_RSP
Campos de payload | Tamanho | Valor/descrição | |
---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação da NCI. |
Notificação de suspensão de observador passivo
O NFCC precisa enviar a notificação NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
ao host quando um frame de saída é detectado, suspendendo o modo de observação.
NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
Tipo | 1 octeto | Tipo de frame: 0x00=Tipo A, 0x01=Tipo B | |||||
Duração | 1 octeto | Comprimento do valor (n) | |||||
Valor | n octetos | Recebeu um frame que correspondia a uma entrada de frame de saída. |
Notificação de retomada do observador passivo
O NFCC precisa enviar a notificação NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
ao host quando o observador passivo for retomado após um tempo limite ou outras condições.
NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
Receber comando de anotação de loop de pesquisa
Para ler a tabela de frames de pesquisa personalizada do NFCC, o host pode usar o
comando NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
. Esse comando só pode ser
enviado em RFST_IDLE
. O NFCC precisa responder com
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
com um código de status indicando
sucesso ou falha e as informações personalizadas do frame de pesquisa.
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
Campos de payload | Tamanho | Valor/descrição | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
Campos de payload | Tamanho | Valor/descrição | ||
---|---|---|---|---|
Status | 1 octeto | Consulte os códigos de status na tabela 140 da Especificação da NCI. | ||
Número de entradas de frame de RF | 1 octeto | Número de entradas a seguir (n), entre 0 e 4. n=0 desativa o recurso. | ||
Entrada de frame RF [1..n] | 2+x octetos | Qualifier-Type | 1 octeto | Define o tipo de frame, a tecnologia e a posição no loop de descoberta. |
Duração | 1 octeto | Comprimento do valor (x). | ||
Valor | x octetos | Tempo de espera (1 byte) e frame de RF (1 a 16 bytes). |
Implementação
Para implementações de referência, consulte: