⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 无线音频电话(gprs)
💻 C
📖 第 1 页 / 共 2 页
字号:
//去掉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 + -