非接觸式IC卡讀寫器在QT平臺的二次開發范例
- 2019-05-30 18:01:00
- 諾塔斯智能科技 原創
- 6612
首先我們需要認識一下,什么是QT。
是一個1991年由Qt Company開發的跨平臺C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用于開發非GUI程序,比如控制臺工具和服務器。Qt是面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,并且允許真正地組件編程。
目前有部分客戶在使用QT平臺上接入我們的智能卡讀寫器產品,因此,我們專門為QT用戶提供了一套開發包,部分范例如下,如需詳細開發范例和技術支持,請聯系我們!
第一,我們需要導入 我們定義的頭文件,#include "LotusCardDriver.h",這個里面做了一些相關定義,具體請參考開發范例源文件。
第二、在main()函數中對設備進行初始化;
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)方法實現。參數strDeviceName:為字符長度為0使用USB通道,否則使用串口通道
參數nVID\nPID參數如果為0,動態庫使用內部定義值,原則上建議使用0,除非范例有明確賦值。
特別聲明:使用外部讀寫接口優先,參見回調函數
/**
* 打開設備
*
* @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卡的讀寫操作,需要對密碼的驗證,密碼正確即可實現對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;
//獲取卡號 同執行下面三個函數
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;*/
以上內容是非接觸式IC卡讀寫器在QT平臺的讀寫范例,用戶在開發過程中如有技術問題,請聯系我們。
| 聯系人: | 張經理 |
|---|---|
| 電話: | 400-023-6659 |
| 傳真: | 023-68798110 |
| Email: | 843718693@qq.com |
| QQ: | 843718693 |
| 微信: | Lotus-Smart |
| 微博: | lotusreader |
| 旺旺: | 諾塔斯智能科技有限公司 |
| 地址: | 重慶市江北區宏帆路36號宏帆天地1棟6樓 |
-
在線客服

-
關注微信

-
網上商城

