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