Mobil informatika gyakorlat 2. óra: NFC a gyakorlatban
Mi az NFC? Near Field Communication Rövid hatótávolságú rádiófrekvenciás technológia (tipikusan 5-10 cm) 13,56 MHz frekvencia Az ISO/IEC 14443 szabvány kiterjesztése 2
Az NDEF...... NFC Data Exchange Format.... az NFC Forum által kidolgozott adatformátum szabvány.... egyszerűvé teszi a hordozott adatok típusának felismerését. 3
Az NDEF üzenet szerkezete 4
Az NDEF üzenet szerkezete 5
Tartalomtípusok Egyszerű szöveg NFC Text RTD URI (NFC URI RTD) URL: http://www.nxp.com Telefonszám: tel:+36 30 123 4567 SMS: sms: :+36301234567?Body=Hello E-mail: mailto:nfc@nfc.com 6
Tartalomtípusok Smart Poster (NFC SP RTD) Szöveg + URI Bluetooth, Wifi kapcsolódás Névjegy Bármilyen MIME típus text/plain, text/x-vcard, image/jpeg,... 7
Tag detektálás, ID beolvasása ELSŐ NFC ALKALMAZÁSUNK QT-BEN 8
Kiindulás Hozzunk létre egy új mobil widget projektet. Helyezzünk egy PlainTextEdit-et a képernyőre. A <projekt neve>.pro-ba írjuk be az alábbi sorokat (némelyik már benne van, csak kiegészíteni kell): CONFIG += mobility MOBILITY += connectivity symbian:target.capability+=localservices 9
mainwindow.h Az include rész végére: #include <QNearFieldManager> QTM_USE_NAMESPACE 10
mainwindow.h Az osztályba: private: QNearFieldManager *nfcmanager; private slots: void targetdetected(qnearfieldtarget *target); void targetlost(qnearfieldtarget *target); 11
mainwindow.cpp A konstruktorba: nfcmanager=new QNearFieldManager(this); connect(nfcmanager, SIGNAL(targetDetected(QNearFieldTarget*)),this, SLOT(targetDetected(QNearFieldTarget*))); connect(nfcmanager, SIGNAL(targetLost(QNearFieldTarget*)),this, SLOT(targetLost(QNearFieldTarget*))); nfcmanager->starttargetdetection(); 12
mainwindow.cpp void MainWindow::targetDetected(QNearFieldTarget *target) { } QString s(target->uid().tohex()); ui->plaintextedit->appendplaintext(s); 13
mainwindow.cpp void MainWindow::targetLost(QNearFieldTarget *target) { } target->deletelater(); ui->plaintextedit->appendplaintext("a tag hatókörön kívül van."); 14
TARTALOM OLVASÁSA 15
mainwindow.h Új slot az olvasáshoz: private slots: void ndefmessageread(const QNdefMessage &message); 16
mainwindow.cpp void MainWindow::ndefMessageRead(const QNdefMessage &message) { foreach (const QNdefRecord &record, message){ } } if (record.isrecordtype<qndefnfctextrecord>()){ QNdefNfcTextRecord txt(record); } ui->plaintextedit->appendplaintext("text: " +txt.text()); 17
mainwindow.cpp Tag detektálásakor olvassuk le a tartalmát: if(target->hasndefmessage()) { connect(target, SIGNAL(ndefMessageRead(QNdefMessage)),this, SLOT(ndefMessageRead(QNdefMessage))); target->readndefmessages(); } 18
Teszt Indítsuk el a szimulátorban a programot! NFC Target Editor 19
Feladat Írjuk ki az URI típusú rekordok által tárolt webcímeket is! Tipp: include-old a QNdefNfcUriRecord mellett a QUrl-t is, szükség lesz rá. 20
ÜZENET CÍMKÉRE ÍRÁSA 21
Felület változások Tegyünk ki egy újabb PlainTextEdit-et, ebbe írjuk majd a felírandó szöveget. Tegyünk ki egy gombot is, és generáljunk neki egy slotot. Gombon jobb klikk, Go to slot, clicked() 22
mainwindow.h private: QNearFieldTarget *cachedtarget; bool readwrite; private slots: void ndefmessagewrite(); 23
mainwindow.cpp Konstruktorba: // kezdetben olvasó módban vagyunk readwrite=false; targetlost slotba: cachedtarget=null; 24
mainwindow.cpp targetdetected slotba: if (readwrite==false){ //olvasunk if(target->hasndefmessage } else{ //írunk cachedtarget=target; ndefmessagewrite(); } 25
mainwindow.cpp void MainWindow::ndefMessageWrite() { if (cachedtarget){ } QNdefMessage msg; QNdefNfcTextRecord rec; rec.settext( ui->plaintextedit_2->toplaintext()); msg.append(rec); cachedtarget->writendefmessages( QList<QNdefMessage>()<<msg); readwrite=false; // vissza olvasás módba } 26
mainwindow.cpp Ne feledkezzünk meg a gombunk működtetéséről sem! void MainWindow::on_pushButton_clicked() { // írás üzemmódra váltunk readwrite=true; } 27
Feladat Egészítsd ki a programot egy Másolás funkcióval, amely a beolvasott tagtartalmat átírja egy másik tag-re! 28