From 6cc818260128df57c51a41e4e6aa459de5faf4fe Mon Sep 17 00:00:00 2001
From: Tim O'Shea <tim.oshea753@gmail.com>
Date: Fri, 30 Nov 2012 22:31:43 -0800
Subject: core: gr_blocks can now have only message ports with no
 general_work()

* msg only blocks now get thread context

* added blocking msg queue delete call

* added gr_message_strobe block

* added grc definitions for message_debug, message_strobe, pdu_to_tagged_stream, tagged_stream_to_pdu.

* allow message fan-in connections in GRC
---
 grc/blocks/block_tree.xml              |  7 ++++++
 grc/blocks/gr_message_debug.xml        | 17 +++++++++++++++
 grc/blocks/gr_message_strobe.xml       | 35 +++++++++++++++++++++++++++++
 grc/blocks/gr_pdu_to_tagged_stream.xml | 40 ++++++++++++++++++++++++++++++++++
 grc/blocks/gr_tagged_stream_to_pdu.xml | 40 ++++++++++++++++++++++++++++++++++
 grc/python/Constants.py                |  2 +-
 grc/python/Port.py                     |  2 +-
 7 files changed, 141 insertions(+), 2 deletions(-)
 create mode 100644 grc/blocks/gr_message_debug.xml
 create mode 100644 grc/blocks/gr_message_strobe.xml
 create mode 100644 grc/blocks/gr_pdu_to_tagged_stream.xml
 create mode 100644 grc/blocks/gr_tagged_stream_to_pdu.xml

(limited to 'grc')

diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml
index d7ec82e4ab..95bd7bb3ce 100644
--- a/grc/blocks/block_tree.xml
+++ b/grc/blocks/block_tree.xml
@@ -37,6 +37,13 @@
 		<block>virtual_sink</block>
 		<block>gr_tag_debug</block>
 	</cat>
+    <cat>
+        <name>Message Tools</name>
+        <block>gr_message_debug</block>
+        <block>gr_message_strobe</block>
+        <block>gr_pdu_to_tagged_stream</block>
+        <block>gr_tagged_stream_to_pdu</block>
+    </cat>
 	<cat>
 		<name>Operators</name>
 		<block>gr_add_xx</block>
diff --git a/grc/blocks/gr_message_debug.xml b/grc/blocks/gr_message_debug.xml
new file mode 100644
index 0000000000..9478f53045
--- /dev/null
+++ b/grc/blocks/gr_message_debug.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Message Debug
+###################################################
+ -->
+<block>
+	<name>Message Debug</name>
+	<key>gr_message_debug</key>
+	<import>from gnuradio import gr</import>
+	<make>gr.message_debug()</make>
+	<sink>
+		<name>print</name>
+		<type>message</type>
+        <optional>1</optional>
+	</sink>
+</block>
diff --git a/grc/blocks/gr_message_strobe.xml b/grc/blocks/gr_message_strobe.xml
new file mode 100644
index 0000000000..60a7724dfc
--- /dev/null
+++ b/grc/blocks/gr_message_strobe.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##Message Strobe 
+###################################################
+ -->
+<block>
+	<name>Message Strobe</name>
+	<key>gr_message_strobe</key>
+	<import>from gnuradio import gr</import>
+	<import>from gruel import pmt</import>
+	<make>gr.message_strobe($msg, $period)</make>
+	<param>
+		<name>Message PMT</name>
+		<key>msg</key>
+		<value>pmt.pmt_intern("TEST")</value>
+		<type>raw</type>
+	</param>
+	<param>
+		<name>Period (ms)</name>
+		<key>period</key>
+		<value>1000</value>
+		<type>real</type>
+	</param>
+	<sink>
+		<name>set_msg</name>
+		<type>message</type>
+        <optional>1</optional>
+	</sink>
+	<source>
+		<name>strobe</name>
+		<type>message</type>
+        <optional>1</optional>
+	</source>
+</block>
diff --git a/grc/blocks/gr_pdu_to_tagged_stream.xml b/grc/blocks/gr_pdu_to_tagged_stream.xml
new file mode 100644
index 0000000000..fc1c4d16a3
--- /dev/null
+++ b/grc/blocks/gr_pdu_to_tagged_stream.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## PDU Message to Tagged Stream
+###################################################
+ -->
+<block>
+	<name>PDU to Tagged Stream</name>
+	<key>gr_pdu_to_tagged_stream</key>
+	<import>from gnuradio import gr</import>
+	<make>gr.pdu_to_tagged_stream($type.tv)</make>
+    <param>
+        <name>Item Type</name>
+        <key>type</key>
+        <type>enum</type>
+        <option>
+            <name>Byte</name>
+            <key>byte</key>
+            <opt>tv:gr.BYTE</opt>
+        </option>
+        <option>
+            <name>Complex</name>
+            <key>complex</key>
+            <opt>tv:gr.COMPLEX</opt>
+        </option>
+        <option>
+            <name>Float</name>
+            <key>float</key>
+            <opt>tv:gr.FLOAT</opt>
+        </option>
+    </param>
+	<sink>
+		<name>pdus</name>
+		<type>message</type>
+	</sink>
+	<source>
+		<name>out</name>
+		<type>$type</type>
+	</source>
+</block>
diff --git a/grc/blocks/gr_tagged_stream_to_pdu.xml b/grc/blocks/gr_tagged_stream_to_pdu.xml
new file mode 100644
index 0000000000..e70a016080
--- /dev/null
+++ b/grc/blocks/gr_tagged_stream_to_pdu.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+## Tagged Stream to PDU Message
+###################################################
+ -->
+<block>
+	<name>Tagged Stream to PDU</name>
+	<key>gr_tagged_stream_to_pdu</key>
+	<import>from gnuradio import gr</import>
+	<make>gr.tagged_stream_to_pdu($type.tv)</make>
+    <param>
+        <name>Item Type</name>
+        <key>type</key>
+        <type>enum</type>
+        <option>
+            <name>Byte</name>
+            <key>byte</key>
+            <opt>tv:gr.BYTE</opt>
+        </option>
+        <option>
+            <name>Complex</name>
+            <key>complex</key>
+            <opt>tv:gr.COMPLEX</opt>
+        </option>
+        <option>
+            <name>Float</name>
+            <key>float</key>
+            <opt>tv:gr.FLOAT</opt>
+        </option>
+    </param>
+	<sink>
+		<name>in</name>
+		<type>$type</type>
+	</sink>
+	<source>
+		<name>pdus</name>
+		<type>message</type>
+	</source>
+</block>
diff --git a/grc/python/Constants.py b/grc/python/Constants.py
index 09c3081967..b8dc9a96a1 100644
--- a/grc/python/Constants.py
+++ b/grc/python/Constants.py
@@ -58,7 +58,7 @@ CORE_TYPES = ( #name, key, sizeof, color
 	('Integer 16', 's16', 2, '#FFFF66'),
 	('Integer 8', 's8', 1, '#FF66FF'),
 	('Message Queue', 'msg', 0, '#777777'),
-	('Async Message', 'message', 0, '#777777'),
+	('Async Message', 'message', 0, '#C0C0C0'),
 	('Wildcard', '', 0, '#FFFFFF'),
 )
 
diff --git a/grc/python/Port.py b/grc/python/Port.py
index 9f8b50d052..738a33ba72 100644
--- a/grc/python/Port.py
+++ b/grc/python/Port.py
@@ -116,7 +116,7 @@ class Port(_Port, _GUIPort):
 		_Port.validate(self)
 		if not self.get_enabled_connections() and not self.get_optional():
 			self.add_error_message('Port is not connected.')
-		if not self.is_source() and len(self.get_enabled_connections()) > 1:
+		if not self.is_source() and (not self.get_type() == "message") and len(self.get_enabled_connections()) > 1:
 			self.add_error_message('Port has too many connections.')
 		#message port logic
 		if self.get_type() == 'msg':
-- 
cgit v1.2.3