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 de NCI do Android segue a especificação do NCI para pacotes de controle
usando o Group_ID 0xF
e o Opcode_ID 0x0C
reservados. Para cada mensagem proprietária do Android, o primeiro byte do payload do pacote precisa ser definido como o código de operação 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 do pacote do Android é mostrado na tabela abaixo:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
reservado para uso futuro (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Os identificadores de código de operação do Android atribuídos 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 de recursos
O host usa NCI_ANDROID_GET_CAPS_CMD
para consultar a lista
de recursos reservados do Android com suporte da NFCC. O
comando NCI_ANDROID_GET_CAPS_CMD
não usa nenhum parâmetro.
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 recurso
especificado não for retornado pela NFCC na resposta, o host precisará presumir que
o recurso 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 NCI (link 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 capability | |||||
Len | 1 octeto | Comprimento (m) do valor | |||||
Valor | m octetos | O valor da capacidade |
Recursos exclusivos do Android
Nome do recurso | 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 | Compatibilidade com 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 compatível, 0x00 (padrão) se não for compatível. Todos os outros valores são RFU. | |||||
Filtro de loop de pesquisa "autotransact" | 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 pode enviar nenhum comando para o NFCC, e o NFCC não pode 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, a NFCC não pode responder a nenhuma solicitação de pesquisa durante o loop de pesquisa no modo de detecção até que seja explicitamente autorizado pelo host. A NFCC precisa enviar a notificação RF_FIELD_INFO_NTF
(conforme definido pela seção 5.3 da especificação NCI) quando detecta 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.
A NFCC pode armazenar as informações da enquete em cache para continuar 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 desligamento 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 (link 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 do loop de pesquisa. Quando as notificações RF_FIELD_INFO_NTF
e NCI_ANDROID_POLLING_FRAME_NTF
são geradas, a NFCC precisa enviar NCI_ANDROID_POLLING_FRAME_NTF
após RF_FIELD_INFO_NTF
.
A notificação NCI_ANDROID_POLLING_FRAME_NTF
é independente de
se o modo de observação está 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 | |||||
---|---|---|---|---|---|---|---|
Dados de pesquisa[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 | Tamanho (m) do relatório de dados de sondagem, incluindo os 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 sondagem.
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 da sinalização
Flags | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | B5 | b6 | b7 | |
0 | Frame curto | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Frame longo |
Consultar o comando de status do modo 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 observar | 1 octeto | 0x00 | Modo de observação desativado |
0x01 | Modo "Observar" ativado |