正点原子Linux开发板适配CVR-100UC阅读器(USB接口)

华视电子CVR-100UC这款阅读器Windows驱动和读卡软件安装起来都非常顺利,但如果想用在Linux开发板上,让QT读取身份证信息并显示要怎么做呢?
在这里插入图片描述
从官网上的Linux驱动有下图三种版本,具体细节如下:
x64_noLog_USBDynamic_UTF-8 是x86架构64位的Linux USB热插拔驱动;
ARMHF_noLog_USBDynamic_UTF-8 是ARM架构32位使用HF(Hard Float,硬件浮点单元)的Linux USB热插拔驱动;
ARM32_noLog_USBDynamic_UTF-8 是ARM架构32位不用Hard Float的Linux USB热插拔驱动。
在这里插入图片描述
正点原子开发用ARMHF_noLog_USBDynamic_UTF-8这个就可以。

安装

其中bin文件夹下是编译后的程序,在身份证读卡器接入USB口后,调用bin文件夹下的文件,可以测试读卡器的读取效果。
doc文件是操作手册,查阅用。
lib文件夹下是依赖的库文件。
src文件夹下是测试用的源码,注意是测试源码,不是驱动源码,驱动源码应该是封装在库文件里了,不开源。
在这里插入图片描述

尝试运行官方的测试文件

src文件夹下这三个文件,LibTestMain是测试文件,里面包含了测试用的函数如:
在这里插入图片描述

int CVR_InitComm(const char *path, int protocolType);	//初始化连接
int CVR_Authenticate()									//卡认证
int CVR_AuthenticateForNoJudge()						//卡认证一直成功版本
int CVR_Read_Content(int active)						//读卡操作
int CVR_Read_FPContent(int active)						//读卡操作,含指纹
int CVR_CloseComm()			      						//关闭连接
int CVR_FindCard ()										//找卡
int CVR_SelectCard()									//选卡
int CVR_GetSAMID(char *SAMID, int *length)	        	//得到安全模块号    
int CVR_GetStatus()										//获取设备状态
int CVR_MF_HL_Request(unsigned char nMode, unsigned int  *pSNR, unsigned short *pTagType); //M1卡卡认证
int CVR_MF_HL_Write(unsigned char  nMode, unsigned int nSNR, unsigned char nBlock,unsigned char nKey[6], unsigned char *pWriteBuff, unsigned int nBuffLen); //M1卡写卡
int CVR_MF_HL_Read(unsigned char  nMode, unsigned int nSNR, unsigned char nBlock,unsigned char nKey[6], unsigned char *pReadBuff, unsigned int *pBuffLen); //M1卡读卡

然后再看Makefile

libs = -L../lib -l100UD
libs += -L../lib -lusb-1.0
libs += -L../lib -ltermbhf

CC= arm-linux-gnueabihf-gcc
RM=rm -f

lib100UDTest:LibTestMain.c
	$(CC) -o ../bin/lib100UDTest LibTestMain.c -ldl

test:lib100UDTest
	LD_LIBRARY_PATH=../lib ../bin/lib100UDTest

clean:
	$(RM) zp.bmp fp.dat LibTestMainPhoto.bmp wz.txt programLog.txt ../bin/lib100UDTest

makefile文件的意思是说编译需要使用lib文件夹下的lib100UD.so libusb-1.0.so libtermbhf.so
编译器使用的是arm-linux-gnueabihf-gcc

正点原子Linux开发板用的就是arm-linux-gnueabihf-gcc,所以可以直接make编译。
编译成功后可以直接用make test测试,正常会返回结果。

注意:lib库里的三个库文件lib100UD.so libusb-1.0.so libtermbhf.so 编译的时候使用的相对路径,如果固化到产品时建议还是放到系统根目录下的库文件夹里,通常来说是/lib /lib32之类的路径。
在这里插入图片描述

QT里调用读卡器函数

修改.pro文件,QT是用qmake编译,加入库的写法如下:

LIBS += -ldl
LIBS += -L$$PWD/lib -l100UD -lusb-1.0 -ltermbhf

然后参考官方的测试文件.c/.h改写成QT C++版的.cpp/.h:

#ifndef IDCARDREADER_H
#define IDCARDREADER_H

#include <QObject>

class IDCardReaderHandler : public QObject
{
   
   
    Q_OBJECT

public:
    IDCardReaderHandler(QObject *parent = nullptr);
    ~IDCardReaderHandler();

    void initializeDevice();
    void readDeviceStatus();
    void closeDevice();
    void readSAMID();

private:
    using p_CVR_GetSAMID = int (*)(char *SAMID, int *length);
    using p_CVR_GetStatus = int (*)();
    using p_CVR_InitComm = int (*)(const char *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值