- Что такое nfc?
- Smart poster, что это?
- Что такое nfc tag?
- На что еще способен nfc
- 1 、 умный гвоздь
- 10 、 идентификация и отслеживание домашних животных
- 15 、 начни свою игру
- 20 、 используется для защиты от подделок
- 24 、 плакат nfc
- 25 、 умное кольцо
- 26 、 тег имплантата nfc
- 5 、 полки-talking store
- 8 、 визитные карточки
- Infobanner
- Label и textfield
- Listview
- Nfc: настоящее и будущее технологии
- Qmlregistertype
- Setcontextproperty
- Tnf_well_known с rtd_text (mime-тип с записью простого текста)
- Toolbar
- Алгоритм работы nfc
- Архитектура nfc
- Взаимодействие
- Дополнительно
- Запись
- Заставляем приложение перехватывать обработку nfc tags
- Использование nfc
- Какой длины может быть ndef-сообщение?
- Перехватчик
- Перспективы распространения nfc
- Пишем свой класс для smart poster
- Структура ndef
- Типы nfc-меток
- Читаем ndef-сообщение
- Чтение
- Заключение
Что такое nfc?
Если верить Википедии,
NFC(Near Field Communication)
— это технология беспроводной высокочастотной связи малого радиуса действия, которая дает возможность обмена данными между устройствами, находящимися на расстоянии около 10 сантиметров.
Существует три наиболее популярных варианта использования NFC технологии в мобильных телефонах:эмуляция карт — телефон прикидывается картой, например пропуском или платежной картой;режим считывания — телефон считывает пассивную метку (Tag), например для интерактивной рекламы;режим P2P — два телефона связываются и обмениваются информацией.
Мы будем рассматривать второй способ использования, а именно чтение пассивной метки, мало того, мы также научимся записывать информацию на такие метки с помощью телефона
Smart poster, что это?
Итак, Smart Poster это особый вид NFC записи, который может содержать в себе одновременно ссылку, текстовый заголовок (на нескольких языках), графические иконки в форматах
jpeg
или
png
и даже анимированную иконку в формате mpeg.
Помимо этого могут присутсвовать еще два поля:
Action
— подсказывает телефону какое приложение и как нужно открыть для обработки uriRecord
Size
— простое целочисленное число, отображающее размер загружаемого контента по ссылке.
Что такое nfc tag?
NFC Tag
— это и есть наша пассивная метка. На картинке показан внешний вид того как она может выглядеть, то есть, как правило, это наклейка из плотной бумаги, в которую встроен микрочип и антенна из фольги. NFC теги бывают нескольких типов, от типа также зависит максимальный допустимый размер данных. Я являюсь счастливым обладателем нескольких меток Type 2, 192 байта, привезенных с
Qt Developer Days 2021
. Чтож, 192 байта не густо, но для наших экспериментов хватит.
На что еще способен nfc
Но не только возможностью онлайн-платежей за товары и услуги интересен NFC. Недавно Apple анонсировала функцию Apple Car Reys, которая позволяет создавать виртуальные ключи для автомобилей, записывать их в память, а потом посредством них можно отпирать замки или запускать двигатель, просто приложив аппарат к контактной зоне.
Такой способ отпирания выглядит безопасным и надежным. Минимизируется риск утери, а использование биометрической идентификации личности владельца позволяет свести на нет возможность несанкционированного доступа к устройству и, соответственно, внутрь автомобиля посторонних лиц.
Но и это не все, что умеет NFC. Правда, чудес эта технология не вершит. Это простой обмен данными на низкой скорости. Она плохо подходит для передачи больших файлов и для ее работы необходимо небольшое расстояние между совместимыми устройствами.
Где применяется NFC:
- наиболее популярный способ использования технологии — бесконтактная оплата одним касанием с применением платежных систем, например, таких как Google Pay, Apple Pay и Samsung Pay;
- теги и метки NFC, которые позволяют смартфону считывать и выводить на экран определенную информацию. Например, можно считать сведения с метки в супермаркете, получив информацию о составе продукта, его истории, происхождении и цене;
- целый ряд колонок и Bluetooth-наушников имеют чип NFC. Это позволяет управлять ими при помощи смартфона;
- некоторые бытовые приборы обладают поддержкой NFC. Например, эту технологию можно найти в стиральных и сушильных машинах LG. Это позволяет быстро активировать заданный цикл работы;
- обладают поддержкой NFC и ряд игровых приложений. Например, она есть New Nintendo 3DS и в платформе Amiibo от Nintendo для вызова ряда функций;
- все чаще поддержку NFC можно встретить в спортзалах, чтобы пользователь мог легко и быстро получить информацию о тренировках и тренажерах;
- на рынке начали появляться безбатарейные температурные датчики—«пластыри» с NFC и ушные термометры для мгновенного измерения температуры тела.
1 、 умный гвоздь
Умные ногти NFC представляют собой инновационную комбинацию тегов NFC и маникюра, которые еще раз освежают наше воображение об использовании тегов NFC.
Вставьте метку для ногтей NFC в ноготь и приклейте ее к пальцу, и тогда пришло время стать свидетелем чудес. Вам больше не нужно беспокоиться о том, что вы забудете свою автобусную карту, карту доступа, карту лифта, платежную карту и т. Д. Умный гвоздь NFC поможет вам выполнить все ваши задачи.
10 、 идентификация и отслеживание домашних животных
Для больниц или центров содержания домашних животных, теги домашних животных может быстро идентифицировать домашних животных и записывать их состояние здоровья и кормления, что удобно для управления домашними животными.
Для частных лиц вы можете записывать данные в тег NFC, включая имена домашних животных, медицинские записи, контактную информацию владельца и подробную информацию, чтобы предотвратить ее потерю.
15 、 начни свою игру
Метки и чипы NFC могут быть встроены во многие электронные продукты, что дает им возможность быстро подключаться и взаимодействовать и дает больше возможностей для воображения при создании некоторых игр и развлекательных продуктов. Nintendo и Sony представили NFC на игровом поле.
Nintendo представила amiibo, физическую игрушку со встроенным чипом беспроводной связи ближнего радиуса действия (NFC), который может подключаться к Wii U по беспроводной сети. Когда вы входите в режим битвы Smash, вы можете коснуться области обнаружения NFC amiibo, чтобы добавить персонажей в игру. . Может ты хочешь знать Как создать свои собственные NFC-теги amiibo?
20 、 используется для защиты от подделок
Потребителям сложно отличить поддельную продукцию от подлинной. Многие бренды теперь начинают использовать технологию защиты от подделки NFC для прикрепления Хрупкие этикетки NFC для защиты от подделокдля своей продукции.
Если ваш телефон поддерживает функцию NFC, вы можете прочитать метку NFC и узнать название продукта, спецификацию, производственную партию, дату производства, канал продаж и другую информацию.
24 、 плакат nfc
Плакат NFC также известный как интерактивный плакат NFC, часто используется в плакатах фильмов или продвижении бренда. Еще в 2021 году Estee Lauder использовала умные плакаты NFC в своей брендинговой кампании. Кроме того, Samsung также использовала интерактивные плакаты NFC в своей рекламной деятельности.
Прикоснувшись к плакату мобильным телефоном, вы сможете увидеть песни и истории, выбранные для вас компанией Samsung, на своем мобильном телефоне. Сочетание технологии NFC и традиционного плаката поражает воображение.
25 、 умное кольцо
Кольцо NFC это удобное кольцо, стильное и универсальное, маленькое и мощное. Вы можете использовать его как автобусную карту, оплачивать покупки или обеды в магазине или дистанционно открывать дверь.
Хотя эти функции могут быть выполнены с помощью карты NFC и телефона или часов с поддержкой NFC, было бы необычно, если бы вы могли сделать это с помощью всего одного звонка.
Метки NFC — очень интересный и дешевый продукт, и теперь все больше и больше смартфонов имеют функции NFC. Как энтузиаст, вы можете попробовать изучить различные способы воспроизведения тегов NFC. Как предприниматель, вы можете подумать о том, как объединить свои продукты с технологией NFC, чтобы они выделялись среди других.
26 、 тег имплантата nfc
Что может сделать метка имплантата NFC? Когда вы просыпаетесь утром и хотите включить телевизор, вам не нужно искать пульт; просто помашите телевизору, и телевизор включится автоматически. После завтрака не нужно брать с собой ключ на работу, махать рукой перед дверью, когда вы вернетесь домой, и дверь откроется для вас.
Эти странные вещи, скорее всего, станут реальностью в будущем, и все, что вам нужно сделать, это имплантировать микрочип в свое тело.
Xinyetong, ваш надежный партнер, специализирующийся на RFID уже 12 лет. Если у вас есть вопросы по продуктам RFID / NFC, свяжитесь с нами! Если вы хотите узнать, как писать теги NFC, вы можете прочитать эту статью о том, как программировать NFC. имеют теги.
5 、 полки-talking store
Будет хорошей рекламой, если полки ваших супермаркетов смогут «разговаривать». Это сделала компания Kraft Foods, которая использовала метки NFC в американских супермаркетах.
Покупатели могут получать полезный контент каждый раз, когда они сталкиваются с тегом на полке, включая специальные предложения, обучающие видео или рецепты, и делиться ими с кем-нибудь.
Кроме того, клиентам будет предложено загрузить приложение iFood Assistant от Kraft, чтобы просмотреть больше рецептов, создать списки покупок и найти ближайший магазин дома.
8 、 визитные карточки
Для людей с плохой памятью, Визитные карточки NFC подобны своевременному дождю. Вам не нужно беспокоиться о том, чтобы упустить потенциальных клиентов из-за того, что вы забыли свою визитную карточку, и вы можете избежать смущения из-за отсутствия визитной карточки, когда кто-то ее просит.
Визитная карточка NFC экологически чиста и проста в использовании. Одним касанием вы можете поделиться своей контактной информацией, названием компании, адресом веб-сайта и т. Д.
Infobanner
В случае, если при чтении/записи тега произошла ошибка, мы должны каким-то образом сообщить пользователю об этом и попросить поднести метку к телефону еще раз, для этого можно использовать элемент InfoBanner
InfoBanner{
id: errorBanner
timerEnabled: true
timerShowTime: 3 * 1000
topMargin: header.height 20
leftMargin: 20
}
Label и textfield
Для отображения текста можно использовать компонент
Label
— это не более чем стилизованная обертка над стандартным
Text
элементом.
Label {
id: touchLabel
.....
font.pixelSize: 60
text: qsTr("Touch a tag")
}
TextField — это продвинутая обертка над стандартным TextInput
TextField {
id: textEdit
.....
placeholderText: qsTr("Text")
text: "yandex"
}
Listview
На главном экране мы можем наблюдать список действий которые можно выполнить, подобный список делается так:
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
— ни что иное как одна запись этой модели.
Nfc: настоящее и будущее технологии
Привет, хабравчане!
О технологии NFC сейчас не говорит лишь ленивый. Тем более странным выглядит факт, что полной и интересной информации об этой заманчивой технологии на Хабре почти нет. Nokia стояла во главе ассоциации NFC Forum, созданной для продвижения использования NFC в мобильных устройствах и бытовой электронике, а значит, нам есть, что рассказать.
NFC (Near Field Communication, «Коммуникация ближнего поля» или «связь ближнего действия») — это технология беспроводной высокочастотной связи малого радиуса действия, обеспечивающая обмен данными между устройствами на расстоянии нескольких сантиметров. Она объединяет интерфейс смарт-карты и считывателя в единое устройство. Иными словами, обычному пользователю NFC позволяет быстро перекинуть контакт или видеоролик с одного смартфона на другой простым прикосновением этих устройств, а также совершать бесконтактные платежи, заменив банковские карты. Как это будет выглядеть на примере смартфонов Nokia, можно посмотреть на следующем ролике:
На самом деле применений технологии NFC можно найти целую массу. С таким чипом (и с соответствующим программным обеспечением) смартфон уже сейчас может заменить банковские карты, транспортные билеты, скидочные карты и смарт-карты доступа, билеты в кино и парковочные карты. При распространении технологии NFC в ход пойдут и интерактивные рекламные доски (так называемые смарт-плакаты), при взаимодействии с которыми смартфоны смогут считывать с них информацию. В недалёком будущем инициализацию Bluetooth-соединения между устройствами можно будет ускорить именно благодаря NFC: десятая доли секунды (против шести секунд) — и устройства нашли друг друга. Поднеся к телевизору смартфон точно так же можно будет быстро установить соединение для стриминга видеозаписей или фотографий на большой экран. Забегая совсем вперёд (если вас не пугают футуристические взгляды) можно сказать, что с широким распространением NFC смартфоны смогут заменить вам ключи от дома и автомобиля. К слову, некоторые производители автомобилей (например, BMW) уже сейчас занимаются разработкой ключей по технологии NFC.

Из соображений безопасности многим вряд ли захочется возложить на смартфон функции банковской карты и ключа от дома, тем более одновременно. Но давайте сначала попробуем разобраться со спецификацией технологии и её историей, и уже после этого судить NFC.
- В бородатом 1983 году начинается история NFC. 17 мая того года Чарльз Вэлтон, электротехник по образованию, получает патент на «портативный радиочастотный излучатель-идентификатор». Так появляется само понятие RFID.
- 18 марта 2004 года компании Nokia, Royal Philips Electronics и Sony Corporation организуют NFC Forum — некоммерческую ассоциацию для продвижения и стандартизации технологии NFC для использования в бытовой электронике, компьютерах и мобильных устройствах.
- В 2006 году появляется первоначальная спецификация NFC-тегов и выходит первый коммерческий телефон с NFC-чипом — Nokia 6131.
- В мае 2009 года NFC Forum представляет режим peer-to-peer для передачи между устройствами с NFC-чипами различной информации: ссылок, контактов, данных для установления связи через Bluetooth.
- В марте 2021 года к NFC Forum присоединяется компания Google.
- В мае 2021 года Google анонсирует Google Wallet, мобильное приложение для привязки банковских карт к смартфонам с NFC-чипами. Вскоре пользователи смогут заменить кредитки своим смартфоном.
- В августе 2021 года Nokia объявляет о том, что все предстоящие Symbian-смартфоны будут комплектоваться чипами NFC.
Как видно, NFC Forum оказывает огромное влияние на ход развития технологии NFC, однако за её развитием стоят и другие участники. Так, глобальная торговая ассоциация операторов мобильной связи GSM Association (около 800 операторов, представленных в 219 странах мира) подала две значимые инициативы касательно NFC:
1) Mobile NFC Initiative. В рамках данной инициативы основные операторы, контролирующие почти половину глобального рынка, описали (pdf) своё видение технологии NFC.
2) Pay Buy Mobile Initiative. На этот раз операторы постарались определить (pdf) глобальный подход к использованию технологии связи ближнего действия в мобильных устройствах для взаимодействия с платёжными системами.
Помимо GSMA в жизни NFC участвует европейский консорциум StoLPaN (Store Logistics and Payment with NFC), созданный для изучения возможностей интеграции NFC, беспроводных сетей обмена данными, и мобильного обмена информацией.
Технология NFC является логическим продолжением технологии RFID, и её основное отличие от последней — ограниченный радиус действия. В то время, как дистанция считывания активных RFID-меток может достигать нескольких сотен метров, метки NFC доступны лишь в пределах 5-10 сантиметров. Рабочая частота NFC-чипов находится в нелицензируемом радиочастотном диапазоне ISM band, использующимся для промышленных, медицинских и научных целей, и составляет 13,56 МГц, а скорость передачи информации может быть равна 106, 212 или 424 кбод/сек.
NFC поддерживает RFID стандарты ISO 14443/Mifare, FeliCa и ISO/IEC 18092. Карты, выполненные по стандарту ISO 14443, в народе называются БСК — бесконтактные смарт-карты, — именно они используются в нашем метро; для мобильных платежей и оплаты билетов в общественном транспорте Китая и Японии используется технология FeliCa. Как и в стандарте ISO 14443/Mifare в NFC связь поддерживается посредством взаимной индукции рамочных антенн. Как видите, технология полностью подходит под ранее сложившуюся инфраструктуру транспортных карт и мобильных платежей.

NFC Forum определил три коммуникационных режима работы NFC-чипов:
К слову, режим эмуляции карт — самый интересный, особенно с учётом позавчерашнего выхода Google Wallet.
Google Wallet — это первое массовое приложение для смартфонов для осуществления бесконтактных платежей в одно касание. Добиться такого, конечно, удалось благодаря использованию NFC-чипов в смартфонах. Несмотря на то, что приложение доступно лишь американским пользователям оператора Sprint со смартфоном Google Nexus S 4G, которые к тому же должны являться клиентами банка Citi с картами MasterCard, его потенциал огромен. В дальнейшем Google планирует добавить поддержку других платёжных сетей (Visa, Discover и American Express уже объявили о сотрудничестве с поисковиком) и целого ряда новых смартфонов с NFC-чипами. А их будет предостаточно: анонсированные недавно Nokia 600, Nokia 700 и Nokia 701 будут с NFC-чипами; уже вышедший Nokia C7 также получит поддержку NFC с выходом Symbian Belle; более того, все последующие Symbian-смартфоны будут оснащаться NFC-чипами.
На счёт безопасности при совершении покупок через Google Wallet не стоит беспокоиться. Во-первых, данные банковских карт хранятся не в памяти телефона, а на специальном чипе PN65. Данный чип используется в картах стандарта EMV; о его безопасности говорят следующие детали: чип шифрует все данные, имеет автономное питание, удаляет всю информацию при попытке физического взлома. Во-вторых, NFC-антенна не работает, если телефон выключен или заблокирован, а обмен данными с банком осуществляется при помощи технологии FirstData, обеспечивающей максимальную защищённость. В-третьих, пока пользователь не ввёл PIN-код, никакие данные с устройства считать невозможно в принципе.
В остальном мире технология NFC тоже набирает обороты.
Производители мобильных устройств всё чаще встраивают NFC. Nokia здесь безусловный лидер — все новые смартфоны компании на базе Symbian будут оснащены данными чипами. Впрочем, другие производители тоже стараются не отставать, не считая компании HTC и Apple, которые до сих пор игнорируют внедрение технологии в свои устройства.
NFC совсем скоро появятся в ноутбуках и нетбуках. На состоявшейся неделю назад конференции BUILD компания Microsoft заявила поддержку NFC в готовящейся к выходу операционной системе Windows 8. Розданные посетителям планшетные компьютеры с предустановленной Windows 8 уже имели NFC на борту.
В Японии и Южной Корее японскими KDDI, Softbank и корейской SK Telecom реализована в тестовом режиме поддержка NFC в банкоматах, магазинах, ресторанах, такси, на автомобильных заправках. О разработке международной системы бронирования билетов с поддержкой NFC сообщила компания DoCoMo в сотрудничестве с корейскими корпорациями KT и Samsung, хотя их технология несколько отличается от международного стандарта и не согласована с GSMA.
В конце 2021 года Telefónica, La Caixa и Visa запустили пилотный проект, охватывающий поддержкой NFC около 1500 европейских пользователей и 500 магазинов. В США в конце 2021 года AT&T Mobility, T-Mobile USA и Verizon Wireless объединились для создания ISIS, всеамериканской системы оплаты с использованием NFC. План внедрения системы рассчитан на 18 месяцев.
В России новая технология также нашла своё распространение.
- Пока МТС тестирует проход через турникеты в московском метрополитене с помощью мобильных телефонов, Мегафон и Билайн занимается тем же самым в Санкт-Петербурге. К слову, все эти решения от мобильных операторов реализованы на основе периферийных устройств, добавляющих поддержку NFC в телефоны без изначальной поддержки устройством соответствующей технологии. Эти периферийные устройства выполнены в формате MicroSD и UICC SIM-карт со встроенными беспроводными чипами, соответствующими стандарту бесконтактных карт ISO 14443/Mifare. Такие устройства бывают как со встроенной, так и без встроенной антенны. И, хотя из-за своего форм-фактора они подходят далеко не к каждому мобильному устройству, благодаря таким периферийным устройствам технологией NFC можно будет насладиться до массового появления телефонов со встроенной поддержкой технологии.
- Компания «АмбикТэк СПб» и ГУ «Организатор перевозок» внедряют в Северной столице проездные карты «Подорожник», позволяющие оплачивать ещё и проезд на наземном транспорте, а также работает над интеграцией в них магазинных дисконтных карт и бонусных систем.
- Мы с компанией «Технологии процессинга» в конце 2021 года начали тестовое внедрение NFC-системы оплаты проезда в авиаэкспрессе Москва – ”Шереметьево” и “Шереметьево” – Москва. В данном случае используются телефоны Nokia, поддержка NFC в которых существует изначально. Периферийные устройства для этого использовать не надо; всё, что требуется от пользователя — это установить специальное приложение на телефон Nokia для оплаты проезда.
Qmlregistertype
Как вы, конечно, помните после того как метка была прочтена мы испускаем сигнал содержащий объект с полученными данными. Для того чтобы этот объект стал доступен в QML мы должны зарегистрировать класс этого объекта в QML
qmlRegisterType<DataContainer>();
qmlRegisterType<UriDataContainer>();
qmlRegisterType<TextDataContainer>();
qmlRegisterType<SmartPosterDataContainer>();
Вставив этот код в
main.cpp
, мы регистрируем классы данных для всех типов имеющихся у нас данных.
Однако, запрещаем создавать подобные объекты напрямую из QML.
Setcontextproperty
Для того, чтобы наш QML код мог видеть наш класс для управления чтением и записью, мы должны сообщить декларативному движку о существовании объекта этого класса, поэтому в main.cpp мы пишем:
NfcManager *nfcManager = new NfcManager();
viewer->rootContext()->setContextProperty("NfcManager", nfcManager);
То есть мы создаем объект NfcManager и указываем движку, что мы должны иметь доступ к нему из QML.
Кстати в последнем обновлении QtSDK что-то сломали, и для того, чтобы этот код корректно заработал, надо применить workaround описанный в багтрекере.
Tnf_well_known с rtd_text (mime-тип с записью простого текста)
Создать NDEF-запись TNF_WELL_KNOWN можно следующим образом:
Kotlin
fun createTextRecord(payload: String, locale: Locale, encodeInUtf8: Boolean): NdefRecord {
val langBytes = locale.language.toByteArray(Charset.forName("US-ASCII"))
val utfEncoding = if (encodeInUtf8) Charset.forName("UTF-8") else Charset.forName("UTF-16")
val textBytes = payload.toByteArray(utfEncoding)
val utfBit: Int = if (encodeInUtf8) 0 else 1 shl 7
val status = (utfBit langBytes.size).toChar()
val data = ByteArray(1 langBytes.size textBytes.size)
data[0] = status.toByte()
System.arraycopy(langBytes, 0, data, 1, langBytes.size)
System.arraycopy(textBytes, 0, data, 1 langBytes.size, textBytes.size)
return NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, ByteArray(0), data)
}
Java
public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
byte[] textBytes = payload.getBytes(utfEncoding);
int utfBit = encodeInUtf8 ? 0 : (1 << 7);
char status = (char) (utfBit langBytes.length);
byte[] data = new byte[1 langBytes.length textBytes.length];
data[0] = (byte) status;
System.arraycopy(langBytes, 0, data, 1, langBytes.length);
System.arraycopy(textBytes, 0, data, 1 langBytes.length, textBytes.length);
NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_TEXT, new byte[0], data);
return record;
}
Intent-фильтр для такой NDEF-записи будет таким:
Toolbar
Для различных действий у мобильного приложения также может присутствовать
Toolbar
с иконками, мое приложение простое и тулбар на внутренних страницах содержит только кнопку назад
Page {
id: readPage
.....
tools: ToolBarLayout {
ToolIcon {
iconId: "toolbar-back"
onClicked: {
pageStack.pop()
}
}
}
.....
Для того чтобы подключить тулбар к странице его надо присвоить свойству
tools
, которое по умолчанию равно
null
Алгоритм работы nfc
У NFC, как и у RFID, при обмене есть инициатор и цель, но новая технология позволяет куда больше, чем простой обмен идентификатором и чтение или запись информации цели. Наиболее значимым различием между этими двумя технологиями является то, что у NFC целями часто являются программируемые устройства, такие как смартфоны.
У NFC устройств есть два режима взаимодействия. Если инициатор излучает радиочастотные волны, а цель за счёт инициатора получает питание, то такой режим взаимодействия называют пассивным. При активном режиме у инициатора и цели свои собственные источники питания, и они независимы друг от друга. Данные режимы совпадают с режимами RFID.
NFC устройства также имеют три способа работы. Они могут работать в режиме чтения информации с цели или записи на неё. Они могут эмулировать карты, ведя себя как RFID-метки, когда они в поле другого NFC или RFID устройства. Или они могут работать в режиме peer-to-peer (P2P), в котором они обмениваются данными сразу в обоих направлениях.
Первым главным отличием NFC от RFID является способ взаимодействия peer-to-peer, который реализован с помощью ГОСТ Р ИСО/МЭК 18092. Обмен данными P2P реализуется двумя протоколами — протоколом подуровня управления логической связью (LLCP — logical link control protocol) и простым протоколом обмена данными NDEF (SNEP — simple NDEF exchange format).
Архитектура nfc
В архитектуре NFC есть несколько уровней. Самый низкий из них — физический, который реализован ЦПУ и другим аппаратным комплексом, через который происходит взаимодействие. В середине находятся данные о пакетах и транспортный уровень, затем формат данных уровней, и в конце программное обеспечение.
На физическом уровне NFC работает по алгоритму, описанному в ГОСТ для RFID (ГОСТ Р ИСО/МЭК 14443-2-2021), где говорится о маломощных радиосигналах частотой 13,56 МГц. Затем идёт уровень, который описывает разбивку потока данных на фреймы (ГОСТ Р ИСО/МЭК 14443-3-2021).
Любые радиоконтроллеры, которые используются в телефоне, планшете или подсоединяются к компьютеру или микроконтроллеру, являются отдельными аппаратными компонентами. Они взаимодействуют с главным процессором посредством одного или нескольких стандартных последовательных протоколов между устройствами: универсальный асинхронный приёмопередатчик (UART), последовательный периферийный интерфейс (SPI), последовательная шина данных для связи интегральных схем (I2C) или универсальная последовательная шина (USB).
Над этим находится несколько протоколов команд RFID, базирующихся на двух спецификациях. NFC чтение и запись меток базируется на оригинальном RFID ГОСТ Р ИСО/МЭК 14443A. Протоколы Philips/NXP Semiconductors Mifare Classic и Mifare Ultralight и NXP DESFire совместимы с ГОСТ Р ИСО/МЭК 14443A.
Обмен данными P2P NFC базируется на ГОСТ Р ИСО/МЭК 18092. Также на этом же стандарте базируются RFID-карты и метки Sony FeliCa, которые доступны в основном в Японии. Можно читать и записывать метки, основанные на этих стандартах, и не использовать 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})
второй параметр, позволяет нам передать контейнер с данными на следущую страницу, которая просто его обработает
пример:
.....
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 Tag.
Чтобы оставаться в курсе вы можете наблюдать за проектом на
Или подписаться на мой блог, ссылку на который можно найти в профиле.
В ближайшем будущем, я планирую разместить приложение в
, так что ищите его там.
Запись
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.
Заставляем приложение перехватывать обработку nfc tags
Итак, для того чтобы начать обрабатывать теги нам потребуется объект класса
QNdefManager
NfcManager::NfcManager(QObject *parent)
: QObject(parent), m_manager(new QNearFieldManager(this)), m_cachedTarget(0), m_mode(NfcManager::Read)
{
connect(m_manager, SIGNAL(targetDetected(QNearFieldTarget*)), this, SLOT(targetDetected(QNearFieldTarget*)));
connect(m_manager, SIGNAL(targetLost(QNearFieldTarget*)), this, SLOT(targetLost(QNearFieldTarget*)));
m_manager->setTargetAccessModes(QNearFieldManager::NdefReadTargetAccess | QNearFieldManager::NdefWriteTargetAccess);
}
Создадим его в конструкторе нашего класса
NfcManager
, который мы будем использовать для работы с NFC. Нам обязательно надо подключить сигналы
targetDetectedtargetLost
этого объекта к нашим слотам, которые, собственно, и будут являться главными обработчиками события появления тега в поле зрения телефона. В третьей строке конструктора мы выставляем режим чтения и записи, чтобы мы могли не только читать, но и записывать теги.
Использование nfc
Есть множество возможностей использования NFC:
- Режим эмуляции карты позволяет использовать данную технологию для бесконтактных платежей, например Google Wallet, или для оплаты или получения билетов в общественном транспорте.
- Есть несколько мобильных приложений, которые позволяют сохранить настройки для мобильного устройства на метках и в дальнейшем использовать их для быстрого изменения каких-либо настроек мобильного устройства (переход в режим виброзвонка, включения или выключения Wi-Fi на мобильном устройстве).
- На рынке постепенно появляются устройства, поддерживающие NFC, — стереосистемы, телевизоры, которые позволяют создавать пару с телефоном или планшетом для удалённого управления.
- NFC используется в системе здравоохранения для хранения идентификатора пациента и личных записей.
- В сфере управления материально-техническими ресурсами можно использовать NDEF записи для хранения информации о месте отправления товаров, об их прохождении различных промежуточных пунктов и тому подобном.
Какой длины может быть ndef-сообщение?
Место на информацию в NDEF-записи ограниченно по размерам 2^32-1 байтами, однако можно делать цепочки записей внутри сообщения, чтобы переслать информацию большего размера. В теории нет ограничений на NDEF-сообщения, но на практике размер сообщения ограничивается возможностями устройств или меток, участвующих в обмене информацией.
Если в обмене участвуют только устройства, то длина сообщения будет ограничена вычислительной мощностью самого слабого из устройств, но стоит учесть, что устройства придётся долго держать рядом для пересылки всех данных. При взаимодействии смартфона и карты длина сообщения будет ограничена размером памяти карты.
В общем, обмен данными через NFC достаточно быстрый. Человек подносит мобильное устройство к метке, происходит краткий обмен информацией, и человек идёт дальше. Данная технология не была спроектирована для длительных обменов информацией, потому что устройства в буквальном смысле должны находится в паре сантиметров друг от друга.
Для того чтобы передать большой объем информации, устройства придётся держать друг рядом с другом длительное время, это может быть неудобным. Если нужно длительное взаимодействие между устройствами, то можно воспользоваться NFC для быстрого обмена данными о возможностях устройств и последующего включения одного из более подходящих способов передачи данных (Bluetooth, Wi-Fi и т.д.).
Перехватчик
Теперь рассмотрим описанные слоты:
void NfcManager::targetDetected(QNearFieldTarget *target)
{
if (m_cachedTarget)
delete m_cachedTarget;
m_cachedTarget = target;
if (m_mode == Read)
readTarget(m_cachedTarget);
if (m_mode == Write)
writeTarget(m_cachedTarget);
}
При обнаружении тега мы на всякий случай сохраняем указатель на объект типа
QNearFieldTarget
, который является программным интерфейсом к самому тегу.
Далее идут два условия и в зависимости от режима (чтение или запись) вызывают соответствующие методы обработки. С точки зрения красивой архитектуры, это не самое лучшее решение, но я сделал это преднамеренно, чтобы не усложнять код.
void NfcManager::targetLost(QNearFieldTarget *target)
{
m_cachedTarget = 0;
target->deleteLater();
}
При потере тега, мы просто освобождаем занятые ресурсы.
Перспективы распространения nfc
Сама технология интересна и целый ряд компаний намерены и дальше развивать ее, находить все более широкое применение ближней бесконтактной связи. Периодически мы слышим о том, что кто-то собирается совершить NFC‑революцию. Так, уже есть наработки по оцифровке документов и быстроте доступа к удостоверениям личности.
Еще одно перспективное применение NFC — беспроводная зарядка. В мае нынешнего года уже было объявлено о том, что инженеры нашли способ заряжать устройства по беспроводу с применением технологии NFC. Правда, мощность весьма скромная — 1 Вт. И именно этот факт не позволяет говорить о том, что она в своем нынешнем виде подойдет для использования в смартфонах. Но заряжать смарт-часы или наушники — вполне.
В ноябре прошлого года Huawei представила Wi-Fi-маршрутизатор А2 с поддержкой NFC. Применение технологии бесконтактной передачи данных позволяет быстро подключать мобильник к сети Wi-Fi: достаточно активировать NFC на смартфоне и прикоснуться им к роутеру.
А еще в перспективе ожидается, что в будущем наши смартфоны станут настоящими электронными ключами, которые будут отпирать цифровые замки на основе NFC, помогут проходить турникеты и оплачивать проезд в общественном транспорте.
На данный момент лишь вопрос времени, когда и в каких еще сферах найдет свое применение технология Near Field Communication. Как вы думаете, где стоит внедрить и для чего эту технологию?
Пишем свой класс для 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)
{
}
};
Для начала рассмотрим методы для чтения:
Структура ndef
NDEF содержит информацию о байтовом представлении сообщений, которые могут содержать несколько записей. У каждой записи есть заголовок, в котором находятся метаданные (тип, длина и т.д.), и информацию для отправки. Если вернуться к аналогии с параграфом, то параграф формируется из предложений, относящихся к одной теме, так и в NDEF-сообщениях — хорошо, когда все записи относятся к одной тематике.
NDEF-сообщения в основном короткие, каждый обмен состоит из одного сообщения, каждая метка также содержит одно сообщение. Так как обмен NFC данными происходит при касании одного устройства другим или меткой, то будет неудобно передавать в одном сообщении текст целой книги, поэтому длина NDEF-сообщения сопоставима с длиной абзаца, но не целой книги.
NDEF-запись содержит информацию для пересылки и метаданные, как эту информацию интерпретировать. Каждая запись может быть разного типа, о чем объявляется в заголовке этой записи. Также в заголовке описывается какое место занимает запись в сообщении, после заголовка следует информация.
На рисунке ниже представлена полная информация о расположении бит и байт информации в NDEF-записи. Информация для пересылки занимает большую часть записи. Тип информации уточняет, как её интерпретировать, идентификатор информации опционален и используется для пересылки большого количества записей или перекрёстного обмена данными.
Типы nfc-меток
Существует четыре типа меток, описанных NFC-форумом, все они базируются на RFID-протоколах. Это делает NFC метки частично совместимыми со многими уже существующими RFID системами (например, Mifare и FeliCa). Хотя эти более старые системы не поддерживают NDEF, они, однако, могут опознавать NFC метки, которые совместимы с ними.
Например, считыватель RFID, который предназначен для работы с метками Mifare Ultralight, может считать идентификационный номер метки NFC 2 типа, хоть и не может прочитать закодированную NDEF информацию. Есть также пятый тип, который совместим с технологией, но при этом не является частью NFC-спецификации.
Типы 1, 2 и 4 основаны на ГОСТ Р ИСО/МЭК 14443A (состоит из четырёх частей: 1, 2, 3, 4), тип 3 — на ГОСТ Р ИСО/МЭК 18092. Более подробно про каждый из типов можно прочитать под спойлером.
- Основан на ГОСТ Р ИСО/МЭК 14443A;
- Может быть как только для чтения, так и для чтения/записи;
- Содержит от 96 байт до 2 кбайт памяти;
- Нет защиты данных от коллизий (прим. — коллизии могут возникнуть; когда два активных источника передают данные одновременно);
- Примеры: Innovision Topaz, Broadcom BCM20203.
Тип 2:
- Аналогично типу 1 основан на NXP/PhilipsMifareUltralight метках (ГОСТ Р ИСО/МЭК 14443A);
- Может быть как только для чтения, так и для чтения/записи;
- Содержит от 96 байт до 2 кбайт памяти;
- Скорость взаимодействия 106 кбит/с;
- Поддержка анти-коллизий;
- Пример: NXP Mifare Ultralight.
Тип 3:
- Основан на метках SonyFeliCa (ГОСТ Р ИСО/МЭК 18092 и JIS-X-6319-4) без поддержки шифрования и аутентификации, которая предоставлена спецификацией FeliCa;
- Может быть либо только для чтения, либо для чтения/записи;
- Скорость взаимодействия 212 или 424 кбит/с;
- Поддержка анти-коллизий;
- Пример: Sony FeliCa.
Тип 4:
- Аналогично типу 1, тип 4 основан на ГОСТ Р ИСО/МЭК 14443A;
- Может быть либо только для чтения, либо для чтения/записи;
- 2, 4 или 8 кбайт памяти;
- Скорость взаимодействия 106, 212 или 424 кбит/с;
- Поддержка анти-коллизий;
- Пример: NXP DESFire, SmartMX-JCOP.
Пятый тип является собственностью NXPSemiconductors и, вероятно, самым распространённым на сегодняшний день MifareClassictag (ГОСТ Р ИСО/МЭК 14443A):
- Память: 192, 768 или 3584 байта;
- Скорость взаимодействия 106 кбит/с;
- Поддержка анти-коллизий;
- Пример: NXP Mifare Classic 1K, Mifare Classic 4K, Mifare Classic Mini.
Читаем ndef-сообщение
Когда телефон на Android считывает NFC-метку, он сначала её обрабатывает и распознает, а затем передаёт данные о ней в соответствующее приложение для последующего создания intent. Если с NFC может работать больше одного приложения, то появится меню выбора приложения. Система распознавания определяется тремя intent, которые перечислены в порядке важности от самой высокой до низкой:
ACTION_NDEF_DISCOVERED
: Этот intent используется для запуска аctivity, если в метке содержится NDEF-сообщение. Он имеет самый высокий приоритет, и система будет запускать его в первую очередь.ACTION_TECH_DISCOVERED
: Если никаких activity для intentACTION_NDEF_DISCOVERED
не зарегистрировано, то система распознавания попробует запустить приложение с этим intent. Также этот intent будет сразу запущен, если найденное NDEF-сообщение не подходит под MIME-тип или URI, или метка совсем не содержит сообщения.ACTION_TAG_DISCOVERED
: Этот intent будет запущен, если два предыдущих intent не сработали.
В общем случае система распознавания работает, как представлено на рисунке ниже.
Когда это возможно, запускается intent ACTION_NDEF_DISCOVERED, потому что он наиболее специфичный из трёх. Более того, с его помощью можно будет запустить ваше приложение.
Если activity запускается из-за NFC intent, то можно получить информацию с отсканированной NFC-метки из этого intent. Intent может содержать следующие дополнительные поля (зависит от типа отсканированной метки):
EXTRA_TAG
(обязательное): объект Tag, описывающий отсканированную метку.EXTRA_NDEF_MESSAGES
(опциональное): Массив NDEF-сообщений, просчитанный с метки. Это дополнительное поле присуще только intentACTION_NDEF_DISCOVERED
.EXTRA_ID
(опциональное): Низкоуровневый идентификатор метки.
Ниже представлен пример, проверяющий intent ACTION_NDEF_DISCOVERED и получающий NDEF-сообщения из дополнительного поля.
Kotlin
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
...
if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages ->
val messages: List = rawMessages.map { it as NdefMessage }
// Обработка массива сообщений.
...
}
}
}
Java
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
...
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMessages =
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMessages != null) {
NdefMessage[] messages = new NdefMessage[rawMessages.length];
for (int i = 0; i < rawMessages.length; i ) {
messages[i] = (NdefMessage) rawMessages[i];
}
// Обработка массива сообщений.
...
}
}
}
Также объект Tag можно получить из intent, который будет содержать полезную информацию и позволит перечислить технологии метки:
Kotlin
val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)
Java
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Чтение
Теперь рассмотрим методы чтения тега:
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.
Заключение
Технология NFC добавляет многообещающую функциональность к технологии RFID. Наиболее значимое нововведение — формат обмена данными NFC (NDEF), который предоставляет возможность форматировать обычные данные в одну из четырёх технологий меток NFC. NDEF может быть использован как для обмена данными между устройством и меткой, так и для обмена между устройствами. Это делает NFC пригодным не только как способ идентификации, но и как средство обмена короткими блоками данных.
Более подробно об NFC или NDEF можно почитать в книге Tom Igoe, Don Coleman, and Brian Jepson «Beginning NFC. Near Field Communication with Arduino, Android, and PhoneGap».