亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gprs.cpp

?? linux 環(huán)境下GPRS通信
?? CPP
字號:
#include "gprs.h"
#include "escsys.h"
#include "serial.h"
#include <iostream.h>
#include "escsscanf.h"
#include "esctime.h"

GPRS::GPRS(EscInt poolSize):PhysicalLayer(poolSize)
{
	chnlType = PCT_GPRS;

	bHardwareError = false;
	ReadTimeoutTimes = 0;
	bProfileCreated = false;
#if ACTUAL_OS == OS_LINUX
	fdPower = open("/dev/mygprs", O_RDWR);
	fdCom = open("/dev/ttyS2", O_RDWR);
	InitDev(fdCom,9600,8,1,'N',20);
	powerOn();
	reset();
	setMode();
#else
	fdPower = 0;
	fdCom = 0;
#endif
}

GPRS::~GPRS()
{
	powerOff();
	close(fdCom);
	close(fdPower);
}

void GPRS::reset()
{
	char resetCmd[] = "AT&F\x0D";
	int len = 20;
	char buf[20];
	readLine(buf,len);
	len = 20;
	readLine(buf,len);
}

EscBool GPRS::send(EscChar *buf,EscInt length)
{
	if(!chnlOpend) 
	{
		return ESC_FALSE;
	}
	
	int times = 0;
	int writtenBytes=0;
	while(times<5)
	{
		EscInt connectionStatus = getServiceState();
		if(connectionStatus==4)
		{
			int bytesToSend = requestToWrite(length-writtenBytes);
			if(bytesToSend>0)
			{
				write(fdCom,buf+writtenBytes,bytesToSend);
				writtenBytes+=bytesToSend;
				//cout<<"write data"<<endl;
				

				if(writtenBytes==length)
				{
					EscChar recvBuf[200];
					int len=200;

					if(readLine(recvBuf,len))
					{
						if(recvBuf[len-4]=='O' && recvBuf[len-3]=='K')
						{
							cout<<"-write--OK----"<<endl;
							return ESC_TRUE;
						}
						else
						{
							cout<<"---error---"<<endl;
							return ESC_FALSE;
						}
					}
					else 
					{
						cout<<"---timeout----"<<endl;
						return ESC_FALSE;
					}
					
					
				}
			}
			else
			{
				escSleep(50);
			}
		}
		else
		{
			if(connectionStatus==5 ||connectionStatus==6)
			{
				cout<<"connection state 5,closed"<<endl;
				closeChannel();
				chnlOpend = ESC_FALSE;
			}
		}
		times++;
	}

	return ESC_FALSE;
	
}

EscInt GPRS::recv(EscChar *buf,EscInt length,EscInt maxTimeOut,EscBool *timeoutOccur)
{
	
	if(length>1500)
	{
		length = 1500;		
	}

	EscInt len = length+20,temp=40;
	char *recvBuf = new char[len];
	
	EscInt len1=40,len2=40;
	sendATRecvCommand(length);

	
	if(readLine(recvBuf,len1) && readLine(recvBuf,len2))
	{
		if(recvBuf[0] == '^' && recvBuf[1] == 'S' && recvBuf[2] == 'I' && recvBuf[3] == 'S' && recvBuf[4] == 'R')
		{
			EscInt dataLen,profile;
			if(sscanf(recvBuf,"^SISR:%d,%d,",&profile,&dataLen)==2)
			{
				
				if(dataLen>0)
				{
					
					readLine(recvBuf,len);
					//cout<<"recv dataLen:"<<dataLen<<" len:"<<len<<endl;
					if(len>0)
					{
						escstrncpy(buf,recvBuf,len);
						recvBuf[len]=0;
						//cout<<"received:"<<recvBuf<<endl;
						readLine(recvBuf,temp);//read ok.
						delete []recvBuf;
						return len-2;
					}
				}
				else
				{
					readLine(recvBuf,temp);
					delete []recvBuf;
					return 0;
				}
				
			}
			
		}
	}

	delete []recvBuf;
	return 0;
	
}

void GPRS::initChannel(TGPRSConfig *pChnlCfg)
{
	if(!pChnlCfg)
	{
		return;
	}
	else
	{
		strcpy(ChannelConfig.ServerIp,pChnlCfg->ServerIp);
		ChannelConfig.ServerPort = pChnlCfg->ServerPort;
		strcpy(ChannelConfig.UserName,pChnlCfg->UserName);
		strcpy(ChannelConfig.Pwd,pChnlCfg->Pwd);
		strcpy(ChannelConfig.Apn,pChnlCfg->Apn);
	}
}

EscBool GPRS::openChannel()
{
	EscChar connectCmd[] = "AT^SISO=0\x0D";//"AT+CSQ\x0D\x0A";

	if (chnlOpend)
	{
		return ESC_TRUE;
	}
	if(!bProfileCreated)
	{
		createConnectProfile(ChannelConfig.UserName,ChannelConfig.Pwd,ChannelConfig.Apn);
		if(bHardwareError)
		{
			return ESC_FALSE;
		}
		createServiceProfile(ChannelConfig.ServerIp,ChannelConfig.ServerPort);
	}

	if(!bProfileCreated)
	{
		return ESC_FALSE;
	}
	//cout<<"open channel ";
	if(!sendATCommand(connectCmd,20))
	{
		int state; 
		
		state = getServiceState();
		
		if(state==4)
		{	
			chnlOpend = ESC_TRUE;
			cout << "succeed" <<endl;
			return ESC_TRUE;
		}
		else
		{
			chnlOpend = ESC_FALSE;

			cout << "failed,state:" <<state<<endl;
			if(state==6 || state==5)
			{
				closeChannel();
			}
			return ESC_FALSE;
		}
		
	
	}
	else
	{
		chnlOpend = ESC_FALSE;
		//cout << "failed" <<endl;
		return ESC_FALSE;
	}
	
}

void GPRS::closeChannel()
{
	EscChar closeCmd[] = "at^sisc=0\x0D";

	if(!sendATCommand(closeCmd))
	{
		chnlOpend = ESC_FALSE;
	}

}

void GPRS::powerOn()
{
	EscChar ReadBuff,SendBuff;

	read(fdPower,&ReadBuff,1); 	
	if(!ReadBuff)
	{
		cout<<"off to on"<<endl;
		SendBuff = 0x3;
		write(fdPower,&SendBuff,1);		
	}
	else
	{
		//cout<<"being on already"<<endl;
		bPowerOn=ESC_TRUE;
	}
}

void GPRS::powerOff()
{
	EscChar SendBuff,ReadBuff;

	printf("power off called\n\r");
	read(fdPower,&ReadBuff,1); 	
	if(ReadBuff) 
	{
		SendBuff = 0x0;
		write(fdPower,&SendBuff,1);
	}
	bPowerOn=ESC_FALSE;
}

void GPRS::createConnectProfile(EscChar *user,EscChar *pwd,EscChar *apn)
{
	EscChar setConTypeCmd[]="at^sics=0,conType,GPRS0\x0D";
	EscChar setPwdCmd[100];
	EscChar setUserCmd[100];
	EscChar setAPNCmd[100];

	sprintf(setPwdCmd,"at^sics=0,passwd,\"%s\"\x0D",pwd);
	sprintf(setUserCmd,"at^sics=0,user,\"%s\"\x0D",user);
	sprintf(setAPNCmd,"at^sics=0,apn,\"%s\"\x0D",apn);

	static bool firstTimeRun = true;
	extern int watchDogFD;

	if(firstTimeRun)
	{
		while(sendATCommand(setConTypeCmd))
		{
			write(watchDogFD,NULL,NULL);
			if(bHardwareError)
			{
				return;
			}
			escSleep(50);
		}
		firstTimeRun = false;
	}
	
	while(sendATCommand(setPwdCmd))
	{
		if(bHardwareError)
		{
			return;
		}
		write(watchDogFD,NULL,NULL);
		escSleep(50);
	};

	while(sendATCommand(setUserCmd))
	{
		if(bHardwareError)
		{
			return;
		}
		write(watchDogFD,NULL,NULL);
		escSleep(50);
	};
	
	while(sendATCommand(setAPNCmd))
	{
		if(bHardwareError)
		{
			return;
		}
		write(watchDogFD,NULL,NULL);
		escSleep(50);
	};
	

}

void GPRS::setMode()
{
	EscChar setModeCmd[]="at^scfg=tcp/withurcs,off\x0D";

	EscInt wr = write(fdCom,setModeCmd,strlen(setModeCmd));

	//cout <<"written :"<<wr<<endl;
	
	EscChar recvBuf[200];
	int len=200;
	readLine(recvBuf,len);
	len=200;
	readLine(recvBuf,len);
	len=200;
	readLine(recvBuf,len);

}

void GPRS::createServiceProfile(EscChar *ip,EscWord port)
{
	EscChar setSrvTypeCmd[]="at^siss=0,srvType,socket\x0D";
	EscChar setConIdCmd[] = "at^siss=0,conId,0\x0D";
	EscChar setIPPortCmd[100];
	
	sprintf(setIPPortCmd,"at^siss=0,address,\"socktcp://%s:%d\"\x0D",ip,port);

	static bool firstTimeRun = true;

	extern int watchDogFD;

	if(firstTimeRun)
	{
		while(sendATCommand(setSrvTypeCmd))
		{
			if(bHardwareError)
			{
				return;
			}
			write(watchDogFD,NULL,NULL);
			escSleep(50);
		}
		while(sendATCommand(setConIdCmd))
		{
			if(bHardwareError)
			{
				return;
			}
			write(watchDogFD,NULL,NULL);
			escSleep(50);
		}
		firstTimeRun = false;
	}
	while(sendATCommand(setIPPortCmd))
	{
		if(bHardwareError)
		{
			return;
		}
		write(watchDogFD,NULL,NULL);
		escSleep(50);
	};
	bProfileCreated = true;
	
}

EscInt GPRS::readLine(EscChar *buf,EscInt &length,EscByte secondsToTimeOut)
{
	EscInt len = 0;

	//收到指示數(shù)據(jù)長度的行
	//cout<<"<read line>";
	while(len<length)
	{
		
		int n = read(fdCom,buf+len,1);
		if(n==0)
		{
			cout<<"read line timeout"<<endl;
			//cout<<"</read line>"<<endl;
			//powerOn();
			ReadTimeoutTimes++;
			if(ReadTimeoutTimes>=3)
			{
				bHardwareError = true;
			}
			return 0;
		}
		
		len+=n; 
		if(len>4 && buf[len-2]=='\x0D' && buf[len-1]=='\x0A')
		{
			 buf[len]= 0;
			 length = len;
			 ReadTimeoutTimes = 0;
			 bHardwareError = false;
			 //cout<<endl<<"--line-end--"<<endl;
			 return 1;
		}
	}

}

EscInt GPRS::sendATCommand(EscChar *pAtCmd,EscByte secondsToTimeOut)
{
	EscInt wr = write(fdCom,pAtCmd,strlen(pAtCmd));

	cout <<"written :"<<pAtCmd<<endl;

	EscChar recvBuf[200];
	int len=200;
	int len1 = 200;
	int len2 = 200;

	if(readLine(recvBuf,len1,secondsToTimeOut) && readLine(recvBuf,len2,secondsToTimeOut))
	{
		if(recvBuf[len2-4]=='O' && recvBuf[len2-3]=='K')
		{
			//cout<<"-parse--OK----"<<endl;
			return 0;
		}
		else
		{
			//cout<<"--parse-error---"<<endl;
			return 0;
		}
	}
	else
	{
		//cout<<"-parse--timeout----"<<endl;
		return -1;
	}
	
	
	
}

void GPRS::sendATRecvCommand(EscInt length)
{
	EscChar readCmd[20];
	EscChar cr_lf[2];
	EscChar ok[6];
	
	sprintf(readCmd,"at^sisr=0,%d\x0D",length);

	write(fdCom,readCmd,strlen(readCmd));
	
}

EscInt GPRS::getSignalQuality()
{
	EscChar getSignalQualityCmd[] = "AT+CSQ\x0D";

	write(fdCom,getSignalQualityCmd,strlen(getSignalQualityCmd));

	EscChar buf[100];
	int len=100;

	if(readLine(buf,len))//讀回發(fā)送的命令
	{
		len = 100;
		if(readLine(buf,len))
		{
			if(buf[0]=='+' && buf[1]=='C' && buf[2]=='S' && buf[3]=='Q')
			{
				int quality;
				if(sscanf(buf,"+CSQ:%d,",&quality)==1)
				{
					len = 100;
					readLine(buf,len);
					if(quality<32)
					{
						return (quality+1)/8;
					}
					else
					{
						return 0;
					}
				}
				else
				{
					len = 100;
					readLine(buf,len);
					return 0;
				}
			}
		}
		else 
		{
			//cout<<"---timeout----"<<endl;
			return -1;
		}
		
	}
	else 
	{
		//cout<<"---timeout----"<<endl;
		return -1;
	} 

}

EscInt GPRS::getServiceState()
{
	EscChar getStateCmd[] = "AT^SISI=0\x0D";

	write(fdCom,getStateCmd,strlen(getStateCmd));

	EscChar buf[100];
	int len=100;

	if(readLine(buf,len))
	{
		len = 100;
		if(readLine(buf,len))
		{
			if(buf[0]=='^' && buf[1]=='S' && buf[2]=='I' && buf[3]=='S' && buf[4]=='I')
			{
				//cout<<endl<<"buf:"<<buf<<endl;
				int profile,svrstate;
				if(sscanf(buf,"^SISI:%d,%d,",&profile,&svrstate)==2)
				{
					len = 100;
					readLine(buf,len);
					//cout<<"servstat:"<<svrstate<<endl;
					return svrstate;
				}
				else
				{
					len = 100;
					readLine(buf,len);
					return 0;
				}
			}
		}
		else 
		{
			//cout<<"---timeout----"<<endl;
			return -1;
		}
		
	}
	else 
	{
		//cout<<"---timeout----"<<endl;
		return -1;
	} 

	//return 4;
	
	
}

EscInt GPRS::requestToWrite(EscWord length)
{
	EscChar writeCmd[20];

	if(length>1500) length = 1500;

	sprintf(writeCmd,"AT^SISW=0,%d\x0D",length);

	write(fdCom,writeCmd,strlen(writeCmd));

	EscChar recvBuf[40];
	int len=40;
	readLine(recvBuf,len);
	len=40;
	//readLine(recvBuf,len);
	if(readLine(recvBuf,len))
	{
		if(recvBuf[0]=='^' && recvBuf[1]=='S' && recvBuf[2]=='I' && recvBuf[3]=='S' && recvBuf[4]=='W')
		{
			
			int dataLen=0,profile=0;
			if(sscanf(recvBuf,"^SISW:%d,%d",&profile,&dataLen))
			{
				//cout<<"dataLen="<<dataLen<<endl;
				return dataLen;
			}
			else
			{
				return 0;
			}
			
		}	
		else
		{
			return 0;
		}
	}
	else 
	{
		//cout<<"---timeout----"<<endl;
		return 0;
	}

	return 0;

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区不卡在线播放| 亚洲精品一区二区三区蜜桃下载| 亚洲国产精品成人综合色在线婷婷 | 色欧美日韩亚洲| 一区二区三区av电影 | 欧美电影一区二区| 日韩国产精品91| 日韩欧美一级精品久久| 国产一区二区导航在线播放| 国产欧美日韩视频在线观看| 色诱视频网站一区| 日本不卡一区二区| 久久久久国产精品麻豆| 色综合天天狠狠| 日韩成人伦理电影在线观看| 精品国产乱码久久久久久蜜臀| 国产一区二区调教| 亚洲欧美日韩国产中文在线| 91麻豆精品国产综合久久久久久| 国内精品久久久久影院色| 亚洲欧洲韩国日本视频| 欧美性高清videossexo| 国产乱色国产精品免费视频| ●精品国产综合乱码久久久久 | 91麻豆精品国产自产在线| 激情图片小说一区| 亚洲另类色综合网站| 日韩一区二区免费在线观看| 成人高清视频免费观看| 婷婷开心久久网| 国产精品国产精品国产专区不蜜 | 欧美一区二区三区系列电影| 国产成人精品免费看| 亚洲不卡在线观看| 国产日韩精品一区| 7777精品伊人久久久大香线蕉经典版下载 | 色国产精品一区在线观看| 蜜桃一区二区三区在线| 国产日本欧洲亚洲| 8x福利精品第一导航| 97久久精品人人澡人人爽| 美女高潮久久久| 亚洲综合激情网| 中文天堂在线一区| 欧美成va人片在线观看| 在线观看国产日韩| www.日本不卡| 国产精品一区一区| 麻豆成人久久精品二区三区小说| 日韩一区欧美一区| 国产亚洲一区二区三区四区| 91麻豆精品国产91久久久| 91丨九色丨蝌蚪富婆spa| 国产盗摄精品一区二区三区在线| 亚洲va韩国va欧美va精品| 亚洲日本成人在线观看| 久久色.com| 久久久久久久免费视频了| 欧美色区777第一页| 成人开心网精品视频| 狠狠色伊人亚洲综合成人| 日韩电影一区二区三区四区| 亚洲欧美日韩国产成人精品影院| 国产精品污污网站在线观看| 久久综合九色综合97婷婷| 日韩久久精品一区| 日韩欧美国产综合| 日韩欧美国产不卡| 日韩欧美电影一区| 日韩欧美电影一区| 欧美精品一区二区三区蜜桃视频| 欧美一区二区三区免费大片| 91精选在线观看| 欧美一区二区观看视频| 7777精品久久久大香线蕉| 717成人午夜免费福利电影| 3d动漫精品啪啪| 日韩欧美国产高清| 精品少妇一区二区三区在线视频| 日韩欧美亚洲另类制服综合在线| 精品毛片乱码1区2区3区| 精品日韩成人av| 亚洲精品一区二区三区精华液| 久久久久国产免费免费| 国产欧美一区在线| 亚洲日本一区二区三区| 亚洲美女免费视频| 午夜激情一区二区| 美国欧美日韩国产在线播放| 开心九九激情九九欧美日韩精美视频电影 | 91福利在线免费观看| 91国产视频在线观看| 欧美三区在线观看| 日韩一级片在线观看| 精品国产91亚洲一区二区三区婷婷| 精品国产乱码久久久久久久久| 久久嫩草精品久久久精品| 国产人妖乱国产精品人妖| 亚洲日本在线a| 午夜影院久久久| 九色综合国产一区二区三区| 国产传媒一区在线| 91毛片在线观看| 欧美一区午夜视频在线观看 | 26uuu国产日韩综合| 国产婷婷色一区二区三区在线| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 免费在线看一区| 国产乱人伦偷精品视频不卡| 色综合久久九月婷婷色综合| 欧美精品久久99久久在免费线| 日韩欧美一二三四区| 国产精品成人免费在线| 首页欧美精品中文字幕| 国产精品一区二区三区四区| 色94色欧美sute亚洲线路一ni | 国产毛片精品一区| 日本高清无吗v一区| 欧美大黄免费观看| 亚洲欧美中日韩| 麻豆成人久久精品二区三区红| 成人h动漫精品| 精品免费国产二区三区| 亚洲一区免费在线观看| 国产成人夜色高潮福利影视| 欧美精品丝袜久久久中文字幕| 欧美韩日一区二区三区| 免费成人你懂的| 在线免费不卡视频| 国产偷国产偷精品高清尤物 | 一本色道亚洲精品aⅴ| 精品国产污污免费网站入口 | 日韩电影网1区2区| 91麻豆精品一区二区三区| 欧美大片一区二区| 日韩精品一卡二卡三卡四卡无卡| 成人午夜视频在线观看| 精品久久久久久久久久久久包黑料| 亚洲精品午夜久久久| 国产成人自拍网| 日韩精品一区二区三区三区免费| 亚洲成人av中文| 91啪在线观看| 国产精品久久久久婷婷| 国产精品综合在线视频| 欧美一区二区观看视频| 天天综合色天天| 91福利社在线观看| 亚洲激情中文1区| 91玉足脚交白嫩脚丫在线播放| 中文字幕欧美国产| 国产成人免费xxxxxxxx| 久久亚洲精品小早川怜子| 另类调教123区 | 国产婷婷一区二区| 国产综合色视频| 精品久久久久av影院| 另类中文字幕网| 欧美成人a视频| 韩国v欧美v日本v亚洲v| 欧美不卡一二三| 国产精品一色哟哟哟| 久久九九影视网| 国产成人精品网址| 欧美国产精品一区二区三区| 成人污污视频在线观看| 欧美激情综合在线| 成人精品免费看| 中文字幕一区av| 色噜噜狠狠色综合中国| 一区二区三区在线视频免费观看 | 91精品午夜视频| 日本伊人精品一区二区三区观看方式 | 天天影视涩香欲综合网| 91精品中文字幕一区二区三区| 青青草国产成人99久久| 日韩免费看的电影| 国产成人精品免费网站| 亚洲婷婷综合久久一本伊一区| 色综合久久66| 亚洲.国产.中文慕字在线| 欧美精品一卡两卡| 久久国产综合精品| 国产欧美日韩视频在线观看| www.亚洲激情.com| 午夜精品一区二区三区电影天堂 | 天堂一区二区在线免费观看| 日韩午夜电影av| 国产经典欧美精品| ㊣最新国产の精品bt伙计久久| 日本高清成人免费播放| 日韩电影在线免费看| 精品国产凹凸成av人网站| 成人免费视频一区| 亚洲制服丝袜在线| 欧美成人官网二区| 91免费国产在线观看| 日日夜夜精品视频天天综合网| 欧美精品一区二区久久久| 91丨九色丨尤物|