www.pudn.com > stm32-gprs.rar > gprs.c, change:2012-06-01,size:19527b


#include <gprs.h> 
#include <stm32f10x.h> 
#include "includes.h" 
#include "uart.h" 
//#include "ucos_ii.h" 
#include "var.h" 
 
#define putstring putstring2   //发送到串口3 
#define USART USART2 
#define putc putchar2 
 
volatile vu16 TimingDelay; //该变量应每MS减一 
volatile vs32 TimingDelayGprs; //该变量应每MS减一 
char gprsbuf[0x3ff]; 
char ipbuf[20]; 
char temp[20]; 
uchar *projectname="jjw_check"; 
uchar projectID=2; 
uchar cellars=1; 
uchar cellar_count=1; 
uchar yy=12,mo=1,dd=1,hh=1,mm=1,ss=1; 
u16 sensorbuf[12]={12},e_temp=12; 
 
int strpos(char *buf,vu8 c){ 
		vu8 ch; 
		int i=0; 
		ch=*buf; 
		while(ch){ 
			if (ch==c) return i; 
			ch=*(buf++); 
			i++; 
		} 
		return 0; 
} 
// 读取串口数据, 
void readbuf(vs32 ms,char *tempbuf,char f){ 
		volatile u16 i=0,j=0; 
		volatile char c; 
		TimingDelayGprs=ms; 
		for(j=0;j<0x3ff;j++){ 
			c=USART_GetFlagStatus(USART,USART_IT_RXNE); 
			while(!c){ 
				c=USART_GetFlagStatus(USART,USART_IT_RXNE); 
				if (TimingDelayGprs<=0) { 
					tempbuf[i]=0; 
					printf(" over %d\r\n",i); 
					return; 
				} 
			} 
			tempbuf[i++] = USART_ReceiveData(USART); 
			if (f) { 
				if(strstr(tempbuf,"OK") || strstr(tempbuf,"ERROR") || strstr(tempbuf,"CONNECT")) { 
					tempbuf[i]=0; 
					printf(" ok %d\r\n",i); 
					return; 
				} 
			} 
			else{ 
				if (i&0x10) { 
					TimingDelayGprs=2000; 
				} 
			} 
		} 
		printf("out\r\n"); 
		USART_ClearFlag(USART,USART_IT_RXNE); 
		USART_Configuration(); 
} 
 
//向GPRS模块发送命令 
u8 sendcomm(char *comm,vu32 timeout){ 
		uchar errorcount,i; 
		errorcount=3; 
		s_try: 
		puts(comm); 
		for(i=0;i<30;i++) gprsbuf[i]=0; 
		OSTaskChangePrio(5,12); 
		putstring(comm); 
		readbuf(timeout,gprsbuf,1); 
		OSTaskChangePrio(12,5); 
		if (strstr(gprsbuf,"OK")) return true; 
		else { 
			errorcount--; 
			if (errorcount) { 
			OSTimeDly(500); 
			goto s_try; 
			} 
			else return false; 
		} 
} 
 
 
void asc_send(char *p,uchar size){ 
		uchar  hexh; 
//		puts(p); 
		for(;size;size--){ 
			hexh=*p/0x10; 
			hexh=hexh<0x0a?(hexh+0x30):(hexh+0x37); 
			putc(hexh); 
			hexh=(*p++)%0x10; 
			hexh=hexh<0x0a?(hexh+0x30):(hexh+0x37); 
			putc(hexh); 
		} 
} 
 
u8 senddata(uchar *host,struct JC_DATA jcdata){ 
		//474554202F696E736572742E6173703F70726F6A6563746E616D653DBED3BDF5CEE42670726F6A65637449443D312663656C6C6172733D312663656C6C61725F636F756E743D312673656E6474696D653D323031302D31302D323125323031383A31383A30322664313D313131312664323D323232322664333D333333332664343D343434342664353D353535352664363D363636362664373D373737372664383D383838382664393D39393939266431303D31323334266431313D34353637266431323D3637383920485454502F312E310D0A486F73743A206A6A77737573652E676963702E6E65740D0A436F6E6E656374696F6E3A204B6565702D416C6976650D0A0D0A0D0A 
		//GET /insert.asp?projectname=居锦武&projectID=1&cellars=1&cellar_count=1&sendtime=2010-10-21%2018:18:02&d1=1111&d2=2222&d3=3333&d4=4444&d5=5555&d6=6666&d7=7777&d8=8888&d9=9999&d10=1234&d11=4567&d12=6789 HTTP/1.1 
		//Host: jjwsuse.gicp.net 
		//Connection: Keep-Alive 
//struct JC_DATA{ 
//	char projectname[40]; 
//	char projectID; 
//	char cellars; 
//	char cellar_count; 
//	int16_t sensorbuf[12]; 
//	int16_t e_temp; 
//	int16_t e_hum; 
//	tm	timer;  
//}; 
		uchar i; 
		putstring("AT%IPSEND=\"474554202F6A632F696E736572742E6173703F");///jc/index.asp? 
		sprintf(gprsbuf,"projectname=%s",jcdata.projectname);//projectname 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"&projectid=%d",jcdata.projectID);//projectID 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"&cellars=%d",jcdata.cellars);//cellars 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"&cellarcount=%d",jcdata.cellar_count);//cellar_count 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"&etemp=%d",jcdata.e_temp); 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"&sendtime=");//sendtime 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"%d-%d-%d%%20%d:%d:%d",jcdata.timer.w_year,jcdata.timer.w_month,jcdata.timer.w_date,jcdata.timer.hour,jcdata.timer.min,jcdata.timer.sec); 
		sprintf(temp,"%d-%d-%d%%20%d:%d:%d",jcdata.timer.w_year,jcdata.timer.w_month,jcdata.timer.w_date,jcdata.timer.hour,jcdata.timer.min,jcdata.timer.sec); 
		asc_send(gprsbuf,strlen(gprsbuf)); 
//		OSTimeDly(1); 
//		sprintf(gprsbuf,"&yy=%d&mo=%d&dd=%d",(yy/16)*10+(yy%16),(mo/16)*10+(mo%16),(dd/16)*10+(dd%16)); 
//		asc_send(gprsbuf,strlen(gprsbuf)); 
//		sprintf(gprsbuf,"&hh=%d&mm=%d&ss=%d",(hh/16)*10+(hh%16),(mm/16)*10+(mm%16),(ss/16)*10+(ss%16)); 
//		asc_send(gprsbuf,strlen(gprsbuf)); 
		for (i=0;i<12;i++) {			//data  
			sprintf(gprsbuf,"&d%d=%d",i+1,jcdata.sensorbuf[i]); 
			asc_send(gprsbuf,strlen(gprsbuf)); 
		} 
		sprintf(gprsbuf," HTTP/1.1\x0d\x0a"); 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"Host: %s\x0d\x0a",host); 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		sprintf(gprsbuf,"Connection: Keep-Alive\x0d\x0a\x0d\x0a"); 
		asc_send(gprsbuf,strlen(gprsbuf)); 
		for(i=0;i<30;i++) gprsbuf[i]=0; 
//		OSTaskChangePrio(12,1);//old,new 
		putstring("\"\r"); 
			readbuf(5000,gprsbuf,1); 
			if (strstr(gprsbuf,"OK")) { 
				readbuf(15000,gprsbuf,0); 
				if (strstr(gprsbuf,"241")) { 
					goto readbuf_t; 
				}else{ 
					printf("no 241\r\n"); 
					puts(gprsbuf); 
					goto readbuf_f; 
				 } 
			} else { 
				printf("no OK\r\n"); 
				printf("%s\r\n%s\r\n",temp,gprsbuf); 
//				if(strstr(gprsbuf,"241")){ 
//					printf("But find 241\r\n"); 
//					goto readbuf_t; 
//				} 
				goto readbuf_f; 
			} 
readbuf_t://	OSTaskChangePrio(1,12); 
			return true; 
readbuf_f://	OSTaskChangePrio(1,12); 
			return false; 
} 
void fast_query(void){ 
		putstring("AT%IPSEND=\"474554202F6A632F71756572792E61737020485454502F312E300D0A4163636570743A20696D6167652F6769662C20696D6167652F782D786269746D61702C20696D6167652F6A7065672C20696D6167652F706A7065672C206170706C69636174696F6E2F766E642E6D732D657863656C2C206170706C69636174696F6E2F6D73776F72642C206170706C69636174696F6E2F766E642E6D732D706F776572706F696E742C202A2F2A0D0A4163636570742D4C616E67756167653A20656E2D75730D0A4163636570742D456E636F64696E673A20677A69702C206465666C6174650D0A557365722D4167656E743A204D6F7A696C6C612F342E300D0A486F73743A2033313930303747414F393332312E534F465457494E434E2E434E0D0A436F6E6E656374696F6E3A204B6565702D416C6976650D0A0D0A\"\r\n");///jc/query.asp 
} 
 
u8 query(tm * stime){ 
		/* 
		GET /jc/query.asp HTTP/1.0 
		Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint,  
		Accept-Language: en-us 
		Accept-Encoding: gzip, deflate 
		User-Agent: Mozilla/4.0 
		Host: 319007GAO9321.SOFTWINCN.CN 
		Connection: Keep-Alive 
		4 0 4 0 3 2 3 0 3 1 3 2 2 D 3 0 3 5 2 D 3 1 3 9 2 D 3 2 3 1 3 A 3 4 3 5 3 A 3 4 3 4 
				  2	  0	  1	  2		  0	  5		  1	  9		  2	  1		  4	  5		  4	  4 
		0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 
							  1					  2					  3					  4 
		@@2012-05-19-21:45:44 
		*/ 
		volatile char *p; 
		volatile int i,j; 
		for(i=0;i<30;i++) gprsbuf[i]=0; 
		OSTaskChangePrio(12,1);//old,new 
		putstring("AT%IPSEND=\"474554202F6A632F71756572792E61737020485454502F312E300D0A4163636570743A20696D6167652F6769662C20696D6167652F782D786269746D61702C20696D6167652F6A7065672C20696D6167652F706A7065672C206170706C69636174696F6E2F766E642E6D732D657863656C2C206170706C69636174696F6E2F6D73776F72642C206170706C69636174696F6E2F766E642E6D732D706F776572706F696E742C202A2F2A0D0A4163636570742D4C616E67756167653A20656E2D75730D0A4163636570742D456E636F64696E673A20677A69702C206465666C6174650D0A557365722D4167656E743A204D6F7A696C6C612F342E300D0A486F73743A2033313930303747414F393332312E534F465457494E434E2E434E0D0A436F6E6E656374696F6E3A204B6565702D416C6976650D0A0D0A\"\r\n");///jc/query.asp 
		readbuf(5000,gprsbuf,1); 
		if(strstr(gprsbuf,"OK")) { 
			readbuf(15000,gprsbuf,0); 
//			printf("query=|%s|\n",gprsbuf); 
			if(p=strstr(gprsbuf,"4040")){ 
				i=(*(p+5)-48)*1000+(*(p+7)-48)*100+(*(p+9)-48)*10+(*(p+11)-48); 
				(*stime).w_year=i; 
				i=(*(p+15)-48)*10+(*(p+17)-48); 
				(*stime).w_month=i; 
				i=(*(p+21)-48)*10+(*(p+23)-48); 
				(*stime).w_date=i; 
				i=(*(p+27)-48)*10+(*(p+29)-48); 
				(*stime).hour=i; 
				i=(*(p+33)-48)*10+(*(p+35)-48); 
				(*stime).min=i; 
				i=(*(p+39)-48)*10+(*(p+41)-48); 
				(*stime).sec=i; 
				OSTaskChangePrio(1,12); 
				return true; 
			}else{ 
				OSTaskChangePrio(1,12); 
				return false; 
			} 
		}else { 
			OSTaskChangePrio(1,12); 
			return false; 
		} 
} 
 
u8 read_dns(uchar *dn,uchar *dns,char *ip){ 
	char i,j; 
	sprintf(gprsbuf,"AT%%DNSR=\"%s\",\"%s\"\r\n",dn,dns); 
	putstring(gprsbuf); 
	readbuf(15000,gprsbuf,1); 
	if (!strstr(gprsbuf,"OK")){	return false; 	} 
	printf("dns %s\r\n",gprsbuf); 
 
	if (strstr(gprsbuf,"0.0.0.0")){ //未查到IP 
		printf("DNS error\r\n"); 
		return false; 
	} 
	else {//分析IP 
		i=strpos(gprsbuf,0x3a); 
		j=strpos(gprsbuf+i,0x0d); 
		//printf("j=%d ",j); 
		if (j>16) return false; 
		gprsbuf[i+j-1]=0; 
		strcpy(ip,gprsbuf+i); 
		printf("DNS OK ip=%s\r\n",ip); 
		return true; 
	} 
} 
 
 
 
u8 reconn(void){ 
		char r=3; 
reconn_try: 
		putstring("AT%IPCLOSE\r"); 
		printf("reconn\r\n"); 
		OSTimeDly(1500); 
		sprintf(gprsbuf,"AT%%IPOPEN=\"TCP\",\"%s\",80,,8000\r\n",ipbuf); 
		putstring(gprsbuf); 
		readbuf(15000,gprsbuf,1); 
		if(strstr(gprsbuf,"CONNECT")){ 
			printf("connect\r\n");	 
			return true; 
		}else{ 
			printf("no connect try %d\r\n",r);	 
			if(r--) goto reconn_try; 
			return false; 
		} 
} 
 
u8 init_gprs(uchar *domain_name,uchar *dns){ 
	    OSTimeDly(200); //ucos延时  
		putstring(" ATE1\r\n");   //回显开启 
		OSTimeDly(200); 
		if (!sendcomm("ATE1\r\n",1000)) { 
			 printf("ate1 err\r\n"); 
			 return false; 
		} 
		OSTimeDly(100); 
		if (!sendcomm("AT%IPCLOSE\r\n",15000)) { 
			 printf("ipclose err\r\n"); 
			 return false; 
		} 
		OSTimeDly(100); 
		if (!sendcomm("AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n",5000)) { 
			 printf("cgdcont err\r\n"); 
			 return false; 
		} 
		OSTimeDly(100); 
		if (!sendcomm("AT%ETCPIP\r\n",15000)) { 
			 printf("etcpip err\r\n"); 
			 return false; 
		} 
 
		if (!sendcomm("ATE0\r\n",5000)) { 
			 printf("ate0 err\r\n"); 
			 return false; 
		} 
 
		OSTimeDly(100); 
		if (read_dns(domain_name,dns,ipbuf)){ 
			sprintf(gprsbuf,"AT%%IPOPEN=\"TCP\",\"%s\",80,,8000\r\n",ipbuf); 
			putstring(gprsbuf); 
			readbuf(15000,gprsbuf,1); 
			if(strstr(gprsbuf,"CONNECT")){ 
				return true; 
			}else{ 
				printf("no connect\r\n");	 
				return false; 
			} 
				 
		}else{ 
			printf("read dns err\r\n");	 
			return false; 
		} 
} 
 
void asc_utf8(char s[],char d[]){ 
	char temp[6],len=strlen(s),i=0; 
	d[0]=0; 
//		printf("\n%s\n",s); 
 
	while(s[i]!=0){ 
		sprintf(temp,"%X00",s[i]); 
//		printf("\n%s\n",temp); 
		strcat(d,temp); 
//		sprintf(d,"%s%s",d,temp); 
//		printf("\n%s\n",d); 
		i++; 
	} 
	d[len*4]=0; 
} 
 
//void build_sms(char command){ 
//	char len_string[4]; 
//	unsigned char len,i,c; 
//	char content[400]={0}; 
//	char wd_con[40]={0}; 
//	char jd_con[40]; 
//	char sd_con[40]; 
//	char time_con[40]; 
//	char date_con[40]; 
//	init_string(); 
//	printf("comm=%X\n",command); 
//	if (command & SET_SUCCESS) { 
//		sprintf(content,"%s%s",set_success,enter); 
//		goto begin; 
//	} 
//	if (command & DEVICE_ON) { 
//		sprintf(content,"%s%s",device_on,enter); 
//	} 
//	if (command & DEVICE_OFF) { 
//		sprintf(content,"%s%s",device_off,enter); 
//	} 
//	if (command & QUERY_ON) { 
//		sprintf(content,"%s%s",device_state?device_on:device_off,enter);//根据状态定 
//	} 
//	if (command & ALARM_ON) { 
//		sprintf(content,"%s%s",alarm_string,enter); 
//	} 
//	if (command & GPS_ON) { 
//		strcat(content,address); 
//		strcat(content,colon); 
//		 
//		asc_utf8((char *)WD,wd_con); 
//		strcat(content,wd_string); 
//		strcat(content,wd_con); 
// 
//		asc_utf8((char *)JD,jd_con); 
//		strcat(content,jd_string); 
//		strcat(content,jd_con); 
// 
//		asc_utf8((char *)speed,sd_con); 
//		strcat(content,sd_string); 
//		strcat(content,sd_con); 
// 
//		asc_utf8((char *)time,time_con); 
//		strcat(content,time_string); 
//		strcat(content,time_con); 
// 
//		asc_utf8((char *)date,date_con); 
//		strcat(content,date_string); 
//		strcat(content,date_con); 
//	} 
//	else { 
//		strcat(content,gps_off_string); 
//	} 
////	sprintf(content,"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",on?device_on:device_off,enter, 
////			address,colon,jd_string,jd_con,colon,wd_string,wd_con,sd_string,sd_con,enter, 
////			time_string,time_con,date_string,date_con); 
//		//以上生成文本,以下根据文本生成待发送文本,要计算长度等数据 
//begin:	len=strlen(content); 
//	for(i=0;i<len;i=i+4){ 
//		c=content[i]; 
//		content[i]=content[i+2]; 
//		content[i+2]=c;		 
//		c=content[i+1]; 
//		content[i+1]=content[i+3]; 
//		content[i+3]=c;		 
//	} 
////	printf("\n%s\n",content); 
//	len=len/2; 
//	if (len<16) 
//		sprintf(len_string,"0%X",len); 
//	else  
//		sprintf(len_string,"%X",len); 
//	sms_length=len+15; 
//	sprintf(gprsbuf,"0891683108803105F011000D9168%s0008AA%s%s\x1a\r\n",telephone,len_string,content); 
////	printf("quit build sms \n"); 
// 
//} 
// 
 
// 
// 
//char sendsms(char *content,char *telephone){ 
////	const char telephone[]="3199005686F1";  //电话号码 
//	char *p,i,len,sms_length,c; 
//	char temp[40],len_string[10],tele[20]; 
//	putstring("AT+CMGF=0\r\n"); //设置为PDU模块,用于发送中文 
//	readbuf(1000,gprsbuf,1); 
//	p=strstr(gprsbuf,"OK"); 
//	if (!p) { 
//		printf("AT+CMGF=0 error\n"); 
//		return false; 
//	}else { 
//		printf("AT+CMGF=0 ok\n"); 
//	} 
// 
////	build_sms(comm);			 //根据Comm来决定发送的内容 
//	strcpy(tele,telephone);	 
//	strcat(tele,"F"); 
//	for(i=0;i<12;i++,i++){ 
//		c=tele[i]; 
//		tele[i]=tele[i+1]; 
//		tele[i+1]=c; 
//	} 
//	printf("tele=%s\r\n",tele); 
// 
//	len=strlen(content); 
//	for(i=0;i<len;i=i+4){ 
//		c=content[i]; 
//		content[i]=content[i+2]; 
//		content[i+2]=c;		 
//		c=content[i+1]; 
//		content[i+1]=content[i+3]; 
//		content[i+3]=c;		 
//	} 
////	printf("\n%s\n",content); 
//	len=len/2; 
//	if (len<16) 
//		sprintf(len_string,"0%X",len); 
//	else  
//		sprintf(len_string,"%X",len); 
//	sms_length=len+15; 
//	sprintf(gprsbuf,"0891683108803105F011000D9168%s0008AA%s%s\x1a\r\n",tele,len_string,content); 
////	printf("quit build sms \n"); 
// 
//	putstring("AT+CMGS="); 
//	sprintf(temp,"%d",sms_length);		 //Sms长度 
//	putstring(temp); 
//	putstring("\r\n"); 
//	readbuf(1000,gprsbuf,1); 
//	p=strstr(gprsbuf,"> ");		 //收到>,接着发文本 
//	if (!p) { 
//		printf("AT+CMGS=31 error\n"); 
//		return false; 
//	}else { 
//		printf("AT+CMGS=31 ok\n"); 
//	} 
////	putstring3("0891683108803105F011000D91683199005686F10008AA10660665B079D162806B228FCE60A8FF01\x1a\r\n"); 
//	putstring(gprsbuf); 
//	readbuf(6000,gprsbuf,1); 
//	p=strstr(gprsbuf,"OK"); 
//	if (!p) { 
//		printf("send sms error\n"); 
//		putstring("\x1a\r\n"); 
//		OSTimeDlyHMSM(0,0,1,0); 
//		putstring("\r\n"); 
//		return false; 
//	}else { 
//		printf("send sms ok\n"); 
//	} 
//	return true; 
//} 
// 
////bool recesms(){ 
//	char i=1; 
//	char comm_buf[20]; 
//	putstring3("AT+CMGF=0\r\n"); 
//	readbuf(1000,tempbuf); 
//	p=strstr((char *)tempbuf,"OK"); 
//	if (!p) { 
//		printf("AT+CMGF=0 error\n"); 
//		return false; 
//	}else { 
//		printf("AT+CMGF=0 ok\n"); 
//	} 
//	putstring3("AT+CMGL=4\r\n");	 
//	readbuf(1000,tempbuf); 
//	p=strstr((char *)tempbuf,"OK"); 
//	if (!p) { 
//		printf("NO sms \n"); 
//		return false; 
//	} 
// 
//	while(true){ 
//		sprintf(comm_buf,"at+cmgr=%d\r\n",i); 
//	//putstring3("at+cmgr=1\r\n");	 
//		putstring3(comm_buf); 
//		readbuf(1000,tempbuf); 
//		p=strstr((char *)tempbuf,"OK"); 
//		if (!p) { 
//			printf("NO SMS\n");//无短信 
//			//return false; 
//			putstring3("AT+CMGd=1,1\r\n");	  //删除全部 
//			readbuf(1000,tempbuf); 
//			p=strstr((char *)tempbuf,"OK"); 
//			if (!p) { 
//				printf("SMS DELETE error\n"); 
//				return false; 
//			}else { 
//				printf("SMS DELETE SUCCESS\n"); 
//				return true; 
//			} 
//		}else { 
//			printf("READ SMS %d\n",i); 
//			p=strstr((char *)tempbuf,telephone); 
//			if (!p) { 
//				printf("SMS %d FORMAT ERROR\n",i); 
//			}else { 
//				printf("SMS %d FORMAT ok\n",i);		  //检测到一种命令后,由于tempbuf内容变化,其它命令的检测无效 
//				p=strstr((char *)tempbuf,comm_start); 
//				if (p){ 
//					device_state=true; 
//					printf("device start\n"); 
//					sendsms(DEVICE_ON|(gps_state?GPS_ON:0)); 
//				} 
//				p=strstr((char *)tempbuf,comm_stop); 
//				if (p){ 
//					device_state=false; 
//					printf("device stop\n"); 
//					sendsms(DEVICE_OFF|(gps_state?GPS_ON:0)); 
//				} 
//				p=strstr((char *)tempbuf,comm_query); 
//				if (p){ 
//					printf("query device state\n"); 
//					sendsms(QUERY_ON |(device_state?DEVICE_ON:DEVICE_OFF)|(gps_state?GPS_ON:0)); 
//				} 
//				p=strstr((char *)tempbuf,comm_set); 
//				if (p){ 
//					printf("set device \n"); 
//					sendsms(SET_SUCCESS); 
//				}  
////				//删除当前短信 
////				sprintf(comm_buf,"at+cmgd=%d\r\n",i); 
////				readbuf(1000,tempbuf); 
////				p=strstr((char *)tempbuf,"OK"); 
////				if (!p) { 
////					//删除出错 
////					printf("delete %d sms error\n",i); 
////					return false;	 
////				} 
//			} //if telephone OK 
//			i++; 
//		}//IF EXIST SMS 
// 
//	}//WHILE 
// 
//} 
char sendsms(char *content,char *telephone){ 
//	const char telephone[]="3199005686F1";  //电话号码 
	char *p,i,len,sms_length,c; 
	char temp[400],len_string[10],tele[20]; 
	putstring("\x1a\r\n"); 
	OSTimeDlyHMSM(0,0,0,300); 
	putstring(" ATE1\r\n");   //回显开启 
	OSTimeDly(200); 
	putstring("AT+CMGF=0\r\n"); //设置为PDU模块,用于发送中文 
	OSTimeDlyHMSM(0,0,0,300); 
 
//	readbuf(1000,gprsbuf,1); 
//	p=strstr(gprsbuf,"OK"); 
//	if (!p) { 
//		printf("AT+CMGF=0 error\n"); 
//		return false; 
//	}else { 
//		printf("AT+CMGF=0 ok\n"); 
//	} 
 
//	build_sms(comm);			 //根据Comm来决定发送的内容 
	strcpy(tele,telephone);	 
	strcat(tele,"F"); 
	for(i=0;i<12;i++,i++){ 
		c=tele[i]; 
		tele[i]=tele[i+1]; 
		tele[i+1]=c; 
	} 
	printf("tele=%s\r\n",tele); 
 
	asc_utf8(content,temp); 
//	strcpy(temp,content); 
	len=strlen(temp); 
	for(i=0;i<len;i=i+4){  //汉字,4位,两两交换 
		c=temp[i]; 
		temp[i]=temp[i+2]; 
		temp[i+2]=c;		 
		c=temp[i+1]; 
		temp[i+1]=temp[i+3]; 
		temp[i+3]=c;		 
	} 
//	printf("\n%s\n",content); 
	len=len/2;						  //计算长度 
	if (len<16) 
		sprintf(len_string,"0%X",len); 
	else  
		sprintf(len_string,"%X",len); 
	sms_length=len+15; 
	sprintf(gprsbuf,"0891683108803105F011000D9168%s0008AA%s%s\x1a\r\n",tele,len_string,temp); 
	//               0891683108803105F011000D9168 3199005686F1 0008AA 16 007400680069007300200069007300200073006D0073 
	printf("%s\r\n",gprsbuf); 
//	printf("quit build sms \n"); 
  // OSSchedLock(); 
	putstring("AT+CMGS="); 
	sprintf(temp,"%d",sms_length);		 //Sms长度 
	putstring(temp); 
	putstring("\r\n"); 
	OSTimeDlyHMSM(0,0,3,0); 
	printf("Send Sms\r\n"); 
//	readbuf(2000,temp,0); 
//	p=strstr(temp,"> ");		 //收到>,接着发文本 
//	if (!p) { 
//		printf("AT+CMGS=31 error\n"); 
//		putstring("\x1a\r\n\r\n"); 
//		return false; 
//	}else { 
//		printf("AT+CMGS=31 ok\n"); 
//	} 
//	putstring3("0891683108803105F011000D91683199005686F10008AA10660665B079D162806B228FCE60A8FF01\x1a\r\n"); 
	putstring(gprsbuf); 
//	readbuf(6000,gprsbuf,1); 
//	p=strstr(gprsbuf,"OK"); 
//	if (!p) { 
//		printf("send sms error\n"); 
		putstring("\x1a\r\n"); 
	//	OSSchedUnlock(); 
		OSTimeDlyHMSM(0,0,3,0); 
		putstring("ATE0\r\n");   //回显开启 
		OSTimeDly(200); 
//		return false; 
//	}else { 
//		printf("send sms ok\n"); 
//	} 
	return true; 
}