L'interface de contrôleur NFC (NCI) permet d'interagir avec un contrôleur NFC (NFCC). Cette page décrit les spécifications des commandes NCI propriétaires d'Android.
Définitions NCI
Les commandes NCI propriétaires d'Android utilisent l'ID de groupe (GID) propriétaire 0xF
et l'espace de code de l'OID (opcode identifier) Android de 0xC
.
Format de paquet courant
Le format de paquet NCI Android suit la spécification NCI pour les paquets de contrôle à l'aide des Group_ID 0xF
et Opcode_ID 0x0C
propriétaires. Pour chaque message propriétaire Android, le premier octet de la charge utile du paquet doit être défini sur l'opcode Android (0x0C
). Les paquets de contrôle Android utilisent Message_Type
et PBF
pour identifier les commandes, les réponses et les notifications de la même manière que les commandes standards.
Le format de paquet Android est présenté dans le tableau suivant:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
réservé pour une utilisation ultérieure (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Les identifiants d'opcode Android attribués sont indiqués dans le tableau suivant. La spécification de chaque paquet est présentée dans les sections suivantes.
OID Android | Type de message | Nom du message |
---|---|---|
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 |
Commande "Get capabilities" (Obtenir les fonctionnalités)
L'hôte utilise NCI_ANDROID_GET_CAPS_CMD
pour interroger la liste des fonctionnalités propriétaires Android compatibles avec le NFCC. La commande NCI_ANDROID_GET_CAPS_CMD
n'accepte aucun paramètre.
Le NFCC doit répondre avec la réponse NCI_ANDROID_GET_CAPS_RSP
avec un état STATUS_OK
et la liste des fonctionnalités et fonctionnalités compatibles.
Si le NFCC n'est pas compatible avec NCI_ANDROID_GET_CAPS_CMD
, l'hôte doit supposer que les fonctionnalités prennent chacune la valeur par défaut spécifiée. Si une capacité spécifiée n'est pas renvoyée par le NFCC dans la réponse, l'hôte doit supposer que la capacité a la valeur spécifiée par défaut.
NCI_ANDROID_GET_CAPS_CMD
Champs de charge utile | Taille | Valeur/description | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octets |
NCI_ANDROID_GET_CAPS_RSP
Champs de charge utile | Taille | Valeur/description | |||||
---|---|---|---|---|---|---|---|
État | 1 octet | Reportez-vous aux codes d'état dans le tableau 140 de la spécification NCI. | |||||
Android_Version
|
2 octets | Identifie la version des exigences Android qui est mise en œuvre par le NFCC. | |||||
0x0000 | Android 15 | ||||||
Nombre de fonctionnalités | 1 octet | Nombre (n) de fonctionnalités compatibles | |||||
Capabilities[0..n] | (m + 2) * n octets | Fonctionnalités proposées | |||||
Type | 1 octet | Identifiant de la capacité | |||||
Len | 1 octet | Longueur (m) de la valeur | |||||
Valeur | m octets | Valeur de la capacité |
Fonctionnalités propriétaires Android
Nom de la capacité | ID | Taille | Valeur/description | |||||
---|---|---|---|---|---|---|---|---|
Mode observation | 0x00 | 1 octet | Prise en charge du mode Observation.
0x00 (par défaut) : cette fonctionnalité n'est pas compatible. 0x01 : compatible avec la fonctionnalité de désactivation de la RF à partir de l'hôte (requis pour Android 15 ou version ultérieure). Toutes les autres valeurs sont RFU. |
|||||
Notification de frame de sondage | 0x01 | 1 octet | Prise en charge des notifications de frame de sondage. 0x01 si compatible, 0x00 (par défaut) si non compatible. Toutes les autres valeurs sont RFU. | |||||
Mode Économie d'énergie | 0x02 | 1 octet | Compatibilité avec le mode Économie d'énergie. 0x01 si compatible, 0x00 (par défaut) dans le cas contraire. Toutes les autres valeurs sont RFU. | |||||
Filtre de boucle d'interrogation auotransact | 0x03 | 1 octet | Prise en charge des filtres de boucle d'interrogation dans le micrologiciel pour contourner le mode d'observation pour des modèles spécifiques lorsque le mode d'observation est activé globalement.
0x00 (par défaut) : cette fonctionnalité n'est pas prise en charge 0x01 : les filtres de boucle de sondage sont acceptés Toutes les autres valeurs sont réservées |
|||||
0x04..0xFF | 0 octets | Réservé pour une utilisation ultérieure |
Commande d'économie d'énergie
Pour faire passer le NFCC au mode Économie d'énergie, l'hôte peut utiliser la commande NCI_ANDROID_POWER_SAVING_CMD
. Le NFCC doit répondre avec NCI_ANDROID_POWER_SAVING_RSP
avec un code d'état indiquant la réussite ou l'échec.
En mode économie d'énergie, l'hôte ne doit envoyer aucune commande au NFCC, et le NFCC ne doit envoyer aucune notification ni réponse à l'hôte. Le NFCC ou le composant sécurisé intégré (eSE) peut accepter automatiquement les demandes de paiement entrantes en fonction de la configuration de routage définie avant d'activer le mode Économie d'énergie.
Pour revenir au mode plein écran, l'hôte peut réinitialiser ou réinitialiser le NFCC.
NCI_ANDROID_POWER_SAVING_CMD
Champs de charge utile | Taille | Valeur/description | |
---|---|---|---|
Mode Économie d'énergie | 1 octet | 0x00 | Désactiver le mode Économie d'énergie |
0x01 | Activer le mode Économie d'énergie |
NCI_ANDROID_POWER_SAVING_RSP
Champs de charge utile | Taille | Valeur/description | |||||
---|---|---|---|---|---|---|---|
État | 1 octet | Consultez les codes d'état dans le tableau 140 de la spécification NCI. |
Définir la commande du mode observation
Pour activer ou désactiver le mode d'observation, l'hôte peut utiliser la commande NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
. Le NFCC doit répondre avec NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
avec un code d'état indiquant la réussite ou l'échec.
Lorsque le mode d'observation est désactivé, le NFCC doit implémenter l'activité en mode d'écoute standard conformément aux spécifications techniques de l'activité.
Lorsque le mode Observation est actif, le NFCC ne doit pas répondre à des requêtes d'interrogation pendant la boucle d'interrogation en mode écoute, sauf si l'hôte l'autorise explicitement. Le NFCC doit envoyer la notification RF_FIELD_INFO_NTF
(comme défini dans la section 5.3 de la spécification NCI) lorsqu'il détecte l'activation du champ. Si la découverte du mode de requête est active, la NFCC doit implémenter l'activité en mode de requête conformément aux spécifications techniques de l'activité.
Le NFCC peut mettre en cache les informations d'interrogation afin de procéder immédiatement à l'activation de l'appareil dès que le mode d'observation est désactivé.
Le NFCC doit désactiver le mode observation si l'hôte s'arrête pour une raison quelconque (par exemple, en cas de batterie ou d'arrêt déclenché par l'utilisateur) afin que les transactions SE puissent se poursuivre.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Champs de charge utile | Taille | Valeur/description | |
---|---|---|---|
mode Observation | 1 octet | 0x00 | Désactiver le mode d'observation (par défaut) |
0x01 | Activer le mode d'observation |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Champs de charge utile | Taille | Valeur/description | |||||
---|---|---|---|---|---|---|---|
État | 1 octet | Reportez-vous aux codes d'état dans le tableau 140 de la spécification NCI. |
Notification de boucle d'interrogation
Le NFCC doit envoyer la notification NCI_ANDROID_POLLING_FRAME_NTF
à l'hôte après chaque trame de boucle de sondage. Lorsque les notifications RF_FIELD_INFO_NTF
et NCI_ANDROID_POLLING_FRAME_NTF
sont générées, le NFCC doit envoyer NCI_ANDROID_POLLING_FRAME_NTF
après RF_FIELD_INFO_NTF
.
La notification NCI_ANDROID_POLLING_FRAME_NTF
est indépendante de l'activation ou non du mode d'observation. Lorsque le mode d'observation est actif, le NFCC doit toujours envoyer une notification NCI_ANDROID_POLLING_FRAME_NTF
avant de procéder à la transaction.
NCI_ANDROID_POLLING_FRAME_NTF
Champs de charge utile | Taille | Valeur/description | |||||
---|---|---|---|---|---|---|---|
Données de sondage[0..n] | (m +3) * n octets | Liste des requêtes de sondage reçues depuis la dernière notification. Chaque résultat indique le type (technologie) des requêtes reçues et les données identifiables de la requête en fonction de la technologie. | |||||
Type | 1 octet | Consultez les types de cadres. | |||||
Drapeaux | 1 octet | Voir octet d'indicateur. | |||||
Durée | 1 octet | Longueur (m) du rapport sur les données de sondage, y compris les champs d'horodatage et de gain. | |||||
Code temporel | 4 octets | Code temporel mesuré en millisecondes de la réception des requêtes de sondage, big endian. | |||||
Gain | 1 octet | Intensité de la requête de sondage.
0xFF indique que la valeur n'est pas disponible. |
|||||
Données | m : 5 octets | Renvoie les données identifiables présentes dans la requête de sondage |
Types de cadres
Frame de sondage | Type | Taille | Valeur/Description | |
---|---|---|---|---|
Champ distant | 0x00 | 1 octet | 0x00 | Champ désactivé |
0x01 | Champ activé | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n octets | La valeur doit inclure une commande ISO 14443-3 (par exemple, REQ ou WUP). | |
NFC-B | 0x02 | n octets | La valeur doit inclure un octet AIF et une commande ISO 14443-3 (par exemple, REQ ou WUP) | |
NFC-F | 0x03 | n octets | La valeur doit inclure une commande ISO 14443-3 (par exemple, REQ ou WUP). | |
NFC-V | 0x04 | n octets | La valeur doit inclure une commande ISO 14443-3 (par exemple, REQ ou WUP). | |
Inconnu | 0x07 | n octets | Données de frame brutes |
Définition de l'octet d'indicateur
Drapeaux | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | B3 | b4 | b5 | b6 | b7 | |
0 | Cadre court | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Cadre long |
Requête de commande d'état du mode d'observation
Pour récupérer l'état actuel du mode d'ordre passif, l'hôte peut utiliser la commande NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
. Le NFCC doit répondre avec NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
avec un code d'état indiquant le succès ou l'échec.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Champs de charge utile | Taille | Valeur/description | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octets |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Champs de charge utile | Taille | Valeur/description | |
---|---|---|---|
État | 1 octet | Consultez les codes d'état dans le tableau 140 de la spécification NCI. | |
mode d'observation | 1 octet | 0x00 | Mode Observer désactivé |
0x01 | Mode Observer activé |