📄 at_svr.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 + -