summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim O'Shea <tim.oshea753@gmail.com>2013-10-03 13:22:16 -0400
committerJohnathan Corgan <johnathan@corganlabs.com>2013-10-12 09:08:53 -0700
commite83d63263e95471f0fb48cdfbbc794b564e72703 (patch)
tree0e505b0546dba7e1fec80590e7c675d0a8dcdb23
parent7611baf87c925f6b9e10586caa1eedc8f5b45165 (diff)
runtime: expose message_subscribers() interface to python blocks
-rw-r--r--gnuradio-runtime/include/gnuradio/basic_block.h5
-rw-r--r--gnuradio-runtime/include/gnuradio/block_gateway.h4
-rw-r--r--gnuradio-runtime/include/gnuradio/hier_block2.h2
-rw-r--r--gnuradio-runtime/lib/basic_block.cc33
-rw-r--r--gnuradio-runtime/swig/basic_block.i1
5 files changed, 29 insertions, 16 deletions
diff --git a/gnuradio-runtime/include/gnuradio/basic_block.h b/gnuradio-runtime/include/gnuradio/basic_block.h
index 4a2d550fb3..726c63a1b1 100644
--- a/gnuradio-runtime/include/gnuradio/basic_block.h
+++ b/gnuradio-runtime/include/gnuradio/basic_block.h
@@ -137,9 +137,10 @@ namespace gr {
}
// Message passing interface
- pmt::pmt_t message_subscribers;
+ pmt::pmt_t d_message_subscribers;
public:
+ pmt::pmt_t message_subscribers(pmt::pmt_t port);
virtual ~basic_block();
long unique_id() const { return d_unique_id; }
long symbolic_id() const { return d_symbolic_id; }
@@ -242,7 +243,7 @@ namespace gr {
if(msg_queue.find(which_port) != msg_queue.end()) {
return true;
}
- if(pmt::dict_has_key(message_subscribers, which_port)) {
+ if(pmt::dict_has_key(d_message_subscribers, which_port)) {
return true;
}
return false;
diff --git a/gnuradio-runtime/include/gnuradio/block_gateway.h b/gnuradio-runtime/include/gnuradio/block_gateway.h
index 09e372163d..61e50ec6ba 100644
--- a/gnuradio-runtime/include/gnuradio/block_gateway.h
+++ b/gnuradio-runtime/include/gnuradio/block_gateway.h
@@ -238,6 +238,10 @@ namespace gr {
void block__message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target) {
gr::basic_block::message_port_unsub(port_id, target);
}
+
+ pmt::pmt_t block__message_subscribers(pmt::pmt_t which_port) {
+ return gr::basic_block::message_subscribers(which_port);
+ }
pmt::pmt_t block__message_ports_in() {
return gr::basic_block::message_ports_in();
diff --git a/gnuradio-runtime/include/gnuradio/hier_block2.h b/gnuradio-runtime/include/gnuradio/hier_block2.h
index 0d7b138e4d..3f41930d16 100644
--- a/gnuradio-runtime/include/gnuradio/hier_block2.h
+++ b/gnuradio-runtime/include/gnuradio/hier_block2.h
@@ -206,7 +206,7 @@ namespace gr {
void message_port_register_hier_out(pmt::pmt_t port_id) {
if(pmt::list_has(hier_message_ports_out, port_id))
throw std::invalid_argument("hier msg out port by this name already registered");
- if(pmt::dict_has_key(message_subscribers, port_id))
+ if(pmt::dict_has_key(d_message_subscribers, port_id))
throw std::invalid_argument("block already has a primitive output port by this name");
hier_message_ports_out = pmt::list_add(hier_message_ports_out, port_id);
}
diff --git a/gnuradio-runtime/lib/basic_block.cc b/gnuradio-runtime/lib/basic_block.cc
index 8060c5355c..40edf09b01 100644
--- a/gnuradio-runtime/lib/basic_block.cc
+++ b/gnuradio-runtime/lib/basic_block.cc
@@ -52,7 +52,7 @@ namespace gr {
d_symbol_name(global_block_registry.register_symbolic_name(this)),
d_color(WHITE),
d_rpc_set(false),
- message_subscribers(pmt::make_dict())
+ d_message_subscribers(pmt::make_dict())
{
s_ncurrently_allocated++;
}
@@ -107,18 +107,18 @@ namespace gr {
if(!pmt::is_symbol(port_id)) {
throw std::runtime_error("message_port_register_out: bad port id");
}
- if(pmt::dict_has_key(message_subscribers, port_id)) {
+ if(pmt::dict_has_key(d_message_subscribers, port_id)) {
throw std::runtime_error("message_port_register_out: port already in use");
}
- message_subscribers = pmt::dict_add(message_subscribers, port_id, pmt::PMT_NIL);
+ d_message_subscribers = pmt::dict_add(d_message_subscribers, port_id, pmt::PMT_NIL);
}
pmt::pmt_t
basic_block::message_ports_out()
{
- size_t len = pmt::length(message_subscribers);
+ size_t len = pmt::length(d_message_subscribers);
pmt::pmt_t port_names = pmt::make_vector(len, pmt::PMT_NIL);
- pmt::pmt_t keys = pmt::dict_keys(message_subscribers);
+ pmt::pmt_t keys = pmt::dict_keys(d_message_subscribers);
for(size_t i = 0; i < len; i++) {
pmt::vector_set(port_names, i, pmt::nth(i, keys));
}
@@ -128,11 +128,11 @@ namespace gr {
// - publish a message on a message port
void basic_block::message_port_pub(pmt::pmt_t port_id, pmt::pmt_t msg)
{
- if(!pmt::dict_has_key(message_subscribers, port_id)) {
+ if(!pmt::dict_has_key(d_message_subscribers, port_id)) {
throw std::runtime_error("port does not exist");
}
- pmt::pmt_t currlist = pmt::dict_ref(message_subscribers, port_id, pmt::PMT_NIL);
+ pmt::pmt_t currlist = pmt::dict_ref(d_message_subscribers, port_id, pmt::PMT_NIL);
// iterate through subscribers on port
while(pmt::is_pair(currlist)) {
pmt::pmt_t target = pmt::car(currlist);
@@ -150,23 +150,23 @@ namespace gr {
// - subscribe to a message port
void
basic_block::message_port_sub(pmt::pmt_t port_id, pmt::pmt_t target){
- if(!pmt::dict_has_key(message_subscribers, port_id)){
+ if(!pmt::dict_has_key(d_message_subscribers, port_id)){
std::stringstream ss;
ss << "Port does not exist: \"" << pmt::write_string(port_id) << "\" on block: "
<< pmt::write_string(target) << std::endl;
throw std::runtime_error(ss.str());
}
- pmt::pmt_t currlist = pmt::dict_ref(message_subscribers,port_id,pmt::PMT_NIL);
+ pmt::pmt_t currlist = pmt::dict_ref(d_message_subscribers,port_id,pmt::PMT_NIL);
// ignore re-adds of the same target
if(!pmt::list_has(currlist, target))
- message_subscribers = pmt::dict_add(message_subscribers,port_id,pmt::list_add(currlist,target));
+ d_message_subscribers = pmt::dict_add(d_message_subscribers,port_id,pmt::list_add(currlist,target));
}
void
basic_block::message_port_unsub(pmt::pmt_t port_id, pmt::pmt_t target)
{
- if(!pmt::dict_has_key(message_subscribers, port_id)) {
+ if(!pmt::dict_has_key(d_message_subscribers, port_id)) {
std::stringstream ss;
ss << "Port does not exist: \"" << pmt::write_string(port_id) << "\" on block: "
<< pmt::write_string(target) << std::endl;
@@ -174,8 +174,8 @@ namespace gr {
}
// ignore unsubs of unknown targets
- pmt::pmt_t currlist = pmt::dict_ref(message_subscribers,port_id,pmt::PMT_NIL);
- message_subscribers = pmt::dict_add(message_subscribers,port_id,pmt::list_rm(currlist,target));
+ pmt::pmt_t currlist = pmt::dict_ref(d_message_subscribers,port_id,pmt::PMT_NIL);
+ d_message_subscribers = pmt::dict_add(d_message_subscribers,port_id,pmt::list_rm(currlist,target));
}
void
@@ -230,4 +230,11 @@ namespace gr {
return m;
}
+ pmt::pmt_t
+ basic_block::message_subscribers(pmt::pmt_t port)
+ {
+ return pmt::dict_ref(d_message_subscribers,port,pmt::PMT_NIL);
+ }
+
+
} /* namespace gr */
diff --git a/gnuradio-runtime/swig/basic_block.i b/gnuradio-runtime/swig/basic_block.i
index 6599ea4d7b..cf75479bb8 100644
--- a/gnuradio-runtime/swig/basic_block.i
+++ b/gnuradio-runtime/swig/basic_block.i
@@ -52,6 +52,7 @@ namespace gr {
void _post(pmt::pmt_t which_port, pmt::pmt_t msg);
pmt::pmt_t message_ports_in();
pmt::pmt_t message_ports_out();
+ pmt::pmt_t message_subscribers(pmt::pmt_t which_port);
};
%rename(block_ncurrently_allocated) basic_block_ncurrently_allocated;