Пример #1
0
void OpenCL::scan(cl_mem dOut, cl_mem dIn, size_t numElements)
{
	boost::compute::command_queue queue( m_commandQueue );
	boost::compute::buffer bufIn( dIn );
	boost::compute::buffer bufOut( dOut );

	boost::compute::exclusive_scan( boost::compute::make_buffer_iterator<unsigned int>( bufIn, 0 ), boost::compute::make_buffer_iterator<unsigned int>( bufIn, numElements ),
			boost::compute::make_buffer_iterator<unsigned int>( bufOut, 0 ), queue );

	queue.finish();

//	m_pScanner->scan( dOut, dIn, numElements );
}
Пример #2
0
unsigned int OpenCL::reduce( cl_mem dIn, size_t numElements )
{
	unsigned int uiRet = 0;

	boost::compute::command_queue queue( m_commandQueue );
	boost::compute::buffer bufIn( dIn );

	boost::compute::reduce( boost::compute::make_buffer_iterator<unsigned int>( bufIn, 0 ), boost::compute::make_buffer_iterator<unsigned int>( bufIn, numElements ), &uiRet, queue );

	queue.finish();

	return uiRet;
}
Пример #3
0
int main(int argc, char** argv) {
	ros::init(argc, argv, "fmRemoteNode");
	ros::NodeHandle nh;
	ros::NodeHandle n("~");
	int baudRate;
	std::string device;

	ros::Publisher tele_pub = nh.advertise<fmMsgs::airframeControl>("/radioData", 1);

	n.param<int> ("baudrate", baudRate, 115200);
	n.param<std::string> ("device", device, "/dev/ttyUSB0");

	int fd = ttySetup(baudRate, device.c_str());

	uint8_t buf[512];
	char num[9];
	uint32_t msg_type;
	uint32_t msg_size;
	uint8_t msg_chksum;
//	while (ros::ok()) {
		while (ros::ok()) {
			uint32_t len = unslip_pkg(fd, buf, 512); // Only returns when package is received...

			if (len < 8) {
				printf("Package to small (len = %i) - skipping\n", len);
				continue;
			}

			memcpy(num, buf, 8);							// First 8 bytes contain ascii hex descritions of msg_type and msg_size
			num[8] = 0x0A;									// Insert \n
			sscanf(num, "%04X%04X", &msg_type, &msg_size); 	// Extract msg_type and msg_size

			if (msg_size != len - 10) {
				printf("Package size does not match description: %i (expected %i)\n", len, msg_size + 10);
				continue;
			}

			memcpy(num, &(buf[8 + msg_size]), 2);
			num[2] = 0x0A;
			sscanf(num, "%02X", (uint32_t*) &msg_chksum);

			uint8_t calc_chksum = 0;
			for (uint32_t i = 0; i < len - 2; i++)
				calc_chksum += buf[i];

			if (msg_chksum != calc_chksum) {
				printf("Wrong checksum : %i != %i - 10\n", msg_chksum, calc_chksum);
				continue;
			}

			fmMsgs::airframeControl msg_in;

			boost::shared_array<uint8_t> bufIn(new uint8_t[msg_size]);
			ros::serialization::IStream streamIn(bufIn.get(), msg_size);
			memcpy(bufIn.get(), buf + 8, msg_size);

			switch(msg_type) {
			case 0x1000:
				ros::serialization::deserialize(streamIn, msg_in);
				tele_pub.publish(msg_in);
				break;
			default:
				printf("Unknown message type...\n");
			}
//		}
//		tcflush(fd, TCIFLUSH); /* Clean the tty line*/
	}
}