Commandes NCI propriétaires Android

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.

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

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é :
  • Bit 0 : NFC-A
  • Bit 1 : NFC-B
  • Bit 2 : NFC-F
  • Bit 3 : NFC-V

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 :
  • Bit 0 : NFC-A
  • Bit 1 : NFC-B
  • Bit 2 : NFC-F
  • Bit 3 : NFC-V
Les technologies non définies dans le masque doivent continuer à fonctionner en mode écoute.

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 :