On 2022-07-29 16:41, Jason Merlo wrote:
Hi All,

I’m working on a project using an X310 and UBX-160 daughterboards where we need 
to perform full duplex on one daughterboard and time-domain duplexing on the 
TX/RX port of the second daughterboard.  The end goal is essentially just to 
control the switches on the UBX-160 to allow me to transmit or receive on the 
TX/RX port on one of the channels while operating the second channel in 
full-duplex. Currently, I’m performing timed transmit and receives at the same 
time using STREAM_MODE_NUM_SAMPS_AND_DONE whenever data needs to be transmitted.

My current approach to accomplish the time duplexing (effectively controlling 
the switches to allow transmit/receive) is by calling 
uhd::usrp::multi_usrp::get_tx_stream() each time new data is received by the 
transmit function, setting the tx_stream_args.channels field appropriately 
prior to re-creating the streamer, to switch on and off the transmit switch on 
the TX/RX port since the switchs is in TX mode whenever data is being 
transmitted.  I always receive data from the TX/RX port and ignore it when TX 
is transmitting to avoid overhead of re-creating the rx_streamer each time.

This works, but only for exactly 120 iterations. Additionally, if I dynamically 
create the receive streamer as well it works for exactly 60 iterations.  Once 
it reaches 120 iterations I start to get ERROR_CODE_TIMEOUT receiving 0 
samples, i.e., the SDR stops receiving any data, however it still seems to 
transmit just fine (I get ACKs for all the transmitted data).  For what it’s 
worth, it seems to be indifferent to TX/RX buffer size, so it doesn’t seem 
directly related to streaming buffers.  I don’t know if it has something to do 
with the tx_streamer not being fully deleted.  I’m calling tx_streamer.reset() 
and assigning to nullptr for good measure to suggest the shared_ptr to delete 
the object (though I’m not sure how to determine if this is actually 
happening).  Additionally, before I was dynamically creating the tx_stream 
object, the program ran fine; it’s only now that I am re-creating the tx_stream 
dynamically based on which channels are actually transmitting during a certain 
period.

The only hint I’ve gotten is from the get_tx_stream() documentation: "There can 
always only be one streamer. When calling get_tx_stream() a second time, the first 
streamer must be destroyed beforehand." So if the shared_ptr isn’t actually being 
deleted this could be the cause, though I’m not sure why it allows 120 calls before it 
stops receiving—it seems like it should crash after the second call, but I also tested it 
without calling reset() or assigning it to nullptr on the shared pointer, and it had the 
exact same behavior. However, the tx_stream object does go out of scope at the end of the 
function which may also take care of the shared_ptr deletion, so this may not be the 
issue. Furthermore, it’s strange that dynamicaly creating tx_stream only seems to affect 
the rx_stream operation and tx_stream appears to continue to work fine.

If I accomplish the switching directly without creating a new tx_streamer 
object, or if I could change the transmit channels of a tx_streamer object 
without deleting/creating a new one that may also resolve this issue I think.

If anyone has suggestions on solving the issue described above, or how to 
accomplish this in a different way, I would greatly appreciate the feedback.

Thanks in advance,
Jason
_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
I think what you might want to do is use the burst-tags in the metadata for "send()":

https://files.ettus.com/manual/structuhd_1_1tx__metadata__t.html#ab5ffe812f8d3d1870253e98e6ff1718a

Personally, the TX side of things has never been much of a "thing" for me, given that 90% of my time I spend as a radio astronomer, but the START/END of burst   tags were designed to provide more hints to the ATR switching hardware among other things.


_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to