Can you send me the files?

-John



On Wed, Oct 17, 2012 at 4:16 PM, Jose Torres Diaz <torresdiaz.j...@gmail.com
> wrote:

> Hi John,
>
> Yes, I also checked the examples in your branch. In regards to your
> questions.
>
> *1.* BLOCK 2 is processing the data from BLOCK 1, but only when BLOCK 1
> has finished the routine "N times". Let me post a piece of code from BLOCK
> 1:
>
>
>
> int work(
>         const InputItems &,
>         const OutputItems &
>     ){
>
>
>         for (int i = 0; i < d_pkt_len; i++) {
>                if (d_mode == 2)
>           { elements[i] = ((i % d_pkt_len) + d_num_pkts_output) & 0xff;
>                   }
>         else if (d_mode == 0)
>           {elements[i]=0;
>                  }
>              else // ones
>         {elements[i]=0xFF;
>         }
>         num_output++;
>       } //End of for
>       d_num_pkts_output++;
>
>       //(4.1) adding data into the dictionary
>       dictionary = pmt::pmt_dict_add(dictionary, data_key, vector_data);
>       std::cout << std::endl << "(4) Now, the dictionary is" << dictionary
> <<std::endl;
>
>
>       //Posting a message downstream
>       this->post_msg(0, AMSG_KEY, dictionary, _d_my_unique_id);
>       std::cout << std::endl << "posting the message downstream "
> <<std::endl;
>
>       return -1;  // <--The problem seems to be here
>
>    }
>
>
> *2.* N is the number of packet that I want to transmit from BLOCK 1. In
> my code, I'm using the variable d_max_pkts. So, when d_num_pkts_output >=
> d_max_pkts, the program stops:
>
>     if (d_num_pkts_output >= d_max_pkts)
>       return 0;
>
> 3. Yes, my BLOCK 1 is as follows:
>
> block(
>           //"gr uhd amsg source",
>           "BLOCK 1",
>             gr_make_io_signature(0, 0, 0),
>             gr_make_io_signature(0, 0, 0),
>             msg_signature(false, 1)
>
>
> Thanks again for your advice,
>
> Regards,
>
> Jose
>
>
> On Wed, Oct 17, 2012 at 5:14 PM, John Malsbury <john.malsb...@ettus.com>wrote:
>
>> So, block 2 is never processing the data?  What are you using to set the
>> "N"?  Does the uhd_amsg_source have the same i/o as the original block - no
>> inputs, one msg output?
>>
>> If you're looking to something to generate periodic msg's with arbirtrary
>> key and value, the heart_beat block in my pre-cog branch might help...
>>
>> -John
>>
>>
>>
>>
>>
>> On Tue, Oct 16, 2012 at 11:34 PM, Jose Torres Diaz <
>> torresdiaz.j...@gmail.com> wrote:
>>
>>> Hi John,
>>>
>>> I wrote the code in C++ based on UHD_AMsg_source.cc, provided in
>>> GRExtras. In my work function, I've finished it using return -1 (ie. the
>>> block has finished processing correctly) as shown below:
>>>
>>> int work(
>>>         const InputItems &,
>>>         const OutputItems &
>>>     ){
>>>       //work definition here (ie. generate a packet and post downstream)
>>>       return -1; //done running, work done status
>>>     }
>>>
>>> However, in that way the block in GNU Radio Companion runs only once.
>>> The other possibility is not to use "return" at all, but in that case what
>>> I have is:
>>>
>>> 1. BLOCK 1 generates a packet
>>> 2. BLOCK 1 post the packet downstream
>>>
>>> Step 1 and 2 repeats "N times". When finishes, it gives the control to
>>> BLOCK 2 to process the message. However, I need a sequence as follows:
>>>
>>> 1. BLOCK 1 generates a packet
>>> 2. BLOCK 1 post the packet downstream
>>> 3. BLOCK 2 process the packet
>>> 4. BLOCK 2 post the message again downstream and so on...
>>>
>>> Step 1 to 4 should repeat "N times".
>>>
>>> Thanks again for your help,
>>>
>>> Jose
>>>
>>>
>>> On Wed, Oct 17, 2012 at 4:52 PM, John Malsbury 
>>> <john.malsb...@ettus.com>wrote:
>>>
>>>> Jose,
>>>>
>>>> Try a while(1) with a block and  a blocking call to pop msg's off the
>>>> queue:
>>>>
>>>> self.pop_msg_queue()
>>>>
>>>> Should help you avoid the return -1
>>>>
>>>> Or maybe I've misunderstood your problem...?
>>>>
>>>> -John
>>>>
>>>>
>>>>
>>>> On Tue, Oct 16, 2012 at 11:18 PM, Jose Torres Diaz <
>>>> torresdiaz.j...@gmail.com> wrote:
>>>>
>>>>> Hi All,
>>>>>
>>>>> I'm working with 2 blocks that I've created using "UHD_AMsg_Source" as
>>>>> a reference model. In these blocks, I am passing pmt_dict type as 
>>>>> messages,
>>>>> ie:
>>>>>
>>>>>  this->post_msg(0, AMSG_KEY, dictionary,_id);
>>>>>
>>>>> Where, dictionary contains data/metadata that I can read in the next
>>>>> block downstream.
>>>>>
>>>>> BLOCK 1  -- (pmt_dict included in the message) -->  BLOCK 2
>>>>>
>>>>> The blocks are working ok, but the problem is that when I want to
>>>>> generate several packets and post them downstream, BLOCK 1 runs until
>>>>> finishes and then BLOCK 2 takes the control until finishes. The problem is
>>>>> the "return" sentence in my work function. I did 2 possible ways
>>>>>
>>>>> Option 1: Using -1
>>>>>
>>>>> work {
>>>>> //work here
>>>>> return -1
>>>>> }
>>>>>
>>>>> In this way BLOCK 1 stops working after one iteration and it does not
>>>>> run as many times as I want.
>>>>>
>>>>> Option 1: Not using return
>>>>>
>>>>> work {
>>>>> //work here
>>>>> }
>>>>>
>>>>> In this way BLOCK 1 runs many times and posts messages downstream all
>>>>> those times, but it gives the control to BLOCK 2 when it finishes. Then,
>>>>> BLOCK 2 takes the messages from the message queue. However, this
>>>>> implementation is not useful for me. BLOCK 1 should post a message
>>>>> downstream and then, BLOCK 2 takes the message and work with the packet.
>>>>>
>>>>> Any suggestion is welcome, thanks a lot for your time,
>>>>>
>>>>> Regards,
>>>>>
>>>>> Jose
>>>>>
>>>>> _______________________________________________
>>>>> Discuss-gnuradio mailing list
>>>>> Discuss-gnuradio@gnu.org
>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>
>
>
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to