Comandos NCI exclusivos do Android

A interface do controlador NFC (NCI) é 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 reservados do Android usam o ID de grupo reservado (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 Group_ID 0xF e Opcode_ID 0x0C proprietários. Para cada mensagem proprietary do Android, o primeiro byte do payload 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 opcodes atribuídos do Android estão listados na tabela a seguir. A especificação de cada pacote é apresentada 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

Comando "get capabilities"

O host usa NCI_ANDROID_GET_CAPS_CMD para consultar a lista de recursos proprietários do Android com suporte ao NFCC. O comando NCI_ANDROID_GET_CAPS_CMD não aceita 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 recursos compatíveis.

Se o NFCC não tiver suporte para NCI_ANDROID_GET_CAPS_CMD, o host precisará assumir que os recursos terão o valor padrão especificado. Se um capability especificado não for retornado pelo NFCC na resposta, o host terá que presumir que o capability tem o valor especificado padrão.

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 NCI.
Android_Version 2 octetos Identifica a versão dos requisitos do Android que é 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 com suporte
Tipo 1 octeto O identificador do capability
Len 1 octeto Comprimento (m) do valor
Valor m octetos O valor da capability
Recursos exclusivos 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 oferece suporte a esse recurso.
0x01: oferece suporte ao recurso com desativação de RF do host (obrigatório para o Android 15 ou versões mais recentes).
Todos os outros valores são RFU.
Notificação de frame de pesquisa 0x01 1 octeto Suporte para notificações de frame de pesquisa. 0x01, se houver suporte; 0x00 (padrão), se não houver. Todos os outros valores são RFU.
Modo de economia de energia 0x02 1 octeto Suporte para o modo de economia de energia. 0x01, se houver suporte; 0x00 (padrão), se não houver. Todos os outros valores são RFU.
Filtro de loop de pesquisa de autotransação 0x03 1 octeto Suporte a filtros de loop de pesquisa no firmware para ignorar o modo de observação de padrões específicos quando o modo de observação está ativado globalmente.
0x00 (padrão): não oferece suporte a esse recurso
0x01: oferece suporte a filtros de loop de pesquisa
Todos os outros valores são RFU
0x04..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 com um código de status que indique sucesso ou falha.

Enquanto estiver no modo de economia de energia, o host não poderá enviar nenhum comando para o NFCC, e o NFCC não poderá enviar nenhuma notificação ou resposta para o host. O NFCC ou o elemento de segurança integrado (eSE, na sigla em inglês) pode aceitar automaticamente as solicitações de pagamento recebidas de acordo com a configuração de roteamento definida antes de ativar o modo de economia de energia.

Para retornar 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 host pode usar o comando NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD. O NFCC precisa responder com NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP com 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 de acordo com a especificação técnica da 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 autorizado explicitamente pelo host. O NFCC precisa enviar a notificação RF_FIELD_INFO_NTF (conforme definido na seção 5.3 da especificação do NCI) quando detectar a ativação do campo. Se a descoberta do modo de pesquisa estiver ativa, o NFCC precisa implementar a atividade do modo de pesquisa de acordo com a especificação técnica da 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 precisa desativar o modo de observação se o host for encerrado por qualquer motivo (por exemplo, por falta de bateria ou por encerramento iniciado pelo usuário) para que as transações SE possam prosseguir.

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 NCI.

Notificação de loop de pesquisa

O NFCC precisa enviar a notificação NCI_ANDROID_POLLING_FRAME_NTF ao host após cada frame do loop de pesquisa. 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 após 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 precisa sempre 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 pesquisa recebidas desde a última notificação. Cada resultado mostra o tipo (tecnologia) das solicitações recebidas e os dados identificáveis da solicitação, dependendo da tecnologia.
Tipo 1 octeto Consulte tipos de frame.
Flags 1 octeto Consulte flag byte.
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 pesquisa, big endian.
Ganho 1 octeto Força 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 pesquisa 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 do frame
Definição de byte de sinalização
Flags
b0 b1 b2 b3 b4 b5 b6 b7
0 Frame curto RFU RFU RFU RFU RFU RFU RFU
1 Frame longo

Comando de consulta do status do modo de observação

Para recuperar o status atual do modo de ordem passiva, 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 com 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.
modo de observação 1 octeto 0x00 Modo de observação desativado
0x01 Modo de observação ativado