linux下使用NFC读卡器,基于QT5开发
- 创建工程,引入lib
- 开始编写代码
创建工程,引入lib
创建一个QT工程,如果是控制台程序,则去掉gui
QT -= gui
引入lib库
LIBS += -L$$PWD/lib -lyw60x
这里需要将libyw60x.so库文件放在工程目录下的lib目录下。
工程文件如下所示:
QT -= guiCONFIG += c++11 console
CONFIG -= app_bundle
CONFIG += static
CONFIG -= shared# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetLIBS += -L$$PWD/lib -lyw60xHEADERS += \libyw60x.h
开始编写代码
Main程序如下所示:
int main(int argc, char *argv[])
{Yw60x yoworfid;std::string selection;unsigned short ATQA=0;unsigned char SAK=0;unsigned char uidlen;unsigned char UID[10];unsigned char Key[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};unsigned char BlockData[16];unsigned char writeBlockData[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};std::cout << "YOWO RFID USB HF Reader Demo(Console)\n " << std::endl;std::cout << "demo function\n1:read card serial no\n2:read block data\n3:write block data\n4:exit\n " << std::endl;std::cout << "input your selection(1 or 2 or 3 or 4):" << std::endl;std::getline(std::cin, selection);if(selection=="1"){int rt =yoworfid.YW_USBHIDInitial();if(rt<=0){std::cout << "Open reader fail,exit\n " << std::endl;return 0;}rt =yoworfid.YW_RequestAntiandSelect(1,0x52,0,&ATQA,&SAK,&uidlen, UID);if(rt<0){std::cout << "request card fail,exit\n " << std::endl;yoworfid.YW_USBHIDFree();return 0;}yoworfid.YW_Buzzer(1,5,5,1);std::cout << "Card SerialNo: " <<HexToStr(UID,uidlen)<<"\n "<< std::endl;yoworfid.YW_USBHIDFree();}else if(selection=="2"){std::cout << "read block 4 with keymode=A and key=FFFFFFFFFFFF\n " << std::endl;int rt =yoworfid.YW_USBHIDInitial();if(rt<=0){std::cout << "Open reader fail,exit\n " << std::endl;return 0;}rt =yoworfid.YW_RequestAntiandSelect(1,0x52,0,&ATQA,&SAK,&uidlen, UID);std::cout << "Card SerialNo: " <<HexToStr(UID,uidlen)<<"\n "<< std::endl;if(rt<0){std::cout << "request card fail,exit\n " << std::endl;yoworfid.YW_USBHIDFree();return 0;}if(yoworfid.YW_KeyAuthorization(1,PASSWORD_A, 4, Key)<0){std::cout << "Key Error,exit\n " << std::endl;yoworfid.YW_USBHIDFree();return 0;}if(yoworfid.YW_ReadaBlock(1,4,16,BlockData)<0){std::cout << "Read block Error,exit\n " << std::endl;yoworfid.YW_USBHIDFree();return 0;}yoworfid.YW_Buzzer(1,5,5,1);std::cout << "block 4 data: " <<HexToStr(BlockData,16)<<"\n "<< std::endl;yoworfid.YW_USBHIDFree();}else if(selection=="3"){std::cout << "Write block 4 with keymode=A and key=FFFFFFFFFFFF,data=00112233445566778899AABBCCDDEEFF\n " << std::endl;int rt =yoworfid.YW_USBHIDInitial();if(rt<=0){std::cout << "Open reader fail,exit\n " << std::endl;return 0;}rt =yoworfid.YW_RequestAntiandSelect(1,0x52,0,&ATQA,&SAK,&uidlen, UID);std::cout << "Card SerialNo: " <<HexToStr(UID,uidlen)<<"\n "<< std::endl;if(rt<0){std::cout << "request card fail,exit\n " << std::endl;yoworfid.YW_USBHIDFree();return 0;}if(yoworfid.YW_KeyAuthorization(1,PASSWORD_A, 4, Key)<0){std::cout << "Key Error,exit\n " << std::endl;yoworfid.YW_USBHIDFree();return 0;}if(yoworfid.YW_WriteaBlock(1,4,16,writeBlockData)<0){std::cout << "Write block Error,exit\n " << std::endl;yoworfid.YW_USBHIDFree();return 0;}yoworfid.YW_Buzzer(1,5,5,1);std::cout << "Write block 4 data success\n "<< std::endl;yoworfid.YW_USBHIDFree();}else if(selection=="4"){std::cout << "Exit\n " << std::endl;}else{std::cout << "Wrong selection\n " << std::endl;}return 0;
}
编译完成后,执行
这样一个简单的NFC读写器程序就可以在linux上运行了,你可以下载本篇的全部代码,https://www.youwokeji.com.cn/LinuxReader/