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

Интерфейс контроллера 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

Получить команду возможностей

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

NFCC должен ответить сообщением 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) поддерживаемых возможностей
Возможности[0..n] (m + 2) * n октетов Поддерживаемые возможности
Тип 1 октет Идентификатор возможности
Лен 1 октет Длина (м) значения
Ценить м октеты Ценность этой возможности
собственные возможности Android
Название возможности ИДЕНТИФИКАТОР Размер Значение/описание
Режим наблюдения 0x00 1 октет Поддержка режима наблюдения.
0x00 (по умолчанию) — Эта функция не поддерживается.
0x01 — Поддерживает функцию отключения радиочастотного сигнала от хоста (необходимо для Android 15).
0x02 — Поддерживает эту функцию без отключения радиочастотного сигнала на хосте (требуется для Android 16 и выше).
Все остальные значения указаны в RFU.
Уведомление об опросе 0x01 1 октет Поддержка уведомлений об опросе кадров. 0x01, если поддерживается, 0x00 (по умолчанию), если не поддерживается. Все остальные значения являются значениями RFU.
режим энергосбережения 0x02 1 октет Поддержка режима энергосбережения. 0x01, если поддерживается, 0x00 (по умолчанию), если не поддерживается. Все остальные значения являются значениями RFU.
Фильтр цикла опроса Autotransact 0x03 1 октет Встроенная поддержка фильтров цикла опроса позволяет обходить режим наблюдения для определенных шаблонов, когда режим наблюдения включен глобально.
0x00 (по умолчанию) — Эта функция не поддерживается.
0x01 - Поддерживает фильтры цикла опроса
Все остальные значения указаны в RFU.
Количество поддерживаемых входов в выходной кадр 0x04 1 октет Количество поддерживаемых записей в окне выхода. Требуется минимум пять записей в окне выхода.
Аннотирование в режиме чтения 0x05 1 октет Поддержка аннотирования в режиме чтения.
0x00 (по умолчанию) — Эта функция не поддерживается.
0x01 — Поддерживает эту функцию.
Все остальные значения указаны в RFU.
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 должен реализовать активность в режиме опроса в соответствии с технической спецификацией активности . NFCC может кэшировать информацию об опросе, чтобы немедленно приступить к активации устройства, как только режим наблюдения будет деактивирован.

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

Поля полезной нагрузки Размер Значение/описание
Опрос данных[0..n] (m +3) * n октетов Список запросов на опрос, полученных с момента последнего уведомления. В каждом результате указан тип (технология) полученных запросов и идентифицируемые данные из запроса в зависимости от технологии.
Тип 1 октет См. типы рамок .
Флаги 1 октет См. байт флага .
Длина 1 октет Длина (м) отчета с данными опроса, включая поля временной метки и коэффициента усиления.
Отметка времени 4 октета Временная метка, измеренная в миллисекундах с момента получения запросов на опрос, порядок байтов big endian.
Прирост 1 октет Сила запроса на проведение опроса.
0xFF означает, что значение недоступно.
Данные м - 5 октетов Возвращает идентифицирующие данные, содержащиеся в запросе на опрос.
Типы рамок
Опросный кадр Тип Размер Значение/Описание
Удаленное поле 0x00 1 октет 0x00 Поле от
0x01 Филд на
0x02..0xFF РФУ
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 октетов Исходные данные кадра
Определение байта флага
Флаги
б0 б1 б2 б3 б4 б5 б6 б7
0 Короткая рама РФУ РФУ РФУ РФУ РФУ РФУ РФУ
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 . Эта команда задает RF-кадры, которые инициируют выход из режима наблюдения. Эта команда может быть отправлена ​​только в 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-кадре 1 октет Количество полей ввода RF Frame, которые будут добавлены позже (n). 0x00 сбрасывает таблицу.
Вход в радиочастотный кадр [0..n] (2+x)*n октетов
Тип квалификатора 1 октет Определяет тип рамки и параметры соответствия.
Длительность значения 1 октет Длина поля «Значение» равна 'x'.
Ценить х октетов Состояние питания (1), эталонные данные (n), маска (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 Тип квалификатора (1), Длина (1), Значение (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 отключает эту функцию.
Вход в радиочастотный кадр [1..n] 2+x октетов
Тип квалификатора 1 октет Определяет тип кадра, технологию и положение в цикле обнаружения.
Длина 1 октет Длина значения (x).
Ценить х октетов Время ожидания (1 байт) и радиочастотный кадр (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 . NFCC должен ответить командой 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 отключает эту функцию.
Вход в радиочастотный кадр [1..n] 2+x октетов Тип квалификатора 1 октет Определяет тип кадра, технологию и положение в цикле обнаружения.
Длина 1 октет Длина значения (x).
Ценить х октетов Время ожидания (1 байт) и радиочастотный кадр (1-16 байт).

Выполнение

Примеры реализации см. ниже: