[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r4951 - gnuradio/branches/developers/eb/ibu/mblock/src
From: |
eb |
Subject: |
[Commit-gnuradio] r4951 - gnuradio/branches/developers/eb/ibu/mblock/src/lib |
Date: |
Wed, 11 Apr 2007 14:49:42 -0600 (MDT) |
Author: eb
Date: 2007-04-11 14:49:42 -0600 (Wed, 11 Apr 2007)
New Revision: 4951
Modified:
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_mblock.cc
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_port_simple.cc
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_worker.cc
gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc
Log:
work-in-progress on mblocks. More QA code is working
Modified: gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_mblock.cc
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_mblock.cc
2007-04-11 19:34:22 UTC (rev 4950)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_mblock.cc
2007-04-11 20:49:42 UTC (rev 4951)
@@ -84,9 +84,14 @@
}
}
catch (pmt_exception e){
- std::cerr << std::endl << instance_name()
- << "::main_loop: ignoring pmt_exception: "
- << e.what() << std::endl;
+ std::cerr << "\nmb_mblock::main_loop: ignored pmt_exception: "
+ << e.what()
+ << "\nin mblock instance \"" << instance_name()
+ << "\" while handling message:"
+ << "\n port_id = " << msg->port_id()
+ << "\n signal = " << msg->signal()
+ << "\n data = " << msg->data()
+ << "\n metatdata = " << msg->metadata() << std::endl;
}
}
}
Modified: gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_port_simple.cc
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_port_simple.cc
2007-04-11 19:34:22 UTC (rev 4950)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_port_simple.cc
2007-04-11 20:49:42 UTC (rev 4951)
@@ -78,6 +78,8 @@
case mb_port::EXTERNAL: // binding is in parent's name space
context = p->mblock()->parent();
+ if (!context) // can't be bound if there's no parent
+ return mb_msg_accepter_sptr(); // not bound
break;
default:
Modified:
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
===================================================================
---
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
2007-04-11 19:34:22 UTC (rev 4950)
+++
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
2007-04-11 20:49:42 UTC (rev 4951)
@@ -58,8 +58,9 @@
{
// FIXME iterate over workers and ensure that they are dead.
- std::cerr << "\nmb_runtime_thread_per_block: dtor (# workers = "
- << d_workers.size() << ")\n";
+ if (!d_workers.empty())
+ std::cerr << "\nmb_runtime_thread_per_block: dtor (# workers = "
+ << d_workers.size() << ")\n";
}
void
@@ -151,8 +152,9 @@
}
if (is_dead){
- std::cerr << "\nruntime: "
- << (*wi)->d_mblock->instance_name() << " is TS_DEAD\n";
+ if (0)
+ std::cerr << "\nruntime: "
+ << (*wi)->d_mblock->instance_name() << " is TS_DEAD\n";
void *ignore;
(*wi)->join(&ignore);
wi = d_workers.erase(wi);
Modified: gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_worker.cc
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_worker.cc
2007-04-11 19:34:22 UTC (rev 4950)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_worker.cc
2007-04-11 20:49:42 UTC (rev 4951)
@@ -90,6 +90,13 @@
catch (mbe_exit){
d_why_dead = RIP_EXIT;
}
+ catch (std::logic_error e){
+ if (d_why_dead == RIP_NOT_DEAD_YET)
+ d_why_dead = RIP_UNHANDLED_EXCEPTION;
+
+ std::cerr << "\nmb_worker::run_undetached: unhandled exception:\n";
+ std::cerr << " " << e.what() << std::endl;
+ }
catch (...){
if (d_why_dead == RIP_NOT_DEAD_YET)
d_why_dead = RIP_UNHANDLED_EXCEPTION;
Modified: gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc
2007-04-11 19:34:22 UTC (rev 4950)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc
2007-04-11 20:49:42 UTC (rev 4951)
@@ -38,6 +38,7 @@
#include <mb_class_registry.h>
#include <stdio.h>
#include <string.h>
+#include <iostream>
static pmt_t s_data = pmt_intern("data");
@@ -66,7 +67,7 @@
class sys_1 : public mb_mblock
{
pmt_t d_user_arg;
- mb_port_sptr p_data;
+ mb_port_sptr d_data;
public:
sys_1(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
@@ -78,7 +79,7 @@
: mb_mblock(runtime, instance_name, user_arg),
d_user_arg(user_arg)
{
- p_data = define_port("data", "data", true, mb_port::EXTERNAL);
+ d_data = define_port("data", "data", true, mb_port::EXTERNAL);
}
sys_1::~sys_1(){}
@@ -123,12 +124,115 @@
CPPUNIT_ASSERT(pmt_equal(n2, result));
}
+// ================================================================
+// test_sys_2
+// ================================================================
+class squarer : public mb_mblock
+{
+ mb_port_sptr d_data;
+
+public:
+ squarer(mb_runtime *runtime, const std::string &instance_name, pmt_t
user_arg);
+
+ void handle_message(mb_message_sptr msg);
+};
+
+squarer::squarer(mb_runtime *runtime, const std::string &instance_name, pmt_t
user_arg)
+ : mb_mblock(runtime, instance_name, user_arg)
+{
+ d_data = define_port("data", "data", true, mb_port::EXTERNAL);
+}
+
void
+squarer::handle_message(mb_message_sptr msg)
+{
+ if (!pmt_eq(msg->signal(), s_data)) // we only handle the "data" message
+ return;
+
+ // long x -> (long x . long (x * x))
+
+ pmt_t x_pmt = msg->data();
+ long x = pmt_to_long(x_pmt);
+ d_data->send(s_data, pmt_cons(x_pmt, pmt_from_long(x * x)));
+}
+
+REGISTER_MBLOCK_CLASS(squarer);
+
+// ----------------------------------------------------------------
+
+class sys_2 : public mb_mblock
+{
+ mb_port_sptr d_data;
+
+public:
+ sys_2(mb_runtime *runtime, const std::string &instance_name, pmt_t user_arg);
+ void initial_transition();
+ void handle_message(mb_message_sptr msg);
+};
+
+sys_2::sys_2(mb_runtime *runtime, const std::string &instance_name, pmt_t
user_arg)
+ : mb_mblock(runtime, instance_name, user_arg)
+{
+ d_data = define_port("data", "data", true, mb_port::INTERNAL);
+ define_component("squarer", "squarer");
+ connect("self", "data", "squarer", "data");
+}
+
+void
+sys_2::initial_transition()
+{
+ // FIXME start timer to detect general failure
+
+ d_data->send(s_data, pmt_from_long(0)); // send initial message
+}
+
+void
+sys_2::handle_message(mb_message_sptr msg)
+{
+ if (!pmt_eq(msg->signal(), s_data)) // we only handle the "data" message
+ return;
+
+ // first check correctness of message
+
+ long x = pmt_to_long(pmt_car(msg->data()));
+ long y = pmt_to_long(pmt_cdr(msg->data()));
+
+ // std::cout << msg->data() << std::endl;
+
+ if (y != x * x){
+ std::cerr << "sys_2::handle_message: Expected y == x * x. Got y = "
+ << y << " for x = " << x << std::endl;
+
+ shutdown_all(PMT_F); // failed
+ }
+
+ if (x == 100)
+ shutdown_all(PMT_T); // done, OK
+ else
+ d_data->send(s_data, pmt_from_long(x + 1)); // send next request
+}
+
+REGISTER_MBLOCK_CLASS(sys_2);
+
+// ----------------------------------------------------------------
+
+void
qa_mblock_sys::test_sys_2()
{
+ mb_runtime_sptr rt = mb_make_runtime();
+ pmt_t result = PMT_NIL;
+
+ // std::cerr << "qa_mblock_sys::test_sys_2 (enter)\n";
+
+ rt->run("top-sys-2", "sys_2", PMT_F, &result);
+ CPPUNIT_ASSERT(pmt_equal(PMT_T, result));
}
+// ================================================================
+// test_sys_3
+// ================================================================
+
void
qa_mblock_sys::test_sys_3()
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4951 - gnuradio/branches/developers/eb/ibu/mblock/src/lib,
eb <=