📄 at_com.c
字号:
#include <stdio.h>
#include <string.h>
#include <kernel\ros33\ros33.h>
#include <sys\lmalloc.h>
#include <sys\sysmsg.h>
#include <sys\systmr.h>
#include <sys\sysusr.h>
#include <sys\syserr.h>
#include <sys\at.h>
#include <service\psst\at_pdu.h>
#include <service\psst\psat.h>
void ATCommand( short comType, char *par1, char *par2 )
{
char *comstr;
long i, slen, msgLen;
static char *smsdata = NULL;
ID tid;
switch( comType )
{
case AT_COM_AT:
{
comstr = (char *)SysLmalloc( 5 );
if( comstr == NULL )
return;
memcpy( comstr, "at\r\n", 5 );
}
break;
case AT_COM_ATD:
{
if( par1 == NULL || strlen(par1) > 23 )
return;
comstr = (char *)SysLmalloc( 30 );
if( comstr == NULL )
return;
// AtCommState = AT_COMM_APPEAL;
memcpy( comstr, "atd", 4 );
strcat( comstr, par1 );
strcat( comstr, ";\r\n" );
}
break;
case AT_COM_ATH:
{
comstr = (char *)SysLmalloc( 6 );
if( comstr == NULL )
return;
// AtCommState = AT_COMM_DISCONNECT;
memcpy( comstr, "ath\r\n", 6 );
}
break;
case AT_COM_ATA:
{
comstr = (char *)SysLmalloc( 6 );
if( comstr == NULL )
return;
// AtCommState = AT_COMM_CONNECT;
memcpy( comstr, "ata\r\n", 6 );
}
break;
case AT_COM_ATE:
{
if( par1 == NULL || strlen(par1) > 1 )
return;
comstr = (char *)SysLmalloc( 7 );
if( comstr == NULL )
return;
memcpy( comstr, "ate", 4 );
strcat( comstr, par1 );
strcat( comstr, "\r\n" );
}
break;
case AT_COM_ATX:
{
if( par1 == NULL || strlen(par1) > 1 )
return;
comstr = (char *)SysLmalloc( 7 );
if( comstr == NULL )
return;
memcpy( comstr, "atx", 4 );
strcat( comstr, par1 );
strcat( comstr, "\r\n" );
}
break;
case AT_COM_CMGS:
{
SMS_SUBMIT_PDU_CONTENT ssc;
int llen;
MSG datamsg;
if( par1 == NULL || par2 == NULL )
return;
// send command
{
comstr = (char *)SysLmalloc( 20 );
if( comstr == NULL )
return;
ssc.tsmc = 0x91;
ssc.sa = "8613800250500"; //"8613800250540";//
ssc.fo = 0x11;
ssc.mr = 0x00;
ssc.tn = 0x91;
ssc.oa = par1;
ssc.pid = 0x00;
// ssc.dcs = 0x00; // uncompressed default alphabet
ssc.dcs = 0x08; // uncompressed UCS2
// ssc.dcs = 0x04; // uncompressed 8bit
ssc.vp = 0xaa;
ssc.ud = par2;
strcpy( comstr, "AT+CMGS=" );
smsdata = TranslateSSPC( &ssc, &msgLen );
sprintf( &comstr[8], "%d", msgLen );
llen = strlen( comstr );
i = llen;
comstr[i++] = 0x0d; // <CR>
comstr[i] = '\0';
}
get_tid( &tid );
SendAT( tid, (WORD)strlen(comstr), comstr );
if( WaitATCommandResponse( &datamsg, AT_COM_CMGS ) != AT_RPS_OK )
return;
// transfer data
{
comstr = (char *)SysLmalloc( MAX_AT_SMS_LEN );
if( comstr == NULL )
return;
slen = strlen( smsdata );
memcpy( comstr, smsdata, slen );
comstr[slen] = 0x1a; // ^Z
comstr[slen+1] = '\0';
smsdata = NULL;
}
}
break;
case AT_COM_CMGR:
{
if( par1 == NULL || strlen(par1) > 3 )
return;
comstr = (char *)SysLmalloc( 15 );
if( comstr == NULL )
return;
memcpy( comstr, "at+cmgr=", 9 );
strcat( comstr, par1 );
strcat( comstr, "\r\n" );
}
break;
case AT_COM_CMGD:
{
if( par1 == NULL || strlen(par1) > 3 )
return;
comstr = (char *)SysLmalloc( 15 );
if( comstr == NULL )
return;
memcpy( comstr, "at+cmgd=", 9 );
strcat( comstr, par1 );
strcat( comstr, "\r\n" );
}
break;
case AT_COM_CMGF:
{
comstr = (char *)SysLmalloc( 15 );
if( comstr == NULL )
return;
if( par1 == NULL )
memcpy( comstr, "at+cmgf?\r\n", 11 );
else
{
if( par1 == NULL || strlen(par1) > 1 )
{
SysLfree( comstr );
return;
}
memcpy( comstr, "at+cmgf=", 9 );
strcat( comstr, par1 );
strcat( comstr, "\r\n" );
}
}
break;
case AT_COM_CLIP:
{
comstr = (char *)SysLmalloc( 13 );
if( comstr == NULL )
return;
if( par1 == NULL )
memcpy( comstr, "at+clip?\r\n", 11 );
else
{
if( par1 == NULL || strlen(par1) > 1 )
{
SysLfree( comstr );
return;
}
memcpy( comstr, "at+clip=", 9 );
strcat( comstr, par1 );
strcat( comstr, "\r\n" );
}
}
break;
case AT_COM_CNMI:
{
comstr = (char *)SysLmalloc( 25 );
if( comstr == NULL )
return;
if( par1 == NULL )
memcpy( comstr, "at+cnmi?\r\n", 11 );
else
{
if( par1 == NULL || strlen(par1) > 10 )
{
SysLfree( comstr );
return;
}
memcpy( comstr, "at+cnmi=", 9 );
strcat( comstr, par1 );
strcat( comstr, "\r\n" );
}
}
break;
default:
break;
}
get_tid( &tid );
SendAT( tid, (WORD)strlen(comstr), comstr );
return;
}
short WaitATCommandResponse( MSG *pmsg, short comType )
{
// MSG msg;
short quit = 0;
if( pmsg == NULL ) // parameter error
return SYS_PAR;
while( !quit )
{
if( SysRecvMessage( pmsg, 1000 ) != SYS_OK ) // time out
{
EndWaitResponse( );
return SYS_TMOUT;
}
if( pmsg->message == SM_AT )
{
switch( comType )
{
case AT_COM_AT:
case AT_COM_ATE:
case AT_COM_ATX:
case AT_COM_CMGD:
if( pmsg->lparam != AT_RPS_OK )
return SYS_ERR;
quit = 1;
break;
case AT_COM_CMGF:
switch( pmsg->lparam )
{
case AT_RPS_OK:
case AT_RPS_CMGF:
quit = 1;
break;
default:
return SYS_ERR;
}
break;
case AT_COM_CLIP:
switch( pmsg->lparam )
{
case AT_RPS_OK:
case AT_RPS_CLIP:
quit = 1;
break;
default:
return SYS_ERR;
}
case AT_COM_CNMI:
switch( pmsg->lparam )
{
case AT_RPS_OK:
case AT_RPS_CNMI:
quit = 1;
break;
default:
return SYS_ERR;
}
case AT_COM_CMGS:
switch( pmsg->lparam )
{
case AT_RPS_OK:
case AT_RPS_READY:
quit = 1;
break;
default:
return SYS_ERR;
}
default:
break;
}
}
}
return SYS_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -