Hi,

attached is a program that does:

open_b210()
while (1) {
  t=rx(1ms of data)
  tx(1ms of data at time t+4ms)
}

The program does more or less what openairinterface does.

Used to work properly, does not with 3.13.1.0
(version shipped in ubuntu 18.04).

We get lots of:

[...]
[ERROR] [B200] Got a ctrl packet with unknown SID 6488134
[ERROR] [B200] Got a ctrl packet with unknown SID 7012383
[ERROR] [B200] Got a ctrl packet with unknown SID 6029406
[ERROR] [B200] Got a ctrl packet with unknown SID 4284874799
[...]

Anything wrong done on our side? bad use of the library?
Or is it on your side?

Thanks.

Regards,
Cédric.
/* g++ bug-3.13.1.0.cc -luhd -lboost_system */
#include <uhd/usrp/multi_usrp.hpp>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  std::string args = "type=b200";
  uhd::device_addrs_t device_adds = uhd::device::find(args);
  if (device_adds.size() == 0) { printf("no device\n"); exit(1); }
  if (device_adds[0].get("type") != "b200") { printf("no b200\n"); exit(1); }

  double usrp_master_clock = 30.72e6;
  args += boost::str(boost::format(",master_clock_rate=%f") % usrp_master_clock);
  args += ",num_send_frames=256,num_recv_frames=256, send_frame_size=15360, recv_frame_size=15360";

  uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(args);

  usrp->set_clock_source("internal");
  usrp->set_master_clock_rate(30.72e6);

  usrp->set_rx_rate(7680000, 0);
  usrp->set_rx_freq(2680000000, 0);
  usrp->set_rx_gain(60, 0);

  usrp->set_tx_rate(7680000, 0);
  usrp->set_tx_freq(2680000000, 0);
  usrp->set_tx_gain(60, 0);

  uhd::stream_args_t stream_args_rx("sc16", "sc16");
  stream_args_rx.args["spp"] = str(boost::format("%d") % 768 );
  stream_args_rx.channels.push_back(0);
  uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args_rx);

  uhd::stream_args_t stream_args_tx("sc16", "sc16");
  stream_args_tx.channels.push_back(0);
  uhd::tx_streamer::sptr tx_stream = usrp->get_tx_stream(stream_args_tx);

  usrp->set_tx_bandwidth(20e6);
  usrp->set_rx_bandwidth(20e6);

  uhd::stream_cmd_t cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);
  cmd.stream_now = false; // start at constant delay
  cmd.time_spec = usrp->get_time_now() + uhd::time_spec_t(0.05);
  rx_stream->issue_stream_cmd(cmd);

  uhd::rx_metadata_t rx_md;
  uhd::tx_metadata_t tx_md;

  tx_md.start_of_burst = true;
  tx_md.end_of_burst = false;

  while (1) {
    char buf[7680*2*2];
    std::vector<void *> buff_ptrs;
    buff_ptrs.push_back(buf);

    int recv = rx_stream->recv(buff_ptrs, 7680, rx_md);
    //printf("got %d samples ret %d [%lld]\n", recv, rx_md.error_code, rx_md.time_spec.to_ticks(7680000));

    unsigned long long ts = rx_md.time_spec.to_ticks(7680000) + 4 * 7680;

    tx_md.time_spec = uhd::time_spec_t::from_ticks(ts, 7680000);
    tx_md.has_time_spec = true;

    int sendv = tx_stream->send(buf, 7680, tx_md, 1e-3);
    //printf("send %d samples\n", sendv);

    tx_md.start_of_burst = false;
  }

  return 0;
}
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to