📄 testpad03.c
字号:
}
else
{
display_ic_status();
}
//选择文件
displays(3, 1, "Begin Select File...\n");
data[0] = 0x3f;
data[1] = 0x00;
stat = incoming(hd_no, card_no, 0x00, 0xA4, 0, 0, 2, data);
//stat = PSAM_Select_File ( hd_no, card_no, 0x3f, 0x00, data) ;
if (stat != SUCC)
{
GetErrorMessage(stat, tmp_str);
display(2, tmp_str);
}
else
{
display_ic_status();
}
stat = power_down(hd_no, card_no);
if (stat != SUCC)
{
GetErrorMessage(stat, tmp_str);
display(2, tmp_str);
}
displays(8, 1, "Press any key to continue\n");
inkey(0);
cls();
return stat;
}
int test_display(unsigned char hd_no)
{
short ret;
unsigned char key;
char tmp_str[100];
displays(1, 1, "display a line in PINPAD\n");
display(2, "在PINPAD上从某一行的第一列开始显示中西文字符,并清掉后面的已有的字符\n");
ret = display_pad(hd_no, 1, "Test Display");
if (ret != SUCC)
{
display(1, "(display_pad):");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
display(4, "在PINPAD上显示5*7小点阵ASCII字符, 不清除其它显示.\n");
ret = disps_ascii(hd_no, 2, 4, "1234ABCD");
if (ret != SUCC)
{
display(1, "(disps_ascii):");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
ret = display_pad(hd_no, 6, "Display显示第6行");
ret = pad_sound(hd_no, 500);
if (ret != SUCC)
{
display(1, "(pad_sound):");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
displays(5, 1, "push a key in PINPAD......\n");
while (1)
{
get_push_key(hd_no, &key); //读入键值后,下一次读入是0
if (key != 0)
{
displays(6, 1, "get push key= %02x\n", key);
break;
}
}
displays(7, 1, "get kbhit of PinPad: \n");
while (1)
{
kbhit_pad(hd_no, &key); //kbhit未清缓冲区,下一次读出还是原值
if (key != 0)
{
displays(8, 1, "kbhit_pad return=%02x\n", key);
break;
}
}
return SUCC;
}
int test_input_key(unsigned char hd_no)
{
unsigned char tmp_str[100], str_len;
short sRet = 0;
memset(tmp_str, 0, sizeof(tmp_str));
cls();
displays(1, 1, "INPUT KEY in PINPAD\n");
if (reader_type == READER_STAR752)
{
disps_ascii(hd_no, 1, 1, "INPUT: ");
disps_ascii(hd_no, 2, 1, "AMOUNT:123.45 ");
}
else
{
display_pad(hd_no, 1, "请输密:");
display_pad(hd_no, 2, "金额:123.45");
}
//sRet = input_str ( hd_no, 1, 0, ASTERISK|VAR_LEN|PINDATA, 6, 1 );
sRet = input_str(hd_no, 1, 8, VAR_LEN, 19, 1);
if (sRet == 0)
{
do
{
sRet = get_str(hd_no, &str_len, tmp_str, 1);
if (sRet == RCV_TIMEOUT)
{
printf("get_str timeout\n");
return FAIL;
}
} while (sRet == BUSY_INPUT);
displays(2, 1, "key length=%d ", str_len);
//displays(3, 1, "key=%s\n", tmp_str);
printf("key=%s\n", tmp_str);
}
memset(tmp_str, 0, sizeof(tmp_str));
displays(4, 1, "INPUT Code in PINPAD\n");
if (reader_type == READER_STAR752)
{
disps_ascii(hd_no, 1, 1, "INPUT CODE: ");
disps_ascii(hd_no, 2, 1, " ");
}
else
{
display_pad(hd_no, 1, "请输密码:");
display_pad(hd_no, 2, "");
}
input_str(hd_no, 2, 1, ASTERISK | VAR_LEN | PINDATA, 6, 0);
if (sRet != 0)
{
return FAIL;
}
do
{
/*590取消键判断
if( kbhit( ) ){
if( inkey( 0 ) == CANCEL ){
reset_pad( );
return( FAIL );
}
}
*/
if (get_str(hd_no, &str_len, tmp_str, 0) == SUCC)
{
if (str_len != 6)
{
display_pad(hd_no, 1, "请输入密码:");
display_pad(hd_no, 2, "");
input_str(hd_no, 2, 1, ASTERISK | VAR_LEN, 6, 0);
continue;
}
else
{
break;
}
}
} while (1);
displays(5, 1, "key length=%d ", str_len);
//displays(6, 1, "key=%s\n", tmp_str);
printf("key=%s\n", tmp_str);
sRet = write_user_key(hd_no, "PIN_", "01234567");
if (sRet != SUCC)
{
display(1, "(write_user_key):err");
inkey(0);
}
sRet = X98_from_pad(hd_no, 0, "PIN_", "0000000000000000", tmp_str);
//_DES("01234567", tmp_str, tmp_str+10);
debug_disps(1, tmp_str + 10, 8);
//bcd_to_asc1 ( (unsigned char*)s, tmp, 16 , 0 );
return SUCC;
}
int test_magcard(unsigned char hd_no)
{
short sRet = 0;
DevHandle hMagHandle;
unsigned char ucStatus;
ET_MAGCARD stTrk2, stTrk3;
char szDispBuf[256];
display(1, "Begin Test MagCard\n");
sRet = OpenMagcard(hd_no, EM_RECARD, 60, &hMagHandle, &ucStatus);
if (sRet != SUCC)
{
display(1, "(ucOpenMagcard):");
GetErrorMessage(sRet, szDispBuf);
display(2, "%s", szDispBuf);
}
if (ucStatus != EM_SUCCESS)
{
display(1, "(ucOpenMagcard):");
GetErrorMessage((short) ucStatus, szDispBuf);
display(2, "%s", szDispBuf);
}
display(1, "Begin ReCard\n");
sRet = Recard(hd_no, hMagHandle, 0, 0x01, &stTrk2, &stTrk3, &ucStatus);
if (sRet != SUCC)
{
display(1, "(ucRecard):");
GetErrorMessage(sRet, szDispBuf);
display(2, "%s", szDispBuf);
}
if (ucStatus != EM_SUCCESS)
{
display(1, "(ucRecard):");
GetErrorMessage((short) ucStatus, szDispBuf);
display(2, "%s", szDispBuf);
}
else
{
display(1, "Trk2Flag=%02x\n", stTrk2.ucTrkFlag);
display(2, "%s\n", stTrk2.ucTrkBuf);
display(3, "Trk3Flag=%02x\n", stTrk3.ucTrkFlag);
display(4, "%s\n", stTrk3.ucTrkBuf);
}
display(1, "Begin CloseMagcard\n");
sRet = CloseMagcard(hd_no, &hMagHandle, &ucStatus);
if (sRet != 0)
{
return FAIL;
}
sRet = OpenMagcard(hd_no, 0x01, 100, &hMagHandle, &ucStatus);
if (sRet != SUCC)
{
display(1, "(ucOpenMagcard):");
GetErrorMessage(sRet, szDispBuf);
display(2, "%s", szDispBuf);
}
if (ucStatus != EM_SUCCESS)
{
display(1, "(ucOpenMagcard):");
GetErrorMessage((short) ucStatus, szDispBuf);
display(2, "%s", szDispBuf);
}
sRet = StartTrackIn(hd_no, hMagHandle, &ucStatus);
if (sRet != SUCC)
{
display(1, "(ucStartTrackIn):");
GetErrorMessage(sRet, szDispBuf);
display(2, "%s", szDispBuf);
}
if (ucStatus != EM_SUCCESS)
{
display(1, "(ucStartTrackIn):");
GetErrorMessage((short) ucStatus, szDispBuf);
display(2, "%s", szDispBuf);
}
while (1)
{
//Sleep(500);
sRet = TrackIn(hd_no, hMagHandle, &stTrk2, &stTrk3, &ucStatus);
SetPadTimeout(hd_no, 200);
if (sRet != SUCC)
{
display(1, "(ucTrackIn):");
GetErrorMessage(sRet, szDispBuf);
display(2, "%s", szDispBuf);
}
if (ucStatus == EM_ABOLISH)
{
break;
}
if (ucStatus != EM_SUCCESS)
{
//display ( 1, "(ucTrackIn):" );
GetErrorMessage((short) ucStatus, szDispBuf);
//display ( 2, "%s", szDispBuf );
}
if (ucStatus == EM_SUCCESS)
{
display(1, "Trk2Flag=%02x\n", stTrk2.ucTrkFlag);
display(2, "%s\n", stTrk2.ucTrkBuf);
display(1, "Trk3Flag=%02x\n", stTrk3.ucTrkFlag);
display(3, "%s\n", stTrk3.ucTrkBuf);
break;
}
}
sRet = CloseMagcard(hd_no, &hMagHandle, &ucStatus);
display(2, "End Test MagCard\n");
return SUCC;
}
WORD TestProCard(HICC hCT)
{
unsigned short usSW1SW2;
unsigned char ucStatus;
WORD usRet;
unsigned char ucTmpBuf[255], ucLen = 0;
unsigned char ucSndBuf[255], ucRecBuf[255];
//对于上海复旦微电子股份有限公司的FMCOS需要做此特殊设置
usRet = MifSetParam(hCT, 5, 1, &ucStatus);
if (usRet != SUCC)
{
GetErrorMessage(usRet, ucTmpBuf);
display(2, ucTmpBuf);
}
else
{
printf("MifSetParam[%x]\n", usSW1SW2);
}
usRet = MifResetPro(hCT, IDLE, 0, ucTmpBuf, &ucLen, &usSW1SW2);
if (usRet != SUCC)
{
GetErrorMessage(usRet, ucTmpBuf);
display(2, ucTmpBuf);
}
else
{
printf("MifResetPro[%x]\n", usSW1SW2);
}
//选择文件
displays(3, 1, "Begin Select File...\n");
ucSndBuf[0] = 0x3f;
ucSndBuf[1] = 0x00;
memset(ucRecBuf, 0, sizeof(ucRecBuf));
usRet = MifExchangePro(hCT, 0, 0xa4, 0, 0x00, 0x02, ucSndBuf, 0x0, ucRecBuf, &ucLen, &usSW1SW2);
if (usRet != SUCC)
{
GetErrorMessage(usRet, ucTmpBuf);
display(2, ucTmpBuf);
}
else
{
printf("MifExchangePro[%x]\n", usSW1SW2);
}
//获得随机数
displays(2, 1, "Begin Get Random...\n");
memset(ucRecBuf, 0, sizeof(ucRecBuf));
usRet = MifExchangePro(hCT, 0, 0x84, 0, 0x00, 0x00, ucSndBuf, 0x04, ucRecBuf, &ucLen, &usSW1SW2);
if (usRet != SUCC)
{
GetErrorMessage(usRet, ucTmpBuf);
display(2, ucTmpBuf);
}
else
{
printf("MifExchangePro[%x]\n", usSW1SW2);
}
usRet = MifDeselectPro(hCT, &usSW1SW2);
if (usRet != SUCC)
{
GetErrorMessage(usRet, ucTmpBuf);
display(2, ucTmpBuf);
}
else
{
printf("MifDeselectPro[%x]\n", usSW1SW2);
}
//恢复设置
usRet = MifSetParam(hCT, 5, 0, &ucStatus);
return SUCC;
}
WORD TestMifCard(HICC hCT)
{
int i;
unsigned char ucCardType[4], ucKey[10], ucSector = 1, ucCardId[4];
unsigned char ucStatus, ucSize;
WORD usRet;
unsigned char ucTmpBuf[17];
char szErrMessage[100];
BuzzerMs(hCT, 5);
memset(ucKey, 0xff, sizeof(ucKey));
memset(ucCardId, 0, sizeof(ucCardId));
for (i = 0; i < 2; i++)
{
//完成在天线范围内的TYPE A卡的激活操作
usRet = MifRequest(hCT, 0, ucCardType, &ucStatus);
if (ucStatus == 0)
{
break;
}
}
//防冲突处理,在被激活的多张卡片中选择一张卡
PubDisplays(1, 1, "MifAnticoll.......");
usRet = MifAnticoll(hCT, ucCardId, &ucStatus);
if (usRet != ICCER_OK)
{
return usRet;
}
GetMifErrMessage(ucStatus, szErrMessage);
PubDisplays(1, 1, "%s\n", szErrMessage);
//选择指定卡号的卡
PubDisplays(1, 1, "MifSelect.........");
usRet = MifSelect(hCT, ucCardId, &ucSize, &ucStatus);
if (usRet != ICCER_OK)
{
return usRet;
}
GetMifErrMessage(ucStatus, szErrMessage);
PubDisplays(1, 1, "%s\n", szErrMessage);
//KEYA密钥地址=ucSector
//KEYB密钥地址=ucSector+0x10
//选择指定的地址的存储密钥
PubDisplays(1, 1, "MifLoadkey........");
usRet = MifLoadkey(hCT, ucSector, ucKey, &ucStatus);
if (usRet != ICCER_OK)
{
return usRet;
}
GetMifErrMessage(ucStatus, szErrMessage);
PubDisplays(1, 1, "%s\n", szErrMessage);
//选择指定地址的存储密钥认证卡片
PubDisplays(1, 1, "MifAuth...........");
usRet = MifAuth(hCT, ucSector, ucSector, &ucStatus);
if (usRet != ICCER_OK)
{
return usRet;
}
GetMifErrMessage(ucStatus, szErrMessage);
PubDisplays(1, 1, "%s\n", szErrMessage);
//根据提供的密钥对指定的扇区进行认证
PubDisplays(1, 1, "MifAuthToRam...... ");
usRet = MifAuthToRam(hCT, ucSector, KEYA, ucKey, &ucStatus);
if (usRet != ICCER_OK)
{
return usRet;
}
GetMifErrMessage(ucStatus, szErrMessage);
PubDisplays(1, 1, "%s\n", szErrMessage);
//读数据
ucSector = 1;
PubDisplays(1, 1, "MifRead...........");
usRet = MifRead(hCT, (uchar) (4 * ucSector), ucTmpBuf, &ucStatus);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -