linux下使用NFC读卡器,基于QT5开发
创建工程,引入lib
创建一个QT工程,如果是控制台程序,则去掉gui
QT -= gui
引入lib库
LIBS += -L$$PWD/lib -lyw60x
这里需要将libyw60x.so库文件放在工程目录下的lib目录下。
工程文件如下所示:
QT -= gui
CONFIG += 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.0
SOURCES += \
main.cpp
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
LIBS += -L$$PWD/lib -lyw60x
HEADERS += \
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/