コード例 #1
0
ファイル: RadioPanel.cpp プロジェクト: ntrrlz/orbitersaitek
void RadioPanel::updateDisplay()
{
	static unsigned char buf[23];

	if (!handle)
	{
		return;
	}

	VESSEL *vessel = oapiGetFocusInterface(); // Get current vessel


	if (vessel!=NULL) // check if pointer is valid
	{

		buf[0]=0x00;
		// parse nav1
		parseNavData(vessel, 0, &(buf[1]));
		// parse nav2
		parseNavData(vessel, 1, &(buf[11]));

		int res = hid_send_feature_report(handle, buf, 23);	
	}

}
コード例 #2
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;
			}
		}
	}
}