?? 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 + -