读书人

关于AT授命和gprs发送短信 急

发布时间: 2012-08-03 00:12:14 作者: rapoo

关于AT指令和gprs发送短信 急啊

C/C++ code
#include <termios.h>#include <sys/types.h>#include <sys/shm.h>#include <stdlib.h>#include <fcntl.h>#include <sys/stat.h>#include <string.h>#include <stdio.h>struct message_info{    char phno[12];    char message[128];};/******************************************************************* *函数tty_write是用来向串口写入数据, *send_buff是要发送的字符串; *******************************************************************/void tty_write(int gprs_fd, char *send_buff, int len){    char buff[128];    memset(buff, 0, sizeof(buff));    strcpy(buff, send_buff);    write(gprs_fd, send_buff, len);    printf("%s\n", buff);}/******************************************************************** *函数tty_read是用来读取串口数据的,并且将读取的数据打印; * *****************************************************************/void tty_read(int gprs_fd){    char reply_buff[128];    memset(reply_buff, 0, sizeof(reply_buff));    read(gprs_fd, reply_buff, sizeof(reply_buff));    printf("%s\n",reply_buff);}void gprs_init_serial(int gprs_fd){    struct termios options;    tcgetattr(gprs_fd, &options);          //获取当前串口参数初始值,并赋值给options;    options.c_cflag |= ( CLOCAL | CREAD );//c_cflag 为控制模式设置;    options.c_cflag &= ~CSIZE;              //清空原有字符长度;    options.c_cflag &= ~CRTSCTS;          //启用RTS/CTS(硬件);    options.c_cflag |= CS8;                  //设置字符长度掩码;    options.c_cflag &= ~CSTOPB;           //停止位设置为一个;        options.c_iflag |= IGNPAR;              //c_iflag 为输入模式设置;    options.c_oflag = 0;                  //c_oflag 为输出模式设置;    options.c_lflag = 0;                   //c_lflag 为局部模式设置;        cfsetispeed(&options, B115200);          //设置当前串口的输入波特率为115200;        cfsetospeed(&options, B115200);          //设置当前串口的输出波特率为115200;        tcsetattr(gprs_fd,TCSANOW,&options);          //设置当前串口的参数,立即修改;}int call(int gprs_fd, struct message_info info){    char send_buff[128];    char reply_buff[128];    if(strlen(info.phno) != 11)            //判断接收手机号码是否是11位;    {        printf("Wrong phone number!");        return -1;    }    memset(send_buff,0,sizeof(send_buff));    strcpy(send_buff, "at\r\n");    write(gprs_fd, send_buff,strlen(send_buff));    //测试模块是否正常;    printf("%s\n",send_buff);    memset(reply_buff, 0, sizeof(reply_buff));    sleep(1);                            //由于处理AT指令要花费一定时间,所以需要睡眠1秒;    read(gprs_fd, reply_buff, sizeof(reply_buff));    printf("%s\n",reply_buff);    memset(send_buff, 0, sizeof(send_buff));    sprintf(send_buff, "ATD%s;\r\n", info.phno);    write(gprs_fd, send_buff, strlen(send_buff));    //拨打电话;    printf("calling %s..................\n", send_buff);    memset(reply_buff, 0, sizeof(reply_buff));    sleep(100);    read(gprs_fd, reply_buff, sizeof(reply_buff));    printf("%s\n",reply_buff);    return 0;}/************************************************************* *函数swap用来奇偶交换; *number为原有字符,swap为交换后的字符;**************************************************************/void swap(char *number, char *swap){    char ch[] = "86";    char tmp[16];    int i;    memset(swap, 0, 32);    memset(tmp, 0, 16);    strcpy(swap, number);    strcat(swap, "f");    strcat(ch, swap);    strcpy(swap, ch);    for(i = 0;i<=strlen(swap) - 1;i += 2)    {        tmp[i + 1] = swap[i];        tmp[i] = swap[i + 1];    }    strcpy(swap, tmp);}int hang_phone(int gprs_fd){//    char send_buff[128];//    char reply_buff[128];    printf("Hang Up!\n");                //提示电话将被挂断;/*    memset(send_buff, 0, sizeof(send_buff));    strcpy(send_buff, "AT\r\n");    write(gprs_fd, send_buff, strlen(send_buff));    printf("%s\n",send_buff);*/    tty_write(gprs_fd, "AT\r\n", strlen("AT\r\n"));    sleep(1);    tty_read(gprs_fd);        tty_write(gprs_fd, "ATH\r\n",strlen("ATH\r\n"));//挂断电话;    sleep(30);                            //模块响应;    tty_read(gprs_fd);    return 0;}void answer_phone(int gprs_fd){    printf("Answer!\n");    tty_write(gprs_fd, "AT\r\n", strlen("AT\r\n"));    sleep(1);    tty_read(gprs_fd);    tty_write(gprs_fd, "ATA\r\n",strlen("ATA\r\n"));//接听电话;    sleep(30);                            //模块响应;    tty_read(gprs_fd);}void send_message(int gprs_fd, struct message_info info, int flag){    char send_buff[128];        printf("Send english message!\n");    tty_write(gprs_fd, "AT\r\n", strlen("AT\r\n"));    sleep(1);    tty_read(gprs_fd);    if(flag == 0)    {        tty_write(gprs_fd, "AT+CSMP=17,167,0,0\r\n",strlen("AT+CSMP=17,167,0,0\r\n"));        sleep(1);        tty_read(gprs_fd);    }    if(flag == 1)    {        tty_write(gprs_fd, "AT+CSMP=17,167,0,8\r\n",strlen("AT+CSMP=17,167,0,8\r\n"));        sleep(1);        tty_read(gprs_fd);    }    tty_write(gprs_fd, "AT+CMGF=1\r\n", strlen("AT+CMGF=1\r\n"));    sleep(1);    tty_read(gprs_fd);    memset(send_buff, 0, sizeof(send_buff));    strcpy(send_buff, "AT+CMGS=");    strcat(send_buff, info.phno);    strcat(send_buff, "\r\n");    write(gprs_fd,send_buff,strlen(send_buff));    printf("%s\n",send_buff);    sleep(1);    tty_read(gprs_fd);    memset(send_buff, 0, sizeof(send_buff));    sprintf(send_buff,"%s\x1a", info.message);    write(gprs_fd, send_buff, strlen(send_buff));    printf("%s\n", send_buff);    tty_read(gprs_fd);}int main(){    int gprs_fd;    struct message_info info;//    info.phno = "18667315690";    strcpy(info.phno, "18667315690");    strcpy(info.message, "6C495B57");        if((gprs_fd = open("/dev/s3c2410_serial1", O_RDWR|O_NOCTTY|O_NDELAY)) < 0)    {        printf("open error!\n");        exit(-1);    }    gprs_init_serial(gprs_fd);    send_message(gprs_fd, info, 1);    return 0;} 



在串口模式下 按程序的命令 输入到串口中 可以正常的发出中文短信,但是一在linux下编译完 移植到开发板上 在运行发出去的就是乱码了 求高人帮忙啊

[解决办法]
怀疑是编码问题,检查一下
[解决办法]
探讨
引用:

怀疑是编码问题,检查一下

编码应该没问题 我同样的在串口下 就不是乱码

读书人网 >C语言

热点推荐