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 des codes NC
Les commandes NCI propriétaires d'Android utilisent l'ID de groupe (GID) propriétaire 0xF
et l'espace de code d'identifiant d'opcode (OID) Android 0xC
.
Format de paquet commun
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 le code d'opération 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 des paquets Android est indiqué 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, reserved for future use) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Les identifiants d'opcode Android attribués sont listés dans le tableau suivant. La spécification de chaque paquet est présentée dans les sections suivantes.
Commande "Get capabilities"
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 caractéristiques compatibles.
Si le NFCC n'est pas compatible avec NCI_ANDROID_GET_CAPS_CMD
, l'hôte doit supposer que chaque fonctionnalité prend la valeur par défaut spécifiée. Si une fonctionnalité spécifiée n'est pas renvoyée par le NFCC dans la réponse, l'hôte doit supposer que la fonctionnalité a la valeur par défaut spécifiée.
NCI_ANDROID_GET_CAPS_CMD
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octet |
NCI_ANDROID_GET_CAPS_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. | |||||
Android_Version
|
2 octets | Identifie la version des exigences Android implémentée 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 disponibles | |||||
Saisie | 1 octet | Identifiant de la fonctionnalité | |||||
Len | 1 octet | Longueur (en mètres) de la valeur | |||||
Valeur | m octets | Valeur de la fonctionnalité |
Fonctionnalités propriétaires d'Android
Nom de la fonctionnalité | ID | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|---|
Mode Observation | 0x00 | 1 octet | Prise en charge du mode observation.
0x00 (par défaut) : cette fonctionnalité n'est pas prise en charge. 0x01 : compatible avec la fonctionnalité de désactivation RF depuis l'hôte (obligatoire pour Android 15). 0x02 : prend en charge la fonctionnalité sans désactivation RF depuis l'hôte (obligatoire pour Android 16 et versions ultérieures). Toutes les autres valeurs sont RFU. |
|||||
Notification de frame de requête | 0x01 | 1 octet | Compatibilité avec les notifications de frame de requête. 0x01 si la fonctionnalité est prise en charge, 0x00 (valeur par défaut) si elle ne l'est pas. Toutes les autres valeurs sont RFU. | |||||
Mode Économie d'énergie | 0x02 | 1 octet | Prise en charge du mode Économie d'énergie. 0x01 si la fonctionnalité est prise en charge, 0x00 (valeur par défaut) si elle ne l'est pas. Toutes les autres valeurs sont RFU. | |||||
Filtre de boucle d'interrogation AutoTransact | 0x03 | 1 octet | Prise en charge des filtres de boucle d'interrogation dans le micrologiciel pour contourner le mode observation pour des modèles spécifiques lorsque le mode observation est activé globalement.
0x00 (par défaut) : cette fonctionnalité n'est pas prise en charge. 0x01 : les filtres de boucle d'interrogation sont pris en charge. Toutes les autres valeurs sont RFU. |
|||||
Nombre d'entrées de frame de sortie acceptées | 0x04 | 1 octet | Nombre d'entrées de frame de sortie acceptées. Vous devez ajouter au moins cinq entrées de frame de sortie. | |||||
Annotation du mode Lecteur | 0x05 | 1 octet | Prise en charge des annotations en mode Lecteur.
0x00 (par défaut) : cette fonctionnalité n'est pas prise en charge. 0x01 : cette fonctionnalité est prise en charge. Toutes les autres valeurs sont RFU. |
|||||
0x06..0xFF | 0 octet | Réservé pour une utilisation ultérieure |
Commande d'économie d'énergie
Pour passer le NFCC en 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
et 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 l'élément sécurisé intégré (eSE) peuvent accepter automatiquement les demandes de paiement entrantes en fonction de la configuration de routage définie avant l'activation du mode d'économie d'énergie.
Pour revenir au mode pleine puissance, 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 des spécifications NCI. |
Définir la commande du mode observation
Pour activer ou désactiver le mode 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
et 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é de mode d'écoute standard, conformément à la spécification technique d'activité.
Lorsque le mode d'observation est actif, le NFCC ne doit répondre à aucune demande d'interrogation pendant la boucle d'interrogation en mode écoute, jusqu'à ce qu'il y soit explicitement autorisé par l'hôte.
Le NFCC doit envoyer la notification RF_FIELD_INFO_NTF
(telle que définie dans la section 5.3 de la spécification NCI) lorsqu'il détecte l'activation du champ. Si la découverte en mode interrogation est active, le NFCC doit implémenter l'activité en mode interrogation conformément à la spécification technique de l'activité.
Le NFCC peut mettre en cache les informations de l'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 d'observation si l'hôte s'éteint pour une raison quelconque (par exemple, batterie déchargée ou arrêt initié 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 observation (par défaut) |
0x01 | Activer le mode Observateur |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_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. |
Notification de boucle d'interrogation
Le NFCC doit envoyer la notification NCI_ANDROID_POLLING_FRAME_NTF
à l'hôte après chaque frame de boucle d'interrogation. 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 observation. Lorsque le mode 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 d'interrogation reçues depuis la dernière notification. Chaque résultat indique le type (technologie) des demandes reçues et les données identifiables de la demande en fonction de la technologie. | |||||
Saisie | 1 octet | Consultez la section Types de frames. | |||||
Drapeaux | 1 octet | Voir octet d'indicateur. | |||||
Longueur | 1 octet | Longueur (en m) du rapport sur les données d'interrogation, y compris les champs d'horodatage et de gain. | |||||
Code temporel | 4 octets | Code temporel, en millisecondes, de la réception des requêtes d'interrogation, en big-endian. | |||||
Gain | 1 octet | Intensité de la demande d'interrogation.
0xFF indique que la valeur n'est pas disponible. |
|||||
Données | m – 5 octets | Renvoie les données permettant d'identifier l'utilisateur présentes dans la demande d'interrogation. |
Types de frames
Cadre de requête | Saisie | 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 brutes des frames |
Définition de l'octet d'indicateur
Drapeaux | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | Frame court | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Frame long |
Commande d'état du mode d'observation des requêtes
Pour récupérer l'état actuel du mode commande passive, 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
et 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 octet |
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 des spécifications NCI. | |
Masque technologique | 1 octet | Masque de bits indiquant pour quelles technologies le mode Observateur est activé :
|
Définir la commande des technologies d'observation passive
Pour définir les technologies d'observateur passif, l'hôte peut utiliser la commande NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
. Cette commande active ou désactive le mode d'observation pour les technologies spécifiées sans nécessiter RF_DEACTIVATE_CMD
. Le NFCC doit répondre avec NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
et un code d'état indiquant la réussite ou l'échec.
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
Masque technologique | 1 octet | Masque de bits indiquant les technologies pour lesquelles activer le mode d'observation :
|
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_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 de frame de sortie de l'observateur passif
Pour configurer le tableau des frames de sortie du mode observation, l'hôte peut utiliser la commande NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. Cette commande spécifie les trames RF qui déclenchent la sortie du mode observation. Cette commande ne peut être envoyée que dans RFST_IDLE
. Le NFCC doit répondre avec NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
et un code d'état indiquant la réussite ou l'échec.
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
Plus | 1 octet | 0x00 : dernier message 0x01 : d'autres messages suivront |
|||||
Délai avant expiration | 2 octets | Délai d'inactivité en ms pour restaurer le mode d'observation (little endian). | |||||
Nombre d'entrées de trames RF | 1 octet | Nombre de champs d'entrée de trame RF à suivre (n). 0x00 réinitialise la table. | |||||
Entrée du frame RF [0..n] | (2+x)*n octets | ||||||
Qualifier-Type | 1 octet | Définit le type de frame et les options de correspondance. | |||||
Longueur de la valeur | 1 octet | Longueur "x" du champ "Valeur". | |||||
Valeur | x octets | État de l'alimentation (1), Données de référence (n), Masque (n). 1 <= n <= 16. |
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Champs de charge utile | Taille | Valeur/Description | |
---|---|---|---|
État | 1 octet | Consultez les codes d'état dans le tableau 140 des spécifications NCI. |
Obtenir la commande de sortie du frame de l'observateur passif
Pour récupérer la configuration actuelle de la table des frames de sortie du mode Observation, l'hôte peut utiliser la commande NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. Le NFCC doit répondre avec NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
, suivi de NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
.
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octet |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Champs de charge utile | Taille | Valeur/Description | |
---|---|---|---|
État | 1 octet | Consultez les codes d'état dans le tableau 140 des spécifications NCI. |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
Champs de charge utile | Taille | Valeur/Description | |
---|---|---|---|
Nombre d'entrées de frame de sortie du mode observation | 1 octet | Nombre de champs d'entrée de frame de sortie du mode observation à suivre (n). | |
Entrée [0..n] | x+2 octets | Type de qualificatif (1), longueur (1), valeur (x). |
Commande NCI vide
Pour masquer le NCI, l'organisateur peut utiliser la commande NCI_ANDROID_BLANK_NCI_CMD
. Le NFCC doit répondre avec NCI_ANDROID_BLANK_NCI_RSP
et un code d'état indiquant le succès ou l'échec.
NCI_ANDROID_BLANK_NCI_CMD
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
Longueur du cadre | 1 octet | Longueur des données de frame | |||||
Données de frame | n octets | Données de frame |
NCI_ANDROID_BLANK_NCI_RSP
Champs de charge utile | Taille | Valeur/Description | |
---|---|---|---|
État | 1 octet | Consultez les codes d'état dans le tableau 140 des spécifications NCI. |
Définir la commande d'annotation de la boucle d'interrogation
Pour définir l'annotation de la boucle d'interrogation, l'hôte peut utiliser la commande NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
pour remplir le tableau des frames d'interrogation personnalisés. Ce tableau définit les trames RF personnalisées à insérer dans une boucle de découverte standard. Cette commande ne peut être envoyée que dans RFST_IDLE
. Le NFCC doit répondre avec NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
et un code d'état indiquant la réussite ou l'échec.
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
Champs de charge utile | Taille | Valeur/Description | ||
---|---|---|---|---|
Nombre d'entrées de trames RF | 1 octet | Nombre d'entrées à suivre (n), entre 0 et 4. Si n=0, la fonctionnalité est désactivée. | ||
Entrée de trame RF [1..n] | 2+x octets | |||
Qualifier-Type | 1 octet | Définit le type de frame, la technologie et la position dans la boucle de découverte. | ||
Longueur | 1 octet | Longueur de la valeur (x). | ||
Valeur | x octets | Temps d'attente (1 octet) et trame RF (1 à 16 octets). |
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
Champs de charge utile | Taille | Valeur/Description | |
---|---|---|---|
État | 1 octet | Consultez les codes d'état dans le tableau 140 des spécifications NCI. |
Interroger la commande d'économie d'énergie
Pour interroger le mode Économie d'énergie, l'hôte peut utiliser la commande NCI_ANDROID_QUERY_POWER_SAVING_CMD
. Le NFCC doit répondre avec NCI_ANDROID_QUERY_POWER_SAVING_RSP
et un code d'état indiquant la réussite ou l'échec de l'opération.
NCI_ANDROID_QUERY_POWER_SAVING_CMD
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octet |
NCI_ANDROID_QUERY_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. |
Notification de suspension de l'observateur passif
Le NFCC doit envoyer la notification NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
à l'hôte lorsqu'une trame de sortie est détectée, ce qui entraîne la suspension du mode observation.
NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
Saisie | 1 octet | Type de frame : 0x00=Type-A, 0x01=Type-B | |||||
Longueur | 1 octet | Longueur de la valeur (n) | |||||
Valeur | n octets | Frame reçu correspondant à une entrée de frame de sortie. |
Notification de reprise de l'observateur passif
Le NFCC doit envoyer la notification NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
à l'hôte lorsque l'observateur passif est réactivé après un délai d'inactivité ou d'autres conditions.
NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octet |
Obtenir la commande d'annotation de la boucle d'interrogation
Pour lire le tableau des trames d'interrogation personnalisées de la NFCC, l'hôte peut utiliser la commande NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
. Cette commande ne peut être envoyée que dans RFST_IDLE
. Le NFCC doit répondre avec NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
, avec un code d'état indiquant le succès ou l'échec, ainsi que les informations sur le frame d'interrogation personnalisé.
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
Champs de charge utile | Taille | Valeur/Description | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octet |
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_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. | ||
Nombre d'entrées de trames RF | 1 octet | Nombre d'entrées à suivre (n), entre 0 et 4. Si n=0, la fonctionnalité est désactivée. | ||
Entrée de trame RF [1..n] | 2+x octets | Qualifier-Type | 1 octet | Définit le type de frame, la technologie et la position dans la boucle de découverte. |
Longueur | 1 octet | Longueur de la valeur (x). | ||
Valeur | x octets | Temps d'attente (1 octet) et trame RF (1 à 16 octets). |
Implémentation
Pour les implémentations de référence, consultez les pages suivantes :