非接觸式IC卡讀寫器在QT平臺的二次開發(fā)范例
- 2019-05-30 18:01:00
- 諾塔斯智能科技 原創(chuàng)
- 5293
首先我們需要認識一下,什么是QT。
是一個1991年由Qt Company開發(fā)的跨平臺C++圖形用戶界面應用程序開發(fā)框架。它既可以開發(fā)GUI程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務器。Qt是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,并且允許真正地組件編程。
目前有部分客戶在使用QT平臺上接入我們的智能卡讀寫器產(chǎn)品,因此,我們專門為QT用戶提供了一套開發(fā)包,部分范例如下,如需詳細開發(fā)范例和技術支持,請聯(lián)系我們!
第一,我們需要導入 我們定義的頭文件,#include "LotusCardDriver.h",這個里面做了一些相關定義,具體請參考開發(fā)范例源文件。
第二、在main()函數(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; }
設備初始化通過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ù)
/**
* 打開設備
*
* @param strDeviceName
* 串口設備名稱
* @param nVID
* USB設備VID
* @param nPID
* USB設備PID
* @param nUsbDeviceIndex
* USB設備索引
* @param unRecvTimeOut
* 接收超時
* @param bUseExendReadWrite
* 是否使用外部讀寫通道 如果沒有設備寫權限時,可以使用外部USB或串口進行通訊,
* 需要改造callBackProcess中相關代碼完成讀寫工作 目前范例提供USB操作
* @return 設備句柄
*/
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ā)過程中如有技術問題,請聯(lián)系我們。
聯(lián)系人: | 張經(jīng)理 |
---|---|
電話: | 400-023-6659 |
傳真: | 023-68798110 |
Email: | 843718693@qq.com |
QQ: | 843718693 |
微信: | Lotus-Smart |
微博: | lotusreader |
旺旺: | 諾塔斯智能科技有限公司 |
地址: | 重慶市江北區(qū)宏帆路36號宏帆天地1棟6樓 |