?? testpad03.c
字號:
/******************************************************************************
*
* TestPad03.C V1.0.3.0
*
* 用于測試PAD03的接口函數
*
* Author :- Shen Qun
* System :- VC 6.0 or STAR POS
* Last modified :- 2007.08.16
* Funciton :- Test Api for pinpad
*
* Copyright : Copyright 2006 LANDI
* notice : All rights reserved.
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "LD_Reader.h"
#define CLA_CODE 0x00
void debug_disps(char line, char *_data, int len);
unsigned char reader_type = 255;
void display_ic_status(void)
{
unsigned char ucStatus, ucSw1, ucSw2;
ucStatus = get_status(&ucSw1, &ucSw2);
#ifdef _POS_
displays(7, 1, "STATUS=%02x SW1SW2=%02x%02x", CARD_STATUS, CARD_SW1, CARD_SW2);
#else
//printf("STATUS=%02x, SW1=%02x, SW2=%02x\n", CARD_STATUS, CARD_SW1, CARD_SW2);
printf("STATUS=%02x, SW1=%02x, SW2=%02x\n", ucStatus, ucSw1, ucSw2);
#endif
}
#ifndef _POS_
// 用于Windows下函數測試
void display_cen(int line, char *data)
{
printf("%s", data);
}
void display_inv(int line, char *data)
{
printf("%s", data);
}
void displays(int line, int col, char *format, ...)
{
va_list ap;
int arg;
va_start(ap, format); /* Variable argument begin */
arg = va_arg(ap, int);
printf(format, arg);
va_end(ap); /* Variable argument end */
}
void display(int line, char *format, ...)
{
va_list ap;
char szDispStr[500];
va_start(ap, format);
vsprintf(szDispStr, format, ap);
va_end(ap);
printf(szDispStr);
}
void debug_disps(char line, char *_data, int len)
{
int i;
for (i = 0; i < len; i++)
{
display(1, "%02X ", (unsigned char) _data[i]);
}
display(1, "\n");
}
int inkey(int time)
{
return 0;
}
void clearall()
{
}
void cls()
{
}
void ResetTime()
{
}
#else
void debug_disps(char line, char *_data, int len)
{
char str1[20], str2[20];
int i, j;
j = 0;
do
{
memset(str1, 0, 20);
for (i = 0; i < 8; i++)
{
if ((j + i) >= len)
{
str1[i * 2] = 0;
break;
}
sprintf(str1 + i * 2, "%02x", _data[j + i]);
}
sprintf(str2, "%d~%d of %d", j + 1, j + i, len);
displays(line, 1, str2);
displays(line + 1, 1, str1);
inkey(0);
j += 8;
} while (j < len);
}
#endif
#ifndef _POS_
void PubDisplays(char dln, char dlc, char *pszFmt, ...)
{
va_list ap;
int arg;
va_start(ap, pszFmt); /* Variable argument begin */
arg = va_arg(ap, int);
printf(pszFmt, arg);
va_end(ap); /* Variable argument end */
}
#else
void PubDisplays(char dln, char dlc, char *pszFmt, ...)
{
char szDispStr[500];
va_list VarList;
va_start(VarList, pszFmt);
vsprintf(szDispStr, pszFmt, VarList);
va_end(VarList);
displays(dln, dlc, "%s", szDispStr);
return;
}
#endif
int ReaderPowerOn(int expect_code, unsigned char ucReaderHandle)
{
short sRet;
unsigned char ucTmpBuf[100], ucBufLen;
unsigned char ucCardNo = 0;
sRet = power_up(ucReaderHandle, ucCardNo, ucTmpBuf, &ucBufLen);
display_ic_status();
debug_disps(3, (char *) ucTmpBuf, (int) ucBufLen);
return SUCC;
}
void ReaderAPDU(unsigned int uiLen_APDU, unsigned char *ucCommand_APDU)
{
unsigned char ucResponse_APDU[512];
unsigned char Lc = 0, Le = 0;
unsigned char ucCardNo = 0;
short sRet;
unsigned short usLen;
unsigned char ucReaderHandle = 1;
usLen = 0; //處理61 6C
//usLen = 2; //不處理 61 6C
if (uiLen_APDU == 4) //case 1
{
Lc = 0;
Le = 0;
}
else if (uiLen_APDU == 5) //case 2
{
Lc = 0;
Le = ucCommand_APDU[4];
}
else if (uiLen_APDU == (unsigned int) (5 + ucCommand_APDU[4])) // case 3
{
Lc = ucCommand_APDU[4];
Le = 0;
}
else if (uiLen_APDU == (unsigned int) (6 + ucCommand_APDU[4])) // case 4
{
Lc = ucCommand_APDU[4];
Le = ucCommand_APDU[4 + Lc + 1];
usLen = 0;
}
else
{
return;
}
sRet = ICCTransmit
(
ucReaderHandle,
ucCardNo,
ucCommand_APDU[0],
ucCommand_APDU[1],
ucCommand_APDU[2],
ucCommand_APDU[3],
Lc,
ucCommand_APDU + 5,
Le,
ucResponse_APDU,
&usLen
);
display_ic_status();
debug_disps(3, (char *) ucResponse_APDU, (int) usLen);
if (usLen == 0 && CARD_SW1 == 0x61)
{
Lc = 0;
Le = CARD_SW2;
memset(ucResponse_APDU, 0, sizeof(ucResponse_APDU));
sRet = ICCTransmit
(
ucReaderHandle,
ucCardNo,
0x00,
0xC0,
0x00,
0x00,
Lc,
ucCommand_APDU + 5,
Le,
ucResponse_APDU,
&usLen
);
display_ic_status();
debug_disps(3, (char *) ucResponse_APDU, (int) usLen);
}
return;
}
int test_4428(unsigned char hd_no)
{
char out[1024], length, key[256];
char tmp_str[100];
short ret;
char status, err_no;
ret = power_up_4428(hd_no, &status, &length, out);
if (CARD_STATUS != 0)
{
return FAIL;
}
if (ret != SUCC)
{
display(1, "(power_up_4442)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
debug_disps(3, out, length);
if (ICC_in(hd_no) == 0)
{
ret = read_SIM4428(hd_no, 0, 20, out);
if (ret != SUCC)
{
display(1, "(read_SIM4428)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
debug_disps(3, out, 20);
}
else
{
display(1, "No Card Insert\n");
return FAIL;
}
ret = read_ERR_SIM4428(hd_no, &err_no);
if (CARD_STATUS != 0)
{
return FAIL;
}
display(2, "err_no=%d\n", err_no);
key[0] = (char) 0x67;
key[1] = (char) 0xC6;
ret = verify_SIM4428(hd_no, key, &err_no);
if (err_no != 0)
{
return FAIL;
}
if (ret != SUCC)
{
display(1, "(verify_4428)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
display(2, "err_no=%d\n", err_no);
ret = read_SIM4428(hd_no, 1021, 500, out);
if (ret != SUCC)
{
display(1, "(read_SIM4428)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
debug_disps(3, out, 10);
memset(out, 0, sizeof(out));
out[0] = (char) 0x12;
out[1] = (char) 0x23;
out[2] = (char) 0x55;
out[3] = (char) 0xaa;
ret = write_SIM4428(hd_no, 10, 10, out);
if (CARD_STATUS != 0)
{
return FAIL;
}
if (ret != SUCC)
{
display(1, "(write_4428)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
return SUCC;
}
int test_4442(unsigned char hd_no)
{
char out[256], length, key[256];
char tmp_str[100];
short ret;
char status, err_no;
ret = power_up_4442(hd_no, &status, &length, out);
if (CARD_STATUS != 0)
{
return FAIL;
}
if (ret != SUCC)
{
display(1, "(power_up_4442)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
debug_disps(3, out, length);
if (ICC_in(hd_no) == 0)
{
ret = read_SIM4442(hd_no, 0, 20, out);
if (ret != SUCC)
{
display(1, "(read_SIM4428)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
debug_disps(3, out, 20);
}
else
{
display(1, "No Card Insert\n");
return FAIL;
}
key[0] = (char) 0xB6;
key[1] = (char) 0x23;
key[2] = (char) 0x07;
ret = verify_SIM4442(hd_no, key, &err_no);
if (err_no != 0)
{
return FAIL;
}
if (ret != SUCC)
{
display(1, "(verify_4442)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
display(2, "err_no=%d\n", err_no);
ret = read_SIM4442(hd_no, 32, 3, out);
status = CARD_STATUS;
if (ret != SUCC)
{
display(1, "(read_SIM4442)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
debug_disps(3, out, 3);
memset(out, 0, sizeof(out));
out[0] = (char) 0xab;
out[1] = (char) 0xcd;
out[2] = (char) 0xef;
out[3] = (char) 0xaa;
ret = write_SIM4442(hd_no, 32, 10, out);
if (CARD_STATUS != 0)
{
return FAIL;
}
if (ret != SUCC)
{
display(1, "(write_4442)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
ret = read_SIM4442(hd_no, 32, 3, out);
if (ret != SUCC)
{
display(1, "(read_SIM4442)");
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
debug_disps(3, out, 4);
return SUCC;
}
int test_atmel102(unsigned char hd_no )
{
char out[256],length, key[256];
short ret;
uchar status, err_no;
char tmp_str[100];
ret = power_up_AT88102(hd_no, &status, &length, out);
if ( ICC_in(hd_no) == 0 )
ret = read_AT88102 (hd_no, 0, 2, out);
ret = read_AT88102(hd_no, 2, 8, out);
if (ret != SUCC)
{
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
if (CARD_STATUS != 0)
{
GetErrorMessage(CARD_STATUS, tmp_str);
display(2, "%s", tmp_str);
}
ret = read_AT88102(hd_no, 10, 2, out);
ret = read_AT88102(hd_no, 24, 2, out);
key[0] = (char)0xf0;
key[1] = (char)0xf0;
ret = verify_userkey_AT88102( hd_no, key, &err_no);
if (ret != SUCC)
{
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
if (CARD_STATUS != 0)
{
GetErrorMessage(CARD_STATUS, tmp_str);
display(2, "%s %d", tmp_str, (int)err_no);
}
out[0] = 0xff;
ret = write_AT88102_all(hd_no, 2, 1, out);
if (ret != SUCC)
{
GetErrorMessage(ret, tmp_str);
display(2, "%s", tmp_str);
}
if (CARD_STATUS != 0)
{
GetErrorMessage(CARD_STATUS, tmp_str);
display(2, "%s %d", tmp_str, (int)err_no);
}
key[0] = (char)0x12;
key[1] = (char)0x34;
ret = change_userkey_AT88102(hd_no, key);
if (ret != SUCC)
{
GetErrorMessage(ret, tmp_str);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -