[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r8124 - in grc/branches/grc_reloaded: notes src/grc sr
From: |
jblum |
Subject: |
[Commit-gnuradio] r8124 - in grc/branches/grc_reloaded: notes src/grc src/grc/data src/grc/elements src/grc/gui src/grc/gui/elements src/grc_gnuradio/blocks/modulators src/grc_gnuradio/data |
Date: |
Fri, 28 Mar 2008 13:18:53 -0600 (MDT) |
Author: jblum
Date: 2008-03-28 13:18:52 -0600 (Fri, 28 Mar 2008)
New Revision: 8124
Added:
grc/branches/grc_reloaded/src/grc/data/flow_graph.dtd
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_demod.xml
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_mod.xml
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_demod.xml
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_mod.xml
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_demod.xml
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_mod.xml
Modified:
grc/branches/grc_reloaded/notes/todo.txt
grc/branches/grc_reloaded/src/grc/ParseXML.py
grc/branches/grc_reloaded/src/grc/elements/Platform.py
grc/branches/grc_reloaded/src/grc/gui/NotebookPage.py
grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py
grc/branches/grc_reloaded/src/grc_gnuradio/data/block_tree.xml
Log:
more modulators, xml dtd validation for block tree and all flow graphs
Modified: grc/branches/grc_reloaded/notes/todo.txt
===================================================================
--- grc/branches/grc_reloaded/notes/todo.txt 2008-03-28 03:51:18 UTC (rev
8123)
+++ grc/branches/grc_reloaded/notes/todo.txt 2008-03-28 19:18:52 UTC (rev
8124)
@@ -1,7 +1,5 @@
############ GRC Reloaded: #############
-dtd for saved flow graphs
html documentation/tutorial
-code dtd paths, and check dtd not encoded in xml file
default platform for preferences block
############ Blocks to Add: ####################
Modified: grc/branches/grc_reloaded/src/grc/ParseXML.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/ParseXML.py 2008-03-28 03:51:18 UTC
(rev 8123)
+++ grc/branches/grc_reloaded/src/grc/ParseXML.py 2008-03-28 19:18:52 UTC
(rev 8124)
@@ -24,6 +24,7 @@
import xml.dom.ext
from xml.parsers.xmlproc import xmlval
from xml.parsers.xmlproc import xmlproc
+from xml.parsers.xmlproc import xmldtd
from Utils import odict
class ValidationError(Exception):
@@ -53,14 +54,20 @@
def getChildrenByTagName(doc, tag_name):
return filter(lambda c: str(c.localName) == str(tag_name),
doc.childNodes)
-def validate_dtd(file_path):
+def validate_dtd(xml_file, dtd_file=None):
"""!
Validate an xml file against its dtd.
- @param file_path the xml file
+ @param xml_file the xml file
+ @param dtd_file the optional dtd file
"""
- parser = xmlval.XMLValidator()
+ if dtd_file:
+ dtd = xmldtd.load_dtd(dtd_file)
+ parser = xmlproc.XMLProcessor()
+ parser.set_application(xmlval.ValidatingApp(dtd, parser))
+ else:
+ parser = xmlval.XMLValidator()
parser.set_error_handler(ErrorHandler(parser))
- parser.parse_resource(file_path)
+ parser.parse_resource(xml_file)
def from_xml(doc):
"""!
Added: grc/branches/grc_reloaded/src/grc/data/flow_graph.dtd
===================================================================
--- grc/branches/grc_reloaded/src/grc/data/flow_graph.dtd
(rev 0)
+++ grc/branches/grc_reloaded/src/grc/data/flow_graph.dtd 2008-03-28
19:18:52 UTC (rev 8124)
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!--
+Copyright 2008 Free Software Foundation, Inc.
+This file is part of GNU Radio
+
+GNU Radio Companion is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+GNU Radio Companion is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+-->
+<!--
+ flow_graph.dtd
+ Josh Blum
+ The document type definition for flow graph xml files.
+ -->
+<!ELEMENT flow_graph (timestamp?, block*, connection*)> <!-- optional
timestamp -->
+<!ELEMENT timestamp (#PCDATA)>
+<!-- Block -->
+<!ELEMENT block (key, param*)>
+<!ELEMENT param (key, value)>
+<!ELEMENT key (#PCDATA)>
+<!ELEMENT value (#PCDATA)>
+<!-- Connection -->
+<!ELEMENT connection (source_block_id, sink_block_id, source_key, sink_key)>
+<!ELEMENT source_block_id (#PCDATA)>
+<!ELEMENT sink_block_id (#PCDATA)>
+<!ELEMENT source_key (#PCDATA)>
+<!ELEMENT sink_key (#PCDATA)>
Modified: grc/branches/grc_reloaded/src/grc/elements/Platform.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/elements/Platform.py 2008-03-28
03:51:18 UTC (rev 8123)
+++ grc/branches/grc_reloaded/src/grc/elements/Platform.py 2008-03-28
19:18:52 UTC (rev 8124)
@@ -28,6 +28,7 @@
from grc.elements.Block import Block as _Block
from grc.elements.Port import Port as _Port
from grc.elements.Param import Param as _Param
+from grc.Constants import DATA_DIR
class Platform(_Element):
@@ -77,7 +78,7 @@
def get_block_tree(self):
f = self._block_tree
- try: ParseXML.validate_dtd(f)
+ try: ParseXML.validate_dtd(f, DATA_DIR + '/block_tree.dtd')
except ParseXML.ValidationError, e:
self._exit_with_error('Block tree "%s" failed: \n\t%s'%(f, e))
x = ParseXML.from_file(f)
n = ParseXML.from_xml(x)['block_tree']
Modified: grc/branches/grc_reloaded/src/grc/gui/NotebookPage.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/gui/NotebookPage.py 2008-03-28
03:51:18 UTC (rev 8123)
+++ grc/branches/grc_reloaded/src/grc/gui/NotebookPage.py 2008-03-28
19:18:52 UTC (rev 8124)
@@ -26,6 +26,7 @@
import gtk
from grc import ParseXML
from grc.StateCache import StateCache
+from grc.Constants import DATA_DIR
import os
############################################################
@@ -47,6 +48,7 @@
self.main_window = main_window
self.set_file_path(file_path)
file_path = file_path or
flow_graph.get_parent().get_default_flow_graph()
+ ParseXML.validate_dtd(file_path, DATA_DIR + '/flow_graph.dtd')
initial_state = ParseXML.from_xml(ParseXML.from_file(file_path))
self.state_cache = StateCache(initial_state)
self.set_saved(True)
Modified: grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py
===================================================================
--- grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py 2008-03-28
03:51:18 UTC (rev 8123)
+++ grc/branches/grc_reloaded/src/grc/gui/elements/FlowGraph.py 2008-03-28
19:18:52 UTC (rev 8124)
@@ -108,17 +108,20 @@
self.selected_element.get_sources() + \
self.selected_element.get_sinks():
#find a param that controls a type
+ type_param = None
for param in self.selected_element.get_params():
- if param.is_enum() and param.get_key()
in child._type:
- #try to increment the enum by
direction
- try:
- keys =
param.get_option_keys()
- old_index =
keys.index(param.get_value())
- new_index = (old_index
+ direction + len(keys))%len(keys)
-
param.set_value(keys[new_index])
- self.update()
- return True
- except: return False
+ if not type_param and param.is_enum():
type_param = param
+ if param.is_enum() and param.get_key()
in child._type: type_param = param
+ if type_param:
+ #try to increment the enum by direction
+ try:
+ keys =
type_param.get_option_keys()
+ old_index =
keys.index(type_param.get_value())
+ new_index = (old_index +
direction + len(keys))%len(keys)
+
type_param.set_value(keys[new_index])
+ self.update()
+ return True
+ except: return False
return False
Added:
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_demod.xml
===================================================================
---
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_demod.xml
(rev 0)
+++
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_demod.xml
2008-03-28 19:18:52 UTC (rev 8124)
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<!DOCTYPE block SYSTEM "../block.dtd">
+<!--
+###################################################
+##DPSK Demod - 2, 4, 8
+###################################################
+ -->
+<block>
+ <name>DPSK Demod</name>
+ <key>blks2_dxpsk_demod</key>
+ <import>from gnuradio import blks2</import>
+ <make>blks2.$(type)_demod(
+ samples_per_symbol=$samples_per_symbol,
+ excess_bw=$excess_bw,
+ costas_alpha=$costas_alpha,
+ gain_mu=$gain_mu,
+ mu=$mu,
+ omega_relative_limit=$omega_relative_limit,
+ gray_code=$gray_code,
+)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>DBPSK</name>
+ <key>dbpsk</key>
+ </option>
+ <option>
+ <name>DQPSK</name>
+ <key>dqpsk</key>
+ </option>
+ <option>
+ <name>D8PSK</name>
+ <key>d8psk</key>
+ </option>
+ </param>
+ <param>
+ <name>Samples per Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Excess BW</name>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Costas Alpha</name>
+ <key>costas_alpha</key>
+ <value>0.175</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gain Mu</name>
+ <key>gain_mu</key>
+ <value>0.175</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Mu</name>
+ <key>mu</key>
+ <value>0.5</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Omega Relative Limit</name>
+ <key>omega_relative_limit</key>
+ <value>0.005</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gray Code</name>
+ <key>gray_code</key>
+ <value>True</value>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ </source>
+</block>
Added:
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_mod.xml
===================================================================
---
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_mod.xml
(rev 0)
+++
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_dxpsk_mod.xml
2008-03-28 19:18:52 UTC (rev 8124)
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<!DOCTYPE block SYSTEM "../block.dtd">
+<!--
+###################################################
+##DPSK Mod - 2, 4, 8
+###################################################
+ -->
+<block>
+ <name>DPSK Mod</name>
+ <key>blks2_dxpsk_mod</key>
+ <import>from gnuradio import blks2</import>
+ <make>blks2.$(type)_mod(
+ samples_per_symbol=$samples_per_symbol,
+ excess_bw=$excess_bw,
+ gray_code=$gray_code,
+)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>DBPSK</name>
+ <key>dbpsk</key>
+ </option>
+ <option>
+ <name>DQPSK</name>
+ <key>dqpsk</key>
+ </option>
+ <option>
+ <name>D8PSK</name>
+ <key>d8psk</key>
+ </option>
+ </param>
+ <param>
+ <name>Samples per Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Excess BW</name>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gray Code</name>
+ <key>gray_code</key>
+ <value>True</value>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>complex</type>
+ </source>
+</block>
Added:
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_demod.xml
===================================================================
---
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_demod.xml
(rev 0)
+++
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_demod.xml
2008-03-28 19:18:52 UTC (rev 8124)
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<!DOCTYPE block SYSTEM "../block.dtd">
+<!--
+###################################################
+##GMSK Demod
+###################################################
+ -->
+<block>
+ <name>GMSK Demod</name>
+ <key>blks2_gmsk_demod</key>
+ <import>from gnuradio import blks2</import>
+ <make>blks2.gmsk_demod(
+ samples_per_symbol=$samples_per_symbol,
+ gain_mu=$gain_mu,
+ mu=$mu,
+ omega_relative_limit=$omega_relative_limit,
+ freq_error=$freq_error,
+)</make>
+ <param>
+ <name>Samples per Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gain Mu</name>
+ <key>gain_mu</key>
+ <value>0.175</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Mu</name>
+ <key>mu</key>
+ <value>0.5</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Omega Relative Limit</name>
+ <key>omega_relative_limit</key>
+ <value>0.005</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Freq Error</name>
+ <key>freq_error</key>
+ <value>0.0</value>
+ <type>real</type>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ </source>
+</block>
Added:
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_mod.xml
===================================================================
---
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_mod.xml
(rev 0)
+++
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_gmsk_mod.xml
2008-03-28 19:18:52 UTC (rev 8124)
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!DOCTYPE block SYSTEM "../block.dtd">
+<!--
+###################################################
+##GMSK Mod
+###################################################
+ -->
+<block>
+ <name>GMSK Mod</name>
+ <key>blks2_gmsk_mod</key>
+ <import>from gnuradio import blks2</import>
+ <make>blks2.gmsk_mod(
+ samples_per_symbol=$samples_per_symbol,
+ bt=$bt,
+)</make>
+ <param>
+ <name>Samples per Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>BT</name>
+ <key>bt</key>
+ <value>0.35</value>
+ <type>real</type>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>complex</type>
+ </source>
+</block>
Added:
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_demod.xml
===================================================================
---
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_demod.xml
(rev 0)
+++
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_demod.xml
2008-03-28 19:18:52 UTC (rev 8124)
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<!DOCTYPE block SYSTEM "../block.dtd">
+<!--
+###################################################
+##QAM Demod - 8, 16, 64, 256
+###################################################
+ -->
+<block>
+ <name>QAM Demod</name>
+ <key>blks2_qam_demod</key>
+ <import>from gnuradio import blks2</import>
+ <make>blks2.$(type)_demod(
+ samples_per_symbol=$samples_per_symbol,
+ excess_bw=$excess_bw,
+ costas_alpha=$costas_alpha,
+ gain_mu=$gain_mu,
+ mu=$mu,
+ omega_relative_limit=$omega_relative_limit,
+ gray_code=$gray_code,
+)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>QAM8</name>
+ <key>qam8</key>
+ </option>
+ <option>
+ <name>QAM16</name>
+ <key>qam16</key>
+ </option>
+ <option>
+ <name>QAM64</name>
+ <key>qam64</key>
+ </option>
+ <option>
+ <name>QAM256</name>
+ <key>qam256</key>
+ </option>
+ </param>
+ <param>
+ <name>Samples per Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Excess BW</name>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Costas Alpha</name>
+ <key>costas_alpha</key>
+ <value>0.175</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gain Mu</name>
+ <key>gain_mu</key>
+ <value>0.03</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Mu</name>
+ <key>mu</key>
+ <value>0.05</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Omega Relative Limit</name>
+ <key>omega_relative_limit</key>
+ <value>0.005</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gray Code</name>
+ <key>gray_code</key>
+ <value>True</value>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ </source>
+</block>
Added:
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_mod.xml
===================================================================
---
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_mod.xml
(rev 0)
+++
grc/branches/grc_reloaded/src/grc_gnuradio/blocks/modulators/blks2_qam_mod.xml
2008-03-28 19:18:52 UTC (rev 8124)
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<!DOCTYPE block SYSTEM "../block.dtd">
+<!--
+###################################################
+##QAM Mod - 8, 16, 64, 256
+###################################################
+ -->
+<block>
+ <name>QAM Mod</name>
+ <key>blks2_qam_mod</key>
+ <import>from gnuradio import blks2</import>
+ <make>blks2.$(type)_mod(
+ samples_per_symbol=$samples_per_symbol,
+ excess_bw=$excess_bw,
+ gray_code=$gray_code,
+)</make>
+ <param>
+ <name>Type</name>
+ <key>type</key>
+ <type>enum</type>
+ <option>
+ <name>QAM8</name>
+ <key>qam8</key>
+ </option>
+ <option>
+ <name>QAM16</name>
+ <key>qam16</key>
+ </option>
+ <option>
+ <name>QAM64</name>
+ <key>qam64</key>
+ </option>
+ <option>
+ <name>QAM256</name>
+ <key>qam256</key>
+ </option>
+ </param>
+ <param>
+ <name>Samples per Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Excess BW</name>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gray Code</name>
+ <key>gray_code</key>
+ <value>True</value>
+ <type>enum</type>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>complex</type>
+ </source>
+</block>
Modified: grc/branches/grc_reloaded/src/grc_gnuradio/data/block_tree.xml
===================================================================
--- grc/branches/grc_reloaded/src/grc_gnuradio/data/block_tree.xml
2008-03-28 03:51:18 UTC (rev 8123)
+++ grc/branches/grc_reloaded/src/grc_gnuradio/data/block_tree.xml
2008-03-28 19:18:52 UTC (rev 8124)
@@ -1,5 +1,4 @@
<?xml version="1.0"?>
-<!DOCTYPE block_tree SYSTEM "../../grc/data/block_tree.dtd">
<!--
###################################################
##Block Tree for platform gnuradio python.
@@ -170,14 +169,14 @@
<block>blks2_fm_deemph</block>
<block>blks2_fm_preemph</block>
- <block>psk_modulator</block>
- <block>psk demodulator</block>
+ <block>blks2_dxpsk_mod</block>
+ <block>blks2_dxpsk_demod</block>
- <block>gmsk_modulator</block>
- <block>gmsk_demodulator</block>
+ <block>blks2_gmsk_mod</block>
+ <block>blks2_gmsk_demod</block>
- <block>qam_modulator</block>
- <block>qam_demodulator</block>
+ <block>blks2_qam_mod</block>
+ <block>blks2_qam_demod</block>
<block>packet_modulator</block>
<block>packet_demodulator</block>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r8124 - in grc/branches/grc_reloaded: notes src/grc src/grc/data src/grc/elements src/grc/gui src/grc/gui/elements src/grc_gnuradio/blocks/modulators src/grc_gnuradio/data,
jblum <=