[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] Trouble with block output
From: |
Eric Blossom |
Subject: |
Re: [Discuss-gnuradio] Trouble with block output |
Date: |
Sun, 25 Jul 2010 15:40:40 -0700 |
User-agent: |
Mutt/1.5.20 (2009-08-17) |
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
> address@hidden
> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>