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

📄 main.bak

📁 TC35i收发短信的源代码
💻 BAK
📖 第 1 页 / 共 5 页
字号:
* Modify Date: 2008/09/26
* **********************************************************************/
void u6WaitSndOver( void )
{
	u6scnt=0;
	while(u6scnt++<=5000) //receive the last char.
	{
		WDTE=0xAC;
		NOP();
		NOP();
	}
}

/**********************************************************************
* Func Name  : u6WaitRcvOver
* Descript   : 
* Parameters : None
* Returns    : None
* Author     : Nakata
* Create Date: 2008/10/11
* Modify Date: 2008/10/11
* **********************************************************************/
void u6WaitRcvOver( void )
{
	u6rcnt=0;
	while(u6rcnt++<=5000) //receive the last char.
	{
		WDTE=0xAC;
		NOP();
		NOP();
	}
}

/**********************************************************************
* Func Name  : u0WaitRcvOver
* Descript   : 
* Parameters : None
* Returns    : None
* Author     : Nakata
* Create Date: 2008/10/15
* Modify Date: 2008/10/15
* **********************************************************************/
void u0WaitRcvOver( void )
{
	u0rcnt=0;
	while(u0rcnt++<=10000) //receive the last char.
	{
		WDTE=0xAC;
		NOP();
		NOP();
	}
}

/**********************************************************************
* Func Name  : u0WaitSndOver
* Descript   : 
* Parameters : None
* Returns    : None
* Author     : Nakata
* Create Date: 2008/09/26
* Modify Date: 2008/09/26
* **********************************************************************/
void u0WaitSndOver( void )
{
	u0scnt=0;
	while(u0scnt++<=10000) //receive the last char.
	{
		WDTE=0xAC;
		NOP();
		NOP();
	}
}

/**********************************************************************
* Func Name  : SendRetInfo
* Descript   : send "Sim Info Error" to PC
* Parameters : None
* Returns    : None
* Author     : Nakata
* Create Date: 
* Modify Date: 
* **********************************************************************/
void SendRetInfo( uchar *info )
{
	int len;

	len = strlen(info);

	UART6_SendData(info,len);
	
	//wait for u6 sending over.
	u6WaitSndOver();
}


/**********************************************************************
* Func Name  : ModuleSyncBR
* Descript   : Send out data via Uart6
* Parameters : 
* Returns    : None
* Author     : Nakata
* Create Date: 2008/10/20
* Modify Date: 2008/10/20
* *********************************************************************/
uchar ModuleSyncBR( uchar br )
{
	uchar ucResult;
	uint len;

	//execute "AT+IPR=19200"
	if(br==_4800BPS)
	{
		memcpy(tempBuf,"AT+IPR=4800\r",12);
		tempBuf[12]=0;
		len = 12;
	}
	else if(br==_9600BPS)
	{
		memcpy(tempBuf,"AT+IPR=9600\r",12);
		tempBuf[12]=0;
		len = 12;
	}
	else if(br==_1920BPS)
	{
		memcpy(tempBuf,"AT+IPR=19200\r",13);
		tempBuf[13]=0;
		len = 13;
	}
	else if(br==_3840BPS||br==_5760BPS)
	{
		memcpy(tempBuf,"AT+IPR=38400\r",13);
		tempBuf[13]=0;
		len = 13;
	}
	else if(br==_1152BPS)
	{
		memcpy(tempBuf,"AT+IPR=115200\r",14);
		tempBuf[14]=0;
		len = 14;
	}
	else
	{
		return FALSE;
	}

	RESP_BUF[0]='O';
	RESP_BUF[1]='K';
	RESP_BUF[2]=0;
	RESP_LEN = 2;

	DelayCnt = 3; //delay 3s
	
	ucResult = send_at_cmd(tempBuf,len);

	return (ucResult);
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for setting DTU's baudrate.
**
		4800
		9600
		19200
		38400
		57600
		115200
**  Parameters:
**	None.
**	
**  Returns:
**	None.
**	
**-----------------------------------------------------------------------------
*/
uchar set_baud( uchar baud,uchar parity )
{

	//sync to module
	if(ModuleSyncBR( baud )!=TRUE) return FALSE;

	memset(tempBuf,0,BAUD_LEN);
	tempBuf[0]=baud;
	tempBuf[1]=parity;

	//save data to flash
	if(SaveParaToFlash(BAUD_ADR,tempBuf,BAUD_LEN)!=TRUE)
	{
		NOP();
		NOP();

		if(ModuleSyncBR( gBAUD )!=TRUE)
		{
			SendRetInfo("\r\n>Can't Restore IPR.\r\n");
			return FALSE;
		}
		return FALSE;
	}

	gBAUD=baud;
	gPARITY = parity;

	return TRUE;
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for UART6 data transfering.
**
**  Parameters:
**	txbuf:	transfer buffer pointer
**	txnum:	buffer size
**
**  Returns:
**	MD_OK
**	MD_ERROR
**
**-----------------------------------------------------------------------------
*/
uchar read_baud( void )
{
	uchar ucResult;
	ushort usReadAdr;

	//read id
	usReadAdr = usEEPROMBlankAdrSearchEx( PARA_BLOCK_NO );
	if(usReadAdr == 0) return FALSE;

	if(usReadAdr>=4+PARA_LEN)
	{
		usReadAdr = usReadAdr - PARA_LEN;
	}

	//read watch dog time
	ucResult = ucEEPROMReadEx(PARA_BLOCK_NO,usReadAdr+BAUD_ADR,BAUD_LEN,tempBuf);

	if(ucResult!=TRUE)
	{
		gBAUD = _9600BPS;
		gPARITY = _NULL;
		return FALSE;
	}

	gBAUD = tempBuf[0];
	gPARITY = tempBuf[1];

	return (TRUE);
}



/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for UART6 data transfering.
**
**  Parameters:
**	txbuf:	transfer buffer pointer
**	txnum:	buffer size
**
**  Returns:
**	MD_OK
**	MD_ERROR
**
**-----------------------------------------------------------------------------
*/
uchar read_debugflg( void )
{
	uchar ucResult;
	ushort usReadAdr;

	//read id
	usReadAdr = usEEPROMBlankAdrSearchEx( PARA_BLOCK_NO );
	if(usReadAdr == 0) return FALSE;

	if(usReadAdr>=4+PARA_LEN)
	{
		usReadAdr = usReadAdr - PARA_LEN;
	}

	//read watch dog time
	ucResult = ucEEPROMReadEx(PARA_BLOCK_NO,usReadAdr+DEBUG_ADR,DEBUG_LEN,tempBuf);

	if(ucResult!=TRUE)
	{
		gDEBUG = _NORMAL;
		return FALSE;
	}

	gDEBUG = tempBuf[0];

	return (TRUE);
}


/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for setting DTU's baudrate.
**
**  Parameters:
**	None.
**	
**  Returns:
**	None.
**	
**-----------------------------------------------------------------------------
*/
uchar set_debugflg( void )
{
	uchar tmp;

	if(u6.Length!=9 ||(u6.Buf[7]!='0' && u6.Buf[7]!='1')) return FALSE;

	if(u6.Buf[7]=='0') tmp = _NORMAL;
	else tmp = _DEBUG;

	memset(tempBuf,0,DEBUG_LEN);

	tempBuf[0]=tmp;

	//save data to flash
	if(SaveParaToFlash(DEBUG_ADR,tempBuf,DEBUG_LEN)!=TRUE) return FALSE;

	gDEBUG=tmp; //update debug flag.

	return TRUE;
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for checking debug flag.
**
**  Parameters:
**	None.
**	
**  Returns:
**	None.
**	
**-----------------------------------------------------------------------------
*/
void check_debugflg( void )
{
	if(gDEBUG==_NORMAL) SendRetInfo("\r\n+DBG: 0\r\n");
	else SendRetInfo("\r\n+DBG: 1\r\n");
}


/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for reading mode.
**
**  Parameters:

**  Returns:
**	MD_OK
**	MD_ERROR
**
**-----------------------------------------------------------------------------
*/
uchar read_mode( void )
{
	uchar ucResult;
	ushort usReadAdr;

	//read mode
	usReadAdr = usEEPROMBlankAdrSearchEx( PARA_BLOCK_NO );
	if(usReadAdr == 0) return FALSE;

	if(usReadAdr>=4+PARA_LEN)
	{
		usReadAdr = usReadAdr - PARA_LEN;
	}

	//read watch dog time
	ucResult = ucEEPROMReadEx(PARA_BLOCK_NO,usReadAdr+MODE_ADR,MODE_LEN,tempBuf);

	if(ucResult!=TRUE)
	{
		gMODE = _SMSMODE;
		return FALSE;
	}

	gMODE = tempBuf[0];

	return (TRUE);
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for setting DTU's baudrate.
**
**  Parameters:
**	None.
**	
**  Returns:
**	None.
**	
**-----------------------------------------------------------------------------
*/
uchar set_mode( void )
{
	uchar tmp;

	if(u6.Length!=10 ||(u6.Buf[8]!='0' && u6.Buf[8]!='1')) return FALSE;

	if(u6.Buf[8]=='0') tmp = _CMDMODE;
	else tmp = _SMSMODE;

	memset(tempBuf,0,MODE_LEN);

	tempBuf[0]=tmp;

	//save data to flash
	if(SaveParaToFlash(MODE_ADR,tempBuf,MODE_LEN)!=TRUE) return FALSE;

	gMODE=tmp; //update mode flag

	return TRUE;
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for checking debug flag.
**
**  Parameters:
**	None.
**	
**  Returns:
**	None.
**	
**-----------------------------------------------------------------------------
*/
void check_mode( void )
{
	if(gMODE==_CMDMODE) SendRetInfo("\r\n+MODE: 0\r\n");
	else SendRetInfo("\r\n+MODE: 1\r\n");
}


/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for writing data into flash.
**
**  Parameters:
**	None.
**	
**  Returns:
**	None.
**	
**-----------------------------------------------------------------------------
*/
uchar set_para_default( void )
{
	uchar ucResult;

	//initializate the block
	ucResult = ucEEPROMInitEx( PARA_BLOCK_NO );
	if(ucResult!=TRUE) return FALSE;

	//clear id & ip & port
	memset(tempBuf,0,PARA_LEN);

	//baudrate
	tempBuf[0]=_9600BPS; //9600
	tempBuf[1]=_NULL; 	//no parity

	tempBuf[BAUD_LEN]=_NORMAL; //normal mode.
	tempBuf[BAUD_LEN+DEBUG_LEN]=_SMSMODE; //sms mode

	//write data into flash
	ucResult = ucEEPROMWriteEx(PARA_BLOCK_NO,4,PARA_LEN,tempBuf);

	if(ucResult!=TRUE) return FALSE;

	return TRUE;
}

/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for UART6 data transfering.
**
**  Parameters:
**	txbuf:	transfer buffer pointer
**	txnum:	buffer size
**
**  Returns:
**	MD_OK
**	MD_ERROR
**
**-----------------------------------------------------------------------------
*/
uchar load_globa_para( void )
{
	if(read_baud()!=TRUE) return FALSE; //read baudrate
	if(read_debugflg()!=TRUE) return FALSE; //read debug flag
	if(read_mode()!=TRUE) return FALSE; //read mode

	return TRUE;
}


/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	This function is responsible for writing data into flash.
**
**  Parameters:
**	None.
**	
**  Returns:
**	None.
**	
**-----------------------------------------------------------------------------
*/
uchar SaveParaToFlash(ushort addr,uchar *dataBuf,uint dataLen)
{
	uchar ucResult;
	ushort usReadAdr,usWriteAdr;
	
	//first determine the block validation
	ucResult = IsBlockValid( PARA_BLOCK_NO );

	//error
	if(ucResult!=TRUE) return FALSE;

	//search the last data address
	usWriteAdr = usEEPROMBlankAdrSearchEx( PARA_BLOCK_NO );
	if(usWriteAdr==0) return FALSE;

	//get read address
	usReadAdr = usWriteAdr - PARA_LEN;

	//first read out the data
	ucResult = ucEEPROMReadEx(PARA_BLOCK_NO,usReadAdr,PARA_LEN,u6.Buf);
	if(ucResult!=TRUE) return FALSE;

	if(usWriteAdr+PARA_LEN > BYTES1024) //too longer
	{
		//initilization the flash
		ucResult = ucEEPROMInitEx( PARA_BLOCK_NO ); //initilization
		if(ucResult!=TRUE) return FALSE;

		usWriteAdr = 4;
	}

	memcpy(u6.Buf+addr,dataBuf,dataLen);

	//write data into flash
	ucResult = ucEEPROMWriteEx(PARA_BLOCK_NO,usWriteAdr,PARA_LEN,u6.Buf);
	if(ucResult!=TRUE) return FALSE;

	return TRUE;
}

/****************************************************************************
**
**  Abstract:
**	Analzye command strings.
**
**  Parameters:
**	None
**
**  Returns:
**	None
**
****************************************************************************/
void analzye_atcmd( void )
{


if(u6.Buf[0]=='r' && u6.Buf[1]=='r')
{
	read_block();
	return;
}


	if(u6.Length>6)
	{
		//not allow to execute "AT+IPR=n"
		if(UpCase(u6.Buf[0])=='A'&&UpCase(u6.Buf[1])=='T'&&u6.Buf[2]=='+')
		{
			if(UpCase(u6.Buf[3])=='I'&&UpCase(u6.Buf[4])=='P'&&UpCase(u6.Buf[5])=='R'&&u6.Buf[6]=='='&&u6.Buf[7]!='?')
			{
				return;
			}
			else if(UpCase(u6.Buf[3])=='D'&&UpCase(u6.Buf[4])=='B'&&UpCase(u6.Buf[5])=='G')
			{
				u6.Buf[u6.Length]=0;
				SendRetInfo(u6.Buf);

				if(u6.Buf[6]=='?')
				{
					check_debugflg();
					SendOK();
				}
				else
				{
					if(set_debugflg()!=TRUE) SendError();
					else SendOK();
				}
				return;
			}
			else if(UpCase(u6.Buf[3])=='M'&&UpCase(u6.Buf[4])=='O'&&UpCase(u6.Buf[5])=='D'&&UpCase(u6.Buf[6])=='E')
			{
				u6.Buf[u6.Length]=0;
				SendRetInfo(u6.Buf);

				if(u6.Buf[7]=='?')
				{
					check_mode();
					SendOK();
				}
				else
				{
					if(set_mode()!=TRUE) SendError();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -