commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 52/57: fec: wip: async encoder/decoder work


From: git
Subject: [Commit-gnuradio] [gnuradio] 52/57: fec: wip: async encoder/decoder working deployments.
Date: Wed, 21 May 2014 03:10:32 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

trondeau pushed a commit to branch master
in repository gnuradio.

commit fbbde8d01ab43b7a3ffd5ca9d65cf50a84e2a7be
Author: Tom Rondeau <address@hidden>
Date:   Mon May 19 15:53:10 2014 -0400

    fec: wip: async encoder/decoder working deployments.
    
    Decoder uses API signatures to do shifting, data conversions. New examples 
showing use.
---
 gr-fec/examples/CMakeLists.txt                     |   1 +
 gr-fec/examples/fecapi_async_decoders.grc          | 913 +++++++++++----------
 gr-fec/examples/fecapi_async_encoders.grc          | 500 +++++------
 ...coders.grc => fecapi_async_packed_decoders.grc} | 730 ++++++++--------
 gr-fec/examples/fecapi_async_to_stream.grc         | 308 ++++---
 gr-fec/grc/fec_async_decoder.xml                   |  37 +-
 gr-fec/grc/fec_async_encoder.xml                   |  21 +-
 gr-fec/include/gnuradio/fec/async_decoder.h        |   7 +-
 gr-fec/include/gnuradio/fec/async_encoder.h        |   2 +
 gr-fec/lib/async_decoder_impl.cc                   | 172 +++-
 gr-fec/lib/async_decoder_impl.h                    |  20 +-
 gr-fec/lib/async_encoder_impl.cc                   |  74 +-
 gr-fec/lib/async_encoder_impl.h                    |   7 +-
 gr-fec/lib/cc_encoder_impl.cc                      |   2 +-
 14 files changed, 1529 insertions(+), 1265 deletions(-)

diff --git a/gr-fec/examples/CMakeLists.txt b/gr-fec/examples/CMakeLists.txt
index fa7a3d5..b203e9c 100644
--- a/gr-fec/examples/CMakeLists.txt
+++ b/gr-fec/examples/CMakeLists.txt
@@ -28,6 +28,7 @@ install(
     fecapi_async_decoders.grc
     fecapi_async_encoders.grc
     fecapi_async_to_stream.grc
+    fecapi_async_packed_decoders.grc
     fecapi_tagged_decoders.grc
     fecapi_tagged_encoders.grc
     DESTINATION ${GR_PKG_FEC_EXAMPLES_DIR}
diff --git a/gr-fec/examples/fecapi_async_decoders.grc 
b/gr-fec/examples/fecapi_async_decoders.grc
index 2598e84..08a8826 100644
--- a/gr-fec/examples/fecapi_async_decoders.grc
+++ b/gr-fec/examples/fecapi_async_decoders.grc
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Sat May 17 11:37:22 2014</timestamp>
+  <timestamp>Mon May 19 19:34:15 2014</timestamp>
   <block>
     <key>options</key>
     <param>
@@ -173,6 +173,33 @@
     </param>
   </block>
   <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>rep</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>3</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(785, 473)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
     <key>parameter</key>
     <param>
       <key>id</key>
@@ -278,10 +305,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_vector_source_x</key>
+    <key>blocks_throttle</key>
     <param>
       <key>id</key>
-      <value>blocks_vector_source_x_0_1_0</value>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -292,22 +319,18 @@
       <value>byte</value>
     </param>
     <param>
-      <key>vector</key>
-      <value>(frame_size/15)*[0, 0, 1, 0, 3, 0, 7, 0, 15, 0, 31, 0, 63, 0, 
127]</value>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>tags</key>
-      <value>[]</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>repeat</key>
+      <key>ignoretag</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -325,58 +348,50 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(61, 140)</value>
+      <value>(109, 224)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>variable_dummy_encoder_def</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>enc_dummy</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>value</key>
+      <value>"ok"</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
+      <key>ndim</key>
+      <value>0</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>dim1</key>
       <value>1</value>
     </param>
     <param>
-      <key>ignoretag</key>
-      <value>True</value>
+      <key>dim2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>framebits</key>
+      <value>8000</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(109, 224)</value>
+      <value>(599, 538)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -384,54 +399,46 @@
     </param>
   </block>
   <block>
-    <key>blocks_stream_to_tagged_stream</key>
+    <key>variable_dummy_decoder_def</key>
     <param>
       <key>id</key>
-      <value>blocks_stream_to_tagged_stream_0_0</value>
+      <value>dec_dummy</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>value</key>
+      <value>"ok"</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>ndim</key>
+      <value>0</value>
     </param>
     <param>
-      <key>packet_len</key>
-      <value>frame_size</value>
+      <key>dim1</key>
+      <value>1</value>
     </param>
     <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
+      <key>dim2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>framebits</key>
+      <value>8000</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(83, 279)</value>
+      <value>(598, 636)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
@@ -470,30 +477,38 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(83, 369)</value>
+      <value>(364, 143)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>blocks_char_to_float</key>
+    <key>blocks_stream_to_tagged_stream</key>
     <param>
       <key>id</key>
-      <value>blocks_char_to_float_0_1</value>
+      <value>blocks_stream_to_tagged_stream_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>scale</key>
-      <value>1</value>
+      <key>packet_len</key>
+      <value>frame_size</value>
+    </param>
+    <param>
+      <key>len_tag_key</key>
+      <value>pkt_len</value>
     </param>
     <param>
       <key>alias</key>
@@ -513,26 +528,30 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(707, 188)</value>
+      <value>(69, 281)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
-    <key>digital_crc32_async_bb</key>
+    <key>blocks_pdu_to_tagged_stream</key>
     <param>
       <key>id</key>
-      <value>digital_crc32_async_bb_0</value>
+      <value>blocks_pdu_to_tagged_stream_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>check</key>
-      <value>False</value>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>tag</key>
+      <value>pkt_len</value>
     </param>
     <param>
       <key>alias</key>
@@ -552,7 +571,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(101, 441)</value>
+      <value>(411, 239)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -560,34 +579,18 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>digital_map_bb</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>digital_map_bb_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>256</value>
-    </param>
-    <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <value>True</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>map</key>
+      <value>[-1,1]</value>
     </param>
     <param>
       <key>alias</key>
@@ -607,7 +610,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(50, 502)</value>
+      <value>(409, 311)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -646,7 +649,7 @@
     </param>
     <param>
       <key>rep</key>
-      <value>3</value>
+      <value>rep</value>
     </param>
     <param>
       <key>alias</key>
@@ -662,10 +665,10 @@
     </param>
   </block>
   <block>
-    <key>variable_dummy_decoder_def</key>
+    <key>variable_repetition_decoder_def</key>
     <param>
       <key>id</key>
-      <value>dec_dummy</value>
+      <value>dec_rep</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -677,7 +680,7 @@
     </param>
     <param>
       <key>ndim</key>
-      <value>1</value>
+      <value>0</value>
     </param>
     <param>
       <key>dim1</key>
@@ -692,12 +695,20 @@
       <value>8000</value>
     </param>
     <param>
+      <key>rep</key>
+      <value>rep</value>
+    </param>
+    <param>
+      <key>prob</key>
+      <value>0.5</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(598, 636)</value>
+      <value>(781, 651)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -705,50 +716,42 @@
     </param>
   </block>
   <block>
-    <key>variable_repetition_decoder_def</key>
+    <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>dec_rep</value>
+      <value>blocks_char_to_float_0_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>dim1</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>dim2</key>
+      <key>scale</key>
       <value>1</value>
     </param>
     <param>
-      <key>framebits</key>
-      <value>8000</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>rep</key>
-      <value>3</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>prob</key>
-      <value>0.5</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(781, 651)</value>
+      <value>(408, 375)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -756,225 +759,41 @@
     </param>
   </block>
   <block>
-    <key>variable_dummy_encoder_def</key>
+    <key>blocks_repack_bits_bb</key>
     <param>
       <key>id</key>
-      <value>enc_dummy</value>
+      <value>blocks_repack_bits_bb_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>0</value>
+      <key>k</key>
+      <value>8</value>
     </param>
     <param>
-      <key>dim1</key>
+      <key>l</key>
       <value>1</value>
     </param>
     <param>
-      <key>dim2</key>
-      <value>1</value>
+      <key>len_tag_key</key>
+      <value>pkt_len</value>
     </param>
     <param>
-      <key>framebits</key>
-      <value>8000</value>
+      <key>align_output</key>
+      <value>False</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(599, 538)</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_map_bb</key>
-    <param>
-      <key>id</key>
-      <value>digital_map_bb_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>map</key>
-      <value>[-1,1]</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(713, 279)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_repack_bits_bb</key>
-    <param>
-      <key>id</key>
-      <value>blocks_repack_bits_bb_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>k</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>l</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>align_output</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>swap</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(452, 354)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_pdu_to_tagged_stream</key>
-    <param>
-      <key>id</key>
-      <value>blocks_pdu_to_tagged_stream_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>tag</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(400, 252)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_repack_bits_bb</key>
-    <param>
-      <key>id</key>
-      <value>blocks_repack_bits_bb_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>k</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>l</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>align_output</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>swap</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
@@ -983,7 +802,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(925, 309)</value>
+      <value>(137, 354)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -994,7 +813,7 @@
     <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>blocks_char_to_float_0_0_0_0</value>
+      <value>blocks_char_to_float_0_1_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1026,50 +845,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1200, 191)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_crc32_bb</key>
-    <param>
-      <key>id</key>
-      <value>digital_crc32_bb_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>check</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>lengthtagname</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1214, 332)</value>
+      <value>(420, 430)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1108,15 +884,15 @@
     </param>
     <param>
       <key>ymin</key>
-      <value>-1</value>
+      <value>-0.5</value>
     </param>
     <param>
       <key>ymax</key>
-      <value>140</value>
+      <value>1.5</value>
     </param>
     <param>
       <key>nconnections</key>
-      <value>1</value>
+      <value>2</value>
     </param>
     <param>
       <key>update_time</key>
@@ -1156,7 +932,7 @@
     </param>
     <param>
       <key>label1</key>
-      <value>Input</value>
+      <value>Decoded</value>
     </param>
     <param>
       <key>width1</key>
@@ -1180,7 +956,7 @@
     </param>
     <param>
       <key>label2</key>
-      <value>Dummy</value>
+      <value>Input</value>
     </param>
     <param>
       <key>width2</key>
@@ -1404,7 +1180,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1364, 167)</value>
+      <value>(1059, 368)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1412,22 +1188,22 @@
     </param>
   </block>
   <block>
-    <key>fec_async_encoder</key>
+    <key>fec_async_decoder</key>
     <param>
       <key>id</key>
-      <value>fec_async_encoder_0</value>
+      <value>fec_async_decoder_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>encoder</key>
-      <value>enc_cc</value>
+      <key>decoder</key>
+      <value>dec_cc</value>
     </param>
     <param>
-      <key>rev_unpack</key>
-      <value>True</value>
+      <key>packed</key>
+      <value>False</value>
     </param>
     <param>
       <key>rev_pack</key>
@@ -1451,7 +1227,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(429, 148)</value>
+      <value>(852, 142)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1459,37 +1235,21 @@
     </param>
   </block>
   <block>
-    <key>fec_extended_decoder</key>
+    <key>blocks_pdu_to_tagged_stream</key>
     <param>
       <key>id</key>
-      <value>fec_extended_decoder_0_1_0</value>
+      <value>blocks_pdu_to_tagged_stream_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>fec_extended_decoder</value>
-    </param>
-    <param>
-      <key>decoder_list</key>
-      <value>dec_cc</value>
-    </param>
-    <param>
-      <key>threadtype</key>
-      <value>none</value>
-    </param>
-    <param>
-      <key>ann</key>
-      <value>None</value>
-    </param>
-    <param>
-      <key>puncpat</key>
-      <value>puncpat</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>lentagname</key>
+      <key>tag</key>
       <value>pkt_len</value>
     </param>
     <param>
@@ -1510,41 +1270,288 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(883, 156)</value>
+      <value>(860, 224)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
-    <key>variable_cc_encoder_def</key>
+    <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>enc_cc</value>
+      <value>blocks_char_to_float_0_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>0</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>dim1</key>
+      <key>scale</key>
       <value>1</value>
     </param>
     <param>
-      <key>dim2</key>
-      <value>1</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>framebits</key>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(865, 308)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>fec_async_encoder</key>
+    <param>
+      <key>id</key>
+      <value>fec_async_encoder_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>encoder</key>
+      <value>enc_cc</value>
+    </param>
+    <param>
+      <key>packed</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>rev_unpack</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>rev_pack</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(600, 143)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_tagged_stream_to_pdu</key>
+    <param>
+      <key>id</key>
+      <value>blocks_tagged_stream_to_pdu_1</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>tag</key>
+      <value>pkt_len</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(601, 375)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_vector_source_x</key>
+    <param>
+      <key>id</key>
+      <value>blocks_vector_source_x_0_1_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>vector</key>
+      <value>(frame_size/15)*[0, 0, 1, 0, 3, 0, 7, 0, 15, 0, 31, 0, 63, 0, 
127]</value>
+    </param>
+    <param>
+      <key>tags</key>
+      <value>[]</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(60, 140)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>analog_random_source_x</key>
+    <param>
+      <key>id</key>
+      <value>analog_random_source_x_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>min</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>max</key>
+      <value>256</value>
+    </param>
+    <param>
+      <key>num_samps</key>
+      <value>1000</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(50, 502)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>180</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_cc_encoder_def</key>
+    <param>
+      <key>id</key>
+      <value>enc_cc</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>"ok"</value>
+    </param>
+    <param>
+      <key>ndim</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>dim1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>dim2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>framebits</key>
       <value>8000</value>
     </param>
     <param>
@@ -1565,7 +1572,11 @@
     </param>
     <param>
       <key>mode</key>
-      <value>fec.CC_TAILBITING</value>
+      <value>fec.CC_TERMINATED</value>
+    </param>
+    <param>
+      <key>padding</key>
+      <value>False</value>
     </param>
     <param>
       <key>alias</key>
@@ -1596,7 +1607,7 @@
     </param>
     <param>
       <key>ndim</key>
-      <value>1</value>
+      <value>0</value>
     </param>
     <param>
       <key>dim1</key>
@@ -1632,7 +1643,11 @@
     </param>
     <param>
       <key>mode</key>
-      <value>fec.CC_TAILBITING</value>
+      <value>fec.CC_TERMINATED</value>
+    </param>
+    <param>
+      <key>padding</key>
+      <value>False</value>
     </param>
     <param>
       <key>alias</key>
@@ -1640,7 +1655,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(400, 668)</value>
+      <value>(401, 687)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1666,81 +1681,81 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_tagged_stream_to_pdu_0</source_block_id>
-    <sink_block_id>digital_crc32_async_bb_0</sink_block_id>
-    <source_key>pdus</source_key>
-    <sink_key>in</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_crc32_async_bb_0</source_block_id>
-    <sink_block_id>fec_async_encoder_0</sink_block_id>
-    <source_key>out</source_key>
-    <sink_key>in</sink_key>
+    <source_block_id>digital_map_bb_0</source_block_id>
+    <sink_block_id>blocks_char_to_float_0_1</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>fec_async_encoder_0</source_block_id>
-    <sink_block_id>blocks_pdu_to_tagged_stream_0</sink_block_id>
+    <source_block_id>fec_async_decoder_0</source_block_id>
+    <sink_block_id>blocks_pdu_to_tagged_stream_0_0</sink_block_id>
     <source_key>out</source_key>
     <sink_key>pdus</sink_key>
   </connection>
   <connection>
     <source_block_id>blocks_stream_to_tagged_stream_0_0</source_block_id>
-    <sink_block_id>blocks_tagged_stream_to_pdu_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_char_to_float_0_0_0_0</source_block_id>
-    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+    <sink_block_id>blocks_repack_bits_bb_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_crc32_bb_0</source_block_id>
-    <sink_block_id>blocks_char_to_float_0_0_0_0</sink_block_id>
+    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
+    <sink_block_id>blocks_tagged_stream_to_pdu_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
-    <sink_block_id>digital_crc32_bb_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <source_block_id>blocks_tagged_stream_to_pdu_0</source_block_id>
+    <sink_block_id>fec_async_encoder_0</sink_block_id>
+    <source_key>pdus</source_key>
+    <sink_key>in</sink_key>
   </connection>
   <connection>
     <source_block_id>blocks_pdu_to_tagged_stream_0</source_block_id>
-    <sink_block_id>blocks_repack_bits_bb_0</sink_block_id>
+    <sink_block_id>digital_map_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_repack_bits_bb_0</source_block_id>
-    <sink_block_id>digital_map_bb_0</sink_block_id>
+    <source_block_id>blocks_char_to_float_0_1</source_block_id>
+    <sink_block_id>blocks_tagged_stream_to_pdu_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_map_bb_0</source_block_id>
-    <sink_block_id>blocks_char_to_float_0_1</sink_block_id>
+    <source_block_id>blocks_char_to_float_0_0_0_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>fec_extended_decoder_0_1_0</source_block_id>
-    <sink_block_id>blocks_repack_bits_bb_0_0</sink_block_id>
+    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
+    <sink_block_id>blocks_char_to_float_0_1_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_char_to_float_0_1</source_block_id>
-    <sink_block_id>fec_extended_decoder_0_1_0</sink_block_id>
+    <source_block_id>blocks_char_to_float_0_1_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
+    <source_block_id>blocks_pdu_to_tagged_stream_0_0</source_block_id>
     <sink_block_id>blocks_char_to_float_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
+  <connection>
+    <source_block_id>blocks_tagged_stream_to_pdu_1</source_block_id>
+    <sink_block_id>fec_async_decoder_0</sink_block_id>
+    <source_key>pdus</source_key>
+    <sink_key>in</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>fec_async_encoder_0</source_block_id>
+    <sink_block_id>blocks_pdu_to_tagged_stream_0</sink_block_id>
+    <source_key>out</source_key>
+    <sink_key>pdus</sink_key>
+  </connection>
 </flow_graph>
diff --git a/gr-fec/examples/fecapi_async_encoders.grc 
b/gr-fec/examples/fecapi_async_encoders.grc
index 445c0cc..3dd0d0f 100644
--- a/gr-fec/examples/fecapi_async_encoders.grc
+++ b/gr-fec/examples/fecapi_async_encoders.grc
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Sat May 17 17:21:35 2014</timestamp>
+  <timestamp>Mon May 19 16:19:57 2014</timestamp>
   <block>
     <key>options</key>
     <param>
@@ -333,61 +333,6 @@
     </param>
   </block>
   <block>
-    <key>blocks_repack_bits_bb</key>
-    <param>
-      <key>id</key>
-      <value>blocks_repack_bits_bb_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>k</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>l</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>align_output</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>swap</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(374, 368)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
     <key>blocks_pdu_to_tagged_stream</key>
     <param>
       <key>id</key>
@@ -431,49 +376,6 @@
     </param>
   </block>
   <block>
-    <key>blocks_char_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_char_to_float_0_1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1027, 297)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
     <key>qtgui_time_sink_x</key>
     <param>
       <key>id</key>
@@ -907,61 +809,6 @@
     </param>
   </block>
   <block>
-    <key>blocks_repack_bits_bb</key>
-    <param>
-      <key>id</key>
-      <value>blocks_repack_bits_bb_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>k</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>l</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>align_output</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>swap</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(803, 265)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
     <key>blocks_throttle</key>
     <param>
       <key>id</key>
@@ -1107,100 +954,6 @@
     </param>
   </block>
   <block>
-    <key>fec_async_encoder</key>
-    <param>
-      <key>id</key>
-      <value>fec_async_encoder_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>encoder</key>
-      <value>enc_cc</value>
-    </param>
-    <param>
-      <key>rev_unpack</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>rev_pack</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(371, 281)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>fec_extended_tagged_encoder</key>
-    <param>
-      <key>id</key>
-      <value>fec_extended_tagged_encoder_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>encoder_list</key>
-      <value>enc_cc</value>
-    </param>
-    <param>
-      <key>puncpat</key>
-      <value>puncpat</value>
-    </param>
-    <param>
-      <key>lentagname</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(588, 384)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
     <key>variable_cc_encoder_def</key>
     <param>
       <key>id</key>
@@ -1251,6 +1004,10 @@
       <value>fec.CC_STREAMING</value>
     </param>
     <param>
+      <key>padding</key>
+      <value>False</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -1451,6 +1208,10 @@
       <value>fec.CC_STREAMING</value>
     </param>
     <param>
+      <key>padding</key>
+      <value>False</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -1506,6 +1267,249 @@
       <value>0</value>
     </param>
   </block>
+  <block>
+    <key>fec_async_encoder</key>
+    <param>
+      <key>id</key>
+      <value>fec_async_encoder_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>encoder</key>
+      <value>enc_cc</value>
+    </param>
+    <param>
+      <key>packed</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>rev_unpack</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>rev_pack</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(349, 296)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_repack_bits_bb</key>
+    <param>
+      <key>id</key>
+      <value>blocks_repack_bits_bb_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>k</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>l</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>len_tag_key</key>
+      <value>pkt_len</value>
+    </param>
+    <param>
+      <key>align_output</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(804, 273)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_char_to_float</key>
+    <param>
+      <key>id</key>
+      <value>blocks_char_to_float_0_1</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>scale</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1034, 297)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_repack_bits_bb</key>
+    <param>
+      <key>id</key>
+      <value>blocks_repack_bits_bb_0_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>k</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>l</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>len_tag_key</key>
+      <value>pkt_len</value>
+    </param>
+    <param>
+      <key>align_output</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(331, 376)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>fec_extended_tagged_encoder</key>
+    <param>
+      <key>id</key>
+      <value>fec_extended_tagged_encoder_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>encoder_list</key>
+      <value>enc_cc</value>
+    </param>
+    <param>
+      <key>puncpat</key>
+      <value>puncpat</value>
+    </param>
+    <param>
+      <key>lentagname</key>
+      <value>pkt_len</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(553, 384)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
   <connection>
     <source_block_id>blocks_vector_source_x_0_1_0</source_block_id>
     <sink_block_id>blocks_throttle_0</sink_block_id>
diff --git a/gr-fec/examples/fecapi_async_decoders.grc 
b/gr-fec/examples/fecapi_async_packed_decoders.grc
similarity index 90%
copy from gr-fec/examples/fecapi_async_decoders.grc
copy to gr-fec/examples/fecapi_async_packed_decoders.grc
index 2598e84..dc8fdcb 100644
--- a/gr-fec/examples/fecapi_async_decoders.grc
+++ b/gr-fec/examples/fecapi_async_packed_decoders.grc
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Sat May 17 11:37:22 2014</timestamp>
+  <timestamp>Mon May 19 19:35:27 2014</timestamp>
   <block>
     <key>options</key>
     <param>
@@ -68,7 +68,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>samp_rate</value>
+      <value>rep</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -76,7 +76,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>50000</value>
+      <value>3</value>
     </param>
     <param>
       <key>alias</key>
@@ -84,7 +84,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(10, 73)</value>
+      <value>(785, 473)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -95,7 +95,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>k</value>
+      <value>rate</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -103,7 +103,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>7</value>
+      <value>2</value>
     </param>
     <param>
       <key>alias</key>
@@ -111,7 +111,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(264, 535)</value>
+      <value>(332, 536)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -149,7 +149,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>rate</value>
+      <value>k</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -157,7 +157,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>2</value>
+      <value>7</value>
     </param>
     <param>
       <key>alias</key>
@@ -165,7 +165,34 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(332, 536)</value>
+      <value>(264, 535)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>50000</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(10, 73)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -278,10 +305,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_vector_source_x</key>
+    <key>blocks_throttle</key>
     <param>
       <key>id</key>
-      <value>blocks_vector_source_x_0_1_0</value>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -292,22 +319,18 @@
       <value>byte</value>
     </param>
     <param>
-      <key>vector</key>
-      <value>(frame_size/15)*[0, 0, 1, 0, 3, 0, 7, 0, 15, 0, 31, 0, 63, 0, 
127]</value>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>tags</key>
-      <value>[]</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>repeat</key>
+      <key>ignoretag</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -325,37 +348,41 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(61, 140)</value>
+      <value>(109, 224)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>analog_random_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>analog_random_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>False</value>
     </param>
     <param>
       <key>type</key>
       <value>byte</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
+      <key>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>max</key>
+      <value>256</value>
     </param>
     <param>
-      <key>ignoretag</key>
+      <key>num_samps</key>
+      <value>1000</value>
+    </param>
+    <param>
+      <key>repeat</key>
       <value>True</value>
     </param>
     <param>
@@ -376,18 +403,18 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(109, 224)</value>
+      <value>(50, 502)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
-    <key>blocks_stream_to_tagged_stream</key>
+    <key>blocks_vector_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_stream_to_tagged_stream_0_0</value>
+      <value>blocks_vector_source_x_0_1_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -398,16 +425,20 @@
       <value>byte</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>vector</key>
+      <value>(frame_size/15)*[0, 0, 1, 0, 3, 0, 7, 0, 15, 0, 31, 0, 63, 0, 
127]</value>
     </param>
     <param>
-      <key>packet_len</key>
-      <value>frame_size</value>
+      <key>tags</key>
+      <value>[]</value>
     </param>
     <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -427,7 +458,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(83, 279)</value>
+      <value>(60, 140)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -435,85 +466,97 @@
     </param>
   </block>
   <block>
-    <key>blocks_tagged_stream_to_pdu</key>
+    <key>variable_repetition_encoder_def</key>
     <param>
       <key>id</key>
-      <value>blocks_tagged_stream_to_pdu_0</value>
+      <value>enc_rep</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>value</key>
+      <value>"ok"</value>
     </param>
     <param>
-      <key>tag</key>
-      <value>pkt_len</value>
+      <key>ndim</key>
+      <value>0</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>dim1</key>
+      <value>4</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>dim2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>framebits</key>
+      <value>8000</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>rep</key>
+      <value>rep</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(83, 369)</value>
+      <value>(781, 538)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>blocks_char_to_float</key>
+    <key>variable_repetition_decoder_def</key>
     <param>
       <key>id</key>
-      <value>blocks_char_to_float_0_1</value>
+      <value>dec_rep</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>value</key>
+      <value>"ok"</value>
+    </param>
+    <param>
+      <key>ndim</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>dim1</key>
       <value>1</value>
     </param>
     <param>
-      <key>scale</key>
+      <key>dim2</key>
       <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>framebits</key>
+      <value>8000</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>rep</key>
+      <value>rep</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>prob</key>
+      <value>0.5</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(707, 188)</value>
+      <value>(781, 651)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -521,18 +564,22 @@
     </param>
   </block>
   <block>
-    <key>digital_crc32_async_bb</key>
+    <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>digital_crc32_async_bb_0</value>
+      <value>blocks_char_to_float_0_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>check</key>
-      <value>False</value>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>scale</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -552,7 +599,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(101, 441)</value>
+      <value>(865, 308)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -560,34 +607,22 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>blocks_pdu_to_tagged_stream</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>blocks_pdu_to_tagged_stream_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>False</value>
+      <value>True</value>
     </param>
     <param>
       <key>type</key>
       <value>byte</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>256</value>
-    </param>
-    <param>
-      <key>num_samps</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>tag</key>
+      <value>pkt_len</value>
     </param>
     <param>
       <key>alias</key>
@@ -607,7 +642,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(50, 502)</value>
+      <value>(860, 224)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -615,89 +650,50 @@
     </param>
   </block>
   <block>
-    <key>variable_repetition_encoder_def</key>
+    <key>blocks_stream_to_tagged_stream</key>
     <param>
       <key>id</key>
-      <value>enc_rep</value>
+      <value>blocks_stream_to_tagged_stream_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>dim1</key>
-      <value>4</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>dim2</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>framebits</key>
-      <value>8000</value>
+      <key>packet_len</key>
+      <value>frame_size</value>
     </param>
     <param>
-      <key>rep</key>
-      <value>3</value>
+      <key>len_tag_key</key>
+      <value>pkt_len</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(781, 538)</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>variable_dummy_decoder_def</key>
-    <param>
-      <key>id</key>
-      <value>dec_dummy</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>1</value>
-    </param>
     <param>
-      <key>dim1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>dim2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>framebits</key>
-      <value>8000</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(598, 636)</value>
+      <value>(93, 328)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -705,93 +701,42 @@
     </param>
   </block>
   <block>
-    <key>variable_repetition_decoder_def</key>
+    <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>dec_rep</value>
+      <value>blocks_char_to_float_0_1_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>dim1</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>dim2</key>
+      <key>scale</key>
       <value>1</value>
     </param>
     <param>
-      <key>framebits</key>
-      <value>8000</value>
-    </param>
-    <param>
-      <key>rep</key>
-      <value>3</value>
-    </param>
-    <param>
-      <key>prob</key>
-      <value>0.5</value>
-    </param>
-    <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(781, 651)</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>variable_dummy_encoder_def</key>
-    <param>
-      <key>id</key>
-      <value>enc_dummy</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
     <param>
-      <key>ndim</key>
+      <key>maxoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>dim1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>dim2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>framebits</key>
-      <value>8000</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(599, 538)</value>
+      <value>(362, 429)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -799,18 +744,22 @@
     </param>
   </block>
   <block>
-    <key>digital_map_bb</key>
+    <key>blocks_tagged_stream_to_pdu</key>
     <param>
       <key>id</key>
-      <value>digital_map_bb_0</value>
+      <value>blocks_tagged_stream_to_pdu_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>map</key>
-      <value>[-1,1]</value>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>tag</key>
+      <value>pkt_len</value>
     </param>
     <param>
       <key>alias</key>
@@ -830,7 +779,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(713, 279)</value>
+      <value>(363, 112)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -838,36 +787,24 @@
     </param>
   </block>
   <block>
-    <key>blocks_repack_bits_bb</key>
+    <key>blocks_pdu_to_tagged_stream</key>
     <param>
       <key>id</key>
-      <value>blocks_repack_bits_bb_0</value>
+      <value>blocks_pdu_to_tagged_stream_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>k</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>l</key>
-      <value>1</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>len_tag_key</key>
+      <key>tag</key>
       <value>pkt_len</value>
     </param>
     <param>
-      <key>align_output</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>swap</key>
-      <value>False</value>
-    </param>
-    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -885,7 +822,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(452, 354)</value>
+      <value>(408, 190)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -893,24 +830,32 @@
     </param>
   </block>
   <block>
-    <key>blocks_pdu_to_tagged_stream</key>
+    <key>blocks_repack_bits_bb</key>
     <param>
       <key>id</key>
-      <value>blocks_pdu_to_tagged_stream_0</value>
+      <value>blocks_repack_bits_bb_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>k</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>l</key>
+      <value>1</value>
     </param>
     <param>
-      <key>tag</key>
+      <key>len_tag_key</key>
       <value>pkt_len</value>
     </param>
     <param>
+      <key>align_output</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -928,42 +873,26 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(400, 252)</value>
+      <value>(544, 256)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
-    <key>blocks_repack_bits_bb</key>
+    <key>digital_map_bb</key>
     <param>
       <key>id</key>
-      <value>blocks_repack_bits_bb_0_0</value>
+      <value>digital_map_bb_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>k</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>l</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
-    </param>
-    <param>
-      <key>align_output</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>swap</key>
-      <value>False</value>
+      <key>map</key>
+      <value>[-1,1]</value>
     </param>
     <param>
       <key>alias</key>
@@ -983,18 +912,18 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(925, 309)</value>
+      <value>(379, 280)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
     <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>blocks_char_to_float_0_0_0_0</value>
+      <value>blocks_char_to_float_0_1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1026,7 +955,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1200, 191)</value>
+      <value>(372, 367)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1034,21 +963,21 @@
     </param>
   </block>
   <block>
-    <key>digital_crc32_bb</key>
+    <key>blocks_tagged_stream_to_pdu</key>
     <param>
       <key>id</key>
-      <value>digital_crc32_bb_0</value>
+      <value>blocks_tagged_stream_to_pdu_1</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>False</value>
+      <value>True</value>
     </param>
     <param>
-      <key>check</key>
-      <value>True</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>lengthtagname</key>
+      <key>tag</key>
       <value>pkt_len</value>
     </param>
     <param>
@@ -1069,7 +998,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1214, 332)</value>
+      <value>(583, 367)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1116,7 +1045,7 @@
     </param>
     <param>
       <key>nconnections</key>
-      <value>1</value>
+      <value>2</value>
     </param>
     <param>
       <key>update_time</key>
@@ -1156,7 +1085,7 @@
     </param>
     <param>
       <key>label1</key>
-      <value>Input</value>
+      <value>Decoded</value>
     </param>
     <param>
       <key>width1</key>
@@ -1180,7 +1109,7 @@
     </param>
     <param>
       <key>label2</key>
-      <value>Dummy</value>
+      <value>Input</value>
     </param>
     <param>
       <key>width2</key>
@@ -1404,7 +1333,58 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1364, 167)</value>
+      <value>(1059, 368)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_ccsds_encoder_def</key>
+    <param>
+      <key>id</key>
+      <value>enc_ccsds</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>"ok"</value>
+    </param>
+    <param>
+      <key>ndim</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>dim1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>dim2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>framebits</key>
+      <value>8000</value>
+    </param>
+    <param>
+      <key>state_start</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>mode</key>
+      <value>fec.CC_STREAMING</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(995, 506)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1426,6 +1406,10 @@
       <value>enc_cc</value>
     </param>
     <param>
+      <key>packed</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>rev_unpack</key>
       <value>True</value>
     </param>
@@ -1451,7 +1435,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(429, 148)</value>
+      <value>(599, 112)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1459,58 +1443,132 @@
     </param>
   </block>
   <block>
-    <key>fec_extended_decoder</key>
+    <key>fec_async_decoder</key>
     <param>
       <key>id</key>
-      <value>fec_extended_decoder_0_1_0</value>
+      <value>fec_async_decoder_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>fec_extended_decoder</value>
+      <key>decoder</key>
+      <value>dec_cc</value>
     </param>
     <param>
-      <key>decoder_list</key>
-      <value>dec_cc</value>
+      <key>packed</key>
+      <value>True</value>
     </param>
     <param>
-      <key>threadtype</key>
-      <value>none</value>
+      <key>rev_pack</key>
+      <value>True</value>
     </param>
     <param>
-      <key>ann</key>
-      <value>None</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>puncpat</key>
-      <value>puncpat</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>lentagname</key>
-      <value>pkt_len</value>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(851, 111)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_dummy_decoder_def</key>
+    <param>
+      <key>id</key>
+      <value>dec_dummy</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>"ok"</value>
+    </param>
+    <param>
+      <key>ndim</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>dim1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>dim2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>framebits</key>
+      <value>8000</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(598, 636)</value>
     </param>
     <param>
-      <key>minoutbuf</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable_dummy_encoder_def</key>
     <param>
-      <key>maxoutbuf</key>
+      <key>id</key>
+      <value>enc_dummy</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>"ok"</value>
+    </param>
+    <param>
+      <key>ndim</key>
       <value>0</value>
     </param>
     <param>
+      <key>dim1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>dim2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>framebits</key>
+      <value>8000</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(883, 156)</value>
+      <value>(599, 538)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1565,7 +1623,11 @@
     </param>
     <param>
       <key>mode</key>
-      <value>fec.CC_TAILBITING</value>
+      <value>fec.CC_TERMINATED</value>
+    </param>
+    <param>
+      <key>padding</key>
+      <value>False</value>
     </param>
     <param>
       <key>alias</key>
@@ -1596,7 +1658,7 @@
     </param>
     <param>
       <key>ndim</key>
-      <value>1</value>
+      <value>0</value>
     </param>
     <param>
       <key>dim1</key>
@@ -1632,7 +1694,11 @@
     </param>
     <param>
       <key>mode</key>
-      <value>fec.CC_TAILBITING</value>
+      <value>fec.CC_TERMINATED</value>
+    </param>
+    <param>
+      <key>padding</key>
+      <value>False</value>
     </param>
     <param>
       <key>alias</key>
@@ -1640,7 +1706,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(400, 668)</value>
+      <value>(402, 687)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1666,50 +1732,44 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_tagged_stream_to_pdu_0</source_block_id>
-    <sink_block_id>digital_crc32_async_bb_0</sink_block_id>
-    <source_key>pdus</source_key>
-    <sink_key>in</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_crc32_async_bb_0</source_block_id>
-    <sink_block_id>fec_async_encoder_0</sink_block_id>
-    <source_key>out</source_key>
-    <sink_key>in</sink_key>
+    <source_block_id>digital_map_bb_0</source_block_id>
+    <sink_block_id>blocks_char_to_float_0_1</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>fec_async_encoder_0</source_block_id>
-    <sink_block_id>blocks_pdu_to_tagged_stream_0</sink_block_id>
+    <source_block_id>fec_async_decoder_0</source_block_id>
+    <sink_block_id>blocks_pdu_to_tagged_stream_0_0</sink_block_id>
     <source_key>out</source_key>
     <sink_key>pdus</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_stream_to_tagged_stream_0_0</source_block_id>
-    <sink_block_id>blocks_tagged_stream_to_pdu_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
     <source_block_id>blocks_char_to_float_0_0_0_0</source_block_id>
     <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_crc32_bb_0</source_block_id>
+    <source_block_id>blocks_pdu_to_tagged_stream_0_0</source_block_id>
     <sink_block_id>blocks_char_to_float_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
-    <sink_block_id>digital_crc32_bb_0</sink_block_id>
+    <source_block_id>blocks_char_to_float_0_1_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>1</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_stream_to_tagged_stream_0_0</source_block_id>
+    <sink_block_id>blocks_char_to_float_0_1_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_pdu_to_tagged_stream_0</source_block_id>
-    <sink_block_id>blocks_repack_bits_bb_0</sink_block_id>
+    <source_block_id>blocks_stream_to_tagged_stream_0_0</source_block_id>
+    <sink_block_id>blocks_tagged_stream_to_pdu_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
@@ -1720,26 +1780,32 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_map_bb_0</source_block_id>
-    <sink_block_id>blocks_char_to_float_0_1</sink_block_id>
+    <source_block_id>blocks_pdu_to_tagged_stream_0</source_block_id>
+    <sink_block_id>blocks_repack_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>fec_extended_decoder_0_1_0</source_block_id>
-    <sink_block_id>blocks_repack_bits_bb_0_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <source_block_id>blocks_tagged_stream_to_pdu_1</source_block_id>
+    <sink_block_id>fec_async_decoder_0</sink_block_id>
+    <source_key>pdus</source_key>
+    <sink_key>in</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_char_to_float_0_1</source_block_id>
-    <sink_block_id>fec_extended_decoder_0_1_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <source_block_id>fec_async_encoder_0</source_block_id>
+    <sink_block_id>blocks_pdu_to_tagged_stream_0</sink_block_id>
+    <source_key>out</source_key>
+    <sink_key>pdus</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
-    <sink_block_id>blocks_char_to_float_0_0_0_0</sink_block_id>
+    <source_block_id>blocks_tagged_stream_to_pdu_0</source_block_id>
+    <sink_block_id>fec_async_encoder_0</sink_block_id>
+    <source_key>pdus</source_key>
+    <sink_key>in</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_char_to_float_0_1</source_block_id>
+    <sink_block_id>blocks_tagged_stream_to_pdu_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
diff --git a/gr-fec/examples/fecapi_async_to_stream.grc 
b/gr-fec/examples/fecapi_async_to_stream.grc
index 0692573..84e10e7 100644
--- a/gr-fec/examples/fecapi_async_to_stream.grc
+++ b/gr-fec/examples/fecapi_async_to_stream.grc
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Sat May 17 19:23:33 2014</timestamp>
+  <timestamp>Mon May 19 17:07:45 2014</timestamp>
   <block>
     <key>options</key>
     <param>
@@ -637,10 +637,6 @@
       <value>False</value>
     </param>
     <param>
-      <key>swap</key>
-      <value>False</value>
-    </param>
-    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -1606,22 +1602,34 @@
     </param>
   </block>
   <block>
-    <key>blocks_char_to_float</key>
+    <key>fec_extended_tagged_decoder</key>
     <param>
       <key>id</key>
-      <value>blocks_char_to_float_0_0_0_0</value>
+      <value>fec_extended_tagged_decoder_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>value</key>
+      <value>fec_extended_decoder</value>
     </param>
     <param>
-      <key>scale</key>
-      <value>1</value>
+      <key>decoder_list</key>
+      <value>dec_cc</value>
+    </param>
+    <param>
+      <key>ann</key>
+      <value>None</value>
+    </param>
+    <param>
+      <key>puncpat</key>
+      <value>puncpat</value>
+    </param>
+    <param>
+      <key>lentagname</key>
+      <value>pkt_len</value>
     </param>
     <param>
       <key>alias</key>
@@ -1641,7 +1649,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1200, 191)</value>
+      <value>(875, 164)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1649,54 +1657,70 @@
     </param>
   </block>
   <block>
-    <key>blocks_repack_bits_bb</key>
+    <key>variable_cc_decoder_def</key>
     <param>
       <key>id</key>
-      <value>blocks_repack_bits_bb_0_0</value>
+      <value>dec_cc</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>k</key>
-      <value>1</value>
+      <key>value</key>
+      <value>"ok"</value>
     </param>
     <param>
-      <key>l</key>
-      <value>8</value>
+      <key>ndim</key>
+      <value>0</value>
     </param>
     <param>
-      <key>len_tag_key</key>
-      <value>pkt_len</value>
+      <key>dim1</key>
+      <value>1</value>
     </param>
     <param>
-      <key>align_output</key>
-      <value>False</value>
+      <key>dim2</key>
+      <value>4</value>
     </param>
     <param>
-      <key>swap</key>
-      <value>False</value>
+      <key>framebits</key>
+      <value>8000</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>k</key>
+      <value>k</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>rate</key>
+      <value>rate</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>polys</key>
+      <value>polys</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
+      <key>state_start</key>
       <value>0</value>
     </param>
     <param>
+      <key>state_end</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>mode</key>
+      <value>fec.CC_TERMINATED</value>
+    </param>
+    <param>
+      <key>padding</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(925, 309)</value>
+      <value>(400, 684)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1704,42 +1728,66 @@
     </param>
   </block>
   <block>
-    <key>digital_crc32_bb</key>
+    <key>variable_cc_encoder_def</key>
     <param>
       <key>id</key>
-      <value>digital_crc32_bb_0</value>
+      <value>enc_cc</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>check</key>
-      <value>True</value>
+      <key>value</key>
+      <value>"ok"</value>
     </param>
     <param>
-      <key>lengthtagname</key>
-      <value>pkt_len</value>
+      <key>ndim</key>
+      <value>0</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>dim1</key>
+      <value>1</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>dim2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>framebits</key>
+      <value>8000</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
+      <key>k</key>
+      <value>k</value>
+    </param>
+    <param>
+      <key>rate</key>
+      <value>rate</value>
+    </param>
+    <param>
+      <key>polys</key>
+      <value>polys</value>
+    </param>
+    <param>
+      <key>state_start</key>
       <value>0</value>
     </param>
     <param>
+      <key>mode</key>
+      <value>fec.CC_TERMINATED</value>
+    </param>
+    <param>
+      <key>padding</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(1214, 332)</value>
+      <value>(401, 510)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1747,26 +1795,30 @@
     </param>
   </block>
   <block>
-    <key>fec_async_encoder</key>
+    <key>blocks_repack_bits_bb</key>
     <param>
       <key>id</key>
-      <value>fec_async_encoder_0</value>
+      <value>blocks_repack_bits_bb_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>encoder</key>
-      <value>enc_cc</value>
+      <key>k</key>
+      <value>1</value>
     </param>
     <param>
-      <key>rev_unpack</key>
-      <value>True</value>
+      <key>l</key>
+      <value>8</value>
     </param>
     <param>
-      <key>rev_pack</key>
-      <value>True</value>
+      <key>len_tag_key</key>
+      <value>pkt_len</value>
+    </param>
+    <param>
+      <key>align_output</key>
+      <value>False</value>
     </param>
     <param>
       <key>alias</key>
@@ -1786,7 +1838,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(429, 148)</value>
+      <value>(925, 309)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1794,34 +1846,22 @@
     </param>
   </block>
   <block>
-    <key>fec_extended_tagged_decoder</key>
+    <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>fec_extended_tagged_decoder_0</value>
+      <value>blocks_char_to_float_0_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>fec_extended_decoder</value>
-    </param>
-    <param>
-      <key>decoder_list</key>
-      <value>dec_cc</value>
-    </param>
-    <param>
-      <key>ann</key>
-      <value>None</value>
-    </param>
-    <param>
-      <key>puncpat</key>
-      <value>puncpat</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>lentagname</key>
-      <value>pkt_len</value>
+      <key>scale</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -1841,7 +1881,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(875, 164)</value>
+      <value>(1200, 191)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1849,70 +1889,50 @@
     </param>
   </block>
   <block>
-    <key>variable_cc_decoder_def</key>
+    <key>fec_async_encoder</key>
     <param>
       <key>id</key>
-      <value>dec_cc</value>
+      <value>fec_async_encoder_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>dim1</key>
-      <value>1</value>
+      <key>encoder</key>
+      <value>enc_cc</value>
     </param>
     <param>
-      <key>dim2</key>
-      <value>4</value>
+      <key>packed</key>
+      <value>True</value>
     </param>
     <param>
-      <key>framebits</key>
-      <value>8000</value>
+      <key>rev_unpack</key>
+      <value>True</value>
     </param>
     <param>
-      <key>k</key>
-      <value>k</value>
+      <key>rev_pack</key>
+      <value>True</value>
     </param>
     <param>
-      <key>rate</key>
-      <value>rate</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>polys</key>
-      <value>polys</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>state_start</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>state_end</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>mode</key>
-      <value>fec.CC_TERMINATED</value>
-    </param>
-    <param>
-      <key>padding</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(400, 684)</value>
+      <value>(429, 148)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1920,66 +1940,42 @@
     </param>
   </block>
   <block>
-    <key>variable_cc_encoder_def</key>
+    <key>digital_crc32_bb</key>
     <param>
       <key>id</key>
-      <value>enc_cc</value>
+      <value>digital_crc32_bb_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"ok"</value>
-    </param>
-    <param>
-      <key>ndim</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>dim1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>dim2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>framebits</key>
-      <value>8000</value>
+      <key>check</key>
+      <value>True</value>
     </param>
     <param>
-      <key>k</key>
-      <value>k</value>
+      <key>lengthtagname</key>
+      <value>pkt_len</value>
     </param>
     <param>
-      <key>rate</key>
-      <value>rate</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>polys</key>
-      <value>polys</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>state_start</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>mode</key>
-      <value>fec.CC_TERMINATED</value>
-    </param>
-    <param>
-      <key>padding</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(401, 510)</value>
+      <value>(1214, 332)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2041,12 +2037,6 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
-    <sink_block_id>digital_crc32_bb_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
     <source_block_id>blocks_pdu_to_tagged_stream_0</source_block_id>
     <sink_block_id>blocks_repack_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
@@ -2082,4 +2072,10 @@
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
+  <connection>
+    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
+    <sink_block_id>digital_crc32_bb_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
 </flow_graph>
diff --git a/gr-fec/grc/fec_async_decoder.xml b/gr-fec/grc/fec_async_decoder.xml
index 1f9ff99..30bf0d1 100644
--- a/gr-fec/grc/fec_async_decoder.xml
+++ b/gr-fec/grc/fec_async_decoder.xml
@@ -3,44 +3,43 @@
   <name>FEC Async Decoder</name>
   <key>fec_async_decoder</key>
   <import>from gnuradio import fec</import>
-  <make>fec.async_decoder($decoder, $itype.size, $otype.size)</make>
+  <make>fec.async_decoder($decoder, $packed, $rev_pack)</make>
 
   <param>
-    <name>Constituent Decoder</name>
+    <name>Decoder Obj.</name>
     <key>decoder</key>
-    <value>decoder_variable</value>
     <type>raw</type>
   </param>
 
   <param>
-    <name>Input Type</name>
-    <key>itype</key>
+    <name>Packed</name>
+    <key>packed</key>
+    <value>False</value>
     <type>enum</type>
+    <hide>part</hide>
     <option>
-      <name>Byte</name>
-      <key>byte</key>
-      <opt>size:gr.sizeof_char</opt>
+      <name>No</name>
+      <key>False</key>
     </option>
     <option>
-      <name>Float</name>
-      <key>float</key>
-      <opt>size:gr.sizeof_float</opt>
+      <name>Yes</name>
+      <key>True</key>
     </option>
   </param>
 
   <param>
-    <name>Output Type</name>
-    <key>otype</key>
+    <name>Rev. Packing</name>
+    <key>rev_pack</key>
+    <value>True</value>
     <type>enum</type>
+    <hide>#if $packed() == 'True' then 'part' else 'all'#</hide>
     <option>
-      <name>Byte</name>
-      <key>byte</key>
-      <opt>size:gr.sizeof_char</opt>
+      <name>Yes</name>
+      <key>True</key>
     </option>
     <option>
-      <name>Float</name>
-      <key>float</key>
-      <opt>size:gr.sizeof_float</opt>
+      <name>No</name>
+      <key>False</key>
     </option>
   </param>
 
diff --git a/gr-fec/grc/fec_async_encoder.xml b/gr-fec/grc/fec_async_encoder.xml
index 16a01ed..55b1acd 100644
--- a/gr-fec/grc/fec_async_encoder.xml
+++ b/gr-fec/grc/fec_async_encoder.xml
@@ -3,20 +3,36 @@
   <name>FEC Async Encoder</name>
   <key>fec_async_encoder</key>
   <import>from gnuradio import fec</import>
-  <make>fec.async_encoder($encoder, $rev_unpack, $rev_pack)</make>
+  <make>fec.async_encoder($encoder, $packed, $rev_unpack, $rev_pack)</make>
 
   <param>
     <name>Encoder Obj.</name>
     <key>encoder</key>
-    <value>encoder_variable</value>
     <type>raw</type>
   </param>
 
   <param>
+    <name>Packed</name>
+    <key>packed</key>
+    <value>False</value>
+    <type>enum</type>
+    <hide>part</hide>
+    <option>
+      <name>No</name>
+      <key>False</key>
+    </option>
+    <option>
+      <name>Yes</name>
+      <key>True</key>
+    </option>
+  </param>
+
+  <param>
     <name>Rev. Unpacking</name>
     <key>rev_unpack</key>
     <value>True</value>
     <type>enum</type>
+    <hide>#if $packed() == 'True' then 'part' else 'all'#</hide>
     <option>
       <name>Yes</name>
       <key>True</key>
@@ -32,6 +48,7 @@
     <key>rev_pack</key>
     <value>True</value>
     <type>enum</type>
+    <hide>#if $packed() == 'True' then 'part' else 'all'#</hide>
     <option>
       <name>Yes</name>
       <key>True</key>
diff --git a/gr-fec/include/gnuradio/fec/async_decoder.h 
b/gr-fec/include/gnuradio/fec/async_decoder.h
index b68bd71..46fa9be 100644
--- a/gr-fec/include/gnuradio/fec/async_decoder.h
+++ b/gr-fec/include/gnuradio/fec/async_decoder.h
@@ -50,12 +50,11 @@ namespace gr {
        * Build the PDU-based FEC decoder block from an FECAPI decoder object.
        *
        * \param my_decoder An FECAPI decoder object child of the 
generic_decoder class.
-       * \param input_item_size size of a block of data for the decoder.
-       * \param output_item_size size of a block of data the decoder will 
produce.
+       * \param packed Sets output to packed bytes if true; otherwise, 1 bit 
per byte
+       * \param rev_pack If packing bits, should they be reversed?
        */
       static sptr make(generic_decoder::sptr my_decoder,
-                       size_t input_item_size,
-                       size_t output_item_size);
+                       bool packed=false, bool rev_pack=true);
 
       virtual int general_work(int noutput_items,
                                gr_vector_int& ninput_items,
diff --git a/gr-fec/include/gnuradio/fec/async_encoder.h 
b/gr-fec/include/gnuradio/fec/async_encoder.h
index d0d160e..cbaba97 100644
--- a/gr-fec/include/gnuradio/fec/async_encoder.h
+++ b/gr-fec/include/gnuradio/fec/async_encoder.h
@@ -50,10 +50,12 @@ namespace gr {
        * Build the PDU-based FEC encoder block from an FECAPI encoder object.
        *
        * \param my_encoder An FECAPI encoder object child of the 
generic_encoder class.
+       * \param packed True if working on packed bytes (like PDUs)
        * \param rev_unpack Reverse the unpacking order from input bytes to bits
        * \param rev_pack Reverse the packing order from bits to output bytes
        */
       static sptr make(generic_encoder::sptr my_encoder,
+                       bool packed=false,
                        bool rev_unpack=true, bool rev_pack=true);
 
       virtual int general_work(int noutput_items,
diff --git a/gr-fec/lib/async_decoder_impl.cc b/gr-fec/lib/async_decoder_impl.cc
index d3cfd2c..8e97476 100644
--- a/gr-fec/lib/async_decoder_impl.cc
+++ b/gr-fec/lib/async_decoder_impl.cc
@@ -26,76 +26,188 @@
 
 #include "async_decoder_impl.h"
 #include <gnuradio/io_signature.h>
+#include <volk/volk.h>
 #include <stdio.h>
 
-
 namespace gr {
   namespace fec {
 
     async_decoder::sptr
     async_decoder::make(generic_decoder::sptr my_decoder,
-                        size_t input_item_size, size_t output_item_size)
+                        bool packed, bool rev_pack)
     {
       return gnuradio::get_initial_sptr
-        (new async_decoder_impl(my_decoder, input_item_size, 
output_item_size));
+        (new async_decoder_impl(my_decoder, packed, rev_pack));
     }
 
     async_decoder_impl::async_decoder_impl(generic_decoder::sptr my_decoder,
-                                           size_t input_item_size,
-                                           size_t output_item_size)
+                                           bool packed, bool rev_pack)
       : block("async_decoder",
               io_signature::make(0,0,0),
               io_signature::make(0,0,0)),
-        d_input_item_size(input_item_size), 
d_output_item_size(output_item_size)
+        d_input_item_size(sizeof(float)), d_output_item_size(sizeof(char))
     {
+      d_in_port = pmt::mp("in");
+      d_out_port = pmt::mp("out");
+
       d_decoder = my_decoder;
-      message_port_register_in(pmt::mp("in"));
-      message_port_register_out(pmt::mp("out"));
-      set_msg_handler(pmt::mp("pdus"), 
boost::bind(&async_decoder_impl::decode, this ,_1));
+
+      if(d_decoder->get_history() > 0) {
+        throw std::runtime_error("async_decoder deploment does not support 
decoders with history requirements.");
+      }
+
+      d_packed = packed;
+      d_rev_pack = rev_pack;
+
+      message_port_register_in(d_in_port);
+      message_port_register_out(d_out_port);
+
+      if(d_packed) {
+        d_pack = new blocks::kernel::pack_k_bits(8);
+        set_msg_handler(d_in_port, 
boost::bind(&async_decoder_impl::decode_packed, this ,_1));
+      }
+      else {
+        set_msg_handler(d_in_port, 
boost::bind(&async_decoder_impl::decode_unpacked, this ,_1));
+      }
+
+      // The maximum frame size is set by the initial frame size of the 
decoder.
+      d_max_bits_in = d_decoder->get_input_size();
+      d_tmp_f32 = (float*)volk_malloc(d_max_bits_in*sizeof(float),
+                                      volk_get_alignment());
+
+      if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) {
+        d_tmp_u8 = (int8_t*)volk_malloc(d_max_bits_in*sizeof(uint8_t),
+                                        volk_get_alignment());
+      }
+
+      if(d_packed) {
+        int max_bits_out = d_decoder->get_output_size();
+        d_bits_out = (uint8_t*)volk_malloc(max_bits_out*sizeof(uint8_t),
+                                           volk_get_alignment());
+      }
     }
 
     async_decoder_impl::~async_decoder_impl()
     {
+      if(d_packed) {
+        delete d_pack;
+        delete d_bits_out;
+      }
+
+      volk_free(d_tmp_f32);
+
+      if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) {
+        volk_free(d_tmp_u8);
+      }
     }
 
     void
-    async_decoder_impl::decode(pmt::pmt_t msg)
+    async_decoder_impl::decode_unpacked(pmt::pmt_t msg)
     {
       // extract input pdu
       pmt::pmt_t meta(pmt::car(msg));
       pmt::pmt_t bits(pmt::cdr(msg));
 
-      int nbits = pmt::length(bits);
-      int blksize_in = d_decoder->get_input_size();
-      int blksize_out = d_decoder->get_output_size();
-      int nblocks = nbits/blksize_in;
+      // Watch out for this diff. It might be over-specializing to the
+      // CC decoder in terminated mode that has an extra rate(K-1)
+      // bits added on to the transmitted frame.
+      int diff = d_decoder->rate()*d_decoder->get_input_size() - 
d_decoder->get_output_size();
 
-      // nbits sanity check
-      if(nbits % blksize_in != 0){
-        throw std::runtime_error((boost::format("nbits_in %% blksize_in != 0 
in fec_decoder_asyn! %d bits in, %d blksize") \
-                                  % nbits % blksize_in).str());
-      }
+      int nbits_in = pmt::length(bits);
+      int nbits_out = nbits_in*d_decoder->rate() - diff;
 
-      printf("decoder :: blksize_in = %d, blksize_out = %d\n", blksize_in, 
blksize_out);
+      // Check here if the frame size is larger than what we've
+      // allocated for in the constructor.
+      if(nbits_in > d_max_bits_in) {
+        throw std::runtime_error("async_decoder: Received frame larger than 
max frame size.");
+      }
 
-      pmt::pmt_t outvec(pmt::make_u8vector(blksize_out * nblocks, 0xFF));
-      printf("decoder :: outvec len = %d (%d blks)\n", blksize_out * nblocks, 
nblocks);
+      d_decoder->set_frame_size(nbits_out);
 
-      // get pmt buffer pointers
       size_t o0(0);
       const float* f32in = pmt::f32vector_elements(bits, o0);
+      pmt::pmt_t outvec(pmt::make_u8vector(nbits_out, 0x00));
       uint8_t* u8out = pmt::u8vector_writable_elements(outvec, o0);
 
-      // loop over n fec blocks
-      for(int i = 0; i < nblocks; i++) {
-        size_t offset_in = i * blksize_in;
-        size_t offset_out = i * blksize_out;
+      if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) {
+        volk_32f_s32f_multiply_32f(d_tmp_f32, f32in, 48.0f, nbits_in);
+      }
+      else {
+        memcpy(d_tmp_f32, f32in, nbits_in*sizeof(float));
+      }
+
+      if(d_decoder->get_shift() != 0) {
+        for(int n = 0; n < nbits_in; n++)
+          d_tmp_f32[n] += d_decoder->get_shift();
+      }
+
+      if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) {
+        //volk_32f_s32f_convert_8i(d_tmp_u8, d_tmp_f32, 1, nbits_in);
+        for(int n = 0; n < nbits_in; n++)
+          d_tmp_u8[n] = static_cast<uint8_t>(d_tmp_f32[n]);
 
-        // DECODE!
-        d_decoder->generic_work((void*)&f32in[offset_in], 
(void*)&u8out[offset_out]);
+        d_decoder->generic_work((void*)d_tmp_u8, (void*)u8out);
       }
+      else {
+        d_decoder->generic_work((void*)d_tmp_f32, (void*)u8out);
+      }
+
+      message_port_pub(d_out_port, pmt::cons(meta, outvec));
+    }
+
+    void
+    async_decoder_impl::decode_packed(pmt::pmt_t msg)
+    {
+      // extract input pdu
+      pmt::pmt_t meta(pmt::car(msg));
+      pmt::pmt_t bits(pmt::cdr(msg));
+
+      size_t o0 = 0;
+      int nbits_in = pmt::length(bits);
+      int nbits_out = nbits_in*d_decoder->rate();
+      int nbytes_out = nbits_out/8;
+
+      // Check here if the frame size is larger than what we've
+      // allocated for in the constructor.
+      if(nbits_in > d_max_bits_in) {
+        throw std::runtime_error("async_decoder: Received frame larger than 
max frame size.");
+      }
+
+      d_decoder->set_frame_size(nbits_out);
+
+      pmt::pmt_t outvec(pmt::make_u8vector(nbytes_out, 0x00));
+      uint8_t* bytes_out = pmt::u8vector_writable_elements(outvec, o0);
+      const float* f32in = pmt::f32vector_elements(bits, o0);
+
+      if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) {
+        volk_32f_s32f_multiply_32f(d_tmp_f32, f32in, 48.0f, nbits_in);
+      }
+      else {
+        memcpy(d_tmp_f32, f32in, nbits_in*sizeof(float));
+      }
+
+      if(d_decoder->get_shift() != 0) {
+        for(int n = 0; n < nbits_in; n++)
+          d_tmp_f32[n] += d_decoder->get_shift();
+      }
+
+      if(strncmp(d_decoder->get_input_conversion(), "uchar", 5) == 0) {
+        //volk_32f_s32f_convert_8i(d_tmp_u8, d_tmp_f32, 1.0, nbits_in);
+        for(int n = 0; n < nbits_in; n++)
+          d_tmp_u8[n] = static_cast<uint8_t>(d_tmp_f32[n]);
+
+        d_decoder->generic_work((void*)d_tmp_u8, (void*)d_bits_out);
+      }
+      else {
+        d_decoder->generic_work((void*)d_tmp_f32, (void*)d_bits_out);
+      }
+
+      if(d_rev_pack)
+        d_pack->pack_rev(bytes_out, d_bits_out, nbytes_out);
+      else
+        d_pack->pack(bytes_out, d_bits_out, nbytes_out);
 
-      message_port_pub(pmt::mp("pdus"),  pmt::cons(meta, outvec));
+      message_port_pub(d_out_port,  pmt::cons(meta, outvec));
     }
 
     int
diff --git a/gr-fec/lib/async_decoder_impl.h b/gr-fec/lib/async_decoder_impl.h
index 5f4c5c4..c3c7a7c 100644
--- a/gr-fec/lib/async_decoder_impl.h
+++ b/gr-fec/lib/async_decoder_impl.h
@@ -24,6 +24,7 @@
 #define INCLUDED_FEC_ASYNC_DECODER_IMPL_H
 
 #include <gnuradio/fec/async_decoder.h>
+#include <gnuradio/blocks/pack_k_bits.h>
 
 namespace gr {
   namespace fec {
@@ -35,12 +36,25 @@ namespace gr {
       size_t d_input_item_size;
       size_t d_output_item_size;
 
-      void decode(pmt::pmt_t msg);
+      pmt::pmt_t d_in_port;
+      pmt::pmt_t d_out_port;
+
+      blocks::kernel::pack_k_bits *d_pack;
+
+      bool d_packed;
+      bool d_rev_pack;
+
+      int d_max_bits_in;
+      float *d_tmp_f32;
+      int8_t *d_tmp_u8;
+      uint8_t *d_bits_out;
+
+      void decode_packed(pmt::pmt_t msg);
+      void decode_unpacked(pmt::pmt_t msg);
 
     public:
       async_decoder_impl(generic_decoder::sptr my_decoder,
-                         size_t input_item_size,
-                         size_t output_item_size);
+                         bool packed=false, bool rev_pack=true);
       ~async_decoder_impl();
 
       int general_work(int noutput_items,
diff --git a/gr-fec/lib/async_encoder_impl.cc b/gr-fec/lib/async_encoder_impl.cc
index ff7480f..556a8a5 100644
--- a/gr-fec/lib/async_encoder_impl.cc
+++ b/gr-fec/lib/async_encoder_impl.cc
@@ -34,14 +34,14 @@ namespace gr {
 
     async_encoder::sptr
     async_encoder::make(generic_encoder::sptr my_encoder,
-                        bool rev_unpack, bool rev_pack)
+                        bool packed, bool rev_unpack, bool rev_pack)
     {
       return gnuradio::get_initial_sptr
-        (new async_encoder_impl(my_encoder, rev_unpack, rev_pack));
+        (new async_encoder_impl(my_encoder, packed, rev_unpack, rev_pack));
     }
 
     async_encoder_impl::async_encoder_impl(generic_encoder::sptr my_encoder,
-                                           bool rev_unpack, bool rev_pack)
+                                           bool packed, bool rev_unpack, bool 
rev_pack)
       : block("async_encoder",
               io_signature::make(0,0,0),
               io_signature::make(0,0,0)),
@@ -51,48 +51,83 @@ namespace gr {
       d_out_port = pmt::mp("out");
 
       d_encoder = my_encoder;
-      d_unpack = new blocks::kernel::unpack_k_bits(8);
-      d_pack   = new blocks::kernel::pack_k_bits(8);
 
+      d_packed = packed;
       d_rev_unpack = rev_unpack;
       d_rev_pack = rev_pack;
 
       message_port_register_in(d_in_port);
       message_port_register_out(d_out_port);
-      set_msg_handler(d_in_port, boost::bind(&async_encoder_impl::encode, this 
,_1) );
+
+      if(d_packed) {
+        d_unpack = new blocks::kernel::unpack_k_bits(8);
+        d_pack   = new blocks::kernel::pack_k_bits(8);
+        set_msg_handler(d_in_port, 
boost::bind(&async_encoder_impl::encode_packed, this ,_1) );
+      }
+      else {
+        set_msg_handler(d_in_port, 
boost::bind(&async_encoder_impl::encode_unpacked, this ,_1) );
+      }
     }
 
     async_encoder_impl::~async_encoder_impl()
     {
-      delete d_unpack;
-      delete d_pack;
+      if(d_packed) {
+        delete d_unpack;
+        delete d_pack;
+      }
     }
 
     void
-    async_encoder_impl::encode(pmt::pmt_t msg)
+    async_encoder_impl::encode_unpacked(pmt::pmt_t msg)
+    {
+      // extract input pdu
+      pmt::pmt_t meta(pmt::car(msg));
+      pmt::pmt_t bits(pmt::cdr(msg));
+
+      size_t o0 = 0;
+      int nbits_in = pmt::length(bits);
+      const uint8_t* bits_in = pmt::u8vector_elements(bits, o0);
+
+      d_encoder->set_frame_size(nbits_in);
+
+      int nbits_out = d_encoder->get_output_size();
+
+      // buffers for output bits to go to
+      pmt::pmt_t outvec = pmt::make_u8vector(nbits_out, 0x00);
+      uint8_t* bits_out = pmt::u8vector_writable_elements(outvec, o0);
+
+      // ENCODE!
+      d_encoder->generic_work((void*)bits_in, (void*)bits_out);
+
+      pmt::pmt_t msg_pair = pmt::cons(meta, outvec);
+      message_port_pub(d_out_port, msg_pair);
+    }
+
+    void
+    async_encoder_impl::encode_packed(pmt::pmt_t msg)
     {
       // extract input pdu
       pmt::pmt_t meta(pmt::car(msg));
       pmt::pmt_t bytes(pmt::cdr(msg));
 
-      int nbytes = pmt::length(bytes);
-      int nbits = 8*nbytes;
       size_t o0 = 0;
+      int nbytes_in = pmt::length(bytes);
+      int nbits_in = 8*nbytes_in;
       const uint8_t* bytes_in = pmt::u8vector_elements(bytes, o0);
-      uint8_t* bits_in = (uint8_t*)volk_malloc(nbits*sizeof(uint8_t),
+      uint8_t* bits_in = (uint8_t*)volk_malloc(nbits_in*sizeof(uint8_t),
                                                volk_get_alignment());
 
+      d_encoder->set_frame_size(nbits_in);
+
+      int nbits_out = d_encoder->get_output_size();
+      int nbytes_out = nbits_out/8;
+
       // Encoder takes a stream of bits, but PDU's are received as
       // bytes, so we unpack them here.
       if(d_rev_unpack)
-        d_unpack->unpack_rev(bits_in, bytes_in, nbytes);
+        d_unpack->unpack_rev(bits_in, bytes_in, nbytes_in);
       else
-        d_unpack->unpack(bits_in, bytes_in, nbytes);
-
-      d_encoder->set_frame_size(nbits);
-
-      int nbits_out = d_encoder->get_output_size();
-      int nbytes_out = nbits_out/8;
+        d_unpack->unpack(bits_in, bytes_in, nbytes_in);
 
       // buffers for bits/bytes to go to
       uint8_t* bits_out = (uint8_t*)volk_malloc(nbits_out*sizeof(uint8_t),
@@ -104,7 +139,6 @@ namespace gr {
       // ENCODE!
       d_encoder->generic_work((void*)bits_in, (void*)bits_out);
 
-      // Encoder produces bits, so repack them here to bytes.
       if(d_rev_pack)
         d_pack->pack_rev(bytes_out, bits_out, nbytes_out);
       else
diff --git a/gr-fec/lib/async_encoder_impl.h b/gr-fec/lib/async_encoder_impl.h
index 2c43b0d..7cca623 100644
--- a/gr-fec/lib/async_encoder_impl.h
+++ b/gr-fec/lib/async_encoder_impl.h
@@ -40,14 +40,19 @@ namespace gr {
       pmt::pmt_t d_in_port;
       pmt::pmt_t d_out_port;
 
-      void encode(pmt::pmt_t msg);
       blocks::kernel::unpack_k_bits *d_unpack;
       blocks::kernel::pack_k_bits   *d_pack;
+
+      bool d_packed;
       bool d_rev_unpack;
       bool d_rev_pack;
 
+      void encode_packed(pmt::pmt_t msg);
+      void encode_unpacked(pmt::pmt_t msg);
+
     public:
       async_encoder_impl(generic_encoder::sptr my_encoder,
+                         bool packed=false,
                          bool rev_unpack=true, bool rev_pack=true);
       ~async_encoder_impl();
 
diff --git a/gr-fec/lib/cc_encoder_impl.cc b/gr-fec/lib/cc_encoder_impl.cc
index 90d2ee4..75d7dcd 100644
--- a/gr-fec/lib/cc_encoder_impl.cc
+++ b/gr-fec/lib/cc_encoder_impl.cc
@@ -127,7 +127,7 @@ namespace gr {
       double
       cc_encoder_impl::rate()
       {
-        return 1.0/static_cast<double>(d_rate);
+        return static_cast<double>(d_rate);
       }
 
       int



reply via email to

[Prev in Thread] Current Thread [Next in Thread]