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: