예제 #1
0
    def test_000(self):
        # Just run some data through and make sure it doesn't puke.
        src_data = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

        src = blocks.pdu_to_tagged_stream(blocks.byte_t)
        snk3 = blocks.tagged_stream_to_pdu(blocks.byte_t)
        snk2 = gr.vector_sink_b()
        snk = gr.tag_debug(1, "test")
        snk.set_display(False)

        dbg = gr.message_debug()

        # Test that the right number of ports exist.
        pi = snk3.message_ports_in()
        po = snk3.message_ports_out()
        self.assertEqual(pmt.pmt_length(pi), 0)
        self.assertEqual(pmt.pmt_length(po), 1)

        time.sleep(0.1)
        self.tb.connect(src, snk)
        self.tb.connect(src, snk2)
        self.tb.connect(src, snk3)
        self.tb.msg_connect(snk3, "pdus", dbg, "store")
        self.tb.start()

        # make our reference and message pmts
        port = pmt.pmt_intern("pdus")
        msg = pmt.pmt_cons(pmt.PMT_NIL, pmt.pmt_make_u8vector(16, 0xFF))

        # post the message
        src.to_basic_block()._post(port, msg)  # eww, what's that smell?

        while dbg.num_messages() < 1:
            time.sleep(0.5)
        self.tb.stop()
        self.tb.wait()

        # Get the vector of data from the vector sink
        result_data = snk2.data()

        # Get the vector of data from the message sink
        # Convert the message PMT as a pair into its vector
        result_msg = dbg.get_message(0)
        msg_vec = pmt.pmt_cdr(result_msg)
        #pmt.pmt_print(msg_vec)

        # Convert the PMT vector into a Python list
        msg_data = []
        for i in xrange(16):
            msg_data.append(pmt.pmt_u8vector_ref(msg_vec, i))

        actual_data = 16 * [
            0xFF,
        ]
        self.assertEqual(actual_data, list(result_data))
        self.assertEqual(actual_data, msg_data)
예제 #2
0
    def test_000(self):
        # Just run some data through and make sure it doesn't puke.
        src_data = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

        src = blocks.pdu_to_tagged_stream(blocks.byte_t)
        snk3 = blocks.tagged_stream_to_pdu(blocks.byte_t)
        snk2 = gr.vector_sink_b()
        snk = gr.tag_debug(1, "test")
        snk.set_display(False)

        dbg = gr.message_debug()

        # Test that the right number of ports exist.
        pi = snk3.message_ports_in()
        po = snk3.message_ports_out()
        self.assertEqual(pmt.pmt_length(pi), 0)
        self.assertEqual(pmt.pmt_length(po), 1)

        time.sleep(0.1)
        self.tb.connect(src, snk)
        self.tb.connect(src, snk2)
        self.tb.connect(src, snk3)
        self.tb.msg_connect(snk3, "pdus", dbg, "store")
        self.tb.start()

        # make our reference and message pmts
        port = pmt.pmt_intern("pdus")
        msg = pmt.pmt_cons( pmt.PMT_NIL, pmt.pmt_make_u8vector(16, 0xFF))

        # post the message
        src.to_basic_block()._post(port, msg) # eww, what's that smell?

        while dbg.num_messages() < 1:
            time.sleep(0.5)
        self.tb.stop()
        self.tb.wait()

        # Get the vector of data from the vector sink
        result_data = snk2.data()

        # Get the vector of data from the message sink
        # Convert the message PMT as a pair into its vector
        result_msg = dbg.get_message(0)
        msg_vec = pmt.pmt_cdr(result_msg)
        #pmt.pmt_print(msg_vec)

        # Convert the PMT vector into a Python list
        msg_data = []
        for i in xrange(16):
            msg_data.append(pmt.pmt_u8vector_ref(msg_vec, i))

        actual_data = 16*[0xFF,]
        self.assertEqual(actual_data, list(result_data))
        self.assertEqual(actual_data, msg_data)
예제 #3
0
def pmt_to_dict(p):
    d = dict()
    items = pmt.pmt_dict_items(p)
    for i in range(pmt.pmt_length(items)):
        pair = pmt.pmt_nth(i, items)
        k = pmt.pmt_car(pair)
        v = pmt.pmt_cdr(pair)
        d[pmt_to_python(k)] = pmt_to_python(v)
    return d
예제 #4
0
def pmt_to_dict(p):
    d = dict()
    items = pmt.pmt_dict_items(p)
    for i in range(pmt.pmt_length(items)):
        pair = pmt.pmt_nth(i, items)
        k = pmt.pmt_car(pair)
        v = pmt.pmt_cdr(pair)
        d[pmt_to_python(k)] = pmt_to_python(v)
    return d
예제 #5
0
def parse_extra_dict(p, info, VERBOSE=False):
    if(pmt.pmt_is_dict(p) is False):
        sys.stderr.write("Extra header is not a PMT dictionary: invalid or corrupt data file.\n")
        sys.exit(1)

    items = pmt.pmt_dict_items(p)
    nitems = pmt.pmt_length(items)
    for i in xrange(nitems):
        item = pmt.pmt_nth(i, items)
        key = pmt.pmt_symbol_to_string(pmt.pmt_car(item))
        val = pmt.pmt_cdr(item)
        info[key] = val
        if(VERBOSE):
            print "{0}: ".format(key)
            pmt.pmt_print(val)

    return info
예제 #6
0
    def test_001_t (self):
        """ Simplest possible test: put in zeros, then header,
        then payload, trigger signal, try to demux.
        The return signal from the header parser is faked via _post()
        """
        n_zeros = 100
        header = (1, 2, 3)
        payload = tuple(range(17))
        data_signal = (0,) * n_zeros + header + payload
        trigger_signal = [0,] * len(data_signal)
        trigger_signal[n_zeros] = 1

        data_src = gr.vector_source_f(data_signal, False)
        trigger_src = gr.vector_source_b(trigger_signal, False)
        hpd = digital.header_payload_demux(
            len(header), 1, 0, "frame_len", "detect", False, gr.sizeof_float
        )
        self.assertEqual(pmt.pmt_length(hpd.message_ports_in()), 1)
        header_sink = gr.vector_sink_f()
        payload_sink = gr.vector_sink_f()

        self.tb.connect(data_src,    (hpd, 0))
        self.tb.connect(trigger_src, (hpd, 1))
        self.tb.connect((hpd, 0), header_sink)
        self.tb.connect((hpd, 1), payload_sink)
        self.tb.start()
        time.sleep(.2) # Need this, otherwise, the next message is ignored
        hpd.to_basic_block()._post(
                pmt.pmt_intern('header_data'),
                pmt.pmt_from_long(len(payload))
        )
        while len(payload_sink.data()) < len(payload):
            time.sleep(.2)
        self.tb.stop()
        self.tb.wait()

        self.assertEqual(header_sink.data(),  header)
        self.assertEqual(payload_sink.data(), payload)
예제 #7
0
def pmt_to_vector(p):
    v = list()
    for i in range(pmt.pmt_length(p)):
        elem = pmt.pmt_vector_ref(p, i)
        v.append(pmt_to_python(elem))
    return v
예제 #8
0
def pmt_to_tuple(p):
    elems = list()
    for i in range(pmt.pmt_length(p)):
        elem = pmt.pmt_tuple_ref(p, i)
        elems.append(pmt_to_python(elem))
    return tuple(elems)
예제 #9
0
def pmt_to_vector(p):
    v = list()
    for i in range(pmt.pmt_length(p)):
        elem = pmt.pmt_vector_ref(p, i)
        v.append(pmt_to_python(elem))
    return v
예제 #10
0
def pmt_to_tuple(p):
    elems = list()
    for i in range(pmt.pmt_length(p)):
        elem = pmt.pmt_tuple_ref(p, i)
        elems.append(pmt_to_python(elem))
    return tuple(elems)