非接觸式IC卡讀寫器在QT平臺的二次開發(fā)范例
- 2019-05-30 18:01:00
- 諾塔斯智能科技 原創(chuàng)
- 6206
首先我們需要認識一下,什么是QT。
是一個1991年由Qt Company開發(fā)的跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣埽褂锰厥獾拇a生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,并且允許真正地組件編程。
目前有部分客戶在使用QT平臺上接入我們的智能卡讀寫器產(chǎn)品,因此,我們專門為QT用戶提供了一套開發(fā)包,部分范例如下,如需詳細開發(fā)范例和技術(shù)支持,請聯(lián)系我們!
第一,我們需要導(dǎo)入 我們定義的頭文件,#include "LotusCardDriver.h",這個里面做了一些相關(guān)定義,具體請參考開發(fā)范例源文件。
第二、在main()函數(shù)中對設(shè)備進行初始化;
int main(int argc, char *argv[])
{
BOOL bResult = FALSE;
LotusHandle hLotusCard = LotusCardOpenDevice("",0,0,0,0,NULL);
if( hLotusCard != -1)
{
//TestIcCard(hLotusCard);
ChangeM1Password(hLotusCard);
LotusCardCloseDevice(hLotusCard);
}
else
{
printf("error %d\r\n", hLotusCard);
}
cout << "Hello World!" << endl;
return hLotusCard;
// return 0;
}
設(shè)備初始化通過LotusCardOpenDevice("",0,0,0,0,NULL)方法實現(xiàn)。參數(shù)strDeviceName:為字符長度為0使用USB通道,否則使用串口通道
參數(shù)nVID\nPID參數(shù)如果為0,動態(tài)庫使用內(nèi)部定義值,原則上建議使用0,除非范例有明確賦值。
特別聲明:使用外部讀寫接口優(yōu)先,參見回調(diào)函數(shù)
/**
* 打開設(shè)備
*
* @param strDeviceName
* 串口設(shè)備名稱
* @param nVID
* USB設(shè)備VID
* @param nPID
* USB設(shè)備PID
* @param nUsbDeviceIndex
* USB設(shè)備索引
* @param unRecvTimeOut
* 接收超時
* @param bUseExendReadWrite
* 是否使用外部讀寫通道 如果沒有設(shè)備寫權(quán)限時,可以使用外部USB或串口進行通訊,
* 需要改造callBackProcess中相關(guān)代碼完成讀寫工作 目前范例提供USB操作
* @return 設(shè)備句柄
*/
public native int OpenDevice(String strDeviceName, int nVID, int nPID, int nUsbDeviceIndex, int unRecvTimeOut, boolean bUseExendReadWrite);第三、非接觸式IC卡的讀寫操作,需要對密碼的驗證,密碼正確即可實現(xiàn)對IC卡的讀寫。
void TestIcCard(LotusHandle hLotusCard)
{
LotusCardParamStruct sttLotusCardParam;
BOOL bResult = FALSE;
bResult = LotusCardBeep(hLotusCard, 10);
unsigned int nCardNo = 0;
if(FALSE == bResult) return;
int nRequestType = RT_NOT_HALT;
//獲取卡號 同執(zhí)行下面三個函數(shù)
memset(&sttLotusCardParam, 0x00, sizeof(sttLotusCardParam));
bResult = LotusCardGetCardNo(hLotusCard,nRequestType, &sttLotusCardParam);
if(FALSE == bResult) return;
memcpy(&nCardNo, sttLotusCardParam.arrCardNo, 4);
printf("卡號nCardNo 0x%x\r\n", nCardNo);
//裝載密碼A
memset(&sttLotusCardParam.arrKeys, 0x00, sizeof(sttLotusCardParam.arrKeys));
sttLotusCardParam.arrKeys[0]=0xff;
sttLotusCardParam.arrKeys[1]=0xff;
sttLotusCardParam.arrKeys[2]=0xff;
sttLotusCardParam.arrKeys[3]=0xff;
sttLotusCardParam.arrKeys[4]=0xff;
sttLotusCardParam.arrKeys[5]=0xff;
sttLotusCardParam.nKeysSize = 6;
bResult =LotusCardLoadKey(hLotusCard, AM_A, 0, &sttLotusCardParam);
if(FALSE == bResult) return;
//驗證密碼
bResult =LotusCardAuthentication(hLotusCard, AM_A, 0, &sttLotusCardParam);
if(FALSE == bResult) return;
//讀
bResult=LotusCardRead(hLotusCard, 2, &sttLotusCardParam);
if(FALSE == bResult) return;
//寫
memset(&sttLotusCardParam.arrBuffer, 0x00, sizeof(sttLotusCardParam.arrBuffer));
sttLotusCardParam.arrBuffer[0] = 0x00;
sttLotusCardParam.arrBuffer[1] = 0x01;
sttLotusCardParam.arrBuffer[2] = 0x02;
sttLotusCardParam.arrBuffer[3] = 0x03;
sttLotusCardParam.arrBuffer[4] = 0x04;
sttLotusCardParam.arrBuffer[5] = 0x05;
sttLotusCardParam.arrBuffer[6] = 0x06;
sttLotusCardParam.arrBuffer[7] = 0x07;
sttLotusCardParam.arrBuffer[8] = 0x08;
sttLotusCardParam.arrBuffer[9] = 0x09;
sttLotusCardParam.arrBuffer[10] = 0x0a;
sttLotusCardParam.arrBuffer[11] = 0x0b;
sttLotusCardParam.arrBuffer[12] = 0x0c;
sttLotusCardParam.arrBuffer[13] = 0x0d;
sttLotusCardParam.arrBuffer[14] = 0x0e;
sttLotusCardParam.arrBuffer[15] = 0x0f;
sttLotusCardParam.nBufferSize=16;
bResult=LotusCardWrite(hLotusCard, 2, &sttLotusCardParam);
if(FALSE == bResult) return;
bResult = LotusCardInitValue(hLotusCard, 2, 10);
if(FALSE == bResult) return;
printf("初始化值成功!\r\n");
//減值
bResult=LotusCardDecrement(hLotusCard, 2, 1);
if(FALSE == bResult) return;
printf("減值成功!\r\b");
/* //中止
bResult=LotusCardHalt(hLotusCard);
if(FALSE == bResult) return;*/
以上內(nèi)容是非接觸式IC卡讀寫器在QT平臺的讀寫范例,用戶在開發(fā)過程中如有技術(shù)問題,請聯(lián)系我們。
| 聯(lián)系人: | 張經(jīng)理 |
|---|---|
| 電話: | 400-023-6659 |
| 傳真: | 023-68798110 |
| Email: | 843718693@qq.com |
| QQ: | 843718693 |
| 微信: | Lotus-Smart |
| 微博: | lotusreader |
| 旺旺: | 諾塔斯智能科技有限公司 |
| 地址: | 重慶市江北區(qū)宏帆路36號宏帆天地1棟6樓 |
-
在線客服

-
關(guān)注微信

-
網(wǎng)上商城

