commit-gnuradio
[Top][All Lists]
Advanced

[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()
 {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]