📄 test.c
字号:
//去掉LCD背光测试 2001.11.29
#include "st3lib10.h"
#define DEF_BLOCK_SIZE 0x0800
#define DEF_ADDR_BLOCK 0xFF85
#define DEF_ADDR_LEFT 0xFF8A
#define DEF_DELAY_TIMES 2000
#define DEF_AUTOTEST_FUNCS 13
#define MAG2_LENGTH 37
#define MAG3_LENGTH 99
extern void _OutHighAddr(uchar HA); //dxs
extern uchar PUB_XMEM_Page[32];
void SetBuff(uchar *SrcBuff, Val);
uchar TestCard(uchar CardID);
uchar Input(uchar line, uchar *InBuff, uchar InLen);
void AutoTest(void);
void TestCardUp(void);
void TestCardDn(void);
void TestCardSAM(void);
void TestCardPower(uchar CardID);
uchar TestKey(void);
uchar TestClock(void);
uchar TestSysRW(void);
uchar TestMem(void);
void TestModem(void);
uchar TestModemRS(void);
void TestModemManualDial(void);
uchar TestPrint(uint Val);
uchar TestBackup(void);
void TestMemcard(void);
void TestBkLight(void);
uint RdMem(uchar page);
uint WrMem(uchar page);
#define DEF_SECTOR_LEN 384//lxj256
uchar PubBuff[DEF_SECTOR_LEN+5];
uchar PUB_AutoTestFlag;
uint OKCount[DEF_AUTOTEST_FUNCS+2];
uint t0,t1,t2,t3,t4,t5,t6,t7;
extern uchar PUB_HIGH_Card;
void MyApplication()
{
uchar key, Line, i;
ulong i1, i2;
uint ii;
uchar Disp[20];
stClock ClockNow;
PUB_AutoTestFlag = 0;
_AsyncOpen(9600,0);
_Buzzer(); _Buzzer(); _Delay(250); _Buzzer();
while(1)
{
_SetBkLight(0);
_ClearScreen();
_DispXY(1, 3,3, "ST3 功能演示");
_DispXY(2, 1,1, "1上,2下,3SAM,4Pt");
_DispXY(3, 1,0," 5键,6时,7系统");
_DispXY(4, 1,2, " 8内,9MD,0备份");
_CardSetCard(0);
while(( !_KeyBoardTest())&&(!_CardTestDoor())) ;//Ide_ARE();//lxj
_ClearScreen();
if (_CardTestDoor()) TestCardUp();
else
{
key = _KeyBoardGet();
switch(key)
{
case DEF_KEY_0: TestBackup(); break;
case DEF_KEY_1: TestCardUp(); break;
case DEF_KEY_2: TestCardDn(); break;
case DEF_KEY_3: TestCardSAM(); break;
case DEF_KEY_4: TestPrint(1); break;
case DEF_KEY_5: TestKey(); break;
case DEF_KEY_6: TestClock(); break;
case DEF_KEY_7: TestSysRW(); break;
case DEF_KEY_8: TestMem(); break;
case DEF_KEY_9: TestModem(); break;
}
if ( key==DEF_KEY_DOT)
{
_ClearScreen();
_DispXY(1, 1,0, "1 上卡电源");
_DispXY(2, 1,0, "2 下卡电源");
_DispXY(3, 1,0, "3 LCD背光");
_DispXY(4, 1,0, "4 系统复位");
while(( !_KeyBoardTest())&&(!_CardTestDoor())) Ide_ARE();//lxj
_ClearScreen();
key = _KeyBoardGet();
switch(key)
{
case DEF_KEY_1: TestCardPower(0); break;
case DEF_KEY_2: TestCardPower(1); break;
case DEF_KEY_3: TestBkLight(); break;
case DEF_KEY_4: _Reset(); break;
}
}
}
}
}
uint RdMem(uchar page)
{
uint i,j,ValFrm;
uchar ErrFlag,key;
ErrFlag = 0;
_OutHighAddr(page);
ValFrm = 36*t0 + 1092*page;
j=DEF_BLOCK_SIZE*CBYTE[DEF_ADDR_BLOCK&0x7fff]+(CBYTE[DEF_ADDR_LEFT&0x7fff]<<8)
+CBYTE[(DEF_ADDR_LEFT+1)&0x7fff]-ValFrm;
i=0;
if (page==12) {i=0x10;ValFrm=ValFrm+0x10;}
for (; i<j; i++)
{
if ( XBYTE[0x8000 + i] != CBYTE[ValFrm] )
{
sprintf(PubBuff,"%d页[%x]数据错",(uint)page,0x8000+i);
_Display(2,PubBuff);
sprintf(PubBuff,"%d页[%04x]",(uint)page,ValFrm);
_Display(3,PubBuff);
if (!ErrFlag)
{_Buzzer();
_Delay(50);
_Buzzer();}
ErrFlag = 1;
_Display(4,"ENT继续ESC退出");
while( !_KeyBoardTest());
key = _KeyBoardGet();
if( key == DEF_KEY_ESC ) return 2;
if( key != DEF_KEY_ENTER ) return 1;
_Display(4," ");
_OutHighAddr(page);
}
ValFrm++;
}
ValFrm=0;
for (i=j; i<0x8000; i++)
{
if ( XBYTE[0x8000 + i] != CBYTE[ValFrm] )
{
sprintf(PubBuff,"%d页[%x]数据错",(uint)page,0x8000+i);
_Display(2,PubBuff);
sprintf(PubBuff,"%d页[%04x]",(uint)page,ValFrm);
_Display(3,PubBuff);
if (!ErrFlag)
{_Buzzer();
_Delay(50);
_Buzzer();}
ErrFlag = 1;
_Display(4,"ENT继续ESC退出");
while( !_KeyBoardTest());
key = _KeyBoardGet();
if( key == DEF_KEY_ESC ) return 2;
if( key != DEF_KEY_ENTER ) return 1;
_Display(4," ");
_OutHighAddr(page);
}
ValFrm++;
}
if (!ErrFlag) return 0;
return 1;
}
uint WrMem(uchar page)
{
stClock ClockNow;
uint i,j,ValFrm;
_ClockRead((stClock*)(&ClockNow));
t0 = ClockNow.day;
_OutHighAddr(page);
ValFrm = 36*t0 + 1092*page;
j=DEF_BLOCK_SIZE*CBYTE[DEF_ADDR_BLOCK&0x7fff]+(CBYTE[DEF_ADDR_LEFT&0x7fff]<<8)
+CBYTE[(DEF_ADDR_LEFT+1)&0x7fff]-ValFrm;
for (i=0; i<j; i++)
{
XBYTE[0x8000 + i] = CBYTE[ValFrm];
ValFrm++;
}
ValFrm=0;
for (i=j; i<0x8000; i++)
{
XBYTE[0x8000 + i] = CBYTE[ValFrm];
ValFrm++;
}
ValFrm = 36*t0 + 1092*page;
for (i=0; i<j; i++)
{
if ( XBYTE[0x8000 + i] != CBYTE[ValFrm] )
return (uint)(0x8000 + i);
ValFrm++;
}
ValFrm=0;
for (i=j; i<0x8000; i++)
{
if ( XBYTE[0x8000 + i] != CBYTE[ValFrm] )
return (uint)(0x8000 + i);
ValFrm++;
}
return 0;
}
uchar TestMem(void)
{
uint i=0,j=0,k;
uchar key;
uchar Buff[32];
i = ((uint)(_XMemPage()));
memcpy(Buff, PUB_XMEM_Page,32);
sprintf(PubBuff, "扩展内存%dK", i*32);
_Display(1, PubBuff);
for(j=0;j<i;j++)
{
k = RdMem(PUB_XMEM_Page[j+1]);
if(k==0)
{
sprintf(PubBuff,"%d页数据正确",(uint)PUB_XMEM_Page[j+1]);
_Display(2,PubBuff);
}
if(k==2) break;
}
if(k==0) _Buzzer();
_ClearScreen();
_Display(1,"基本内存测试");
_Display(4,"ENT继续");
while( !_KeyBoardTest());
_ClearScreen();
key = _KeyBoardGet();
if( key != DEF_KEY_ENTER ) return ;
k=t0;
for(j=Buff+32;j<0x7f00;j++)
{
XBYTE[j]=0x55;
if(XBYTE[j]!=0x55) break;
XBYTE[j]=0xaa;
if(XBYTE[j]!=0xaa) break;
}
t0=k;
memcpy( PUB_XMEM_Page,Buff,32);
PUB_HIGH_Card=0;
if (j==0x7f00)
{
_Display(1,"基本内存正确");
_Buzzer();
}
else
{
_Buzzer();
_Delay(50);
_Buzzer();
_Display(1,"基本内存错误");
sprintf(PubBuff,"%x",j);
_Display(2,PubBuff);
}
_Display(3,"扩展内存写");
_Display(4,"ENT继续");
while( !_KeyBoardTest());
_ClearScreen();
key = _KeyBoardGet();
if( key != DEF_KEY_ENTER ) Reset() ;
for(j=0;j<i;j++)
{
k = WrMem(PUB_XMEM_Page[j+1]);
if(k==0)
{
sprintf(PubBuff,"%d页写正确",(uint)PUB_XMEM_Page[j+1]);
_Display(2,PubBuff);
}
else
{
sprintf(PubBuff,"%d页[%x]写错",(uint)PUB_XMEM_Page[j+1],k);
_Display(2,PubBuff);
_Buzzer();
_Delay(50);
_Buzzer();
}
}
Reset();
}
void TestCardUp(void)
{
while ( TestCard(0) != 2 );
return;
}
void TestCardDn(void)
{
while ( TestCard(1) != 2 );
return;
}
void TestCardSAM(void)
{
uchar i;
for(i=2; i<4; i++)
{
TestCard(i);
_Delay(DEF_DELAY_TIMES);
}
return;
}
uchar TestCard(uchar CardID)
{
APDU_COMM apducomm;
APDU_RESP apduresp;
uchar DataIn[10];
uchar DataOut[60];
uint WaitCount;
memset(PubBuff, 0, DEF_SECTOR_LEN);
_CardSetCard(CardID);
switch ( CardID )
{
case 0: strcpy(PubBuff, "上卡座,请插卡"); break;
case 1: strcpy(PubBuff, "下卡座,请插卡"); break;
case 2: strcpy(PubBuff, "1号SAM卡"); break;
case 3: strcpy(PubBuff, "2号SAM卡"); break;
}
_Display(1, PubBuff);
_Display(2, "");
//****** Test insert card
if (CardID < 2)
{
_Display(2, "ESC 取消");
WaitCount = 1000;
while( (!_CardTestDoor()) && (WaitCount) )
{
if( _KeyBoardTest() )
if( _KeyBoardGet() == DEF_KEY_CANCEL )
return 2;
WaitCount--;
if ( WaitCount==0 )
{
if ( PUB_AutoTestFlag )
return 0;
else
WaitCount = 1000;
}
}
PubBuff[6] = 0;
_Display(1, PubBuff);
_Display(2, "");
}//if Up&Down card
//****** Open CPU card
if( _CardSmartOpen() )
{
_CardSmartClose();
if (CardID < 2)
{
_Display(2, "打开错,请抽卡");
if ( ! PUB_AutoTestFlag )
while( _CardTestDoor() );
}
else
_Display(2, "没放置SAM卡");
return 0;
}
memcpy(apducomm.Command, "\x80\xb8\x00\x00", 4);//mpcos
apducomm.LengthIn = 0;
apducomm.DataIn = DataIn;
apducomm.LengthExpected = 8;
apduresp.DataOut= DataOut;
if ( (CardID<2) && (!_CardTestDoor()) )
{
_CardSmartClose();
return 0;
}
if( _CardSmartApdu(&apducomm, &apduresp) )
{
_Display(2, "APDU错1,请抽卡");
_CardSmartClose();
if ( ! PUB_AutoTestFlag )
while( _CardTestDoor());
return 0;
}
if( apduresp.Status != 0x9000 )
{
memcpy(apducomm.Command, "\x00\xb0\x00\x00", 4);//pcos
apducomm.LengthIn = 0;
apducomm.DataIn = DataIn;
apducomm.LengthExpected = 8;
apduresp.DataOut= DataOut;
if ( (CardID<2) && (!_CardTestDoor()) )
{
_CardSmartClose();
return 0;
}
if( _CardSmartApdu( &apducomm, &apduresp) )
{
_Display(2, "APDU错2,请抽卡");
_CardSmartClose();
if ( ! PUB_AutoTestFlag )
while( _CardTestDoor());
return 0;
}
if(apduresp.Status != 0x9000)
{
sprintf(PubBuff, "读结果错:%x", apduresp.Status);
_Display(2, PubBuff);
_CardSmartClose();
if ( ! PUB_AutoTestFlag )
while( _CardTestDoor());
return 0;
}
}
_Buzzer();
_CardSmartClose();
if ( CardID < 2 )
{
_Display(2, "正确, 请抽卡");
if ( ! PUB_AutoTestFlag )
while( _CardTestDoor() );
}
else
_Display(2, "SAM测试正确");
return 1;
}
void TestCardPower(uchar CardID)
{
uchar card[20];
if (CardID == 0)
strcpy(card, "上");
else
strcpy(card, "下");
strcat(card, "卡座已加电");
_Display(1, card);
_Display(2, "请测电流/电压");
_CardSetCard(CardID);
_CardSetPower(1);
while (1)
{
if ( _KeyBoardTest() )
if ( _KeyBoardGet() == DEF_KEY_CANCEL )
break;
}
_CardSetPower(0);
_Buzzer();
return;
}
uchar TestKey(void)
{
uchar sKeyTested[30];
uchar szBuf[20];
uchar szBuf1[20];
uchar ucIn, cESC;
cESC = 0;
_Display(1, " 键盘测试");
_Display(2, "请按遍所有的键");
memset(sKeyTested, '0', 20);
memset(szBuf , ' ', 20);
memset(szBuf1, ' ', 20);
szBuf[16]=0;
szBuf1[16]=0;
while(1)
{
if ( memcmp(sKeyTested, "11111111111111", 14) == 0 ) //dxs
{
_Buzzer();
_Display(2, "键盘测试完成");
_Delay(DEF_DELAY_TIMES);
return 1;
}
while ( ! _KeyBoardTest() );
_Buzzer();
ucIn = _KeyBoardGet();
switch ( ucIn )
{
case DEF_KEY_0: sKeyTested[0]='1'; szBuf[0]='0'; break;
case DEF_KEY_1: sKeyTested[1]='1'; szBuf[1]='1'; break;
case DEF_KEY_2: sKeyTested[2]='1'; szBuf[2]='2'; break;
case DEF_KEY_3: sKeyTested[3]='1'; szBuf[3]='3'; break;
case DEF_KEY_4: sKeyTested[4]='1'; szBuf[4]='4'; break;
case DEF_KEY_5: sKeyTested[5]='1'; szBuf[5]='5'; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -