La interfaz del controlador de NFC (NCI) se usa para interactuar con un controlador de NFC (NFCC). En esta página, se describen las especificaciones de los comandos NCI propietarios de Android.
Definiciones del NCI
Los comandos de NCI de propiedad de Android usan el ID de grupo propio (GID) 0xF
y el espacio de código del identificador de código de operación (OID) de Android de 0xC
.
Formato de paquete común
El formato de paquete NCI de Android sigue la especificación de NCI para paquetes de control con Group_ID 0xF
y Opcode_ID 0x0C
propietarios. Para cada mensaje propietario de Android, el primer byte de la carga útil del paquete debe establecerse en el código de operación de Android (0x0C
). Los paquetes de control de Android usan Message_Type
y PBF
para identificar comandos, respuestas y notificaciones de manera similar a los comandos estándar.
El formato de paquete de Android se muestra en la siguiente tabla:
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
|
|||||||
Los identificadores de opcodes de Android asignados se enumeran en la siguiente tabla. La especificación de cada paquete se incluye en las siguientes secciones.
OID de Android | Tipo de mensaje | Nombre del mensaje |
---|---|---|
0 × 00 | 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
El host usa NCI_ANDROID_GET_CAPS_CMD
para consultar la lista de funciones propietarias de Android compatibles con el NFCC. El comando NCI_ANDROID_GET_CAPS_CMD
no toma ningún parámetro.
El NFCC debe responder con la respuesta NCI_ANDROID_GET_CAPS_RSP
con un estado de STATUS_OK
y la lista de funciones y capacidades compatibles.
Si el NFCC no admite NCI_ANDROID_GET_CAPS_CMD
, el host debe asumir que cada capability toma el valor predeterminado especificado. Si el NFCC no muestra una función especificada en la respuesta, el host debe suponer que la función tiene el valor predeterminado especificado.
NCI_ANDROID_GET_CAPS_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_GET_CAPS_RSP
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. | |||||
Android_Version
|
2 octetos | Identifica la versión de los requisitos de Android que implementa la NFCC. | |||||
0x0000 | Android 15 | ||||||
Cantidad de capacidades | 1 octeto | Cantidad (n) de funciones compatibles | |||||
Capabilities[0..n] | (m + 2) × n octetos | Funciones compatibles | |||||
Tipo | 1 octeto | Es el identificador de la capability. | |||||
Len | 1 octeto | Es la longitud (m) del valor. | |||||
Valor | m de octetos | El valor de la capability |
Funciones propias de Android
Nombre de la capability | ID | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|---|
Modo de observación | 0x00 | 1 octeto | Compatibilidad con el modo de observación
0x00 (predeterminado): No admite esta función. 0x01: Admite la función con desactivación de RF desde el host (obligatorio para Android 15 o versiones posteriores). Todos los demás valores son RFU. |
|||||
Notificación de marco de sondeo | 0 × 01 | 1 octeto | Compatibilidad con las notificaciones de marco de sondeo 0x01 si se admite, 0x00 (predeterminado) si no se admite. Todos los demás valores son RFU. | |||||
Modo de ahorro de energía | 0x02 | 1 octeto | Compatibilidad con el modo de ahorro de energía 0x01 si se admite, 0x00 (predeterminado) si no se admite. Todos los demás valores son RFU. | |||||
Filtro de bucle de sondeo de Autotransact | 0x03 | 1 octeto | Compatibilidad con filtros de bucle de sondeo en el firmware para omitir el modo de observación para patrones específicos cuando el modo de observación está habilitado globalmente
0x00 (predeterminado): No admite esta función. 0x01: Admite filtros de bucle de sondeo. Todos los demás valores son RFU. |
|||||
0x04...0xFF | 0 octetos | Reservado para uso futuro |
Comando de ahorro de energía
Para migrar el NFCC al modo de ahorro de energía, el host puede usar el comando NCI_ANDROID_POWER_SAVING_CMD
. La NFCC debe responder con NCI_ANDROID_POWER_SAVING_RSP
con un código de estado que indique el éxito o el fracaso de la operación.
Mientras se encuentra en el modo de ahorro de energía, el host no debe enviar ningún comando a la NFCC y la NFCC no debe enviar ninguna notificación ni respuesta al host. El NFCC o el elemento seguro incorporado (eSE) pueden aceptar automáticamente las solicitudes de pago entrantes según la configuración de enrutamiento establecida antes de habilitar el modo de ahorro de energía.
Para volver al modo de alimentación completa, el host puede restablecer o reiniciar el NFCC.
NCI_ANDROID_POWER_SAVING_CMD
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Modo de ahorro de energía | 1 octeto | 0x00 | Cómo inhabilitar el modo de ahorro de energía |
0x01 | Habilitar el modo de ahorro de energía |
NCI_ANDROID_POWER_SAVING_RSP
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Comando para configurar el modo de observación
Para activar o desactivar el modo de observación, el host puede usar el comando NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
. La NFCC debe responder con NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
con un código de estado que indique el éxito o el fracaso.
Cuando el modo de observación está inhabilitado, el NFCC debe implementar la actividad del modo de escucha estándar según las Especificaciones técnicas de la actividad.
Cuando el modo de observación está activo, el NFCC no debe responder a ninguna solicitud de sondeo durante el bucle de sondeo en modo de escucha, hasta que el host lo autorice de forma explícita. El NFCC debe enviar la notificación RF_FIELD_INFO_NTF
(como se define en el artículo 5.3 de la especificación de NCI) cuando detecta la activación del campo. Si el descubrimiento del modo de sondeo está activo, la NFCC debe implementar la actividad del modo de sondeo de acuerdo con la Especificación técnica de la actividad.
El NFCC puede almacenar en caché la información de sondeo para continuar de inmediato con la activación del dispositivo en cuanto se desactiva el modo de observación.
El NFCC debe desactivar el modo de observación si el host se apaga por algún motivo (por ejemplo, si se agota la batería o si el usuario inicia el apagado) para que las transacciones de SE puedan continuar.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Campos de carga útil | Tamaño | Valor/descripción | |
---|---|---|---|
modo de observación | 1 octeto | 0x00 | Inhabilitar el modo de observación (predeterminado) |
0x01 | Habilita el modo de observación |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Notificación del bucle de sondeo
El NFCC debe enviar la notificación NCI_ANDROID_POLLING_FRAME_NTF
al host después de cada trama del bucle de sondeo. Cuando se generan las notificaciones RF_FIELD_INFO_NTF
y NCI_ANDROID_POLLING_FRAME_NTF
, la NFCC debe enviar NCI_ANDROID_POLLING_FRAME_NTF
después de RF_FIELD_INFO_NTF
.
La notificación NCI_ANDROID_POLLING_FRAME_NTF
es independiente de si el modo de observación está activo o no. Cuando el modo de observación está activo, la NFCC siempre debe enviar una notificación NCI_ANDROID_POLLING_FRAME_NTF
antes de continuar con la transacción.
NCI_ANDROID_POLLING_FRAME_NTF
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Datos de encuestas[0..n] | (m +3) × n octetos | Lista de solicitudes de sondeo recibidas desde la última notificación. Cada resultado proporciona el tipo (tecnología) de las solicitudes recibidas y los datos identificables de la solicitud según la tecnología. | |||||
Tipo | 1 octeto | Consulta tipos de trama. | |||||
Marcas | 1 octeto | Consulta byte de marca. | |||||
Duración | 1 octeto | Es la longitud (m) del informe de datos de sondeo, incluidos los campos de marca de tiempo y ganancia. | |||||
Marca de tiempo | 4 octetos | Marca de tiempo medida en milisegundos de la recepción de las solicitudes de sondeo, formato big endian. | |||||
Ganancia | 1 octeto | La calidad de la solicitud de sondeo.
0xFF indica que el valor no está disponible. |
|||||
Datos | m - 5 octetos | Muestra los datos identificables presentes en la solicitud de sondeo. |
Tipos de marcos
Marco de sondeo | Tipo | Tamaño | Valor/Descripción | |
---|---|---|---|---|
Campo remoto | 0x00 | 1 octeto | 0x00 | Campo desactivado |
0x01 | Campo activado | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n octetos | El valor debe incluir un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
NFC-B | 0x02 | n octetos | El valor debe incluir un byte AIF y un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
NFC-F | 0x03 | n octetos | El valor debe incluir un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
NFC-V | 0x04 | n octetos | El valor debe incluir un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
Desconocido | 0x07 | n octetos | Datos de fotogramas sin procesar |
Definición del byte de marca
Marcas | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | B1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | Marco corto | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Marco largo |
Comando para consultar el estado del modo de observación
Para recuperar el estado actual del modo de orden pasivo, el host puede usar el comando NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
. El NFCC debe responder con NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
con un código de estado que indique si se realizó correctamente o no.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la especificación de NCI. | |
modo de observación | 1 octeto | 0x00 | Se inhabilitó el modo de observación |
0x01 | Se habilitó el modo de observación |