Strange operation when char at input

Hi all guys,

I wouldn’t bother again but I have spent a lot of time trying to figure
out
what’s going on.

Nameli I want to design block with char type at input and char type at
the
output.
After finished with the design I realized strange block operation. Input
samples were always zero. Then I tried with this:

int

    out[i] = in1[i]+in2[i];
// Tell runtime system how many output items we produced.
return noutput_items;

}

After quite some time I designed similar block with float ports and it
worked. Then I changed upper block to have short type at input and
output
and it worked just fine.
And yes, in test everything works just fine, but in grc not, It always
spits 0 at the output.
Is there any possible complications with endianess or I don’t know.

Best,

I worked on an “interleaved char to complex” block some time ago. It was
not working right until I changed it to specify ‘signed’ char instead of
letting the compiler default happen (which could be either way). - Tim

From: discuss-gnuradio-bounces+tmonahan=removed_email_address@domain.invalid
[mailto:discuss-gnuradio-bounces+tmonahan=removed_email_address@domain.invalid] On
Behalf Of Nemanja S.
Sent: Wednesday, May 29, 2013 4:55 PM
To: [email protected]
Subject: [Discuss-gnuradio] strange operation when char at input

Hi all guys,
I wouldn’t bother again but I have spent a lot of time trying to figure
out what’s going on.
Nameli I want to design block with char type at input and char type at
the output.
After finished with the design I realized strange block operation. Input
samples were always zero. Then I tried with this:
int
test_proba_sync_bb::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const char *in1 = (const char *) input_items[0];
char *out = (char *) output_items[0];
const char *in2 = (const char *) input_items[1];

// Do <+signal processing+>
for(int i=0;i<noutput_items;i++)
    out[i] = in1[i]+in2[i];
// Tell runtime system how many output items we produced.
return noutput_items;

}

After quite some time I designed similar block with float ports and it
worked. Then I changed upper block to have short type at input and
output and it worked just fine.
And yes, in test everything works just fine, but in grc not, It always
spits 0 at the output.
Is there any possible complications with endianess or I don’t know.

Best,

Hm, could be, I will see later, but I see now that for example
digital_correlate block has unsigned.

Thank you Tim.

Nemanja

On Thu, May 30, 2013 at 12:59 AM, Monahan-Mitchell, Tim <

On Wed, May 29, 2013 at 7:24 PM, Nemanja S. [email protected]
wrote:

Hm, could be, I will see later, but I see now that for example
digital_correlate block has unsigned.

Thank you Tim.

Nemanja

Yes. Unlike most data types, there’s a strong signed/unsigned property
to chars between Python and C++. A char vector is assumed unsigned.
Looks like you have to force it to be signed.

Tom