I have a trouble with new types in python!

Hello everybody,
I have a new type in my gnuradio blocks which are defined in c++.
However,
the GRC don’t know them.
*The first question is how I could make GRC of such blocks? *

I think if I could be able to define them in python I could add new
types
to the GRC of the block.
Although I’m not so familiar with python, I want to define new type as
it
was previously defined in c++ as :

*typedef unsigned char bit; *

*how could I define such variable in python!!!? *(may it helps me to
make
my GRC block)

Thank,

Hi Marcus,
Thank you very much for your explicit explanations. Yeah, I found it so
hard to do what I thought. As you said I determined the type as “byte”
and
there is no problem. But there is another problem! I have defined
something
like this in c++:

#define X 0x01864CFB

and I should pass X, instead of this 0x01864CFB which is 32 bits number
to
my “make” function of my block.

What do you prefer for making a GRC xml file for this block?

best,

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Mostafa,

On 07.05.2014 16:34, Mostafa A. wrote:

#define X 0x01864CFB

Attention! This is a preprocessing define. This means that /prior/ to
compilation, all occurences of X will be replaced by 0x01…, so your
compiler will never see X.

Is it possible that you want to define a default option for your make
function? That works! you can just have a make function with a
function stub like
…::make(int param1, float param2, unsigned char param3, int param4 =
0x0186);

Again, XML files are only useful for defining the graphical
representation of a GNU Radio block in GRC, it’s not meant to define
constants. There are ways to do that, but most of the time it’s not
what you want.
You can set default values for input fields in the block options, you
can also do dropdown menus. I don’t know what you’re really trying to
do, so you might be best of to look at different blocks in GRC and
find one that fits your problem best, and copy that block’s XML.

Greetings,
Marcus

[email protected]wrote:

SWIG will generate wrapper code to make these classes (which are
neither python, nor GNU Radio care about the type; they just care

Hello everybody, I have a new type in my gnuradio blocks which
*how could I define such variable in python!!!? *(may it helps

_______________________________________________ Discuss-gnuradio
mailing list [email protected]
Discuss-gnuradio Info Page

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJTalFKAAoJEBQ6EdjyzlHtRHwIAJnlorrctCzyARolZl4gc6mJ
7gTeGZc43oGj/1Ise3I7lqcY7lmBMkErGDLiKWsyWYOW0HTSHobDQr9xOY/UK5j+
HtaFAec2WeX9spTLNUBg87ZLTJlWBjoEvl6nT9xvbJSXDvoIBzF1cQ7EY1TkVU5V
zLWRxwMA1G6LeP9JGCuxlA1t92hP7gLR+UOoff1EmWx2HbwF4Jin8frn6irrzqpi
SCQ3X5VoMT2/vX10lFgbumEUhijTr5q9m3JvMIA2n7CBdq5SrLEpqjgZIHUPUxOs
nAN9h6UZ8mSfAvxjik8X1frDpp0rJxl2iZH+r69OILBAt+nQQJzb88LHyRh7UyQ=
=bJMO
-----END PGP SIGNATURE-----

Hello
Thank you so much.I have already read all the wiki somedays
before.But i find it’s difficult to write my own application.Have you
some tutorials?And how do you be familiar with this area?Any advices
will be appreciated.So many people want to learn it but no good ways to
touch it.
Best regards,
Xianda Wang

Hi Marcus,
I actually have a deep, really deep, problem with data types!!! As you
see I have a preprocessor definition which is 32 bit number. I wanna
pass
it to the make!!! how could I? If I use the gnuradio type " gr_uint32",
after turning my c+±written blocks, the GRC tells me:

TypeError: in method ‘xxxx_make’, argument 1 of type ‘gr_uint32’

I put an option to the xml file :

  •    <name>CRC16</name>*
    
  •    <key>gr_uint32</key>*
    
  •    <opt>CRC_type:0x00011021</opt>*
    

I know that this is not true, but I want to pass a 32-bit number to the
“make”. How could I do?

please help me,

best,

Hi Activecat,
On 08.05.2014 14:14, Activecat wrote:

Anyone correct me if I am wrong.

In xml file we use the Python data types.
well, kind of. The XML is just being parsed by GRC to validate the input
of a field, color things etc.
However, there are only mappings in grc/python/Param.py for the
correctly wrappable python types.
You won’t be able to have a let’s say some Python class as param type in
GRC.

Greetings,
Marcus

On Thu, May 8, 2014 at 12:53 AM, Mostafa A.
[email protected]wrote:

  •    <name>CRC16</name>*
    
  •    <key>gr_uint32</key>*
    
  •    <opt>CRC_type:0x00011021</opt>*
    

I know that this is not true, but I want to pass a 32-bit number to the
“make”. How could I do?

Anyone correct me if I am wrong.

In xml file we use the Python data types.
In usual case Python doesn’t distinguish among “unsigned” or “signed”
integer, this is different from c++.
The casting will be intelligently handled by swig.

Hence, for your case, just pass “gr_uint32” to the make() assuming your
block is coded in c++. Then use “int” in the xml file.
This
solves your problem.

Meanwhile, C preprocessor does not know types or C keywords.

On Thu, May 8, 2014 at 9:33 PM, Tom R. [email protected] wrote:

correctly wrappable python types.
builds for you, including a list of all possible data types.

Tom

That is very clear.
Thank you very much.

On Thu, May 8, 2014 at 8:48 AM, Marcus Müller
[email protected]wrote:

GRC.

Greetings,
Marcus

Yes, GRC isn’t a complete language and doesn’t implement things like it
is.
There are only a subset of possible data types. Using “gr_modtool add”
to
create a new block nicely gives you a lot of hints in the XML file it
builds for you, including a list of all possible data types.

Tom

On Thu, May 8, 2014 at 8:24 PM, Mostafa A.
[email protected]wrote:

Activecat your right,
I finally got what you said. Types in Python are so different than that of
c++.
For example, Python doesn’t care the data is int or usigned int !

Pls stay on the list so that others know your problem has been solved.