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/