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

📄 at_svr.c

📁 一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上
💻 C
字号:
#include <asixsys.h>
#include <asixapp.h>
#include <sys\lmalloc.h>
#include <sys\at.h>
#include <sys\devmng.h>

#include <service\psst\at_rps.h>
#include <service\psst\at_pdu.h>

#include <sys\sysdebug.h>

extern void AtServer( void );

DWORD	onwerid = 0;
DWORD	usol_onwerid[] = { 0, 0, 0 };

enum COMMUNICATION_STATE	AtCommState = AT_COMM_DISCONNECT;

DWORD	at_server_stk[STACK_SIZE];

TASKDESCRIPTION AtServerDesp = 
{"at_server",	ASIX_SERVICE,	NOT_IN_ANYGROUP,	NULL,	STACK_SIZE,	0,	0,	0,	AtServer,	SERVICE_PRI};

TASKDESCRIPTIONLIST	AtServerDespLst =
{NULL,	NULL,	&AtServerDesp, ATSERVER_ID, at_server_stk};

void AtServer( )
{
	char	buf[MAX_AT_RPS_LEN];
	MSG		msg;
//	UINT flgptn;
	long	i, par_type = 0;
	DWORD	id;
	AT_RPS_PAR *par;
	
	OpenUart( UART0 );

	for(;;)
	{
//		buf = (char *)SysLmalloc( MAX_AT_RPS_LEN );
//		if( buf != NULL )
		{
//			SysReadDev( UART0_ID, buf, 1, -1 );
			i = MatchATRPSType( buf );
			switch( AtRpsTable[i].type )
			{
				case AT_RPS_OK:
				case AT_RPS_CONNECT:
//					if( AtCommState == AT_COMM_APPEAL )
//						AtCommState = AT_COMM_CONNECT;
					id = onwerid;
					par_type = 1;
					break;
				case AT_RPS_RING:
					id = usol_onwerid[0];
					par_type = 1;
					break;
				case AT_RPS_CLIP:
					id = usol_onwerid[1];
					par_type = 3;
					break;
				case AT_RPS_CMTI:
					id = usol_onwerid[2];
					par_type = 3;
					break;
				case AT_RPS_ERROR:
				case AT_RPS_BUSY:
				case AT_RPS_NO_CARRIER:
				case AT_RPS_NO_DIALTONE:
					AtCommState = AT_COMM_DISCONNECT;
					id = onwerid;
					par_type = 1;
					break;
				case AT_RPS_CMGR:
				case AT_RPS_CMGL:
				case AT_RPS_CMGS:
				case AT_RPS_CMGF:
				case AT_RPS_CNMI:			
					id = onwerid;
					par_type = 2;
					break;
				case AT_RPS_CMS:
				case AT_RPS_CME:
					id = onwerid;
					par_type = 3;
					break;
				case AT_RPS_READY:
					id = onwerid;
					par_type = 1;
					break;
				default:
					continue;
			}
			if( id == 0 )
				continue;
			switch( par_type )
			{
				case 1:
					dbgoutput( "rcv response: %s", AtRpsTable[i].s );
					par = NULL;
					break;
				case 2:
					dbgoutput( "rcv response: %s", AtRpsTable[i].s );
					par = GetParameter( buf, "OK", 2, AtRpsTable[i].s, AtRpsTable[i].len );
					break;
				case 3:
					dbgoutput( "rcv response: %s", AtRpsTable[i].s );
					par = GetParameter( buf, NULL, 0, NULL, 0 );
					break;
				default:
					continue;
			}

			msg.message = SM_AT;
			msg.lparam = AtRpsTable[i].type;
			msg.wparam = sizeof( AT_RPS_PAR );
			msg.data = par;
			
			SysSendMessage( id, &msg );

//			if( AtCommState == AT_COMM_DISCONNECT )
				onwerid = 0;
		}
	}
}

DWORD SendAT( DWORD id, WORD len, BYTE *data )
{
	if( onwerid == 0 || onwerid == id )
	{
		MSG	msg;
	
		msg.message = SM_DATA_SEND;
		msg.lparam = id;
		msg.wparam = len;
		msg.data = data;
		SysSendMessage( ATSERVER_ID, &msg );
		
		return SYS_OK;
	}
	else
		return SYS_ERR;
}

void EndWaitResponse( void )
{
	DWORD	id;

	get_tid( (ID *)&id );
	if( onwerid == id )
	{
		MSG	msg;
	
		msg.message = SM_CLOSE;
		msg.lparam = 0;
		msg.wparam = 0;
		msg.data = NULL;
		SysSendMessage( ATSERVER_ID, &msg );
	}
	return;
}

DWORD WaitUnsolicitedResponse( DWORD type )
{
	DWORD	id;
	WORD	usol;

	get_tid( (ID *)&id );
	
	switch( type )
	{
		case AT_RPS_RING:
//			if( usol_onwerid[0] == 0 )
//				usol_onwerid[0] = id;
//			else
			if( usol_onwerid[0] != 0 )
				return SYS_ERR;

			usol = 0;
			break;
		case AT_RPS_CLIP:
//			if( usol_onwerid[1] == 0 )
//				usol_onwerid[1] = id;
//			else
			if( usol_onwerid[1] != 0 )
				return SYS_ERR;

			usol = 1;
			break;
		case AT_RPS_CMTI:
//			if( usol_onwerid[2] == 0 )
//				usol_onwerid[2] = id;
//			else
			if( usol_onwerid[2] != 0 )
				return SYS_ERR;

			usol = 2;
			break;
		default:
			return SYS_ERR;
	}
	
	{
		MSG	msg;
	
		msg.message = SM_WAIT_USOL;
		msg.lparam = id;
		msg.wparam = usol;
		msg.data = NULL;
		SysSendMessage( ATSERVER_ID, &msg );
	}

	return SYS_OK;
}

⌨️ 快捷键说明

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