Comandos NCI exclusivos do Android

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.

OID do Android Tipo de mensagem Nome da mensagem
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
0x05 NCI_MT_CMD NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
NCI_MT_RSP NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
0x06 NCI_MT_CMD NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
NCI_MT_RSP NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
0x07 NCI_MT_CMD NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
NCI_MT_RSP NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
0x08 NCI_MT_CMD NCI_ANDROID_BLANK_NCI_CMD
NCI_MT_RSP NCI_ANDROID_BLANK_NCI_RSP
0x09 NCI_MT_CMD NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
NCI_MT_RSP NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
0x0A NCI_MT_CMD NCI_ANDROID_QUERY_POWER_SAVING_CMD
NCI_MT_RSP NCI_ANDROID_QUERY_POWER_SAVING_RSP
0x0B NCI_MT_NTF NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
0x0C NCI_MT_NTF NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
0x0D NCI_MT_CMD NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
NCI_MT_RSP NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP

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:
  • Bit 0: NFC-A
  • Bit 1: NFC-B
  • Bit 2: NFC-F
  • Bit 3: NFC-V

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:
  • Bit 0: NFC-A
  • Bit 1: NFC-B
  • Bit 2: NFC-F
  • Bit 3: NFC-V
As tecnologias não definidas na máscara precisam continuar operando no modo de escuta.

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: