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