Интерфейс контроллера 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 перечислены в следующей таблице. Спецификация для каждого пакета приведена в следующих разделах.
Получить команду возможностей
Хост использует 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 октет | Битовая маска, указывающая, для каких технологий включен режим наблюдения:
| |
Установить команду пассивных наблюдательных технологий
Для настройки пассивных технологий наблюдения хост может использовать команду 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 октет | Битовая маска, указывающая, для каких технологий включить режим наблюдения:
| |||||
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 байт). | ||
Выполнение
Примеры реализации см. ниже: