Собственные команды NCI для Android

Интерфейс контроллера NFC (NCI) используется для взаимодействия с контроллером NFC (NFCC). На этой странице описаны спецификации проприетарных команд NCI для Android.

Определения NCI

В собственных командах NCI для Android используется собственный идентификатор группы (GID) 0xF и пространство кода идентификатора кода операции (OID) Android 0xC.

Общий формат пакета

Формат пакетов Android NCI соответствует спецификации NCI для пакетов управления, в которых используются проприетарные Group_ID 0xF и Opcode_ID 0x0C. Для каждого проприетарного сообщения Android первый байт полезной нагрузки пакета должен быть установлен в операционный код Android (0x0C). Пакеты управления Android используют Message_Type и PBF для идентификации команд, ответов и уведомлений аналогично стандартным командам.

Формат пакета Android приведен в таблице ниже.

0 1 2 3 4 5 6 7
Message_Type PBF Group_ID = 0xF (PROPRIETARY)
зарезервировано для будущего использования (RFU); Opcode_ID = 0x0C (ANDROID)
Payload_Length
Android_Opcode_ID
Android_Payload

Назначенные идентификаторы кодов операций Android перечислены в таблице ниже. Спецификации для каждого пакета приведены в следующих разделах.

Android OID Тип сообщения Название сообщения
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

Команда Get capabilities

Хост использует NCI_ANDROID_GET_CAPS_CMD, чтобы запросить список функций Android, поддерживаемых NFCC. Команда NCI_ANDROID_GET_CAPS_CMD не принимает никаких параметров.

Контроллер NFC должен ответить сообщением NCI_ANDROID_GET_CAPS_RSP со статусом STATUS_OK и списком поддерживаемых возможностей и функций.

Если NFCC не поддерживает NCI_ANDROID_GET_CAPS_CMD, хост должен считать, что возможности принимают значение по умолчанию. Если в ответе NFCC нет определенной функции, хост должен считать, что у нее значение по умолчанию.

NCI_ANDROID_GET_CAPS_CMD

Поля полезной нагрузки Размер Значение/описание
Н/Д 0 октетов

NCI_ANDROID_GET_CAPS_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статусов приведены в таблице 140 спецификации NCI.
Android_Version 2 октета Определяет версию требований Android, реализованную NFCC.
0x0000 Android 15
Количество функций 1 октет Количество поддерживаемых функций (n).
Capabilities[0..n] (m + 2) * n октетов Поддерживаемые функции
Тип 1 октет Идентификатор функции.
Лен 1 октет Длина значения (м)
Значение m октетов Значение возможности
Собственные возможности Android
Название возможности ID Размер Значение/описание
Режим наблюдения 0x00 1 октет Поддержка режима наблюдения.
0x00 (по умолчанию) – функция не поддерживается.
0x01 – поддерживает функцию с деактивацией радиочастот от хоста (требуется для Android 15).
0x02 – поддерживает функцию без деактивации радиочастоты со стороны хоста (требуется для Android 16 и более поздних версий).
Все остальные значения зарезервированы для использования в будущем.
Уведомление о фрейме опроса 0x01 1 октет Поддержка уведомлений о фреймах опроса. 0x01, если поддерживается, 0x00 (по умолчанию), если не поддерживается. Все остальные значения зарезервированы для будущего использования.
Режим энергосбережения 0x02 1 октет Поддержка режима энергосбережения. 0x01, если поддерживается, 0x00 (по умолчанию), если не поддерживается. Все остальные значения зарезервированы для будущего использования.
Фильтр цикла опроса Auotransact 0x03 1 октет Поддержка фильтров цикла опроса во встроенном ПО, чтобы обходить режим наблюдения для определенных шаблонов, когда он включен глобально.
0x00 (по умолчанию) – функция не поддерживается.
0x01 – поддерживаются фильтры цикла опроса.
Все остальные значения зарезервированы для будущего использования.
Количество поддерживаемых записей о кадрах выхода 0x04 1 октет Количество поддерживаемых записей фреймов выхода. Требуется не менее пяти записей для конечного кадра.
Аннотация в режиме чтения 0x05 1 октет Поддержка аннотаций в режиме чтения.
0x00 (по умолчанию) – функция не поддерживается.
0x01 – поддерживает эту функцию.
Все остальные значения зарезервированы для использования в будущем.
0x06..0xFF 0 октетов Зарезервировано для будущего использования

Команда энергосбережения

Чтобы перевести NFCC в режим энергосбережения, хост может использовать команду NCI_ANDROID_POWER_SAVING_CMD. NFCC должен ответить кодом NCI_ANDROID_POWER_SAVING_RSP со статусом, указывающим на успех или неудачу.

В режиме энергосбережения хост не должен отправлять NFCC никаких команд, а NFCC не должен отправлять хосту никаких уведомлений или ответов. NFCC или встроенный защищенный элемент (eSE) могут автоматически принимать входящие запросы на оплату в соответствии с конфигурацией маршрутизации, заданной до включения режима энергосбережения.

Чтобы вернуться в режим полной мощности, хост может сбросить или повторно инициализировать NFCC.

NCI_ANDROID_POWER_SAVING_CMD

Поля полезной нагрузки Размер Значение/описание
Режим энергосбережения 1 октет 0x00 Как отключить режим энергосбережения
0x01 Включить режим энергосбережения

NCI_ANDROID_POWER_SAVING_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.

Команда для настройки режима наблюдения

Чтобы включить или отключить режим наблюдателя, организатор может использовать команду NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD. NFCC должен ответить NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP с кодом статуса, указывающим на успех или неудачу.

Если режим наблюдения отключен, NFCC должен реализовать стандартный режим прослушивания в соответствии с техническими спецификациями действий.

Когда режим наблюдения активен, NFCC не должен отвечать на запросы опроса во время цикла опроса в режиме прослушивания, пока не получит явное разрешение от хоста. При обнаружении активации поля контроллер NFCC должен отправить уведомление RF_FIELD_INFO_NTF (как определено в разделе 5.3 спецификации NCI). Если обнаружение в режиме опроса активно, NFCC должен реализовать активность в режиме опроса в соответствии с технической спецификацией активности. Контроллер NFC может кэшировать информацию опроса, чтобы сразу же активировать устройство после отключения режима наблюдения.

Контроллер NFCC должен отключить режим наблюдения, если хост по какой-либо причине выключается (например, из-за разряженной батареи или по инициативе пользователя), чтобы транзакции SE могли продолжаться.

NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD

Поля полезной нагрузки Размер Значение/описание
режим наблюдения 1 октет 0x00 Отключить режим наблюдателя (по умолчанию)
0x01 Включить режим наблюдения

NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.

Уведомление о цикле опроса

NFCC должен отправлять уведомление NCI_ANDROID_POLLING_FRAME_NTF хосту после каждого кадра цикла опроса. Если генерируются уведомления RF_FIELD_INFO_NTF и NCI_ANDROID_POLLING_FRAME_NTF, NFCC должен отправить NCI_ANDROID_POLLING_FRAME_NTF после RF_FIELD_INFO_NTF.

Уведомление NCI_ANDROID_POLLING_FRAME_NTF должно появляться только в режиме наблюдения. Когда активен режим наблюдения, NFCC всегда должен отправлять уведомление NCI_ANDROID_POLLING_FRAME_NTF, прежде чем продолжить транзакцию.

NCI_ANDROID_POLLING_FRAME_NTF

Поля полезной нагрузки Размер Значение/описание
Polling Data[0..n] (m + 3) * n октетов Список запросов на опрос, полученных с момента последнего уведомления. Для каждого результата указывается тип (технология) полученных запросов и идентифицируемые данные из запроса в зависимости от технологии.
Тип 1 октет Подробнее о типах фреймов…
Флаги 1 октет См. байт флага.
Длина 1 октет Длина (в метрах) отчета о данных опроса, включая поля временной метки и усиления.
Временная метка 4 октета Временная метка в миллисекундах, указывающая, когда был получен запрос на опрос. Порядок байтов – от старшего к младшему.
Рост 1 октет Сила запроса на опрос.
0xFF означает, что значение недоступно.
Данные m – 5 октетов Возвращает идентифицируемые данные, присутствующие в запросе на опрос.
Типы кадров
Фрейм опроса Тип Размер Значение/описание
Удаленное поле 0x00 1 октет 0x00 Поле выключено
0x01 Поле "Включено"
0x02..0xFF RFU
NFC-A 0x01 n октетов Значение должно содержать команду ISO 14443-3 (например, REQ или WUP).
NFC-B 0x02 n октетов Значение должно включать байт AIF и команду ISO 14443-3 (например, REQ или WUP).
NFC-F 0x03 n октетов Значение должно содержать команду JIS X 6319-4.
NFC-V 0x04 n октетов Значение должно содержать команду ISO 15693.
Неизвестно 0x07 n октетов Необработанные данные кадров
Определение байта флагов
Флаги
b0 b1 b2 b3 Б4 b5 b6 b7
0 Короткий кадр RFU RFU RFU RFU RFU RFU RFU
1 Длинный фрейм

Команда запроса статуса режима наблюдения

Чтобы узнать текущий статус пассивного режима заказа, ведущий может использовать команду NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD. NFCC должен ответить кодом NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP со статусом, указывающим на успех или неудачу.

NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD

Поля полезной нагрузки Размер Значение/описание
Н/Д 0 октетов

NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.
Маска технологии 1 октет Битовая маска, указывающая, для каких технологий включен режим наблюдения:
  • Бит 0: NFC-A
  • Бит 1: NFC-B
  • Бит 2: NFC-F
  • Бит 3: NFC-V

Команда для настройки технологий пассивного наблюдения

Чтобы задать технологии пассивного наблюдения, организатор может использовать команду NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD. Эта команда включает или отключает режим наблюдения для указанных технологий без необходимости использовать RF_DEACTIVATE_CMD. NFCC должен ответить кодом NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP со статусом, указывающим на успех или неудачу.

NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD

Поля полезной нагрузки Размер Значение/описание
Маска технологии 1 октет Битовая маска, указывающая, для каких технологий нужно включить режим наблюдения:
  • Бит 0: NFC-A
  • Бит 1: NFC-B
  • Бит 2: NFC-F
  • Бит 3: NFC-V
Технологии, не заданные в маске, должны продолжать работать в режиме прослушивания.

NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статусов приведены в таблице 140 спецификации NCI.

Как задать команду для выхода пассивного наблюдателя

Чтобы настроить таблицу кадров выхода из режима наблюдения, хост может использовать команду NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD. Эта команда указывает, какие радиочастотные кадры должны вызвать выход из режима наблюдения. Эту команду можно отправить только в RFST_IDLE. NFCC должен ответить NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP с кодом статуса, указывающим на успешное или неудачное выполнение.

NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD

Поля полезной нагрузки Размер Значение/описание
Ещё 1 октет 0x00 – последнее сообщение
0x01 – за этим сообщением последуют другие
Время ожидания 2 октета Время ожидания в миллисекундах для восстановления режима наблюдения (little endian).
Количество записей RF Frame 1 октет Количество полей записи RF Frame (n). 0x00 сбрасывает таблицу.
RF Frame entry [0..n] (2+x)*n октетов
Qualifier-Type 1 октет Определяет тип кадра и параметры сопоставления.
Длина значения 1 октет Длина поля "Значение" – x.
Значение x октетов Power State (1), Reference Data (n), Mask (n). 1 <= n <= 16.

NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.

Получить команду выхода из кадра пассивного наблюдателя

Чтобы получить текущую конфигурацию таблицы выходных кадров режима наблюдения, хост может использовать команду NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD. NFCC должен ответить NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP, а затем NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF.

NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD

Поля полезной нагрузки Размер Значение/описание
Н/Д 0 октетов

NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.

NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF

Поля полезной нагрузки Размер Значение/описание
Количество записей о выходе из режима наблюдения 1 октет Количество полей для ввода кадров выхода из режима наблюдения (n).
Запись [0..n] x+2 октета Qualifier-Type (1), Length (1), Value (x).

Пустая команда NCI

Чтобы очистить NCI, хост может использовать команду NCI_ANDROID_BLANK_NCI_CMD. NFCC должен ответить кодом статуса NCI_ANDROID_BLANK_NCI_RSP, указывающим на успешное или неудачное выполнение.

NCI_ANDROID_BLANK_NCI_CMD

Поля полезной нагрузки Размер Значение/описание
Длина рамы 1 октет Длина данных кадра
Данные фрейма n октетов Данные кадра

NCI_ANDROID_BLANK_NCI_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.

Как задать команду аннотации для цикла опроса

Чтобы задать аннотацию цикла опроса, хост может использовать команду NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD для заполнения таблицы фреймов опроса. В этой таблице определяются специальные радиочастотные фреймы, которые будут вставлены в стандартный цикл обнаружения. Эту команду можно отправить только в RFST_IDLE. Контроллер NFCC должен ответить на команду NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP кодом статуса, указывающим на успешное или неуспешное выполнение.

NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD

Поля полезной нагрузки Размер Значение/описание
Количество записей о радиочастотных кадрах 1 октет Количество записей, которые нужно отслеживать (n), от 0 до 4. Если n=0, функция отключена.
RF frame entry [1..n] 2+x октетов
Qualifier-Type 1 октет Определяет тип кадра, технологию и позицию в цикле обнаружения.
Длина 1 октет Длина значения (x).
Значение x октетов Время ожидания (1 байт) и кадр RF (1–16 байтов).

NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статусов приведены в таблице 140 спецификации NCI.

Команда запроса энергосбережения

Чтобы запросить режим энергосбережения, организатор может использовать команду NCI_ANDROID_QUERY_POWER_SAVING_CMD. NFCC должен ответить кодом статуса NCI_ANDROID_QUERY_POWER_SAVING_RSP, указывающим на успешное или неудачное выполнение операции.

NCI_ANDROID_QUERY_POWER_SAVING_CMD

Поля полезной нагрузки Размер Значение/описание
Н/Д 0 октетов

NCI_ANDROID_QUERY_POWER_SAVING_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.

Уведомление о приостановке пассивного наблюдателя

При обнаружении кадра выхода NFCC должен отправить хосту уведомление NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF, чтобы приостановить режим наблюдения.

NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF

Поля полезной нагрузки Размер Значение/описание
Тип 1 октет Тип кадра: 0x00 – тип A, 0x01 – тип B.
Длина 1 октет Длина значения (n)
Значение n октетов Получен кадр, соответствующий записи о кадре перехода.

Уведомление о возобновлении пассивного наблюдения

Когда пассивный наблюдатель возобновляет работу после тайм-аута или других условий, NFCC должен отправить хосту уведомление NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF.

NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF

Поля полезной нагрузки Размер Значение/описание
Н/Д 0 октетов

Как получить команду для аннотации опроса

Чтобы прочитать таблицу настраиваемых кадров опроса NFCC, хост может использовать команду NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD. Эту команду можно отправить только в RFST_IDLE. Контроллер NFC должен ответить сообщением NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP с кодом статуса, указывающим на успех или неудачу, и информацией о пользовательском фрейме опроса.

NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD

Поля полезной нагрузки Размер Значение/описание
Н/Д 0 октетов

NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP

Поля полезной нагрузки Размер Значение/описание
Статус 1 октет Коды статуса приведены в таблице 140 спецификации NCI.
Количество записей о радиочастотных кадрах 1 октет Количество записей, которые нужно отслеживать (n), от 0 до 4. Если n=0, функция отключена.
RF frame entry [1..n] 2+x октетов Qualifier-Type 1 октет Определяет тип кадра, технологию и позицию в цикле обнаружения.
Длина 1 октет Длина значения (x).
Значение x октетов Время ожидания (1 байт) и кадр RF (1–16 байтов).

Реализация

Примеры реализации: