示例#1
0
//成功发送返回0,错误返回1
unsigned char SendMessage_TextMode (const unsigned char *Context, const unsigned char *PhoneNumber)
{
	unsigned char retval;
	unsigned char tempbuff[30];

	retval = SendAtCommand_UntillSuccess ("AT+CMGF=1\r");

	if (retval == SendAtCommand_ERROR) return 1;

	strcpy ( (char *) tempbuff, "AT+CMGS=\"");	//AT+CMGS="15112475662"\r
	strcat ( (char *) tempbuff, (const char *) PhoneNumber);
	strcat ( (char *) tempbuff, "\"\r");
	retval = send_at_cmd_and_receive (tempbuff, sizeof (tempbuff) - 1, 2000, ">");
	printf ("SendAtCmdre=%s\r\n", tempbuff);

	if (retval != TCP_OK) return 1;

	send_at_cmd (Context);
	send_at_cmd ("\x1a");

	retval = ReadDatasFromSIM300_OKstr (tempbuff, sizeof (tempbuff) - 1, 10, "OK");
	printf ("SendAtCmdre=%s\r\n", tempbuff);

	return retval;
}
示例#2
0
static char PhoneHandleCall(char *msg)
{
	u8 phonebuff[20];
	u8 atcmd[50];
	EFILE efile;
	struct phoneleixing *ph;

	ph=(struct phoneleixing *)msg;

	clear_lcd();

	phonebuff[0]=EepromFile_Open(file_phonebook,&efile);

	memset(phonebuff,0,sizeof(phonebuff));

	if(ph->leixin==0)EepromFile_Seek(&efile,10+ph->numPhone*98+12,EepromFile_SEEK_SET);
	else EepromFile_Seek(&efile,10+ph->numPhone*98+12+18,EepromFile_SEEK_SET);
	EepromFile_read(phonebuff,18,&efile);

	DrawTitle_to_row_Language2(2,"正在拨号...","Dialing...");
	strcpy((char *)atcmd,"ATD");
	strcat((char *)atcmd,(const char *)phonebuff);
	strcat((char *)atcmd,";\r");
	send_at_cmd(atcmd);
	//text_out_to_row_x_Language2(1,25,phonebuff,phonebuff);
	phonebuff[0]=Waitkey_TillKeyPress();

	send_at_cmd("ATH\r");

	return phonebuff[0];
}
示例#3
0
/**
* send AT*COMWDG command
* 发送唤醒连接线程函数
* 
* @解释:根据开发文档说明,前后两个指令间时间间隔低于2s,因此需要发送AT*COMWDG来维持基站与无人机的连接
* @author: blyde
* @update: 2015.7.11
**/
int Ardrone::send_wakeup_cmd()
{
	char cmd[100];
	int delay = 0;
	int ret = 0;
	if( !isInit_)
		return C_ERROR;
	std::cout<<"__wakeupThread start "<<std::endl;
	while ( true)
	{
		// keep Ardrone wake up
		Sleep(40);
		send_at_cmd(last_at_cmd_);
		delay++;
		if (delay >= 4)
		{
			delay = 0;
			sprintf_s( cmd, "AT*COMWDG=%d\r", nextSeq());
			ret = send_at_cmd( cmd);
			if ( ret == C_ERROR)
			{
				std::cout<<"__send_at_cmd error"<<std::endl;
				return C_ERROR;
			}
		}
	}
}
示例#4
0
static char PhoneHandleSendcolormassage(char *msg)
{
	#if 1
	return(abeyant(NULL));
	#else
	char tempbuff[1024];
	char PhoneNumber[30],time[30],context[512];
	char atcmd[20]={"AT+CMGR="};
	static char k=1;
	char j;


	#ifdef DEBUG_PRINTF
	ReceiveMessageDecode("+CMGR: 1,,154\r0891683108705505F04405A10180F60008016002907294238A0500030002015C0A656C76845BA26237FF1A60A85F53524D5E1062374F59989D003100330034002E003700355143FF0C51764E2D57FA672C5E1062374F59989D003100320039002E003400385143FF0C8D6090015E1062374F59989D0035002E003200375143FF0C4E0B6B2167087ED365E54E3A0031003665E5FF0C67096548671F81F3003200300031\rOK",PhoneNumber,time,context,"+CMGL:");
	#endif


	my_itoa(&atcmd[8],k);k++;
	strcat(atcmd,"\r");
	memset(tempbuff,0,sizeof(tempbuff));
	memset(PhoneNumber,0,PhoneNumberSize);
	memset(time,0,sizeof(time));
	memset(context,0,sizeof(context));
	#ifdef DEBUG_PRINTF
	printf("atcmd=%s\n",atcmd);
	#endif
	send_at_cmd(atcmd);
	if(SendATReadDatasFromSIM300(fd_ttyS1,tempbuff,3,0)==OK){
		ReceiveMessageDecode(tempbuff,PhoneNumber,time,context,"+CMGR:");
	}
	#endif
}
示例#5
0
/**
* receive navigation data
* 接收导航数据线程函数
* 
* @解释:根据开发手册P41,需要完成类似于三次握手协议,先发一个激活数据报,
* 然后配置无人机,才能让无人机向基站发送数据报
* 可以使用WireShark2 检测数据报是否发到本机上
* @author: blyde
* @update: 2015.7.11
**/
int Ardrone::receiveNavData()
{
	if( !isInit_)
		return C_ERROR;

	SOCKET socketNav = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	sockaddr_in	navSin;
	navSin.sin_family = AF_INET;
	navSin.sin_port = htons(NAVDATA_PORT);
	navSin.sin_addr.s_addr = inet_addr(ARDRONE_IP);
	int lenNavSin = sizeof(navSin);

	// 激活指令发往NAVDATA_PORT 端口
	const char trigger[4] = { 0x01, 0x00, 0x00, 0x00 };
	int ret = sendto(socketNav, trigger, strlen(trigger), 0, (sockaddr *)&navSin, lenNavSin);
	
	if (ret == SOCKET_ERROR)
	{
		std::cout<<"__send trigger flag error"<<std::endl;
		return C_ERROR;
	}

	printf_s("Sent trigger flag to UDP port : %d \n", NAVDATA_PORT);

	// 配置指令发往AT_PORT 端口
	char initCmd[100];
	sprintf_s(initCmd, "AT*CONFIG=%d,\"general:navdata_demo\",\"TRUE\"\r", nextSeq());
	ret = send_at_cmd(initCmd);
	if ( ret == C_ERROR)
	{
		std::cout<<"__send initCmd error"<<std::endl;
		return C_ERROR;
	}
	// 接收数据包
	MemoryLibrary::Buffer navDataBuffer;	// 二进制数据缓冲区
	char recv[1024] = { 0 };				// 数据包接收数组
	int lenRecv = 0;
	int delay = 0;
	
	std::cout<<"__receiveNavData start "<<std::endl;
	while ( true)
	{
		// 获取导航数据包
		lenRecv = recvfrom(socketNav, recv, 1024, 0, (struct sockaddr*)&navSin, &lenNavSin);
		delay++;
		if (delay >= 5)
		{
			delay = 0;
			printf("received %d bytes\n", lenRecv);
			// 分析数据包,得到导航数据
			navDataBuffer.Set(recv, lenRecv);
			ret = parseNavData(navDataBuffer);
			if ( ret == C_ERROR)
			{
				std::cout<<"__parseNavData() error"<<std::endl;
				return C_ERROR;
			}
		}
	}
}
示例#6
0
unsigned char send_at_cmd_and_return_NotResposeKey(const unsigned char * cmd,int ms,const unsigned char *okstr,const unsigned char *errstr)
{
	unsigned char tempbuff[1024];
	int i,ret,size,pos;
	unsigned char retval;

	retval=TCP_SendAtTimeout;

	printf("SEND_AT:%s\n",cmd);	//设置加CIP  头,执行了这个指令sim900B  把接收的数据以打包的方式从串口输出。+IPD,1460:数据

	SetAutoExitTime(0);
	ms/=20;
	send_at_cmd(cmd);
	for(pos=i=0,size=sizeof(tempbuff);i<ms;i++)
	{
		ret= ReadDatasFromtty(fd_ttyS1,tempbuff+pos,size,0,20000);
		if(ret)
		{
			pos+=ret;
			size-=ret;
		}
		else
		{
			if(strstr((char const*)tempbuff,(char const*)okstr)){retval=TCP_OK;break;}
			if(strstr((char const*)tempbuff,(char const*)errstr)){retval=TCP_ERROR;break;}
		}
	}

	printf("SEND_AT_Re:%s\n",tempbuff);

	return retval;
}
示例#7
0
/**
* send AT*REF command
* 发送AT*REF控制指令
* 
* @param: cmdFormat % 指令格式
* @author: blyde
* @update: 2015.7.11
**/
int Ardrone::send_cmd( const char* cmdFormat)
{
	char cmd[100];
	sprintf_s( cmd, cmdFormat, nextSeq());
	int ret = send_at_cmd( cmd);
	return ret;
}
示例#8
0
unsigned char send_at_cmd_and_return(const unsigned char * cmd,int ms,const unsigned char *okstr,const unsigned char *errstr)
{
	unsigned char tempbuff[1024];
	int i,ret,size,pos;
	unsigned char retval;

	retval=TCP_SendAtTimeout;

	kmy_USART2ReceiveReset();

	SetAutoExitTime(0);
	ms/=20;
	send_at_cmd(cmd);
	for(pos=i=0,size=sizeof(tempbuff);i<ms;i++)
	{
		ret= ReadDatasFromtty(fd_ttyS1,tempbuff+pos,size,0,20000);
		if(ret)
		{
			pos+=ret;
			size-=ret;
		}
		else
		{
			if(strstr((char const*)tempbuff,(char const*)okstr)){retval=TCP_OK;break;}
			if(errstr!=NULL){if(strstr((char const*)tempbuff,(char const*)errstr)){retval=TCP_ERROR;break;}}
		}
	}

	printf("SEND_AT_Re:%s\n",tempbuff);
	return retval;
}
示例#9
0
unsigned char SendAtCommand_UntillSuccess(unsigned char *cmd)
{
	char tempbuff[100];
	int i,ret,size,pos,ms=2000;
	char cnt=0;

	AgainExecute:
	send_at_cmd(cmd);

	ms/=10;
	for(pos=i=0,size=sizeof(tempbuff);i<ms;i++)
	{
		ret= ReadDatasFromtty(fd_ttyS1,(u8*)(tempbuff+pos),size,0,10000);
		if(ret)
		{
			pos+=ret;
			size-=ret;
		}
		else
		{
			if(strstr(tempbuff,"OK"))return SendAtCommand_OK;
			if(strstr(tempbuff,"ERROR"))return SendAtCommand_ERROR;
		}
	}

	if(cnt++<5)goto AgainExecute;

	return SendAtCommand_ERROR;
}
示例#10
0
/**
* send AT*PCMD command
* 发送飞行控制指令,指令规则请翻阅开发手册
* 
* @param: enable % 能否控制
* @param: roll % 我忘了,帮我补上吧,嘻嘻
* @param: pitch % 
* @param: gaz % 
* @param: yaw % 
*
* @author: blyde
* @update: 2015.7.11
**/
int Ardrone::send_pcmd(int enable, float roll, float pitch, float gaz, float yaw)
{
	char cmd[100]; 
	sprintf_s(cmd, "AT*PCMD=%d,%d,%d,%d,%d,%d\r", nextSeq(), 
					enable, float2Int(roll), float2Int(pitch), float2Int(gaz), float2Int(yaw));
	int ret = send_at_cmd( cmd);
	return ret;
}
示例#11
0
/************************************光标在手机处菜单**********************************************/
static char PhoneHandleCall(char *msg)
{
	u8 phonebuff[20];
	u8 atcmd[50];
	EFILE efile;
	struct phoneleixing *ph;

	ph=(struct phoneleixing *)msg;

	clear_lcd();
	/*fp=fopen("PhoneBook","rb");
	if(fp!=NULL){		//如果有记录,则先把记录读到phonebuff 。
	#ifdef DEBUG_PRINTF
	printf("open PhoneBook success!!\n");
	#endif
	}else{
	#ifdef DEBUG_PRINTF
	printf("open PhoneBook failure!!\n");
	#endif
	return KEY_ReturnPrevious;
	}*/
	phonebuff[0]=EepromFile_Open(file_phonebook,&efile);

	memset(phonebuff,0,sizeof(phonebuff));
	/*if(ph->leixin==0)fseek(fp,10+ph->numPhone*98+12,SEEK_SET);
	else fseek(fp,10+ph->numPhone*98+12+18,SEEK_SET);
	fread(phonebuff,18,1,fp);*/
	if(ph->leixin==0)EepromFile_Seek(&efile,10+ph->numPhone*98+12,EepromFile_SEEK_SET);
	else EepromFile_Seek(&efile,10+ph->numPhone*98+12+18,EepromFile_SEEK_SET);
	EepromFile_read(phonebuff,18,&efile);

	DrawTitle_to_row_Language2(2,"正在拨号...","Dialing...");
	strcpy((char *)atcmd,"ATD");
	strcat((char *)atcmd,(const char *)phonebuff);
	strcat((char *)atcmd,";\r");
	send_at_cmd(atcmd);
	//text_out_to_row_x_Language2(1,25,phonebuff,phonebuff);
	phonebuff[0]=Waitkey_TillKeyPress();

	send_at_cmd("ATH\r");

	return phonebuff[0];
}
示例#12
0
/**
* initialize Ardrone(not use)
* 设置最大飞行高度,设置超声波频率等无人机参数预设
* 
* @author: blyde
* @update: 2015.7.11
*/
int Ardrone::initArdrone()
{
	char cmd[1024];
	// 设置最大高度
	sprintf_s( cmd, "AT*CONFIG=%d,\"control:altitude_max\",\"2000\"\r", nextSeq());
	assert( send_at_cmd(cmd));
	Sleep( INTERVAL);

	// 设置超声波频率
	sprintf_s( cmd, "AT*CONFIG=%d,\"pic:ultrasound_freq\",\"8\"\r", nextSeq());
	assert( send_at_cmd( cmd));
	Sleep( INTERVAL);
	
	//flat trim
	sprintf_s( cmd, "AT*FTRIM=%d\r", nextSeq());
	assert( send_at_cmd(cmd));
	Sleep( INTERVAL);
	return C_OK;
}
示例#13
0
unsigned char send_at_cmd_and_receive(unsigned char * CmdBuff,int CmdBuffSize,int Ms,const unsigned char *OkStr)
{
	int i,ret,size,pos;
	unsigned char retval=TCP_SendAtTimeout;


	kmy_USART2ReceiveReset();

	SetAutoExitTime(0);
	Ms/=20;
	send_at_cmd(CmdBuff);
	

	*CmdBuff=0;
	
	for(pos=i=0,size=CmdBuffSize;i<Ms;i++)
	{
		ret= ReadDatasFromtty(fd_ttyS1,CmdBuff+pos,size,0,20000);
		if(ret)
		{
			pos+=ret;
			size-=ret;


		}
		else
		{
			if(strstr((char const*)CmdBuff,(char const*)OkStr))break;
			retval=GetKeyValue();
			if(retval!=KEY_NONE)
			{
				if(retval==KEY_ReturnInitInterface||retval==KEY_ReturnPrevious){retval=TCP_UserSelfReturn;break;}
			}

		}
	}

	if(i<Ms)retval=TCP_OK;

	printf("SendAtCmd receive-->%d %s\r\n",pos,CmdBuff);
	return retval;
}
示例#14
0
char GetIMEI(unsigned char *buff)
{
	char rcv_buf[50];
	char *p;
	int i;
	char retval;

	send_at_cmd("AT+GSN\r");
	retval=ReadDatasFromSIM300_OKstr((u8*)rcv_buf,sizeof(rcv_buf),2,"OK");
	printf("rcv_buf=%s\n",rcv_buf);

	p=rcv_buf;i=0;
	while((*p<'0'||*p>'9')&&i<sizeof(rcv_buf)){p++;i++;}
	for(i=0;i<24;i++){rcv_buf[i]=*p;p++;if(*p<'0'||*p>'9')break;}
	i++;
	rcv_buf[i]=0;

	strcpy((char *)buff,rcv_buf);

	return retval;
}
示例#15
0
static unsigned char send_at_cmd_and_return_3errs(const unsigned char * cmd,int ms,const unsigned char *okstr,const unsigned char *errstr,const unsigned char *errstr2,const unsigned char *errstr3)
{
	unsigned char tempbuff[200];
	int i,ret,size,pos;
	unsigned char retval;
	unsigned char keyval;

	kmy_USART2ReceiveReset();

	retval=TCP_SendAtTimeout;
	SetAutoExitTime(0);
	ms/=20;
	send_at_cmd(cmd);
	for(pos=i=0,size=sizeof(tempbuff);i<ms;i++)
	{
		ret= ReadDatasFromtty(fd_ttyS1,tempbuff+pos,size,0,20000);
		if(ret)
		{
			pos+=ret;
			size-=ret;
		}
		else
		{

			if(strstr((char const*)tempbuff,(char const*)okstr)){retval=TCP_OK;break;}
			if(strstr((char const*)tempbuff,(char const*)errstr)){retval=TCP_ERROR;break;}
			if(strstr((char const*)tempbuff,(char const*)errstr2)){retval=TCP_ERROR2;break;}
			if(strstr((char const*)tempbuff,(char const*)errstr3)){retval=TCP_ERROR3;break;}

			keyval=GetKeyValue();
			if(keyval==KEY_ReturnInitInterface||keyval==KEY_ReturnPrevious){retval=TCP_UserSelfReturn;break;}
		}
	}

	printf("SEND_AT_Re:%s\n",tempbuff);
	return retval;
}
示例#16
0
//发送短信
char SendMessage (char *Msg, const char *Phone)
{
	char sendbuff[1024];
	char tempbuff[1024];
	char temp[200];
	char *pt, *ps;
	char len;
	char PDUsendMode;


	PDUsendMode = CheckBuffWhetherAllisAsccii (Msg);

	memset (sendbuff, 0, sizeof (sendbuff) );
	ps = sendbuff;

	memset (tempbuff, 0, sizeof (tempbuff) );	//设置PDU mode
	send_at_cmd ("AT+CMGF=0\r");

	if (ReadDatasFromSIM300_OKstr ( (unsigned char *) tempbuff, sizeof (tempbuff), 3, "OK\r") != 0)
	{
		goto tuichu;
	}

	memset (tempbuff, 0, sizeof (tempbuff) );	//取短信中心号码
	send_at_cmd ("AT+CSCA?\r");

	if (ReadDatasFromSIM300_OKstr ( (unsigned char *) tempbuff, sizeof (tempbuff), 3, "OK\r") != 0)
	{
		goto tuichu;
	}

	pt = strstr (tempbuff, "+CSCA: \"+");

	if (pt != NULL) pt += sizeof ("+CSCA: \"+") - 1;
	else goto tuichu;

	HaomaToMassageCode (temp, pt);
	OneHexToTwoAsccii (&ps, strlen (temp) / 2 + 1);		//A:短信息中心地址长度,2位十六进制数(1字节)。
	OneHexToTwoAsccii (&ps, 0x91);					//B:短信息中心号码类型,2位十六进制数。
	My_strcpy_PointInc (&ps, temp);					//C:短信息中心号码,B+C的长度将由A中的数据决定。
	len = strlen (sendbuff);

	OneHexToTwoAsccii (&ps, 0x11);					//D:文件头字节,2位十六进制数。
	OneHexToTwoAsccii (&ps, 0x00);					//E:信息类型,2位十六进制数。
	OneHexToTwoAsccii (&ps, strlen (Phone) + 2);			//F:被叫号码长度,2位十六进制数。
	OneHexToTwoAsccii (&ps, 0x91);					//G:被叫号码类型,2位十六进制数,取值同B。

#ifdef MyChinaSelfTest
	OneHexToTwoAsccii (&ps, 0x68);
#else
	OneHexToTwoAsccii (&ps, 0x34);	//+4369910797801奥地利国际区号
#endif

	HaomaToMassageCode (temp, Phone);
	My_strcpy_PointInc (&ps, temp);					//H:被叫号码,长度由F中的数据决定。
	OneHexToTwoAsccii (&ps, 0x00);					//I:协议标识,2位十六进制数。

	if (PDUsendMode == PDUsendMode7bit)  				//J:数据编码方案,2位十六进制数。08 用户信息编码方式(TP-DCS) UCS2编码
	{
		OneHexToTwoAsccii (&ps, 0x00);
	}
	else if (PDUsendMode == PDUsendMode8bit)
	{
		OneHexToTwoAsccii (&ps, 0x04);
	}
	else if (PDUsendMode == PDUsendModeUCS2)
	{
		OneHexToTwoAsccii (&ps, 0x08);
	}

	OneHexToTwoAsccii (&ps, 0x00);					//K:有效期,2位十六进制数。

	if (PDUsendMode == PDUsendMode7bit)
	{
		strcpy (tempbuff, Msg);
		OneHexToTwoAsccii (&ps, strlen (tempbuff) );	//L:用户数据长度,2位十六进制数。
		PDU7bitEncode (tempbuff);					//M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。
		My_strcpy_PointInc (&ps, tempbuff);
	}
	else if (PDUsendMode == PDUsendMode8bit)
	{

	}
	else if (PDUsendMode == PDUsendModeUCS2)
	{
		AsciiGB2312ToUCS2 (tempbuff, Msg);
		OneHexToTwoAsccii (&ps, strlen (tempbuff) / 2);	//L:用户数据长度,2位十六进制数。
		My_strcpy_PointInc (&ps, tempbuff);			//M:用户数据,其长度由L中的数据决定。J中设定采用UCS2编码,这里是中英文的Unicode字符。
	}

	My_strcpy_PointInc (&ps, "\x1a");					//加上0x1A

	ps = temp;
	len = (strlen (sendbuff) - len - 1) / 2;
	My_strcpy_PointInc (&ps, "AT+CMGS=");	//以PDU  模式开始发送短信
	sprintf (ps, "%d", len);
	strcat (temp, "\r");
	send_at_cmd ( (const unsigned char*) temp);
	memset (tempbuff, 0, sizeof (tempbuff) );
	ReadDatasFromSIM300_OKstr ( (unsigned char *) tempbuff, sizeof (tempbuff) - 1024, 2, ">");

	if (strstr (tempbuff, ">") )
	{
		send_at_cmd ( (const unsigned char *) sendbuff);

		if (ReadDatasFromSIM300_OKstr ( (unsigned char *) tempbuff, sizeof (tempbuff) - 1024, 8, "OK\r") != 0)
		{
			goto tuichu;
		}
	}
	else goto tuichu;

	return Sim900B_ProccessOK;


tuichu:
	return Sim900B_ProccessERROR;
}