📄 s4442.c
字号:
//==============================================================
//
// RICOM Co.,Ltd.
// (c) Copyright 2001
//
// PRODUCT : RICOM Base Application in C
//
// COMPONENT : MagIc1800
//
// FILENAME : menuapp.c
//
// HISTORY :
//
// DATE AUTHOR COMMENT
// -------- ---------- ---------------
// 03/06/20 WangWenJun Program created
//
//==============================================================
#include <am.h>
#include <pub_os.h>
#include <pub_sc.h>
#include "pm.h"
#include "kbdapi.h"
#include "typedef.h"
#include "slclock.h"
#include "ext.h"
#include "var.h"
#include "utility.h"
#include "se2k.h"
/* -- External Routines -- */
char _loadds Reset(void);
char _loadds CardInfo(void);
char _loadds ReadM(void);
char _loadds Present(void);
char _loadds TscPresent(void);
char _loadds CardCmd(void);
char _loadds Mem_query(void);
char _loadds Mem_write(void);
char _loadds Writemem(void);
/* -- External Variables -- */
/* -- Function prototype -- */
/* -- Local Variables -- */
HIERARCHY MsgFuncMenu[] = // 2K version
{
{ 0, "MEMORY卡测试" , NULL}, // level 0
{ 0, "复位" , Reset}, // level 0
{ 0, "CARD INFO" , CardInfo}, // level 0
{ 0, "write" , Writemem}, // level 0
{ 0, "READ M" , ReadM}, // level 0
{ 0, "Present" , Present}, // level 0
{ 0, "Tsc Present" , TscPresent}, // level 0
{ 0, NULL, NULL} // end of the menu
};
char _loadds Reset(void)
{
BYTE bStatus;
ClearDisplay(LINEA);
memset(abBuffer, 0xff, sizeof(abBuffer));
if ((bStatus = SE2KReset(CUSTOMER_SC_RDR, abBuffer)) == SE2K_OK) {
Split(abKbdBuf, abBuffer, 40);
OS_DisplayString(LINE2, 0, 16, abKbdBuf);
OS_DisplayString(LINE3, 0, 16, &abKbdBuf[16]);
OS_DisplayString(LINE4, 0, 16, &abKbdBuf[32]);
} else {
Bin2Dec(bStatus, abBuffer, 2);
OS_DisplayString(LINE2, 0, 6, "失败: ");
OS_DisplayString(LINE2, 6, 2, abBuffer);
}
BeepDelay(0, 0);
return OS_OK;
}
char _loadds CardInfo(void)
{
BYTE bStatus;
SE2K_INFO_STRUCT Se2kInfo;
ClearDisplay(LINEA);
if ((bStatus = SE2K_CardInfo(CUSTOMER_SC_RDR, &Se2kInfo)) == SE2K_OK) {
OS_DisplayString(LINE2, 0, 16, Se2kInfo.version);
OS_DisplayString(LINE3, 0, 1, &Se2kInfo.version[16]);
} else {
Bin2Dec(bStatus, abBuffer, 2);
OS_DisplayString(LINE2, 0, 6, "失败: ");
OS_DisplayString(LINE2, 6, 2, abBuffer);
}
BeepDelay(0, 0);
return OS_OK;
}
//VERIFY PIN
//4442有MM, SM和PM 3个记录区, 其中MM区读任意, 写受密码保护; SM区是安全
//记录区, 一共4个字节,第1个字节是计数器, 后3个字节保存
char _loadds Writemem(void)
{
BYTE buf[100], buf1[200], sle_pin[4];
BYTE bStatus;
TSCMDSYNC_SE2K tsc_read = {SE2K_READ_S , 4 , 0 , buf} ,tsc_write,tsc_psc;
BYTE result;
if (SC_CardInserted(CUSTOMER_SC_RDR, 5*SEC) == FALSE)
return 5;
//使读卡器有效
if (SC_CardDetect(CUSTOMER_SC_RDR, TRUE) == SC_ERROR) {
return 0;
}
memcpy(sle_pin, "\x68\x06\x28",3);
//step 1 reset
memset(abBuffer, 0xff, sizeof(abBuffer));
bStatus = SE2KReset(CUSTOMER_SC_RDR, abBuffer);
if (bStatus!=SE2K_OK)
return 6;
//step 2 read sm
memset(buf,'1',sizeof(buf));
buf[0]=0;
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_read) ;
if (bStatus!=SE2K_OK)
return 4;
//debug
memset(abBuffer,0x00,16);
Split(abBuffer,buf,4);
OS_DisplayString(LINE2, 0, 3, "SM:");
OS_DisplayString(LINE2, 3, 8, abBuffer);
BeepDelay(0,0);
//step 3 verify pin
tsc_psc.wOrder=SE2K_PSC;
tsc_write.wByteLen=0;
tsc_write.wByteAdd=0;
tsc_psc.pbBuff=sle_pin;
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_psc) ;
if (bStatus!=SE2K_OK)
return 10;
//step 4 write mm
memset(abBuffer, 0xFF, sizeof(abBuffer));
tsc_write.wOrder=SE2K_UPDATE_M;
tsc_write.wByteLen=5;
tsc_write.wByteAdd=40;
tsc_write.pbBuff =abBuffer;
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_write) ;
memset(abKbdBuf, 0, sizeof(abKbdBuf));
OS_DisplayString(LINE3, 0, 16, "PLEASE ENTER : ");
if (Getkbd(NUMERIC_INPUT+FIX_LEN+ECHO, 10) == FALSE) {
return 5;
} else
Compress(abBuffer, &abKbdBuf[1], 5);
tsc_write.wOrder=SE2K_UPDATE_M;
tsc_write.wByteLen=5;
tsc_write.wByteAdd=40;
tsc_write.pbBuff =abBuffer;
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_write) ;
if (bStatus!=SE2K_OK)
return 5;
//step 5 read mm
memset(buf1,'-',10);
tsc_read.wOrder=SE2K_READ_M;
tsc_read.wByteLen=5;
tsc_read.wByteAdd=40;
tsc_read.pbBuff=buf1;
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_read) ;
if (bStatus!=SE2K_OK)
return 4;
memset(abBuffer, '-', 80);
Split( abBuffer, buf1, 5);
OS_DisplayString(LINE4-1, 0, 10, abBuffer);
BeepDelay(0, 0);
return OS_OK;
}
char _loadds ReadM(void)
{
BYTE bStatus, bI;
TSCMDSYNC_SE2K tsc_read = {SE2K_READ_M , 256 , 0 , TxMsg.abContent} ;
ClearDisplay(LINEA);
/*Read 12 1st bytes of main memory */
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_read) ;
if (bStatus == SE2K_OK) {
for (bI = 0; bI< 4; bI++) {
ClearDisplay(LINEA);
Split(abKbdBuf, &TxMsg.abContent[bI*64], 16);
OS_DisplayString(LINE1-1, 0, 16, abKbdBuf);
OS_DisplayString(LINE1, 0, 16, &abKbdBuf[16]);
Split(abKbdBuf, &TxMsg.abContent[bI*64+16], 16);
OS_DisplayString(LINE2-1, 0, 16, abKbdBuf);
OS_DisplayString(LINE2, 0, 16, &abKbdBuf[16]);
Split(abKbdBuf, &TxMsg.abContent[bI*64+32], 16);
OS_DisplayString(LINE3-1, 0, 16, abKbdBuf);
OS_DisplayString(LINE3, 0, 16, &abKbdBuf[16]);
Split(abKbdBuf, &TxMsg.abContent[bI*64+48], 16);
OS_DisplayString(LINE4-1, 0, 16, abKbdBuf);
OS_DisplayString(LINE4, 0, 16, &abKbdBuf[16]);
BeepDelay(0, 0);
}
} else {
Bin2Dec(bStatus, abBuffer, 2);
OS_DisplayString(LINE2, 0, 6, "失败: ");
OS_DisplayString(LINE2, 6, 2, abBuffer);
}
BeepDelay(0,0);
return OS_OK;
}
char _loadds Present(void)
{
BYTE bStatus;
bStatus = SE2KPresent(CUSTOMER_SC_RDR);
ClearDisplay(LINEA);
if (bStatus == SE2K_OK) {
OS_DisplayString(LINE2, 0, 6, "成功 ");
} else {
Bin2Dec(bStatus, abBuffer, 2);
OS_DisplayString(LINE2, 0, 6, "失败: ");
OS_DisplayString(LINE2, 6, 2, abBuffer);
}
BeepDelay(0, 0);
}
char _loadds TscPresent(void)
{
BYTE bStatus;
/* Present SECURITY Code */
BYTE abCode[3] = {0x68, 0x06, 0x28} ;
TSCMDSYNC_SE2K tsc_present = {SE2K_PSC , 0 , 0 , abCode} ;
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_present) ;
if (bStatus == SE2K_OK) {
ClearDisplay(LINEA);
Split(abKbdBuf, &TxMsg.abContent[0], 3);
OS_DisplayString(LINE1-1, 0, 6, abKbdBuf);
} else {
Bin2Dec(bStatus, abBuffer, 2);
OS_DisplayString(LINE2, 0, 6, "失败: ");
OS_DisplayString(LINE2, 6, 2, abBuffer);
}
BeepDelay(0,0);
}
char _loadds CardCmd(void)
{
BYTE bStatus, bI;
TSCMDSYNC_SE2K tsc_read = {SE2K_UPDATE_M , 0 , 0 , TxMsg.abContent} ;
ClearDisplay(LINEA);
/*Read 12 1st bytes of main memory */
bStatus = SE2K_Cmd (CUSTOMER_SC_RDR, &tsc_read);
if (bStatus == SE2K_OK) {
ClearDisplay(LINEA);
Split(abKbdBuf, TxMsg.abContent, 16);
OS_DisplayString(LINE1-1, 0, 16, abKbdBuf);
OS_DisplayString(LINE1, 0, 16, &abKbdBuf[16]);
Split(abKbdBuf, &TxMsg.abContent[16], 16);
OS_DisplayString(LINE2-1, 0, 16, abKbdBuf);
OS_DisplayString(LINE2, 0, 16, &abKbdBuf[16]);
} else {
Bin2Dec(bStatus, abBuffer, 2);
OS_DisplayString(LINE2, 0, 6, "失败: ");
OS_DisplayString(LINE2, 6, 2, abBuffer);
}
BeepDelay(0,0);
return OS_OK;
}
void menuApp(void)
{
ManMenuRun(MsgFuncMenu);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -