⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 在Linux中
💻 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 + -