BOOL gsmSendMessage(const SM_PARAM* pSrc)
{
int nPduLength; // PDU串长度
unsigned char nSmscLength; // SMSC串长度
int nLength; // 串口收到的数据长度
char cmd[16]; // 命令串
char pdu[512]; // PDU串
char ans[128]; // 应答串
nPduLength = gsmEncodePdu(pSrc, pdu); // 根据PDU参数,编码PDU串
strcat(pdu, "/x01a/x00"
; // 以Ctrl-Z结束
gsmString2Bytes(pdu, &nSmscLength, 2); // 取PDU串中的SMSC信息长度
nSmscLength++; // 加上长度字节本身
// 命令中的长度,不包括SMSC信息长度,以数据字节计
sprintf(cmd, "AT+CMGS=%d/r", nPduLength / 2 - nSmscLength); // 生成命令
printf("发送短消息:%s/r/n%s/r/n",cmd,pdu);
WriteComm(cmd, strlen(cmd)); // 先输出命令串
if( commwaitdata(smscommfd,100*2,20)<=0)
return FALSE;
// taskDelay(100*2);
nLength = ReadComm(ans, 128); // 读应答数据
ans[127]=0;
printf(">/r/n"
;
// 根据能否找到"/r/n> "决定成功与否
if(nLength == 4 && strncmp(ans, "/r/n> ", 4) == 0)
{
WriteComm(pdu, strlen(pdu)); // 得到肯定回答,继续输出PDU串
// taskDelay(100*5);
if( commwaitdata(smscommfd,100*5,20)<=0)
return FALSE;
nLength = ReadComm(ans, 128); // 读应答数据
ans[127]=0;
// 根据能否找到"+CMS ERROR"决定成功与否
if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
{
printf("sms send ok/r/n"
;
return TRUE;
}
}
printf("sms send err/r/n"
;
return FALSE;
}
不知道你的能用不