本文整理汇总了C++中uhd::usrp::multi_usrp::sptr::set_gpio_attr方法的典型用法代码示例。如果您正苦于以下问题:C++ sptr::set_gpio_attr方法的具体用法?C++ sptr::set_gpio_attr怎么用?C++ sptr::set_gpio_attr使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类uhd::usrp::multi_usrp::sptr
的用法示例。
在下文中一共展示了sptr::set_gpio_attr方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: transceive
void transceive(
uhd::usrp::multi_usrp::sptr usrp,
uhd::tx_streamer::sptr tx_stream,
uhd::rx_streamer::sptr rx_stream,
unsigned int npulses,
float pulse_time,
//std::complex<int16_t>* txbuff,
std::vector<std::complex<int16_t> >* txbuff0,
std::vector<std::complex<int16_t> >* txbuff1,
float tx_ontime,
std::complex<int16_t>** outdata,
size_t samps_per_pulse
){
int debug = 0;
if (debug){
std::cout << "samps_per_pulse: " << samps_per_pulse << std::endl;
}
//create metadeta tags for transmit streams
uhd::time_spec_t start_time = usrp->get_time_now() + 0.05;
uhd::tx_metadata_t md;
md.start_of_burst = true;
md.end_of_burst = false;
md.has_time_spec = true;
md.time_spec = start_time;
std::vector<std::complex<int16_t> *> vec_ptr;
vec_ptr.resize(1);
//vec_ptr[0] = &txbuff->front();
usrp->set_gpio_attr("RXA","CTRL",0x0, TR_BIT); //GPIO mode
usrp->set_gpio_attr("RXA","DDR",TR_BIT, TR_BIT); //Direction out
//create metadata tags for receive stream
uhd::rx_metadata_t rxmd;
std::vector<std::complex<int16_t> > buff(samps_per_pulse,0);
if (verbose) std::cout << "rx buff size: " << buff.size() << std::endl;
if (verbose) std::cout << "tx buff size: " << txbuff0->size() << std::endl;
uhd::stream_cmd_t stream_cmd = uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE;
stream_cmd.num_samps = npulses*samps_per_pulse;
stream_cmd.stream_now = false;
stream_cmd.time_spec = start_time + 22 / usrp->get_rx_rate(); //Digital hardware delay is 22 samples long. Found by experiment.
if (verbose) std::cout << "time spec: " << stream_cmd.time_spec.get_real_secs() << std::endl;
//loop for every pulse in the sequence
size_t spb;
std::vector<std::complex<int16_t>* > rx_dptr;
rx_dptr.resize(usrp->get_rx_num_channels());
spb = tx_stream->get_max_num_samps();
if (verbose) std::cout << "npulses: " << npulses << std::endl;
boost::thread_group rx_threads;
boost::thread_group tx_threads;
for (int ipulse=0; ipulse<npulses; ipulse++){
if (debug) std::cout << "pulse number: " << ipulse << std::endl;
for (size_t ichan=0; ichan<usrp->get_rx_num_channels(); ichan++){
rx_dptr[ichan] = ipulse*samps_per_pulse + outdata[ichan];
}
float timeout = 1.1;
//usrp->set_command_time(start_time-50e-6,0);
//usrp->set_gpio_attr("RXA","OUT",TR_BIT, TR_BIT);
if (ipulse==0){
if (verbose) std::cout << "time spec: " << stream_cmd.time_spec.get_real_secs() << std::endl;
if (verbose) std::cout << "Issuing stream command to start collecting samples\n";
usrp->issue_stream_cmd(stream_cmd);
}
//usrp->set_command_time(start_time+tx_ontime,0);
//usrp->set_gpio_attr("RXA","OUT",0x0, TR_BIT);
size_t acc_samps=0;
if (ipulse%2 == 0) {
vec_ptr[0] = &txbuff0->front();
}
if (ipulse%2 == 1) {
vec_ptr[0] = &txbuff1->front();
}
if (ipulse != npulses-1) {
tx_threads.create_thread(boost::bind(tx_worker,
txbuff0->size(), tx_stream, start_time, vec_ptr[0], 0));
}
if (ipulse == npulses-1) {
tx_threads.create_thread(boost::bind(tx_worker,
txbuff0->size(), tx_stream, start_time, vec_ptr[0], 1));
}
rx_threads.join_all();
rx_threads.create_thread(boost::bind(rx_worker,
rx_stream, samps_per_pulse, rx_dptr));
//for (int k=0; k<10; k++){
// //std::cout << "raw data: " << outdata[0][i][k] << "\t" << outdata[1][i][k] << std::endl;
// std::cout << "raw data: " << rx_dptr[0][k] << " " << rx_dptr[1][k] << std::endl;
//}
//for (int k=0; k<samps_per_pulse; k++)
// outdata[i][k] += buff[k];
start_time += float(pulse_time);
//.........这里部分代码省略.........