summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
Diffstat (limited to 'grc')
-rw-r--r--grc/blocks/Makefile.am2
-rw-r--r--grc/blocks/block_tree.xml2
-rw-r--r--grc/blocks/gr_message_sink.xml72
-rw-r--r--grc/blocks/gr_message_source.xml58
-rw-r--r--grc/python/Block.py2
-rw-r--r--grc/python/Connection.py3
-rw-r--r--grc/python/Constants.py2
-rw-r--r--grc/python/Generator.py4
-rw-r--r--grc/python/Port.py15
-rw-r--r--grc/python/block.dtd4
-rw-r--r--grc/python/flow_graph.tmpl13
11 files changed, 166 insertions, 11 deletions
diff --git a/grc/blocks/Makefile.am b/grc/blocks/Makefile.am
index 025c261f4..fbd8f4bb4 100644
--- a/grc/blocks/Makefile.am
+++ b/grc/blocks/Makefile.am
@@ -123,6 +123,8 @@ dist_ourdata_DATA = \
gr_kludge_copy.xml \
gr_map_bb.xml \
gr_max_xx.xml \
+ gr_message_sink.xml \
+ gr_message_source.xml \
gr_moving_average_xx.xml \
gr_mpsk_receiver_cc.xml \
gr_mpsk_sync_cc.xml \
diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml
index 9eda2fdcf..2cedb45a2 100644
--- a/grc/blocks/block_tree.xml
+++ b/grc/blocks/block_tree.xml
@@ -20,6 +20,7 @@
<block>gr_udp_source</block>
<block>audio_source</block>
<block>gr_wavfile_source</block>
+ <block>gr_message_source</block>
<block>pad_source</block>
</cat>
<cat>
@@ -32,6 +33,7 @@
<block>gr_udp_sink</block>
<block>audio_sink</block>
<block>gr_wavfile_sink</block>
+ <block>gr_message_sink</block>
<block>pad_sink</block>
</cat>
<cat>
diff --git a/grc/blocks/gr_message_sink.xml b/grc/blocks/gr_message_sink.xml
index e69de29bb..76537f283 100644
--- a/grc/blocks/gr_message_sink.xml
+++ b/grc/blocks/gr_message_sink.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Message Sink (the source port is a message)
+###################################################
+ -->
+<block>
+ <name>Message Sink</name>
+ <key>gr_message_sink</key>
+ <import>from gnuradio import gr</import>
+ <make>gr.message_sink($type.size*$vlen, $(id)_msgq, $dont_block)</make>
+ <param>
+ <name>Input Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>size:gr.sizeof_gr_complex</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>size:gr.sizeof_float</opt>
+ </option>
+ <option>
+ <name>Int</name>
+ <key>int</key>
+ <opt>size:gr.sizeof_int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>short</key>
+ <opt>size:gr.sizeof_short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>byte</key>
+ <opt>size:gr.sizeof_char</opt>
+ </option>
+ </param>
+ <param>
+ <name>Don't Block</name>
+ <key>dont_block</key>
+ <value>False</value>
+ <type>enum</type>
+ <option>
+ <name>Don't Block</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Block</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Vec Length</name>
+ <key>vlen</key>
+ <value>1</value>
+ <type>int</type>
+ </param>
+ <check>$vlen &gt; 0</check>
+ <sink>
+ <name>in</name>
+ <type>$type</type>
+ <vlen>$vlen</vlen>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>msg</type>
+ </source>
+</block>
diff --git a/grc/blocks/gr_message_source.xml b/grc/blocks/gr_message_source.xml
index e69de29bb..44378ae83 100644
--- a/grc/blocks/gr_message_source.xml
+++ b/grc/blocks/gr_message_source.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Message Source (the sink port is a message)
+###################################################
+ -->
+<block>
+ <name>Message Source</name>
+ <key>gr_message_source</key>
+ <import>from gnuradio import gr</import>
+ <make>gr.message_source($type.size*$vlen, $(id)_msgq)</make>
+ <param>
+ <name>Output Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>Complex</name>
+ <key>complex</key>
+ <opt>size:gr.sizeof_gr_complex</opt>
+ </option>
+ <option>
+ <name>Float</name>
+ <key>float</key>
+ <opt>size:gr.sizeof_float</opt>
+ </option>
+ <option>
+ <name>Int</name>
+ <key>int</key>
+ <opt>size:gr.sizeof_int</opt>
+ </option>
+ <option>
+ <name>Short</name>
+ <key>short</key>
+ <opt>size:gr.sizeof_short</opt>
+ </option>
+ <option>
+ <name>Byte</name>
+ <key>byte</key>
+ <opt>size:gr.sizeof_char</opt>
+ </option>
+ </param>
+ <param>
+ <name>Vec Length</name>
+ <key>vlen</key>
+ <value>1</value>
+ <type>int</type>
+ </param>
+ <check>$vlen &gt; 0</check>
+ <sink>
+ <name>in</name>
+ <type>msg</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>$type</type>
+ <vlen>$vlen</vlen>
+ </source>
+</block>
diff --git a/grc/python/Block.py b/grc/python/Block.py
index 957fee18e..6693f6f86 100644
--- a/grc/python/Block.py
+++ b/grc/python/Block.py
@@ -70,6 +70,8 @@ class Block(_Block):
(self._sources, self.get_parent().get_parent().Source),
(self._sinks, self.get_parent().get_parent().Sink),
):
+ #TODO #FIXME we want to filter out msg ports and run the regular code below this line
+ if any([port.get_type() == 'msg' for port in ports.values()]): continue
#how many ports?
num_ports = len(ports)
#do nothing for 0 ports
diff --git a/grc/python/Connection.py b/grc/python/Connection.py
index d8a894bb1..5eba9f24d 100644
--- a/grc/python/Connection.py
+++ b/grc/python/Connection.py
@@ -21,6 +21,9 @@ from .. base.Connection import Connection as _Connection
class Connection(_Connection):
+ def is_msg(self):
+ return self.get_source().get_type() == self.get_sink().get_type() == 'msg'
+
def validate(self):
"""
Validate the connections.
diff --git a/grc/python/Constants.py b/grc/python/Constants.py
index 2f629d1bf..439a52420 100644
--- a/grc/python/Constants.py
+++ b/grc/python/Constants.py
@@ -61,4 +61,4 @@ SHORT_VECTOR_COLOR_SPEC = '#CCCC33'
BYTE_VECTOR_COLOR_SPEC = '#CC66CC'
ID_COLOR_SPEC = '#DDDDDD'
WILDCARD_COLOR_SPEC = '#FFFFFF'
-MSG_COLOR_SPEC = '#FF6600'
+MSG_COLOR_SPEC = '#777777'
diff --git a/grc/python/Generator.py b/grc/python/Generator.py
index 33be4a726..ed7995716 100644
--- a/grc/python/Generator.py
+++ b/grc/python/Generator.py
@@ -98,7 +98,8 @@ Add a Misc->Throttle block to your flow graph to avoid CPU congestion.''')
#list of regular blocks (all blocks minus the special ones)
blocks = filter(lambda b: b not in (imports + parameters + variables + probes + notebooks), blocks) + probes
#list of connections where each endpoint is enabled
- connections = self._flow_graph.get_enabled_connections()
+ connections = filter(lambda c: not c.is_msg(), self._flow_graph.get_enabled_connections())
+ messages = filter(lambda c: c.is_msg(), self._flow_graph.get_enabled_connections())
#list of variable names
var_ids = [var.get_id() for var in parameters + variables]
#prepend self.
@@ -124,6 +125,7 @@ Add a Misc->Throttle block to your flow graph to avoid CPU congestion.''')
'parameters': parameters,
'blocks': blocks,
'connections': connections,
+ 'messages': messages,
'generate_options': self._generate_options,
'var_id2cbs': var_id2cbs,
}
diff --git a/grc/python/Port.py b/grc/python/Port.py
index c01884cc3..14adc0618 100644
--- a/grc/python/Port.py
+++ b/grc/python/Port.py
@@ -105,10 +105,11 @@ class Source(Port):
def __init__(self, block, n):
self._n = n #save n
- if n['type'] != 'msg': #key is port index
+ if n['type'] == 'msg': n['key'] = 'msg'
+ else:
n['key'] = str(block._source_count)
block._source_count = block._source_count + 1
- Port.__init__(self, block, n)
+ Port.__init__(self, block, n)
def __del__(self):
self.get_parent()._source_count = self.get_parent()._source_count - 1
@@ -117,14 +118,14 @@ class Sink(Port):
def __init__(self, block, n):
self._n = n #save n
- if n['type'] != 'msg': #key is port index
+ if n['type'] == 'msg': n['key'] = 'msg'
+ else:
n['key'] = str(block._sink_count)
block._sink_count = block._sink_count + 1
- Port.__init__(self, block, n)
+ Port.__init__(self, block, n)
def __del__(self):
self.get_parent()._sink_count = self.get_parent()._sink_count - 1
-#TODO merge source and sink classes into port class
-#TODO check that key is only defined if and only if type is message
-#TODO check that nports is undefined when type is message
+#TODO check that nports and vlen is undefined when type is message
+#TODO only allow up to one port of type msg
diff --git a/grc/python/block.dtd b/grc/python/block.dtd
index 8681d1255..7c6c39811 100644
--- a/grc/python/block.dtd
+++ b/grc/python/block.dtd
@@ -31,8 +31,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-->
<!ELEMENT param (name, key, value?, type, hide?, option*)>
<!ELEMENT option (name, key, opt*)>
-<!ELEMENT sink (name, key?, type, vlen?, nports?, optional?)>
-<!ELEMENT source (name, key?, type, vlen?, nports?, optional?)>
+<!ELEMENT sink (name, type, vlen?, nports?, optional?)>
+<!ELEMENT source (name, type, vlen?, nports?, optional?)>
<!--
Bottom level elements.
Character data only.
diff --git a/grc/python/flow_graph.tmpl b/grc/python/flow_graph.tmpl
index b537c43e2..df346dd16 100644
--- a/grc/python/flow_graph.tmpl
+++ b/grc/python/flow_graph.tmpl
@@ -10,6 +10,7 @@
##@param parameters the paramater blocks
##@param blocks the signal blocks
##@param connections the connections
+##@param messages the msg type connections
##@param generate_options the type of flow graph
##@param var_id2cbs variable id map to callback strings
########################################################
@@ -125,6 +126,18 @@ class $(class_name)(gr.hier_block2):
$indent($ctrl.get_make())
#end for
########################################################
+##Create Message Queues
+########################################################
+#if $messages
+
+ $DIVIDER
+ # Message Queues
+ $DIVIDER
+#end if
+#for $msg in $messages
+ $(msg.get_source().get_parent().get_id())_msgq = $(msg.get_sink().get_parent().get_id())_msgq = gr.msg_queue(2)
+#end for
+########################################################
##Create Blocks
########################################################
#if $blocks