Как это работает? | NFC-чип –

Iso/iec 14443 – бесконтактные карты

Стандарт включает четыре раздела:

  • ISO/IEC 14443-1:2008 – физические характеристики. Этот раздел стандарта ISO/IEC 14443 определяет размер и физические характеристики карты. В нем также перечислены некоторые экстремальные условия окружающей среды, которые карта должна выдерживать без прерывающих использование карты дефектов. Эти тесты предназначены для выполнения на уровне карты и зависят от конструкции карты и конструкции антенны. Большинство требований не может быть напрямую переведено на уровень ИС или кристалла.
  • ISO/IEC 14443-2: 2022 – радиочастотная мощность и баланс сигнала. Этот раздел определяет РЧ-мощность и сигнальный интерфейс для двух схем передачи сигналов: типа A и типа B. Обе схемы являются полудуплексными со скоростью передачи данных 106 кбит/с в каждом направлении. Данные с карты передаются посредством модулированной нагрузки с поднесущей 848 кГц. Электропитание карты происходит от РЧ-поля. Батарея не требуется.
  • ISO/IEC 14443-3: 2022 – инициализация и механизм предотвращения конфликтов. В этом разделе описаны протоколы инициализации и предотвращения конфликтов для PICC типов A и B. Определены команды предотвращения конфликтов, отклики, пакеты данных и синхронизация. Схема инициализации и предотвращения конфликтов разработана таким образом, что позволяет создавать мультипротокольные считыватели, способные связываться с картами типов A и B. Находясь в РЧ-поле, карты обоих типов пассивно ожидают команды опроса (Polling). Мультипротокольный считыватель опрашивает один тип карт, завершает все транзакции с ответившими картами, а затем проводит опрос для другого типа карт.
  • ISO/IEC 14443-4:2022 – протокол передачи. Этот раздел определяет высокоуровневые протоколы передачи данных для PICC Типов A и B. Эти протоколы являются опциональными, поэтому PICC могут быть спроектированы как с их поддержкой, так и без нее. PICC сообщает PCD о возможности ответа на команду опроса, как определено в разделе 3 стандарта. Таким образом, PCD знает, поддерживает ли PICC протоколы высокого уровня, определенные в этом разделе стандарта ISO/IEC 14443.

Протоколы, определенные в разделе 4, также позволяют передавать блоки данных приложений, как определено в ISO/IEC 7816-4, и выбор приложения, как определено в ISO/IEC 7816-5. ISO/IEC 7816 является стандартом контактной смарт-карты на основе интегральной схемы.

Listview

Как это работает? | NFC-чип -

На главном экране мы можем наблюдать список действий которые можно выполнить, подобный список делается так:

ListView {
    id: actionList

....
    delegate: ListDelegate {
        anchors {
            left : parent.left
            leftMargin: 20
        }

        onClicked: {
            pageStack.push(Qt.resolvedUrl(model.source))
        }

        MoreIndicator {
            anchors {
                verticalCenter: parent.verticalCenter
                right: parent.right
                rightMargin: 30
            }
        }
    }

    model: ListModel {
        ListElement {
            title: "Read Tag"
            subtitle: ""
            source: "ReadPage.qml"
        }
        ......
    }
}


Элемент

ListView

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

delegate

— делегат для отрисовки одного элемента списка и

model

— модель данных для списка.


Пакет

com.nokia.extras

содержит уже готовый компонент

ListDelegate

для создания простого делегата. Элемент

ListModel

позволяет задать простую модель данных. А

ListElement

— ни что иное как одна запись этой модели.

Антенна

ISO/IEC 14443 определяет 6 классов антенн (показанных на рисунке 6), также упоминаемых в ISO/IEC 15693. Для каждого устройства NFC необходимо выбрать подходящую антенную конструкцию, чтобы обеспечить оптимальные параметры в заданной среде.

Большие антенны Класса 1 имеют форму и размеры смарт-карты. Они обеспечивают наилучшие показатели в отношении электромагнитного РЧ-поля. На другом конце стандартизованного ряда антенн находится Класс 6. Такая антенна является самой маленькой и обладает наилучшими возможностями для встраивания, с учетом потерь в качественных характеристиках.

«Форум NFC» предоставляет свои собственные конструкции PCD – Proximity coupling device (передатчики, называемые «опрашивателями» – poller) и PICC – Proximity coupling device  (называемые «слушателями» – listener), описанные в NFC Forum-TS-Analog-1.0 (папка 2.2.1, таблица 16).

При подключении к соответствующему генератору и усилителю мощности эталонного PCD от «Форума NFC» он позволяет посылать команды к PICC. Реакция PICC затем может быть зафиксирована и проанализирована посредством связанного измерительного оборудования.

Эталонный PCD от «Форума NFC» с тремя различными конструкциями антенных катушек основан на стандартном PCD класса 0 и двух компенсированных версиях антенных катушек PICC-3 и PICC-6, стандартизированных ISO/IEC. Эти катушки, называемые Poller-0, Poller-3 и Poller-6, представлены в соответствующем порядке слева-направо на рисунке 7.

Образцы конструкций PICC от «Форума NFC» определены с тремя проектными геометрическими формами антенной катушки. Геометрия катушек Listener-1, Listener-3 и Listener-6, как показано на рисунке 8 в порядке слева направо, основана на размерах внешней оболочки PICC-1, PICC-3 и PICC-6, утвержденных ISO/IEC.

Конструкции катушек на печатной плате не обязательно должны быть идентичными. Эталонный PICC «Форума NFC» позволяет анализировать сигнал, отправленный PCD. Для анализа частоты и формы этих сигналов эталонный PICC «Форума NFC» оснащен встроенной измерительной катушкой.

Он может отправлять информацию обратно к PCD, используя различные уровни модуляции нагрузкой, управляемые с помощью подходящего источника сигнала. Также он может быть настроен на использование ряда постоянных резистивных нагрузок. Эти значения резистивной нагрузки можно использовать для представления как типичных, так и наихудших вариантов для PCD.

Эталонные конструкции «Форума NFC» следует использовать при тестировании и проверке устройства NFC в качестве эталона или ориентира, таким образом помогая разработчикам оптимизировать конструкции антенн.

Взаимодействие

Когда пользователь попадает на страницу для записи или чтения метки, мы должны выполнить следующий код:

Для чтения

function tagWasRead(container) {
    NfcManager.stopDetection()

    readPage.dataContainer = container
    pageStack.push(Qt.resolvedUrl("ReadResultPage.qml"), {dataContainer: readPage.dataContainer})
}

function readError(string) {
    errorBanner.text = string
    errorBanner.show()
}

Component.onCompleted: {
    NfcManager.tagReadFinished.connect(readPage.tagWasRead)
    NfcManager.accessError.connect(readPage.readError)
    NfcManager.setReadMode()
    NfcManager.startDetection()
}


Метод

Component.onCompleted

выполняется когда страница полностью создана. В этом методе мы цепляем обработчики для ошибки и для успешного результата к нашим сигналам из NfcManager (обратите внимание на синтаксис подключения С сигнала к QML слоту)

После, мы выставляем режим для чтения и сообщаем нашему менеджеру, что следует ожидать прикладывания тега.

Также обратите внимание на вызов push

pageStack.push(Qt.resolvedUrl("ReadResultPage.qml"), {dataContainer: readPage.dataContainer})

второй параметр, позволяет нам передать контейнер с данными на следущую страницу, которая просто его обработает

Как это работает? | NFC-чип -

пример:

.....
Label {
    id: rawDataLabel

    width: parent.width

    font.pixelSize: 30
    font.family: "Courier New"
    text: readPage.dataContainer.rawHexData()
    wrapMode: Text.WrapAnywhere
}
.....

Для записи

function tagWasWritten() {
.....    
}

function writeError(string) {
.....    
}

Component.onCompleted: {
    NfcManager.tagWriteFinished.connect(writePage.tagWasWritten)
    NfcManager.accessError.connect(writePage.writeError)
    NfcManager.setWriteMode()
    NfcManager.setDataForWrite(writePage.text, writePage.uri)
    NfcManager.startDetection()
}

Очень похоже, не правда ли? Единственным отличием является вызов метода

setDataForWrite

, который передает данные для записи.

Где купить nfc метку

В своей прошлой статье я уже рассказывал о неочевидных способах применения NFC и вскользь говорил о метках. По моему мнению, метки являются самой недооцененной возможностью модуля связи. Многие их не видели и не слышали. В Интернете огромное количество статей на тему применения тагов, но где можно приобрести такой гаджет никто не знает.

Читайте коллег: Лучшие телефоны, которые выйдут в ближашие месяцы. Их стоит подождать.

Но, впервые обратившись на Яндекс.Маркет, первое, что бросается в глаза — размах ценовой политики. Цены на NFC Tag начинаются с 35 рублей и заканчиваются в районе 2,5 тысяч. Все дело в том, что сами метки имеют разные стандарты, которых существует пять.

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

Где купить nfc-метки?

Если вас интересуют метки в виде наклеек, которые использовать проще всего, то для этого придется посетить AliExpress. Именно здесь их выбор больше всего. Например, вы можете приобрести набор из десяти разных наклеек Ntag213 — стоимость такого комплекта не превышает 220 рублей.

Вы спокойно можете покупать NFC-метки от разных производителей. На их работе это никак не отразится, ведь ими используется один протокол. Фактически друг от друга такие изделия отличаются лишь формой и изображенным рисунком.

Если вам хватит шести меток, то предлагаем ознакомиться с несколько усечённым набором от AnyNFC. Однако его покупка обойдется даже дороже — за комплект из шести стикеров стоит 312 рублей. Но зато эти наклейки выполнены на более плотной бумаге, повредить их заметно сложнее.

Рассмотренные выше варианты имеют специфические рисунки. Если же вы вознамерились запрограммировать какие-то необычные команды, то вам нужны стикеры без всяких домиков, самолетов и прочих изображений. Например, 6 разноцветных наклеек, продающиеся примерно за 83 рубля (без учета доставки) располагают лишь логотипом беспроводной технологии NFC. При использовании таких стикеров вы будете ориентироваться на их цвет и местоположение.

Существует и ещё более упрощенный вариант. Вы можете купить 10 меток без рисунков. Это будут упомянутые в самом начале статьи тоненькие антенны. Далее вы можете своими руками изготовить какое-либо изображение, нанеся его на антенну, превратив её в полноценную NFC-метку. Проще всего для этой цели использовать принтер и самоклеящуюся бумагу.

Но не всегда требуется метка в виде стикера. В некоторых случаях она должна быть выполнена в виде аксессуара, который крепился бы к связке с ключами. Тогда необходима покупка набора из брелков NTAG215. Антенны в них заключены внутрь пластикового корпуса. К ключам брелок крепится при помощи металлического кольца. На корпус можно наклеить любое нужное вам изображение.

Глоссарий

В таблице 1 перечислены использованные в этом документе термины, касающиеся технологии NFC.

Таблица 1. Терминология для технологии NFC

ТерминОпределение
NFCКоммуникационная технология ближнего радиуса действия (Near-Field Communication)
«Форум NFC»Ассоциация производителей, обеспечивающих развитие технологии NFC
Устройство «Форума NFC»Устройство, соответствующее спецификациям «Форума NFC»
АктивностьПроцесс внутри устройства NFC с заранее определенными предварительными и конечными условиями. Активность начинается только тогда, когда выполняются предварительные условия. По завершении активности оказываются выполненными конечные условия
ИнициаторФункция NFC-устройства в режиме опроса, когда устройство обменивается данными, используя протокол NDEP
Целевое устройствоФункция устройства «Форума NFC» в ряде действий, когда устройство обменивается данными, используя протокол NDEP
Режим опросаПервоначальный режим устройства NFC, когда оно генерирует несущую частоту и опрашивает другие устройства
Опрашивающее устройство (poller)Устройство «Форума NFC» в режиме опроса, также используемое в качестве PCD, определенного в соответствии с ISO/IEC
Режим прослушиванияПервоначальный режим для устройства NFC, когда оно не генерирует несущую частоту. В этом режиме устройство «прослушивает» РЧ-поле другого устройства
Прослушивающее устройствоУстройство «Форума NFC» в режиме прослушивания, также используемое в качестве PICC, определенного в соответствии с ISO/IEC
PCD – Proximity coupling device (VCD – Vicinity Coupling Device)Вплотную (Proximity) или на удалении (Vicinity) взаимодействующее устройство, – ряд технологий, определенных в стандартах ISO/IEC для устройств считывания/записи с определенным набором команд
PICC – Proximity inductive coupling card (VICC – vicinity integrated circuit card)Карта с ИС, действующая при касании или на удалении (Proximity, Vicinity) – ряд технологий, определенных в стандартах ISO/IEC для карт, с определенным набором команд
КартаPICC в форме кредитной карты без собственного источника питания, не генерирующая электромагнитное РЧ-поле и способная взаимодействовать с устройством считывания/записи
МеткаPICC в форме наклейки, электронного брелока и других подобных устройств, без собственного источника питания, не генерирующая электромагнитное РЧ-поле и способная взаимодействовать с устройством считывания/записи
PeerОдно из двух взаимодействующих NFC-устройств в режиме равноправной коммуникации
Режим считывания/записиРежим, в котором NFC-устройство, находясь в состоянии опроса, выполняет ряд действий и ведет себя как PCD
Эмулятор картыРежим, в котором NFC-устройство, находясь в состоянии прослушивания, выполняет ряд действий и ведет себя как PICC
Равноправное соединение (Peer-to-peer, P2P)Определенный «Форумом NFC» коммуникационный режим, который используется для связи между двумя устройствами и обеспечивает наиболее быстрый обмен данными
Активное устройствоОдно из взаимодействующих устройств NFC, которое временно генерирует собственное электромагнитное РЧ-поле
Пассивное устройствоОдно из взаимодействующих устройств NFC, которое не генерирует собственное электромагнитное РЧ-поле
Активный режимОдин из двух режимов работы (по определению «Форума NFC»), в которых активное устройство взаимодействует с пассивным
Пассивный режимОдин из двух режимов работы (по определению «Форума NFC»), в которых активное устройство взаимодействует с пассивным.
RFРадиочастотное поле (радиочастота, РЧ)
RFID (Radio-Frequency Identification)Радиочастотная идентификация – стандартизированная технология, являющаяся основой для технологии NFC
NDEP (NFC Data Exchange Protocol)Протокол обмена данными NFC, определенный в ISO/IEC 18092 как полудуплексный протокол поблочной передачи данных
NFCIP (NFC Interface and Protocol)Интерфейс и протокол NFC
NDEF (NFC Data Exchange Format)Формат обмена данными NFC
DEP (Data Exchange Protocol)Протокол обмена данными
SNEP (Simple NDEF Exchange Protocol)Простой протокол обмена NDEF
HFВысокая частота
MCUМикроконтроллер, МК
ISO (International Standardization Organization)Международная организация по стандартизации
IEC (International Electro-technical Commission)Международная электротехническая комиссия
ASK (Amplitude Shift Keying)Амплитудная манипуляция, АМ
FSK (Frequency Shift Keying)Частотная манипуляция, ЧМ
PSK (Phase Shift Keying)Фазовая манипуляция, ФМ
OOK (On-Off Keying)Передача сигнала с амплитудной манипуляцией
VHBR (Very High Bit Rate)Сверхскоростная передача данных
ECMA (European Computer Manufacturers Association)Европейская ассоциация производителей компьютеров
URIУнифицированный идентификатор ресурса: URL для унифицированного адреса ресурса; URN для унифицированного названия ресурса
MIME (Multipurpose Internet Mail Extensions)Многоцелевые расширения электронной почты, стандарт интернета, расширяющий формат электронной почты
FELICA®, net FeliCa®Система смарт-карт RFID от компании Sony

Запись

void NfcManager::setDataForWrite(const QString &text, const QString &uri)
{
    m_textForWrite = text;
    m_uriForWrite = uri;
}


Этот метод должен вызываться перед попыткой записи для того, чтобы установить новые значения Uri и/или Text. Если его не вызвать на тег будут записаны предыдущие данные (такой подход пригодится, если нужно записать много однотипных тегов)

void NfcManager::writeTarget(QNearFieldTarget *target)
{
    if (m_textForWrite.isEmpty() && m_uriForWrite.isEmpty())
        return;

    m_cachedTarget = target;
    QNdefMessage message;

    if (!m_textForWrite.isEmpty() && !m_uriForWrite.isEmpty()) {
        NdefNfcSmartPosterRecord smartPosterRecord;
        smartPosterRecord.setTitle(m_textForWrite);
        smartPosterRecord.setUri(QUrl(m_uriForWrite));
        message.append(smartPosterRecord);
    } else if (!m_textForWrite.isEmpty()) {
        QNdefNfcTextRecord textRecord;
        textRecord.setText(m_textForWrite);
        message.append(textRecord);
    } else {
        QNdefNfcUriRecord uriRecord;
        uriRecord.setUri(QUrl(m_uriForWrite));
        message.append(uriRecord);
    }

    connect(target, SIGNAL(error(QNearFieldTarget::Error,QNearFieldTarget::RequestId)), this, SLOT(errorHandler(QNearFieldTarget::Error,QNearFieldTarget::RequestId)));
    connect(target, SIGNAL(ndefMessagesWritten()), this, SIGNAL(tagWriteFinished()));
    target->writeNdefMessages(QList<QNdefMessage>() << message);
}

Главный метод записи не сложнее чем метод чтения. В блоке условий мы просто выбираем вид записи. Если присутствует только Uri или Text, то создается соответствующий тип, если же заполнены оба поля то создается запись типа Smart Poster.

После этого мы снова подключаем обработчик ошибок. Но, обратите внимание, поскольку в бэкенде нам не нужно никакой логики обработки успешного завершения чтения, мы пробрасываем сигнал на сигнал, который в дальнейшем поймаем в QML.

Индекс модуляции

ISO/IEC 14443-2 определяет индекс модуляции. Модуляция NFC-B 10% означает, что индекс модуляции равен 10%, но спецификация допускает отклонения в диапазоне 8…14%. Способ вычисления индекса модуляции, а также широко используемой глубины модуляции показан на рисунке 4. Между двумя измерениями существует детерминированная связь, показанная в таблице 4.

Таблица 4. Индекс модуляции в сравнении с глубиной модуляции

Индекс модуляции, %Глубина модуляции, %
885,2
983,5
1081,8
1180,2
1278,6
1377
1475,4

Величина индекса модуляции составляет примерно половину того, что предполагает соответствующая диаграмма. Например, разница между значениями A и B на рисунке 4 составляет около 30%, тогда как реальная величина индекса модуляции для отображаемого сигнала составляет всего около 15%.

Разработчики, впервые создающие считыватели NFC-B, часто неправильно интерпретируют требование наличия индекса модуляции 10% и устанавливают глубину модуляции 90%, что соответствует примерно 5% индекса модуляции. В результате их конструкция не соответствует спецификации.

Как указано в разделе 9.1.2 ISO/IEC 14443-2, времена нарастания и спада огибающей модуляции должно составлять две микросекунды или менее. Разница между верхним и нижним амплитудными значениями (A — B) не может превышать 10%. Рисунок 4 иллюстрирует определение A и B.

Ис для динамических меток

ИС подобного типа обеспечивают функционирование динамической метки NFC. Динамические метки обычно встраивают в электронное устройство.

Они имеют такие же свойства и ведут себя так же, как статические метки при взаимодействии с NFC-устройством (считывателем). Помимо полностью поддерживаемой функциональности статических меток, устройство, в которое встроена динамическая метка, имеет возможность чтения и записи содержимого памяти метки.

Чтение/запись другим устройством NFC и чтение/запись MCU основного устройства не обязательно происходят в один и тот же момент времени. Например, содержимое динамической метки может быть изменено, когда питание основного устройства метки выключено, а чтение/запись локального MCU может произойти, когда включится питание основного устройства метки, причем это может случиться через несколько часов.

На рисунке 22 показана типичная блок-схема ИС для динамической метки. ИС STMicroelectronics серий M24LR, M24SR и ST25D разработаны и оптимизированы для использования в динамических метках. Опционально для пробуждения микроконтроллера доступен сигнал GPO/прерывания, чтобы оптимизировать энергопотребление.

Как записать nfc-метку?

Многие пользователи считают, что запись NFC-меток — это удел профессионалов. А без соответствующих команд такие изделия являются бесполезными — прикосновение к ним не будет вызывать никаких действий. Как же запрограммировать ту или иную команду, используя смартфон на базе Android? Неужто это действительно сложно? Спешим вас порадовать, всё намного легче, чем вы думаете.

Записать то или иное действие, которое будет совершаться смартфоном после прикосновения к NFC-метке, помогает специальная программа. Подобные приложения легко находятся в Google Play. Мы рекомендуем установить на свой девайс NFC Tools и NFC Tasks.

Работать, например, с NFC Tools очень просто. Достаточно перейти во вкладку «Tasks», после чего остается лишь выбрать задачу, которую будет выполнять смартфон при его поднесении к конкретной NFC-метке. И не забудьте затем прикоснуться к стикеру или брелку.

Само собой, NFC-связь должна быть активирована в настройках устройства. Подробнее об использовании технологии NFC читайте в отдельной статье.

Аналогичным образом устроены практически все программы, служащие для связи с NFC-метками. Какие-то предлагают на выбор простые команды. Другие — более сложные и составные. Не забывайте, что не все они являются бесплатными. Однако и дорогими такие приложения не бывают.

Каковы различия между nfc и rfid?

Как это работает? | NFC-чип -
EPC RFID-метка, используемая в торговой сети Wal-Mart

RFID (Radio Frequency Identification) – это технология, используемая для идентификации и определения характеристик объекта с помощью метки, излучающей радиоволны. Этот процесс, который классифицируется как RTLS или технология определения местоположения в реальном времени, особенно полезен для обеспечения прослеживаемости товаров.

Поэтому она очень полезна в здравоохранении, автомобилестроении, транспорте и логистике, а также в военном секторе. Однако между ними есть существенная разница. В то время как RFID обеспечивает передачу больших объемов данных, NFC используется для передачи ограниченной информации.

Передача данных nfc-v

Передача данных от VCD к VICC в режиме NFC-V. Передача сигналов данных от VCD к VICC в режиме NFC-V основана на 10%- или 100%-модуляции методом амплитудной манипуляции (ASK). Двоичное кодирование использует метод импульсно-позиционной модуляции (Pulse Position Modulation, PPM) «один-из-четырех» или «один-из-256».

На рисунке 14 показана передача данных от VCD к VICC с использованием кодирования методом PPM «один-из-четырех». Сигнал, в сущности, является интервалом, занимающим одну восьмую символьного периода. Один символ кодирует битовую пару. Импульс каждого из четырех значений битовой пары занимает временной интервал, зарезервированный для него в символьном периоде. Символы «Начало кадра» (SOF) и «Конец кадра» (EOF) располагаются в неиспользованных битовыми парами временных слотах.

Использование PPM для кодирования данных обеспечивает высокий коэффициент заполнения РЧ-поля, в особенности в случае системы «один-из-256». Это позволяет использовать высокий индекс модуляции, обеспечивая устойчивые сигналы передачи данных как в NFC-A, сохраняя при этом низкий уровень РЧ-энергии, как в режиме NFC-B.

Передача данных от VICC к VCD в режиме NFC-V. Передача сигналов данных от VICC к VCD в режиме NFC-V выполняется с 10%-модуляцией ASK, создавая поднесущую 424 кГц и амплитудную манипуляцию (OOK) на поднесущей. Для кодирования битового потока данных используется манчестерский код. Другой вариант технологии NFC-V основан на добавлении частотной манипуляции (FSK), чередуя две поднесущие – 424 и 484 кГц.

Для кодирования двоичного потока данных используется манчестерский код. В этом режиме скорость передачи данных немного изменяется. На рисунке 15 показано, как VICC передает данные к CD с использованием OOK. В случае использования FSK вместо OOK состояние выключенного периода поднесущей заменяется поднесущей на частоте 484 кГц.

Этот стандарт позволяет VCD и VICC выбирать наилучшие условия для коммуникации в соответствии с различными эксплуатационными требованиями, начиная от использования на ближнем расстоянии при высоком уровне РЧ-шума и заканчивая удаленным расстоянием при пониженном уровне РЧ-шума.

Пишем свой класс для smart poster

Ниже я расскажу как создать свой тип

NDEF

записи на примере создания типа для Smart Poster записи.


Сразу оговорюсь, что мой тип упрощен. Он не поддерживает ни Action ни Size ни даже иконки, но он позволяет одновременно хранить текст и ссылку.

Так выглядит объявление для класса нашего Smart Poster’а:

class NdefNfcSmartPosterRecord : public QNdefRecord
{
public:
    Q_DECLARE_NDEF_RECORD(NdefNfcSmartPosterRecord, QNdefRecord::NfcRtd, "Sp", QByteArray())

    void setTitle(const QString &title, const QString &locale = "en");
    void setUri(const QUrl &uri);

    QString title(const QString &locale = "en") const;
    QUrl uri() const;

    //TODO:  Add icon, action and size fields support
private:
     RecordPart readPart(int &offset) const;
};

Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD(NdefNfcSmartPosterRecord, QNdefRecord::NfcRtd, "Sp")

Итак, разработчики Qt Mobility уже позаботились о том, чтобы нам было проще жить, и создали два специальных макроса, которые выполняют всю самую черновую работу.

Параметрами для макросов служат: имя класса, тип записи (для Smart Poster’а это QNdefRecord::NfcRtd) и «Имя типа» — аббревиатура для распознавания в теге. А также последний параметр в Q_DECLARE_NDEF_RECORD являются данные для первоначальной инициализации данных, в нашем случае это пустой массив байт.

Теперь посмотрим на реализацию методов чтения и записи.

Простая структура для хранения разобранной части записи:

struct RecordPart {
    enum Type {
        Uri,
        Text,
        Action,
        Icon,
        Size,
        Unknown
    };

    Type type;
    QString text;
    QString locale; // For text type
    quint8 prefix; // For Uri type
    RecordPart()
        : type(Unknown), text(QString()), locale(QString()), prefix(0)
    {

    }
};

Для начала рассмотрим методы для чтения:

Стандарты

Технология NFC основана на таких стандартах как ISO/IEC 14443, ISO/IEC 15693, ISO/IEC 18092, ECMA-340, ECMA-352 и других.

Соответствие вариантам ISO/IEC 14443A (тип A) и ISO/IEC 14443B (тип B) обозначается в этом документе как NFC-A и NFC-B. Соответствие JIS X 6319 4 и протоколу FELICA обозначаются NFC-F. Соответствие ISO/IEC 15693 обозначается NFC-V, где «V» означает удаленное рабочее расстояние (максимум 1 метр).

Сфера применения стандартизована в трех коммуникационных режимах NFC с их протоколами, форматами обмена данными и скоростью передачи битов. В настоящее время скорость передачи данных составляет 106, 212, 424 и 848 кбит/с, а в пределах NFC-V — 1,65, 6,62 (ASK с OOK), 6,67 (ASK с FSK), 26,48 (ASK с OOK) и 26,69 (ASK с FSK) кбит/с.

В дополнение к стандартам международных организаций «Форум NFC» предоставляет ряд технических спецификаций протоколов, формат обмена данными, типы меток, тип записей и так далее.

NFC позволяет смартфонам работать на базовом уровне с помощью устаревших считывателей RFID. При коммуникации в режиме эмуляции карты NFC-устройство должно передавать считывателю прежнего поколения как минимум уникальный ID-номер. «Форум NFC» определил общий формат данных, называемый NFC Data Exchange Format (NDEF), который сохраняет и переносит различные элементы.

На рисунке 19 показан упрощенный набор уровней, формирующих технологию NFC. Верхние уровни относятся конкретно к NFC, тогда как нижние слои применимы и к таким технологиям как RFID.

На рисунке 20 представлен обзор стандартов и спецификаций, связанных с NFC.

Структура ndef

Формат обмена данными NDEF (рисунок 18) является одним из основных элементов, который стандарт NFC добавляет к обычному RFID. NDEF используется во всех устройствах NFC независимо от типа базовой метки или технологии устройств NFC.

Записи NDEF стандартизированы, поэтому устройства NFC знают, как их интерпретировать. Вот некоторые из записей NDEF:

  • запись простым текстом;
  • URI;
  • смарт-постер;
  • подпись;
  • vCard (в формате стандартной электронной платежной карты);
  • сопряжение через Bluetooth или Wi-Fi.

NDEF является компактным форматом двоичных сообщений, разработанным для инкапсулирования полезной нагрузки приложения, содержащей в одном сообщении NDEF одну из множества записей. Записи NDEF могут быть одного или разных типов, а размер каждой из них ограничен (232 – 1) байтами.

Сообщение NDEF представляет собой цепочку записей NDEF, что можно рассматривать как абзац с дискретным объемом информации, а записи NDEF в качестве предложений этого абзаца, каждое из которых передает один фрагмент информации. Как количество, так и размер предложений в абзаце являются переменной величиной.

Запись NDEF состоит из заголовка и полезной нагрузки. Заголовок описывает полезную нагрузку с тремя элементами метаданных: длиной полезной нагрузки, типом полезной нагрузки и, опционально, идентификатором полезной нагрузки.

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

Тип полезной нагрузки NDEF указывает идентификатор. В качестве идентификаторов типа NDEF поддерживает унифицированные индикаторы ресурса (URI), конструкцию медиатипа MIME и определенный тип формата NFC. Указывая тип полезной нагрузки, можно отправить ее в соответствующее пользовательское приложение.

Типы меток

«Форумом NFC» изначально определены четыре типа меток NFC. Дополнительный, пятый тип относится к технологии NFC-V и сейчас также включен в спецификации Форума.

В таблице 3 представлен обзор типов NFC-меток. Скорость передачи данных выше 100 кбит/с, отображаемая в таблице 2, а также используемая в этом документе, округляется до ближайшего целого числа кбит/с.

Таблица 3. Типы NFC-меток

ОсобенностиТип 1Тип 2Тип 3Тип 4Тип 5
СтандартISO/
IEC 14443A
ISO/
IEC 14443A
ISO/
IEC 18092,
JIS X 6319-4, FELICA
ISO/IEC 14443A
ISO/IEC 14443A
ISO/
IEC 15693
Память, кбайт0,96…248…223264
Скорость передачи данных, кбит/с106106212; 424106; 212; 42426,48
ВозможностиЧтение; чтение/запись; только чтениеЧтение; чтение/запись; только чтениеЧтение; чтение/запись; только чтениеЧтение; чтение/запись; только чтение; заводская конфигурацияЧтение; чтение/запись; только чтение
Предотвращение конфликтовНетДаДаДаДа
ПримечанияПростота, невысокая эффективностьВысокая цена, комплекс приложенийУдаленная зона (vicinity)

Метки типа 1 соответствуют требованиям ISO/IEC 14443A. Они способны работать в режиме чтения/записи и могут настраиваться пользователем для режима «только чтение». Размер памяти варьируется от 93 байт до 2 кбайт, а скорость коммуникации или передачи данных составляет 106 кбит/с. Метки типа 1 не поддерживают механизм предотвращения конфликтов.

Метки типа 2 соответствуют требованиям ISO/IEC 14443A. Они способны работать в режиме чтения/записи и могут настраиваться пользователем для режима «только чтение». Размер памяти варьируется от 48 байт до 2 кбайт, а скорость коммуникации или передачи данных составляет 106 кбит/с. Метки типа 2 поддерживают механизм предотвращения конфликтов.

Метки типа 3 соответствуют стандартам ISO/IEC 18092 и JIS X 6319-4 за исключением поддержки шифрования и аутентификации. Даже если имеется возможность чтения/записи, метка типа 3 может быть настроена на режим «только чтение». В процессе эксплуатации метки типа 3 может использоваться специальное сервисное оборудование для повторной записи данных.

Метки типа 4 соответствуют стандарту ISO/IEC 14443 версий A/B. Режим работы метки типа 4 «только для чтения» устанавливается на заводе-изготовителе, и для обновления данных метки требуется специальное сервисное оборудование. Размер памяти метки типа 4 — до 32 кбайт, а скорость передачи данных составляет 106 кбит/с, 212 кбит/с и 424 кбит/с. Метки типа 4 поддерживают механизм предотвращения конфликтов.

Метки типа 5 (NFC-V) недавно были добавлены в спецификацию «Форума NFC». Такая метка основана на стандарте ISO/IEC 15693, содержит более 64 кбайт памяти, поддерживает скорость передачи данных 26,48 кбит/с и механизм предотвращения конфликтов.

Чтение

Теперь рассмотрим методы чтения тега:

void NfcManager::readTarget(QNearFieldTarget *target)
{
    connect(target, SIGNAL(error(QNearFieldTarget::Error,QNearFieldTarget::RequestId)), this, SLOT(errorHandler(QNearFieldTarget::Error,QNearFieldTarget::RequestId)));
    connect(target, SIGNAL(ndefMessageRead(QNdefMessage)), this, SLOT(readRecords(QNdefMessage)));
    target->readNdefMessages();

}


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

После этого мы просто вызываем метод для чтения:

void NfcManager::readRecords(const QNdefMessage &message)
{
    if (message.isEmpty())
        return;

    QNdefRecord record = message.at(0); // Read only first
    readRecord(record);
}

Если чтение прошло успешно, то мы попадем в данный слот, где получим первую запись из списка присутсвующих на теге записей.


Да-да, по спецификации на теге может быть несколько записей, но как говорит документация, для

SymbianHarmattan

доступно чтение и запись только одной записи.

void NfcManager::readRecord(const QtMobility::QNdefRecord &record)
{
    DataContainer *result = 0;

    if (record.isRecordType<QNdefNfcUriRecord>()) {
        QNdefNfcUriRecord uriRecord(record);
        result = new UriDataContainer(uriRecord.payload(), uriRecord.uri().toString());
    }
    else if (record.isRecordType<QNdefNfcTextRecord>()) {
        QNdefNfcTextRecord textRecord(record);
        result = new TextDataContainer(textRecord.payload(), textRecord.text());
    }
    else if (record.isRecordType<NdefNfcSmartPosterRecord>()) {
        NdefNfcSmartPosterRecord smartPosterRecord(record);
        result = new SmartPosterDataContainer(smartPosterRecord.payload(), smartPosterRecord.uri().toString(), smartPosterRecord.title());
    }
    else {
        result = new DataContainer(record.payload());
    }

    emit tagReadFinished(result);
}

И вот, после нескольких переходов по вспомогательным методам мы добрались до самого главного метода, который превращает информацию закодированную в теги в привычные нам буквы.

На данный момент

Qt Mobility

из коробки поддерживает только два вида записей это ссылки (

Uri

) и текст (

Text

), к третьему типу —

Smart Poster

мы еще вернемся ниже.


Как можно заметить данные из записи сразу помещаются в некий новый объект, это простые объекты, которые я специально создал для облегчения передачи данных в

QML

В конце вызывается сигнал, содержащий объект с данными. В дальнейшем мы будем ловить этот сигнал в QML.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *