I just reviewed the Replay block "issue_stream_cmd" and I think I was wrong
in the previous post. This appears to operate with the playback buffer
rather than the record buffer. So, I think you will need to use plan B and
call "issue_stream_cmd" directly on the radio controller.

On Tue, Feb 1, 2022 at 3:11 PM Rob Kossler <rkoss...@nd.edu> wrote:

> Hi Ofer,
> The Replay block has an "issue_stream_cmd" that should work identically to
> the same command in the rx_streamer. You should be able to use a timed
> command with it.  Even if this doesn't work for some reason, you could
> instead use the "issue_stream_cmd" directly on the Radio (using a timed
> command). Note that the reason for issuing it at the rx_streamer or at the
> replay block is so that ALL blocks in the graph will get notified of the
> impending stream (in case any given block needs to prepare in some way for
> the impending stream). Thus, in a typical graph, when you call
> issue_stream_cmd on the rx_streamer, this command then propagates to the
> DDC and ultimately to the Radio which guarantees the start sample.
> Rob
>
> On Tue, Feb 1, 2022 at 2:34 PM Ofer Saferman <o...@navigicom.com> wrote:
>
>> Hello Rob,
>>
>> Thank you for your assistance.
>> I will take your advice and keep it simple and use a separate port for
>> each operation/channel.
>> I want to do it not only to keep things simple but also because my Tx
>> playback should never stop while my recording is timed and rare.
>>
>> Can you or Wade comment on item (4) in my latest query? - How to issue
>> recording simultaneously on two replay ports? As I mentioned, I know how to
>> do timed commands on streams but not on the replay block.
>>
>> Regards,
>> Ofer Saferman
>>
>> On Tue, Feb 1, 2022 at 7:02 PM Rob Kossler <rkoss...@nd.edu> wrote:
>>
>>> Oops. In step 3, I meant graph Replay->rx_streamer.  Also, in step 2,
>>> since this is a circular graph, you need to disconnect property propagation
>>> on one leg of the graph (or something like that).
>>>
>>> On Tue, Feb 1, 2022 at 11:58 AM Rob Kossler <rkoss...@nd.edu> wrote:
>>>
>>>> Hi Ofer,
>>>> Considering just a single port replay block, it seems that you want to
>>>> do the following:
>>>> Step 1: Populate Tx samples: Configure tx_streamer->Replay graph and
>>>> populate Mem block A with Tx waveform
>>>> Step 2: Transmit/Receive samples: Change graph to Radio->Replay->Radio
>>>> and "play" from Mem block A while recording to Mem block B
>>>> Step 3: Download Rx samples: Change graph to Radio->rx_streamer and
>>>> play samples from Mem block B
>>>>
>>>> This seems doable to me, but you may want to start with a simpler
>>>> approach (such as separate ports that don't require reconfiguring graphs).
>>>> Also, regarding your question about a fixed number of samples, I think that
>>>> the limit is 2^28 samples in the NUM_SAMPS_AND_DONE option. If you need
>>>> more than that, I think you are out of luck (I don't think there is a timed
>>>> radio command to tell it to stop streaming on a given sample).
>>>> Rob
>>>>
>>>> On Tue, Feb 1, 2022 at 12:18 AM Ofer Saferman <o...@navigicom.com>
>>>> wrote:
>>>>
>>>>> Hello Wade,
>>>>>
>>>>> Thank you for your prompt response.
>>>>> A few more questions please:
>>>>> 1. I am not sure that when we say bi-directional we mean the same
>>>>> thing. The record and playback functions derive their function to some
>>>>> extent from the graph connectivity. I would like, for the *same port*
>>>>> of Replay, to make 2 graphs: tx_stream --> Replay --> Radio, Radio -->
>>>>> Replay --> rx_stream. When I do record or playback, which of the graphs is
>>>>> active? Both of them? In both directions? Can I control it to activate 
>>>>> only
>>>>> one direction? For Tx I want to use the record function only once to get
>>>>> the samples into the buffer and playback them periodically (same as in the
>>>>> rfnoc_replay_samples_from_file example) but for the other direction of Rx 
>>>>> I
>>>>> want to use the record function all the time. When I issue the record
>>>>> command, which graph is active? The Tx graph? The Rx graph? Will it allow
>>>>> me to make the 2 graphs at all using the same port? It is my understanding
>>>>> that for the 2 graphs I mentioned I need two ports of replay, one for each
>>>>> graph. Please correct me if I am wrong.
>>>>> 4. I would like to use two ports of Replay to record 2 Rx channels.
>>>>> One replay port for each Rx channel. How do I issue a record command that
>>>>> will cause both channels (ports) to record at the same time instant? I 
>>>>> know
>>>>> we can do timed commands for streams but how to do it for replay ? My use
>>>>> of the rx streams is done later in an offline fashion and can be done in
>>>>> series for each of the Rx channels but the recording of samples itself to
>>>>> DRAM has to be simultaneous.
>>>>>
>>>>> Thanks,
>>>>> Ofer Saferman
>>>>>
>>>>> ---------- Forwarded message ----------
>>>>>> From: Wade Fife <wade.f...@ettus.com>
>>>>>> To: Ofer Saferman <o...@navigicom.com>
>>>>>> Cc: usrp-users <usrp-users@lists.ettus.com>
>>>>>> Bcc:
>>>>>> Date: Mon, 31 Jan 2022 16:52:41 -0600
>>>>>> Subject: [USRP-users] Re: Questions about replay block
>>>>>> Hi Ofer,
>>>>>>
>>>>>> 1. It is bidirectional. You can think of the "record" and the "play"
>>>>>> components as independent, but connected to the same memory. So be 
>>>>>> careful
>>>>>> not to read/write to the same memory space and be aware that reading and
>>>>>> writing simultaneously slows down the DRAM making under/overflow more
>>>>>> likely. But I think the E320 DRAM should be fast enough for your use 
>>>>>> case.
>>>>>>
>>>>>> 2. The number of ports on the Replay block doesn't have any
>>>>>> restrictions that I know of. Any positive integer should be fine. You 
>>>>>> could
>>>>>> also leave ports unused/unconnected if it was somehow a problem.
>>>>>>
>>>>>> 3. To record at a predetermined time for a fixed amount of data, you
>>>>>> should be able to issue a stream command with the time and the number of
>>>>>> samples you want.
>>>>>> a. Yes.
>>>>>> b. Yes. The first time you want to record data, you call record(). To
>>>>>> record to the same buffer again, call record_restart(). Make sure 
>>>>>> num_samps
>>>>>> for your stream command does not exceed the size of your record buffer, 
>>>>>> or
>>>>>> else the radio will overflow.
>>>>>> c. Yes, you need to play back the buffer. Since the output is
>>>>>> connected to the rx streamer, it'll stream to the host. So you can call
>>>>>> recv() on your rx streamer to capture the data. Something like this (in
>>>>>> Python):
>>>>>> replay.play(0, num_bytes, port, uhd.libpyuhd.types.time_spec(0.0),
>>>>>> False)
>>>>>> rx_md = uhd.types.RXMetadata()
>>>>>> num_rx = rx_streamer.recv(output_data, rx_md, timeout)
>>>>>>
>>>>>> Happy coding!
>>>>>>
>>>>>> Wade
>>>>>>
>>>>>>
>>>>>> On Mon, Jan 31, 2022 at 9:45 AM Ofer Saferman <o...@navigicom.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> I am working on a E320 USRP unit and using UHD-4.1.0.5.
>>>>>>> I prepared my own FPGA image that has 1 radio block and 1 replay
>>>>>>> block with 2 ports (channels)
>>>>>>> I would like to be able to simultaneously perform playback of 1 Tx
>>>>>>> channel and recording of 2 Rx channels (to/from different memory 
>>>>>>> locations)
>>>>>>> The example rfnoc_replay_samples_from_file.cpp is only helpful to
>>>>>>> some extent because it shows only the playback path and I am having some
>>>>>>> difficulty setting up the recording path.
>>>>>>>
>>>>>>> I have a few questions about the replay block functionality and
>>>>>>> connectivity that I hope you may be able to resolve.
>>>>>>>
>>>>>>> 1. Is the replay block bi-directional? If I have a replay block with
>>>>>>> 1 channel, can it be used for both playback of samples and recording of
>>>>>>> samples (from/to different memory locations) simultaneously ? or does 
>>>>>>> each
>>>>>>> operation require one channel?
>>>>>>> 2. If the answer to question (1) is no then I guess I need at least
>>>>>>> 3 replay channels. Is it possible to define in the FPGA image (in the 
>>>>>>> yml
>>>>>>> file) a replay block with 3 channels (ports) or does it have to be a 
>>>>>>> power
>>>>>>> of 2? a multiple of 2? I didn't want to try and see what happens 
>>>>>>> because it
>>>>>>> takes a while to compile the FPGA image and I would rather get it right 
>>>>>>> on
>>>>>>> the 1st try.
>>>>>>> 3. I would like to issue samples recording at a predetermined time
>>>>>>> for a fixed size data chunk and then at my own leisure dump the memory
>>>>>>> buffer that was recorded to a file. Since I don't have a working 
>>>>>>> example I
>>>>>>> am having some difficulty getting it right.
>>>>>>> a. The graph should be Radio -->  Replay --> rx_stream. Is this
>>>>>>> correct?
>>>>>>> b. I should start my recording with replay_ctrl->record_restart and
>>>>>>> check for fullness, right?
>>>>>>> c. Then how do I get the rx_stream to dump it to file? Do I need to
>>>>>>> do playback for this to happen, mirroring what is going on in the
>>>>>>> rfnoc_replay_samples_from_file example?
>>>>>>> If someone has a working code snippet I would appreciate it if they
>>>>>>> can share it.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Ofer Saferman
>>>>>>>
>>>>>>> --
>>>>>>> This message has been scanned for viruses and
>>>>>>> dangerous content by *MailScanner* <http://www.mailscanner.info/>,
>>>>>>> and is
>>>>>>> believed to be clean. _______________________________________________
>>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>>>>>>
>>>>>> _______________________________________________
>>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>>>>>
>>>>>
>>>>> --
>>>>> This message has been scanned for viruses and
>>>>> dangerous content by *MailScanner* <http://www.mailscanner.info/>,
>>>>> and is
>>>>> believed to be clean. _______________________________________________
>>>>> USRP-users mailing list -- usrp-users@lists.ettus.com
>>>>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>>>>
>>>>
>> --
>> This message has been scanned for viruses and
>> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and
>> is
>> believed to be clean. _______________________________________________
>> USRP-users mailing list -- usrp-users@lists.ettus.com
>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>
>
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to