On Sun, Jul 25, 2010 at 12:13:38PM -0700, Thunder87 wrote: > > This block should take a bit from chunk, and produce an output (d_phase) > which would hold until next chunk comes in. Right now it does take chunk, > extract this bit, produce correct phase, but next moment block output drops > to 0+0j. > > It gives me feeling that block is producing output all the time, while > making decision only when input chunk is present. And when there is no input > chunk no output decision is being made, and output is being set by default > 0+0j. > > Could this be? Is there any block that uses same method (holding output > until next input), so I could learn from it's source? >
(1) You should probably derive from gr_sync_block, instead of gr_block. (2) general_work is missing it's for loop, and is writing only a single output sample, but saying it produced noutput_items. Eric > > howto_diffconst_bc.h > > #ifndef INCLUDED_HOWTO_DIFFCONST_BC_H > #define INCLUDED_HOWTO_DIFFCONST_BC_H > > #include <gr_block.h> > #include <iostream> > using namespace std; > > > class howto_diffconst_bc; > > typedef boost::shared_ptr<howto_diffconst_bc> howto_diffconst_bc_sptr; > > howto_diffconst_bc_sptr howto_make_diffconst_bc (); > > class howto_diffconst_bc : public gr_block > { > private: > friend howto_diffconst_bc_sptr howto_make_diffconst_bc (); > howto_diffconst_bc (); > int d_phase; > public: > ~howto_diffconst_bc (); > int general_work (int noutput_items, gr_vector_int &ninput_items, > gr_vector_const_void_star &input_items, > gr_vector_void_star &output_items); > }; > > #endif > > howto_diffconst_bc.cc > > #ifdef HAVE_CONFIG_H > #include "config.h" > #endif > > #include <howto_diffconst_bc.h> > #include <gr_io_signature.h> > #include <iostream> > using namespace std; > > > howto_diffconst_bc_sptr howto_make_diffconst_bc () > {return howto_diffconst_bc_sptr (new howto_diffconst_bc ());} > > howto_diffconst_bc::howto_diffconst_bc (): gr_block ("diffconst_bc", > gr_make_io_signature (1, 1, > sizeof (unsigned char)), > gr_make_io_signature (1, 1, > sizeof (gr_complex))){d_phase=0;} > > howto_diffconst_bc::~howto_diffconst_bc () {} > > > int howto_diffconst_bc::general_work (int noutput_items, gr_vector_int > &ninput_items, > gr_vector_const_void_star > &input_items, > gr_vector_void_star &output_items) > > { > const unsigned char *in = (const unsigned char *) input_items [0]; > gr_complex *out = (gr_complex *) output_items[0]; > > if ((int)(in[0])%2==1) {d_phase++; if (d_phase>3) d_phase=0;} > else {d_phase--; if (d_phase<0) d_phase=3;} > > if (d_phase==0) {out[0]=gr_complex( 1.0, 0.0);} > else if (d_phase==1) {out[0]=gr_complex( 0.0, 1.0);} > else if (d_phase==2) {out[0]=gr_complex(-1.0, 0.0);} > else if (d_phase==3) {out[0]=gr_complex( 0.0,-1.0);} > > consume_each (noutput_items); > return noutput_items; > } > > -- > View this message in context: > http://old.nabble.com/Trouble-with-block-output-tp29261420p29261420.html > Sent from the GnuRadio mailing list archive at Nabble.com. > > > _______________________________________________ > Discuss-gnuradio mailing list > Discuss-gnuradio@gnu.org > http://lists.gnu.org/mailman/listinfo/discuss-gnuradio > _______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org http://lists.gnu.org/mailman/listinfo/discuss-gnuradio