QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 792|回复: 1

linux 下手机 sms at 命令求助

[复制链接]
发表于 2004-2-20 13:37:10 | 显示全部楼层 |阅读模式
 楼主  
根据gsm0705规范,发送短信息的命令是AT+CMGS=<length><CR>pdu<CTRL-Z>;
用c实现如下:
         .
         .
         .
     char at_command_d[128];
     char pdu_buff[1024];
     memset(pdu_buff,0,sizeof(pdu_buff));
     memset(at_command_d,o,sizeof(at_command_d));

     create_smssubmit_pdu(pdu_buff);

     at_command(at_command_d,"+CMGS");
     add_at_command(at_command_d,"=%d\13",(strlen(pdu_buff)/2-1));
         write_mytty(at_command_d);/*向终端写入命令 AT+CMGS=<Length><CR>  (CR的IRA为13)*/
         
      
        
         printf("waiting for data request.\n");
         read_mytty(at_command_d,ack_buff);

         if(!strncmp(ack_buff,">",1)){
                printf("sending the pdu data...\n");
               
                if(write(mytty,pdu_buff,strlen(pdu_buff))!=strlen(pdu_buff)||write(mytty,"\26",1)!=1){
                      printf("error on sending data.\n");
                      exit(1);
                    }/*向终端写入pdu<ctrl+z>  (ctrl+z 的IRA 为26)*/
        read_mytty(at_command_d,ack_buff);
        printf("the respone is :%s\n",ack_buff);
    }
        .
    .
    .                                                                                                                     
void create_smssubmit_pdu(char *pdu)
{
        char number[]="683175428705F3";
        char buff[]="E8329BFD4697D9EC37";/*hellohello 的gsm编码*/
                                                                                                                             
        memset(pdu,0,sizeof(pdu));
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",17);
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",13);
        sprintf(&pdu[strlen(pdu)],"%02X",145);
        sprintf(&pdu[strlen(pdu)],"%s",number);
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",0);
        sprintf(&pdu[strlen(pdu)],"%02X",167);
        sprintf(&pdu[strlen(pdu)],"%02X",10);
        sprintf(&pdu[strlen(pdu)],"%s",buff);
}
creat_smssubmit_pdu产生的pdu如下:
    00 11 00 0D 91 683175428705F3 00 00 A7 0A E8329BFD4697D9EC37 (其中的空格仅仅为了方便查看,实际是没有的)
同样我也用11位电话号码来组织(省去前面的86),如下:
    00 11 00 0B 91 3175428705F3 00 00 A7 0A E8329BFD4697D9EC37
但是当我发送完命令AT+CMGS=<length><CR>后,要等至少十秒才会出现simens 6618给出的回应">",此时发送pdu,结果不论我怎么组织pdu中各个分组6618总是给出"ERROR",而且没有给出错误号.
知道为什么吗?
发表于 2004-4-13 16:08:13 | 显示全部楼层
你的设备是/dev/ttyUSB0吗?速率是多少啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-25 16:05 , Processed in 0.043027 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表