Hey Barry,

PDUs are a specific type of PMT object, PDUs are defined to be a PMT pair of a 
PMT dictionary and PMT uniform vector.

> pmt.cons(pmt.PMT_NIL,pmt.to_pmt(buff)))

The above object generates a PMT pair type object of an empty dictionary 
(PMT_NIL) and what is hopefully a uniform vector. Using to_pmt() can PMT-ify 
any type of object and doing so from a weakly typed language is a little risky, 
I'd use pmt.init_u8vector() or the expected type instead of to_pmt() but the 
idea is the same.

The PMT_NIL, the uniform vector, and the pair are all individually PMT type 
objects themselves.

Is there a particular type of PMT object you are trying to turn the PDUs into?

Jacob

------- Original Message -------
On Thursday, July 6th, 2023 at 8:55 AM, Barry Duggan <ba...@dcsmail.net> wrote:

> Jeff,
>
> Thank you for your corrections. However, based on my debug information, a PMT 
> message as output from a Message_Strobe is:
> PST_SYMBOL = 0x02
> UVI_U8 = 0x00
> length of symbols
> symbol vector
> whereas a PDU has a form:
> PST_PAIR
> PST_NULL
> PST_UNIFORM_VECTOR
> etc.
> Using the string "GNU Radio", a PMT generates:
> 2 0 9 71 78 85 32 82 97 100 105 111
> and a PDU generates:
> 7 6 10 0 0 0 0 9 1 0 71 78 85 32 82 97 100 105 111
> So the construct of `pmt.cons(pmt.PMT_NIL,pmt.to_pmt(buff)))` seems to 
> generate a PDU. What is the construct for a PMT?
>
> Thanks!
> ---
> Barry Duggan
>
> ---- On Thu, 06 Jul 2023 08:03:26 -0500 Jeff Long <willco...@gmail.com> wrote 
> ---
>
>> b_len is defined in the try block, and is out of scope by the time it is 
>> checked below.
>>
>> This code should work. The routine returns in the except clause and b_len is 
>> set after the try/except.
>>
>> import numpy as np
>> from gnuradio import gr
>> import pmt
>> import array
>>
>> class blk(gr.sync_block):
>> def __init__(self):
>> gr.sync_block.__init__(
>> self,
>> name='EPB: Packet to PMT', # will show up in GRC
>> in_sig=None,
>> out_sig=None)
>> self.message_port_register_in(pmt.intern('msg_in'))
>> self.message_port_register_out(pmt.intern('msg_out'))
>> self.set_msg_handler(pmt.intern('msg_in'), self.handle_msg)
>>
>> def handle_msg(self, msg):
>> _debug = 0 # set to zero to turn off diagnostics
>> try:
>> buff = pmt.to_python(pmt.cdr(msg))
>> except Exception as e:
>> gr.log.error("Error with message conversion: %s" % str(e))
>> return
>>
>> b_len = len (buff)
>> if (_debug):
>> print ("new_val =", buff, b_len)
>> if (b_len != 52):
>> self.message_port_pub (pmt.intern('msg_out'), 
>> pmt.cons(pmt.PMT_NIL,pmt.to_pmt(buff)))
>> elif ((buff[0] != 37) and (buff[51] != 93)):
>> self.message_port_pub (pmt.intern('msg_out'), 
>> pmt.cons(pmt.PMT_NIL,pmt.to_pmt(buff)))
>>
>> On Wed, Jul 5, 2023 at 6:11 PM Barry Duggan <ba...@dcsmail.net> wrote:
>>
>>> I would like to receive a PDU message containing a string using an Embedded 
>>> Python Block and, after discarding certain messages, send a PMT message 
>>> with that string to the output message port. My efforts so far have not 
>>> produced a valid PMT format. My current code is:
>>> ```
>>> import numpy as np
>>>
>>> from gnuradio import gr
>>>
>>> import pmt
>>>
>>> import array
>>>
>>> class blk(gr.sync_block):
>>>
>>> def __init__(self):
>>>
>>> gr.sync_block.__init__(
>>>
>>> self,
>>>
>>> name='EPB: Packet to PMT', # will show up in GRC
>>>
>>> in_sig=None,
>>>
>>> out_sig=None)
>>>
>>> self.message_port_register_in(pmt.intern('msg_in'))
>>>
>>> self.message_port_register_out(pmt.intern('msg_out'))
>>>
>>> self.set_msg_handler(pmt.intern('msg_in'), self.handle_msg)
>>>
>>> def handle_msg(self, msg):
>>>
>>> _debug = 0 # set to zero to turn off diagnostics
>>>
>>> try:
>>>
>>> buff = pmt.to_python(pmt.cdr(msg))
>>>
>>> b_len = len (buff)
>>>
>>> except Exception as e:
>>>
>>> gr.log.error("Error with message conversion: %s" % str(e))
>>>
>>> if (_debug):
>>>
>>> print ("new_val =", buff, b_len)
>>>
>>> if (b_len != 52):
>>>
>>> self.message_port_pub (pmt.intern('msg_out'), 
>>> pmt.cons(pmt.PMT_NIL,pmt.to_pmt(buff)))
>>>
>>> elif ((buff[0] != 37) and (buff[51] != 93)):
>>>
>>> self.message_port_pub (pmt.intern('msg_out'), 
>>> pmt.cons(pmt.PMT_NIL,pmt.to_pmt(buff)))
>>>
>>> ```
>>>
>>> Any help will be appreciated!
>>>
>>> ---
>>> Barry Duggan

Reply via email to