?? main.c~
字號:
/***********************************GSM發送短信實例步驟:1 打開串口;2 初始化串口參數;3 發送AT+CMGF命令,通知GSM模塊采用PDU模式;4 構造PDU字符串,并利用AT+CMGS命令發送;5 發送結束,關閉串口。作者:蒙德鑫時間:2008/12/10************************************/#include <stdio.h> /*標準輸入輸出定義*/#include <stdlib.h> /*標準函數庫定義*/#include <unistd.h> /*Unix標準函數定義*/#include <string.h>#include <sys/types.h> /**/#include <sys/stat.h> /**/#include <fcntl.h> /*文件控制定義*/#include <termios.h> /*PPSIX終端控制定義*/#include <errno.h> /*錯誤號定義*/#include "PDU.h" /* 構造PDU字符串 *//* 串口設備宏定義 */#define ttyS0 "/dev/ttyS0"#define ttyS1 "/dev/ttyS1"#define ttyUSB0 "/dev/ttyUSB0"#define ttyUSB1 "/dev/ttyUSB1"/* 中國北京移動短信中心號碼 */#define CHINA_MOBILE_BEIJING_MSG_CENTER "8613800100500"/* 初始化串口參數 */void init_device(int portfd);int main(int argc,char *argv[]){ int portfd; char cmd[256]; char ctrlZ = 26; /* 以讀寫方式打開串口 */ char portdevice[256]; memset(portdevice,0,sizeof(portdevice)); strncpy(portdevice,ttyUSB0,strlen(ttyUSB0)); portfd = open(portdevice,O_RDWR); if(portfd == -1){//打開失敗,則退出 printf("Can't Open Serial Port:%s\n",portdevice); return EXIT_FAILURE; } /* 初始化串口參數 */ init_device(portfd); /* 發送AT+CMGF命令,通知GSM模塊采用PDU模式 */ memset(cmd,0,sizeof(cmd)); sprintf(cmd,"AT+CMGF=0\r"); sleep(1);//等待GSM模塊命令處理完成 write(portfd,cmd,strlen(cmd));//發送AT+CMGF命令 sleep(1); /* 構造PDU字符串 */ char msg[] = "你好啊哈哈meng!"; //char *phone = "8615120094301"; char *phone = "8615120054270"; char pdu[256]; memset(pdu,0,sizeof(pdu)); int len; if(-1 == build_pdu(msg,phone,CHINA_MOBILE_BEIJING_MSG_CENTER,pdu,&len)){//構造PDU字符串失敗,則退出 perror("Building pdu failed.\n"); return EXIT_FAILURE; } /* 利用AT+CMGS命令發送PDU字符串 */ memset(cmd,0,sizeof(cmd)); sprintf(cmd,"AT+CMGS=%d\r",len); write(portfd,cmd,strlen(cmd)); sleep(1); write(portfd,pdu,strlen(pdu)); write(portfd,&ctrlZ,1);//發送以Ctrl+Z為結束符 sleep(1); /* 發送結束,關閉串口 */ close(portfd); return EXIT_SUCCESS;}/* 初始化串口參數使用非規范方式(raw mode);設置波特率為B9600;采用軟件流控制,不使用硬件流控制;傳輸數據時使用8位數據位和一位停止位(8N1);不使用奇偶校驗;*/void init_device(int portfd){ struct termios tty; tcgetattr(portfd,&tty); /*串口參數:9600bps,使用非規范方式,采用軟件流控制*/ //設置輸入輸出波特率為9600bps cfsetospeed(&tty,B9600); cfsetispeed(&tty,B9600); //使用非規范方式 tty.c_lflag &= ~(ICANON | ECHO | ECHOE); //采用軟件流控制,不使用硬件流控制 tty.c_iflag |= (IXON | IXOFF | IXANY); tty.c_cflag &= ~CRTSCTS; /* 8N1,不使用奇偶校驗 */ //傳輸數據時使用8位數據位 tty.c_cflag &= ~CSIZE; tty.c_cflag |= CS8; //一位停止位,不使用奇偶校驗 tty.c_cflag &= ~(PARENB | CSTOPB); //忽略DCD信號,啟用接收裝置 tty.c_cflag |= (CLOCAL | CREAD); /* Minimum number of characters to read */ tty.c_cc[VMIN] = 0; /* Time to wait for data (tenths of seconds)*/ tty.c_cc[VTIME] = 10; /* 使設置立即生效 */ tcsetattr(portfd,TCSANOW,&tty);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -