diff options
author | Tom Rondeau <tom@trondeau.com> | 2016-06-14 10:48:00 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2016-06-14 10:58:05 -0700 |
commit | 817f61bbdd180a2854116c85ccf1020e561c523f (patch) | |
tree | 883649968739a66c537e932c65c79e9387544a07 /gr-digital/grc | |
parent | c475f14e4604b9bca25c08f1d30a2e8ff9bbcf26 (diff) |
digital: Complete overhaul of protocol handling
See documentation for details. In brief:
- digital_protocol_* classes added (replace packet header blocks)
- header_buffer class added
- Lots of QA
- default packet formatter: contains access code and payload length
fields.
- counter packet formatter: also contains the bits/sym in the payload
modulation and a packet number counter.
- Also adds QA code and the infrastructure for C++ QA code in
gr-digital.
- New block to use the packet formatter objects.
- The header and payload are transmitted as PDU messages out of different ports.
- header_buffer class for header formatting.
- Used by packet_formatter_x classes to more easily add and format
header data for transmission.
- New blocks that parse headers.
- Handles either hard or soft bits. Produces an info message to
instruct payload demod.
- 'receive mode' to header_buffer class.
- Designed to make extracting fields from the received header bits
easier for packet formatter classes. Use extract_field[N] to get
the different fields out of a collected set of header bits. *
Docs describing both functions with small examples for how to use
them.
- Don't force access code to be a multiple of 8
- need to verify everything else handles this correctly.
- Throw an exception in the ctor if setting the code failed and emit a
log message.
Committed-By: Martin Braun <martin.braun@ettus.com>
Diffstat (limited to 'gr-digital/grc')
-rw-r--r-- | gr-digital/grc/digital_block_tree.xml | 6 | ||||
-rw-r--r-- | gr-digital/grc/digital_protocol_formatter_async.xml | 33 | ||||
-rw-r--r-- | gr-digital/grc/digital_protocol_formatter_bb.xml | 32 | ||||
-rw-r--r-- | gr-digital/grc/digital_protocol_parser_b.xml | 25 | ||||
-rw-r--r-- | gr-digital/grc/variable_header_format_default.xml | 35 |
5 files changed, 130 insertions, 1 deletions
diff --git a/gr-digital/grc/digital_block_tree.xml b/gr-digital/grc/digital_block_tree.xml index 9bdf6e993f..5e6e742868 100644 --- a/gr-digital/grc/digital_block_tree.xml +++ b/gr-digital/grc/digital_block_tree.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright 2011-2015 Free Software Foundation, Inc. + Copyright 2011-2016 Free Software Foundation, Inc. This file is part of GNU Radio @@ -72,6 +72,10 @@ <block>digital_crc32_bb</block> <block>digital_crc32_async_bb</block> <block>digital_framer_sink_1</block> + <block>variable_header_format_default</block> + <block>digital_protocol_formatter_async</block> + <block>digital_protocol_formatter_bb</block> + <block>digital_protocol_parser_b</block> <block>digital_header_payload_demux</block> <block>digital_packet_headergenerator_bb</block> <block>digital_packet_headergenerator_bb_default</block> diff --git a/gr-digital/grc/digital_protocol_formatter_async.xml b/gr-digital/grc/digital_protocol_formatter_async.xml new file mode 100644 index 0000000000..52a67eca36 --- /dev/null +++ b/gr-digital/grc/digital_protocol_formatter_async.xml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> + +<block> + <name>Protocol Formatter (Async)</name> + <key>digital_protocol_formatter_async</key> + <import>from gnuradio import digital</import> + <make>digital.protocol_formatter_async($format)</make> + + <param> + <name>Format Obj.</name> + <key>format</key> + <type>raw</type> + </param> + + <sink> + <name>in</name> + <type>message</type> + <optional>1</optional> + </sink> + + <source> + <name>header</name> + <type>message</type> + <optional>1</optional> + </source> + + <source> + <name>payload</name> + <type>message</type> + <optional>1</optional> + </source> + +</block> diff --git a/gr-digital/grc/digital_protocol_formatter_bb.xml b/gr-digital/grc/digital_protocol_formatter_bb.xml new file mode 100644 index 0000000000..b37a791fa8 --- /dev/null +++ b/gr-digital/grc/digital_protocol_formatter_bb.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> + +<block> + <name>Protocol Formatter</name> + <key>digital_protocol_formatter_bb</key> + <import>from gnuradio import digital</import> + <make>digital.protocol_formatter_bb($format, $len_tag_key)</make> + + <param> + <name>Format Obj.</name> + <key>format</key> + <type>raw</type> + </param> + + <param> + <name>Length Tag Name</name> + <key>len_tag_key</key> + <value>"packet_len"</value> + <type>string</type> + </param> + + <sink> + <name>in</name> + <type>byte</type> + </sink> + + <source> + <name>out</name> + <type>byte</type> + </source> + +</block> diff --git a/gr-digital/grc/digital_protocol_parser_b.xml b/gr-digital/grc/digital_protocol_parser_b.xml new file mode 100644 index 0000000000..27fb15e05b --- /dev/null +++ b/gr-digital/grc/digital_protocol_parser_b.xml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> + +<block> + <name>Protocol Parser</name> + <key>digital_protocol_parser_b</key> + <import>from gnuradio import digital</import> + <make>digital.protocol_parser_b($format)</make> + + <param> + <name>Format Obj.</name> + <key>format</key> + <type>raw</type> + </param> + + <sink> + <name>in</name> + <type>byte</type> + </sink> + + <source> + <name>info</name> + <type>message</type> + <optional>1</optional> + </source> +</block> diff --git a/gr-digital/grc/variable_header_format_default.xml b/gr-digital/grc/variable_header_format_default.xml new file mode 100644 index 0000000000..55b361f8ca --- /dev/null +++ b/gr-digital/grc/variable_header_format_default.xml @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<!-- +################################################### +# header_format_default object +################################################### + --> +<block> + <name>Default Header Format Obj.</name> + <key>variable_header_format_default</key> + <import>from gnuradio import digital</import> + <var_make> +#if int($access_code())==0 # +self.$(id) = $(id) = digital.header_format_default(digital.packet_utils.default_access_code, $threshold) +#else +self.$(id) = $(id) = digital.header_format_default($access_code, $threshold) +#end if + </var_make> + <var_value>digital.header_format_default($access_code, $threshold)</var_value> + <make></make> + + <param> + <name>Access Code</name> + <key>access_code</key> + <value>0</value> + <type>string</type> + </param> + + <param> + <name>Threshold</name> + <key>threshold</key> + <value>0</value> + <type>int</type> + </param> + +</block> |