Comandos NCI propietarios de Android

La interfaz del controlador NFC (NCI) se usa para interactuar con un controlador NFC (NFCC). En esta página, se describen las especificaciones de los comandos de NCI propietarios de Android.

Definiciones del NCI

Los comandos de NCI propietarios de Android usan el ID de grupo (GID) propietario 0xF y el espacio de código del identificador de opcode (OID) de Android 0xC.

Formato de paquete común

El formato de paquetes de la NCI de Android sigue la especificación de la NCI para los paquetes de control con los elementos 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 paquetes 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

En la siguiente tabla, se indican los identificadores de opcode de Android asignados. La especificación de cada paquete se incluye en las siguientes secciones.

OID de Android Tipo de mensaje Nombre del mensaje
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

El host usa NCI_ANDROID_GET_CAPS_CMD para consultar la lista de funciones exclusivas 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 capacidades y funciones compatibles.

Si el NFCC no admite NCI_ANDROID_GET_CAPS_CMD, el host debe suponer que cada capacidad toma el valor predeterminado especificado. Si el NFCC no devuelve una capacidad especificada en la respuesta, el host debe suponer que la capacidad 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 el NFCC.
0x0000 Android 15
Cantidad de funciones 1 octeto Cantidad (n) de capacidades admitidas
Capabilities[0..n] (m + 2) * n octetos Funciones compatibles
Tipo 1 octeto Es el identificador de la capacidad.
Len 1 octeto Longitud (m) del valor
Valor m octetos El valor de la capacidad
Capacidades exclusivas de Android
Nombre de la capacidad ID Tamaño Valor o descripción
Modo de observación 0x00 1 octeto Se agregó compatibilidad con el modo de observación.
0x00 (valor predeterminado): No admite esta función.
0x01: Admite la función con desactivación de RF desde el host (obligatorio para Android 15).
0x02: Admite la función sin desactivación de RF desde el host (obligatorio para Android 16 y versiones posteriores).
Todos los demás valores son RFU.
Notificación de fotograma de votación 0x01 1 octeto Se agregó compatibilidad con las notificaciones de marcos 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 Se agregó 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 Se agregó compatibilidad con los filtros de bucle de sondeo en el firmware para omitir el modo de observación en patrones específicos cuando el modo de observación está habilitado de forma global.
0x00 (predeterminado): No admite esta función
0x01: Admite filtros de bucle de sondeo
Todos los demás valores son RFU
Cantidad de entradas de fotogramas de salida admitidas 0x04 1 octeto Cantidad de entradas de fotogramas de salida admitidas. Se requiere un mínimo de cinco entradas de fotograma de salida.
Anotación del modo de lectura 0x05 1 octeto Se agregó compatibilidad con la anotación del modo de lectura.
0x00 (valor predeterminado): No admite esta función.
0x01: Admite esta función.
Todos los demás valores son RFU.
0x06 a 0xFF 0 octetos Reservado para uso futuro

Comando de ahorro de energía

Para que el NFCC pase al modo de ahorro de energía, el host puede usar el comando NCI_ANDROID_POWER_SAVING_CMD. El NFCC debe responder con NCI_ANDROID_POWER_SAVING_RSP y un código de estado que indique éxito o falla.

Mientras está en modo de ahorro de energía, el host no debe enviar ningún comando al NFCC, y el NFCC no debe enviar ninguna notificación ni respuesta al host. El NFCC o el elemento seguro integrado (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 máxima potencia, el host puede restablecer o reinicializar 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 Inhabilita el modo de ahorro de energía
0x01 Cómo 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 establecer el modo de observación

Para activar o desactivar el modo de observación, el organizador puede usar el comando NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD. El NFCC debe responder con NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP y un código de estado que indique éxito o falla.

Cuando el modo de observación está inhabilitado, el NFCC debe implementar la actividad del modo de escucha estándar según la Especificación Técnica de 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 el modo de escucha, hasta que el host lo autorice de forma explícita. El NFCC debe enviar la notificación RF_FIELD_INFO_NTF (según se define en la sección 5.3 de la especificación de NCI) cuando detecte la activación del campo. Si la detección del modo de sondeo está activa, el NFCC debe implementar la actividad del modo de sondeo según la Especificación Técnica de Actividad. El NFCC puede almacenar en caché la información de la sondeo para proceder 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 el usuario inicia el apagado) para que se puedan realizar las transacciones con SE.

NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD

Campos de carga útil Tamaño Valor o descripción
Modo de observación 1 octeto 0x00 Inhabilita el modo de observación (opción predeterminada)
0x01 Cómo habilitar 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 de bucle de sondeo

El NFCC debe enviar la notificación NCI_ANDROID_POLLING_FRAME_NTF al host después de cada fotograma del bucle de sondeo. Cuando se generan las notificaciones de RF_FIELD_INFO_NTF y NCI_ANDROID_POLLING_FRAME_NTF, el 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, el NFCC siempre debe enviar una notificación de 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
Polling Data[0..n] (m + 3) * n octetos Es la 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 los tipos de marcos.
Marcas 1 octeto Consulta byte de marcas.
Longitud 1 octeto Longitud (m) del informe de datos de sondeo, incluidos los campos de marca de tiempo y ganancia.
Marca de tiempo 4 octetos Es la marca de tiempo medida en milisegundos de la recepción de las solicitudes de sondeo, big endian.
Ganancia 1 octeto Es la intensidad de la solicitud de sondeo.
0xFF indica que el valor no está disponible.
Datos m - 5 octetos Devuelve los datos identificables presentes en la solicitud de sondeo.
Tipos de fotogramas
Marco de sondeo Tipo Tamaño Valor/Descripción
Campo remoto 0x00 1 octeto 0x00 Campo desactivado
0x01 Campo activado
0x02 a 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 de 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 de byte de marcas
Marcas
b0 b1 b2 b3 b4 b5 b6 b7
0 Soporte corto RFU RFU RFU RFU RFU RFU RFU
1 Marco largo

Comando de estado del modo de observación de la consulta

Para recuperar el estado actual del modo de pedido 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 y un código de estado que indique si la operación 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.
Máscara de tecnología 1 octeto Máscara de bits que indica para qué tecnologías está habilitado el modo de observación:
  • Bit 0: NFC-A
  • Bit 1: NFC-B
  • Bit 2: NFC-F
  • Bit 3: NFC-V

Comando para establecer tecnologías de observador pasivo

Para establecer tecnologías de observación pasiva, el host puede usar el comando NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD. Este comando habilita o inhabilita el modo de observación para las tecnologías especificadas sin necesidad de RF_DEACTIVATE_CMD. El NFCC debe responder con NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP y un código de estado que indique éxito o falla.

NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD

Campos de carga útil Tamaño Valor o descripción
Máscara de tecnología 1 octeto Máscara de bits que indica para qué tecnologías se debe habilitar el modo de observación:
  • Bit 0: NFC-A
  • Bit 1: NFC-B
  • Bit 2: NFC-F
  • Bit 3: NFC-V
Las tecnologías no configuradas en la máscara deben seguir funcionando en el modo de escucha.

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

Establece el comando de fotograma de salida del observador pasivo

Para configurar la tabla de fotogramas de salida del modo de observación, el host puede usar el comando NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD. Este comando especifica los fotogramas de RF que activan la salida del modo de observación. Este comando solo se puede enviar en RFST_IDLE. La NFCC debe responder con NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP y un código de estado que indique éxito o falla.

NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD

Campos de carga útil Tamaño Valor o descripción
Más 1 octeto 0x00: Último mensaje
0x01: Habrá más mensajes
Se agotó el tiempo de espera 2 octetos Es el tiempo de espera en ms para restablecer el modo de observación (little endian).
Cantidad de entradas de RF Frame 1 octeto Cantidad de campos de entrada de RF Frame que se deben seguir (n). 0x00 restablece la tabla.
Entrada de trama de RF [0..n] (2 + x) octetos
Qualifier-Type 1 octeto Define el tipo de fotograma y las opciones de coincidencia.
Longitud del valor 1 octeto Longitud "x" del campo Value.
Valor Octetos de X Estado de energía (1), datos de referencia (n), máscara (n). 1 <= n <= 16

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

Obtén el comando de fotograma de salida del observador pasivo

Para recuperar la configuración actual de la tabla de fotogramas de salida del modo de observación, el host puede usar el comando NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD. El NFCC debe responder con 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 carga útil Tamaño Valor o descripción
N/A 0 octetos

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

NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF

Campos de carga útil Tamaño Valor o descripción
Cantidad de entradas de fotogramas de salida del modo de observación 1 octeto Es la cantidad de campos de entrada de fotogramas de salida del modo de observación que se deben seguir (n).
Entrada [0..n] x + 2 octetos Qualifier-Type (1), Length (1), Value (x).

Comando de NCI en blanco

Para dejar en blanco la NCI, el host puede usar el comando NCI_ANDROID_BLANK_NCI_CMD. El NFCC debe responder con NCI_ANDROID_BLANK_NCI_RSP y un código de estado que indique si la operación se realizó correctamente o no.

NCI_ANDROID_BLANK_NCI_CMD

Campos de carga útil Tamaño Valor o descripción
Longitud del armazón 1 octeto Longitud de los datos del fotograma
Datos de fotogramas n octetos Datos de fotogramas

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

Establece el comando de anotación del bucle de sondeo

Para configurar la anotación de bucle de sondeo, el host puede usar el comando NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD para completar la tabla de fotogramas de sondeo personalizados. En esta tabla, se definen los marcos de RF personalizados que se insertarán dentro de un bucle de detección estándar. Este comando solo se puede enviar en RFST_IDLE. El NFCC debe responder con NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP y un código de estado que indique si la operación se realizó correctamente o no.

NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD

Campos de carga útil Tamaño Valor o descripción
Cantidad de entradas de fotogramas de RF 1 octeto Cantidad de entradas a seguir (n), entre 0 y 4. Si n=0, se inhabilita la función.
Entrada de fotograma de RF [1..n] De 2 a X octetos
Qualifier-Type 1 octeto Define el tipo de frame, la tecnología y la posición en el bucle de descubrimiento.
Longitud 1 octeto Longitud del valor (X).
Valor Octetos de X Tiempo de espera (1 byte) y trama de RF (1 a 16 bytes).

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

Consulta el comando de ahorro de energía

Para consultar el modo de ahorro de energía, el host puede usar el comando NCI_ANDROID_QUERY_POWER_SAVING_CMD. El NFCC debe responder con NCI_ANDROID_QUERY_POWER_SAVING_RSP y un código de estado que indique si la operación se realizó correctamente o no.

NCI_ANDROID_QUERY_POWER_SAVING_CMD

Campos de carga útil Tamaño Valor o descripción
N/A 0 octetos

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

Notificación de suspensión del observador pasivo

El NFCC debe enviar la notificación NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF al host cuando se detecta un fotograma de salida, lo que provoca que se suspenda el modo de observación.

NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF

Campos de carga útil Tamaño Valor o descripción
Tipo 1 octeto Tipo de fotograma: 0x00=Tipo A, 0x01=Tipo B
Longitud 1 octeto Longitud del valor (n)
Valor n octetos Se recibió un fotograma que coincidió con una entrada de fotograma de salida.

Notificación de reanudación del observador pasivo

El NFCC debe enviar la notificación NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF al host cuando se reanude el observador pasivo después de un tiempo de espera o de otras condiciones.

NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF

Campos de carga útil Tamaño Valor o descripción
N/A 0 octetos

Obtén el comando de anotación del bucle de sondeo

Para leer la tabla de tramas de sondeo personalizadas de la NFCC, el host puede usar el comando NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD. Este comando solo se puede enviar en RFST_IDLE. El NFCC debe responder con NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP con un código de estado que indique éxito o falla, y la información del marco de sondeo personalizado.

NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD

Campos de carga útil Tamaño Valor o descripción
N/A 0 octetos

NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_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.
Cantidad de entradas de fotogramas de RF 1 octeto Cantidad de entradas a seguir (n), entre 0 y 4. Si n=0, se inhabilita la función.
Entrada de fotograma de RF [1..n] De 2 a X octetos Qualifier-Type 1 octeto Define el tipo de frame, la tecnología y la posición en el bucle de descubrimiento.
Longitud 1 octeto Longitud del valor (X).
Valor Octetos de X Tiempo de espera (1 byte) y trama de RF (1 a 16 bytes).

Implementación

Para ver las implementaciones de referencia, consulta lo siguiente: