summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-06-29 19:02:26 +0700
committerVadim Yanitskiy <axilirator@gmail.com>2018-06-29 20:54:04 +0700
commit3f22f18790707d1e0baf37a76cae1217f505bfde (patch)
tree7c115b1343ace94931d75ab3993cc1535b743235
parent6d0156b89a49bc4f482f55fb432375d04d449008 (diff)
Implement ECU (Error Concealment Unit) block for FR
In I06a21f60db01bfe1c2b838f93866fad1d53fdcd1 the Error Concealment Unit API for FR codec was introduced. This change implements a corresponding block. Note: at the moment, only Full Rate is supported by the ECU API. Change-Id: Ia929ee04f6be3d842c6ef7bc40cce0fdab16e90a
-rw-r--r--include/osmocom/gapk/codecs.h3
-rw-r--r--include/osmocom/gapk/procqueue.h3
-rw-r--r--src/Makefile.am6
-rw-r--r--src/codec_fr.c3
-rw-r--r--src/ecu_fr.c78
-rw-r--r--src/pq_ecu.c88
-rw-r--r--tests/Makefile.am10
-rw-r--r--tests/ecu/ecu_fr_test.c147
-rw-r--r--tests/ecu/ecu_fr_test.ok95
-rw-r--r--tests/testsuite.at7
10 files changed, 440 insertions, 0 deletions
diff --git a/include/osmocom/gapk/codecs.h b/include/osmocom/gapk/codecs.h
index 253fb14..33f6593 100644
--- a/include/osmocom/gapk/codecs.h
+++ b/include/osmocom/gapk/codecs.h
@@ -73,6 +73,9 @@ struct osmo_gapk_codec_desc {
/* Encoding / decoding function pointers */
osmo_gapk_codec_conv_cb_t codec_encode;
osmo_gapk_codec_conv_cb_t codec_decode;
+
+ /* ECU (Error Concealment Unit) function */
+ osmo_gapk_codec_conv_cb_t ecu_proc;
};
const struct osmo_gapk_codec_desc *
diff --git a/include/osmocom/gapk/procqueue.h b/include/osmocom/gapk/procqueue.h
index 6b929d7..ac9253b 100644
--- a/include/osmocom/gapk/procqueue.h
+++ b/include/osmocom/gapk/procqueue.h
@@ -103,3 +103,6 @@ int osmo_gapk_pq_queue_fmt_convert(struct osmo_gapk_pq *pq, const struct osmo_ga
/* Codec */
struct osmo_gapk_codec_desc;
int osmo_gapk_pq_queue_codec(struct osmo_gapk_pq *pq, const struct osmo_gapk_codec_desc *codec, int encode);
+
+/* ECU (Error Concealment Unit) */
+int osmo_gapk_pq_queue_ecu(struct osmo_gapk_pq *pq, const struct osmo_gapk_codec_desc *codec);
diff --git a/src/Makefile.am b/src/Makefile.am
index 50ffda4..8fdeff7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -43,6 +43,12 @@ libosmogapk_la_SOURCES = \
pq_file.c \
pq_alsa.c \
pq_rtp.c \
+ pq_ecu.c \
+ $(NULL)
+
+# ECU (Error Concealment Unit) implementation
+libosmogapk_la_SOURCES += \
+ ecu_fr.c \
$(NULL)
# Formats implementation
diff --git a/src/codec_fr.c b/src/codec_fr.c
index eddbee6..75efeb7 100644
--- a/src/codec_fr.c
+++ b/src/codec_fr.c
@@ -83,6 +83,8 @@ codec_fr_decode(void *state, uint8_t *pcm, const uint8_t *cod, unsigned int cod_
#endif /* HAVE_LIBGSM */
+/* Forward declaration of ECU (Error Concealment Unit) function */
+int ecu_proc_fr(void *state, uint8_t *out, const uint8_t *in, unsigned int in_len);
const struct osmo_gapk_codec_desc codec_fr_desc = {
.type = CODEC_FR,
@@ -97,4 +99,5 @@ const struct osmo_gapk_codec_desc codec_fr_desc = {
.codec_encode = codec_fr_encode,
.codec_decode = codec_fr_decode,
#endif
+ .ecu_proc = ecu_proc_fr,
};
diff --git a/src/ecu_fr.c b/src/ecu_fr.c
new file mode 100644
index 0000000..db55fec
--- /dev/null
+++ b/src/ecu_fr.c
@@ -0,0 +1,78 @@
+/* ECU (Error Concealment Unit) for FR */
+
+/*
+ * This file is part of GAPK (GSM Audio Pocket Knife).
+ *
+ * (C) 2018 by Vadim Yanitskiy <axilirator@gmail.com>
+ *
+ * All Rights Reserved
+ *
+ * GAPK is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GAPK is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GAPK. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+#include <stdbool.h>
+
+#include <osmocom/gapk/codecs.h>
+#include <osmocom/codec/ecu.h>
+
+int
+ecu_proc_fr(void *_state, uint8_t *out, const uint8_t *in, unsigned int in_len)
+{
+ struct osmo_ecu_fr_state *state = (struct osmo_ecu_fr_state *) _state;
+ bool backup = false;
+ bool bfi = true;
+ int i, rc;
+
+ assert(in_len == FR_CANON_LEN);
+
+ /* Check if a frame is BFI */
+ for (i = 1; i < in_len; i++) {
+ if (in[i] != 0x00) {
+ bfi = false;
+ break;
+ }
+ }
+
+ /* We have got a good frame, nothing to do */
+ if (!bfi) {
+ osmo_ecu_fr_reset(state, (uint8_t *) in);
+ memcpy(out, in, in_len);
+ return in_len;
+ }
+
+ /* Check if ECU state contains a backup frame */
+ for (i = 0; i < in_len; i++) {
+ if (state->frame_backup[i] != 0x00) {
+ backup = true;
+ break;
+ }
+ }
+
+ /* There is no back-up frame */
+ if (!backup) {
+ /* Copy BFI 'as-is' */
+ memcpy(out, in, in_len);
+ return in_len;
+ }
+
+ /* Attempt to perform error concealment */
+ rc = osmo_ecu_fr_conceal(state, out);
+ if (rc)
+ return rc;
+
+ return in_len;
+}
diff --git a/src/pq_ecu.c b/src/pq_ecu.c
new file mode 100644
index 0000000..fad853c
--- /dev/null
+++ b/src/pq_ecu.c
@@ -0,0 +1,88 @@
+/* ECU (Error Concealment Unit) */
+
+/*
+ * This file is part of GAPK (GSM Audio Pocket Knife).
+ *
+ * (C) 2018 by Vadim Yanitskiy <axilirator@gmail.com>
+ *
+ * All Rights Reserved
+ *
+ * GAPK is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GAPK is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GAPK. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdint.h>
+#include <talloc.h>
+#include <errno.h>
+
+#include <osmocom/gapk/procqueue.h>
+#include <osmocom/gapk/logging.h>
+#include <osmocom/gapk/formats.h>
+#include <osmocom/gapk/codecs.h>
+
+#include <osmocom/codec/ecu.h>
+
+static void
+clean_up(void *state)
+{
+ talloc_free(state);
+}
+
+/*! Add a ECU block to the processing queue
+ * (To be placed between frame source and decoder)
+ * \param pq Processing Queue to which the block is added
+ * \returns 0 on success; negative on error */
+int
+osmo_gapk_pq_queue_ecu(struct osmo_gapk_pq *pq,
+ const struct osmo_gapk_codec_desc *codec)
+{
+ const struct osmo_gapk_format_desc *fmt;
+ struct osmo_gapk_pq_item *item;
+
+ /* Make sure that a codec has corresponding ECU implementation */
+ if (codec->ecu_proc == NULL) {
+ LOGPGAPK(LOGL_ERROR, "Codec '%s' has no ECU implementation\n", codec->name);
+ return -ENOTSUP;
+ }
+
+ /* Allocate a new item to the processing queue */
+ item = osmo_gapk_pq_add_item(pq);
+ if (!item)
+ return -ENOMEM;
+
+ /* Allocate the ECU state */
+ item->state = talloc_zero(item, struct osmo_ecu_fr_state);
+ if (!item->state) {
+ talloc_free(item);
+ return -ENOMEM;
+ }
+
+ /* I/O signature shall match the input signature of a codec */
+ fmt = osmo_gapk_fmt_get_from_type(codec->codec_dec_format_type);
+ item->len_in = fmt->frame_len;
+ item->len_out = fmt->frame_len;
+
+ item->proc = codec->ecu_proc;
+ item->exit = &clean_up;
+ item->wait = NULL;
+
+ /* Meta information */
+ item->type = OSMO_GAPK_ITEM_TYPE_PROC;
+ item->cat_name = "ecu";
+ item->sub_name = codec->name;
+
+ LOGPGAPK(LOGL_DEBUG, "PQ '%s': Adding ECU for codec '%s', "
+ "format '%s'\n", pq->name, codec->name, fmt->name);
+
+ return 0;
+}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f838fa4..4f7c4be 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -14,6 +14,7 @@ check_PROGRAMS = \
procqueue/pq_test \
io/pq_file_test \
io/pq_rtp_test \
+ ecu/ecu_fr_test \
$(NULL)
procqueue_pq_test_SOURCES = procqueue/pq_test.c
@@ -40,6 +41,14 @@ io_pq_rtp_test_LDADD = \
$(TALLOC_LIBS) \
$(NULL)
+ecu_ecu_fr_test_SOURCES = ecu/ecu_fr_test.c
+ecu_ecu_fr_test_LDADD = \
+ $(top_builddir)/src/libosmogapk.la \
+ $(LIBOSMOCORE_LIBS) \
+ $(LIBOSMOCODEC_LIBS) \
+ $(TALLOC_LIBS) \
+ $(NULL)
+
# The `:;' works around a Bash 3.2 bug when the output is not writeable.
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
:;{ \
@@ -66,6 +75,7 @@ EXTRA_DIST = \
EXTRA_DIST += \
procqueue/pq_test.ok \
+ ecu/ecu_fr_test.ok \
io/pq_file_test.ok \
io/pq_rtp_test.ok \
io/io_sample.txt \
diff --git a/tests/ecu/ecu_fr_test.c b/tests/ecu/ecu_fr_test.c
new file mode 100644
index 0000000..372df25
--- /dev/null
+++ b/tests/ecu/ecu_fr_test.c
@@ -0,0 +1,147 @@
+/*
+ * This file is part of GAPK (GSM Audio Pocket Knife).
+ *
+ * (C) 2018 by Vadim Yanitskiy <axilirator@gmail.com>
+ *
+ * GAPK is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GAPK is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GAPK. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdio.h>
+#include <talloc.h>
+#include <string.h>
+#include <assert.h>
+
+#include <osmocom/core/utils.h>
+#include <osmocom/codec/codec.h>
+
+#include <osmocom/gapk/procqueue.h>
+#include <osmocom/gapk/codecs.h>
+#include <osmocom/gapk/common.h>
+
+/* A good FR frame */
+static const char *sample_frame_hex = \
+ "d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da";
+
+static void talloc_ctx_walk_cb(const void *chunk, int depth,
+ int max_depth, int is_ref, void *data)
+{
+ const char *chunk_name = talloc_get_name(chunk);
+ int spaces_cnt;
+
+ /* Hierarchical spacing */
+ for (spaces_cnt = 0; spaces_cnt < depth; spaces_cnt++)
+ printf(" ");
+
+ /* Chunk info */
+ printf("chunk %s: depth=%d\n", chunk_name, depth);
+}
+
+void pq_execute(struct osmo_gapk_pq *pq, uint8_t *frame, size_t len)
+{
+ struct osmo_gapk_pq_item *pq_item;
+ unsigned int len_prev = len;
+ uint8_t *buf_prev = frame;
+ int rv;
+
+ /* Iterate over all items in the chain */
+ llist_for_each_entry(pq_item, &pq->items, list) {
+ printf("Block '%s/%s/%s' in (len=%d): %s\n", pq->name,
+ pq_item->cat_name, pq_item->sub_name, len_prev,
+ osmo_hexdump(buf_prev, len_prev));
+
+ /* Call item's processing handler */
+ rv = pq_item->proc(pq_item->state, pq_item->buf, buf_prev, len_prev);
+ assert(rv > 0);
+
+ printf("Block '%s/%s/%s' out (len=%d): %s\n", pq->name,
+ pq_item->cat_name, pq_item->sub_name, rv,
+ osmo_hexdump(pq_item->buf, rv));
+
+ buf_prev = pq_item->buf;
+ len_prev = rv;
+ }
+}
+
+void test_fr_concealment(struct osmo_gapk_pq *pq)
+{
+ uint8_t fb[GSM_FR_BYTES];
+ int i;
+
+ /* Init frame buffer with BFI */
+ memset(fb, 0x00, sizeof(fb));
+ fb[0] = 0xd0;
+
+ /* Process a BFI frame */
+ printf("[i] Process a BFI frame: %s\n", osmo_hexdump(fb, sizeof(fb)));
+ pq_execute(pq, fb, sizeof(fb));
+ printf("\n");
+
+ /* Parse frame from string to hex */
+ osmo_hexparse(sample_frame_hex, fb, GSM_FR_BYTES);
+
+ /* Process a good frame (reset ECU) */
+ printf("[i] Process a good frame: %s\n", osmo_hexdump(fb, sizeof(fb)));
+ pq_execute(pq, fb, sizeof(fb));
+ printf("\n");
+
+ /* Now pretend that we do not receive any good frames anymore */
+ memset(fb, 0x00, sizeof(fb));
+ fb[0] = 0xd0;
+
+ printf("[i] Pretend that we do not receive any good frames anymore\n");
+ for (i = 0; i < 20; i++)
+ pq_execute(pq, fb, sizeof(fb));
+
+ printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+ const struct osmo_gapk_codec_desc *codec;
+ struct osmo_gapk_pq *pq;
+ int rc;
+
+ /* Enable tracking the use of NULL memory contexts */
+ talloc_enable_null_tracking();
+
+ /* Allocate a single processing chain */
+ pq = osmo_gapk_pq_create("pq_ecu_test");
+ assert(pq != NULL);
+
+ /* Obtain FR codec description */
+ codec = osmo_gapk_codec_get_from_type(CODEC_FR);
+ assert(codec->ecu_proc);
+
+ /* Put a FR ECU */
+ rc = osmo_gapk_pq_queue_ecu(pq, codec);
+ assert(rc == 0);
+
+ /* Put a FR decoder */
+ rc = osmo_gapk_pq_queue_codec(pq, codec, 0);
+ assert(rc == 0);
+
+ /* Prepare the chain */
+ rc = osmo_gapk_pq_prepare(pq);
+ assert(rc == 0);
+
+ test_fr_concealment(pq);
+
+ /* Release memory */
+ osmo_gapk_pq_destroy(pq);
+
+ /* Make sure we have no memleaks */
+ talloc_report_depth_cb(NULL, 0, 10, &talloc_ctx_walk_cb, NULL);
+
+ return 0;
+}
diff --git a/tests/ecu/ecu_fr_test.ok b/tests/ecu/ecu_fr_test.ok
new file mode 100644
index 0000000..26c6466
--- /dev/null
+++ b/tests/ecu/ecu_fr_test.ok
@@ -0,0 +1,95 @@
+[i] Process a BFI frame: d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' out (len=320): c8 ff c8 ff c0 ff 88 ff 88 ff 80 ff 48 ff 48 ff 40 ff 08 ff 00 ff f8 fe c0 fe 98 fe 70 fe 20 fe 20 fe f8 fd b0 fd c0 fd 98 fd 58 fd 60 fd 48 fd 08 fd 18 fd 00 fd a8 fc e8 fc 88 fc 80 fc 80 fc 60 fc 28 fc 60 fc 18 fc f8 fb 28 fc e8 fb 08 fc 90 fb 48 fc 40 fb 10 fc 70 fb e0 fb 20 fb 20 fc e8 fa d8 fb 38 fb 98 fb f8 fa e0 fb c0 fa 90 fb 18 fb 50 fb d8 fa a0 fb a0 fa 50 fb f8 fa 18 fb b8 fa 60 fb 80 fa 18 fb d8 fa d8 fa 98 fa 28 fb 60 fa e8 fa b0 fa a8 fa 70 fa f8 fa 30 fa f8 fa 00 fa 28 fb d0 f9 00 fb f8 f9 e0 fa b8 f9 20 fb 88 f9 e0 fa c8 f9 b0 fa 88 f9 f8 fa 58 f9 b0 fa a8 f9 70 fa 70 f9 b8 fa 40 f9 68 fa 98 f9 28 fa 58 f9 70 fa 28 f9 20 fa 88 f9 e0 f9 48 f9 28 fa 10 f9 e0 f9 70 f9 a0 f9 30 f9 f0 f9 00 f9 e8 f9 d0 f8 18 fa a0 f8 f0 f9 c8 f8 d0 f9 88 f8 10 fa 58 f8 d0 f9 a0 f8 98 f9 68 f8 e0 f9 38 f8 98 f9 90 f8 58 f9 50 f8 98 f9 20 f8 50 f9 80 f8 08 f9 48 f8 50 f9 18 f8 08 f9 70 f8 c0 f8 38 f8 10 f9 08 f8 c0 f8 60 f8 88 f8 28 f8 d0 f8 f0 f7 c0 f8
+
+[i] Process a good frame: d9 ec 9b e2 12 90 1f 80 23 35 59 8c 50 1f 80 5b ad 3d 4b a0 1f 80 9b 69 df 5a 50 1f 80 9c d1 b4 da
+Block 'pq_ecu_test/ecu/fr' in (len=33): d9 ec 9b e2 12 90 1f 80 23 35 59 8c 50 1f 80 5b ad 3d 4b a0 1f 80 9b 69 df 5a 50 1f 80 9c d1 b4 da
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 1f 80 23 35 59 8c 50 1f 80 5b ad 3d 4b a0 1f 80 9b 69 df 5a 50 1f 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 1f 80 23 35 59 8c 50 1f 80 5b ad 3d 4b a0 1f 80 9b 69 df 5a 50 1f 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 10 f8 e8 1a 20 00 00 80 00 80 90 a5 f0 9c 60 bd 58 d2 90 d4 00 80 28 8a f8 24 00 80 f8 a2 60 21 00 80 e8 8d 08 0b 60 92 30 b3 28 ea 28 bd 00 b2 f8 e1 28 46 60 ee c8 d5 e0 0a 40 e0 b0 ea 28 9d 48 d6 f0 06 e8 af 28 f0 a0 fe 38 77 30 30 70 da f8 7f e0 2a 60 e0 90 a7 f0 d3 38 20 20 b1 28 03 70 18 98 c2 00 80 88 a1 08 18 00 80 e0 a9 10 24 00 80 68 99 90 0d 60 8f b0 b2 40 ee 78 be 20 b1 a0 e5 a0 c6 30 bb 38 ec 58 94 c0 b9 88 f7 20 a5 80 d1 98 f3 e0 3e 48 0b 00 da f8 7f 28 3f 88 c9 f8 7f 88 3d 30 e5 48 27 d0 1d a0 14 d8 9c 88 0b 58 27 20 bd 00 80 90 b0 50 08 00 80 e0 ac 10 23 00 80 40 9f c0 0d 78 84 70 af 78 f1 78 fa 38 c8 68 dd f8 7f f8 0d e8 ca f8 68 58 03 f8 e6 88 08 70 0b 88 04 60 d7 b8 11 18 09 b8 96 68 f3 28 0f 78 bd 28 f2 10 06 60 c1 d0 db 30 03 00 86 b8 bd c8 0c 78 cf
+
+[i] Pretend that we do not receive any good frames anymore
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 1f 80 23 35 59 8c 50 1f 80 5b ad 3d 4b a0 1f 80 9b 69 df 5a 50 1f 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 1f 80 23 35 59 8c 50 1f 80 5b ad 3d 4b a0 1f 80 9b 69 df 5a 50 1f 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 00 80 f0 a0 10 0f 00 80 20 a0 f8 1e 00 80 c8 83 60 0f b0 c9 e0 b7 48 e2 e8 d8 50 ad e0 de 00 80 f0 a1 20 01 d8 17 20 18 10 e6 08 9d 18 da 58 fa 40 44 28 1b 38 e8 60 35 f8 f7 e8 ed f8 7f 30 41 c0 cd 20 a1 10 de c8 f6 00 ed 78 28 20 f1 30 d7 00 80 90 96 b8 1e 00 80 90 ad e8 1b 00 80 f0 98 28 0a 38 8e e0 b4 78 eb c0 bb 98 b0 c8 e4 98 45 38 ed 30 d8 a8 0a c0 e1 58 ec 20 9d 30 d8 80 07 50 b0 a0 f0 98 fe f8 77 50 2f 50 da f8 7f 58 2a 10 de c8 a6 30 d4 a8 1c d8 af c0 03 a0 15 68 c1 00 80 18 a0 00 17 00 80 00 a9 28 23 00 80 d0 98 b8 0c e8 8e 88 b1 78 ed 58 be 20 b0 20 e5 80 c6 b0 bb 50 ec f0 93 48 bc 48 f8 90 a4 d8 d3 40 f4 98 3e d0 0b 60 da f8 7f 38 3e b8 c9 f8 7f c8 3c 00 e3 60 26 d8 1d 10 11 98 9b f0 0b 78 24 00 bc 00 80 58 af 70 07 00 80 78 ac 50 22 00 80 48 9f 20 0d 08 84 58 af 18 f1 40 fa 08 c8 48 dd f8 7f e0 0d f0 ca d8 68 80 03 08 e7 70 08 98 0b 90 04 50 d7 b8 11 18 09 b8 96 48 f3 28 0f 88 bd 10 f2 d0 05 50 c1 d8 db d8 02 e0 85 c8 bd 80 0c 60 cf
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 1d 80 23 35 59 8c 50 1d 80 5b ad 3d 4b a0 1d 80 9b 69 df 5a 50 1d 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 1d 80 23 35 59 8c 50 1d 80 5b ad 3d 4b a0 1d 80 9b 69 df 5a 50 1d 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 00 80 d0 b5 40 05 00 80 90 9e 08 1e 00 80 40 8f 50 0f 60 bc e0 b8 88 e3 70 dc 60 b1 30 df 28 8e b8 af 80 fb 60 13 48 12 60 ea 38 b4 b8 e7 68 fa b8 30 10 16 f0 ec b0 26 28 f8 a8 f1 f8 7f 40 2f 60 d4 18 b6 60 e6 38 f0 58 ee 08 1f d8 ed 68 de 00 80 f0 ad b8 14 00 80 e8 ab c8 1a 00 80 f0 a3 e8 08 40 8f e8 b9 30 ea b8 c6 78 b5 98 e4 80 36 10 e6 38 dd b0 09 48 e3 e8 ed 28 b5 e8 e0 d0 02 80 c2 08 f5 a8 fc 80 58 e0 23 58 e2 f8 7f a8 1f 80 e5 38 bc d0 de a8 14 20 c3 88 02 a8 0f 80 d0 00 80 c8 b7 e0 10 00 80 c0 a8 b8 22 00 80 98 a9 30 09 08 97 a8 b7 88 ec 20 cd 98 b7 68 e6 50 d7 28 c3 68 ed 40 b0 48 c9 78 f7 88 ba 90 de d0 f4 78 2d a0 09 f8 e1 f8 7f 78 37 38 d4 f8 7f 88 32 c8 e9 60 24 a8 1c 40 0e f8 b4 a8 0e 08 1d a8 cb 00 80 10 c5 d8 04 00 80 20 ac 48 22 00 80 40 b0 10 0a 10 90 10 b7 d0 ef 80 fa 90 ca 18 e1 f8 7f 30 01 a8 d4 08 50 68 fe a8 ea b0 05 f8 07 10 01 38 e0 f8 0d 00 05 f8 af f0 f6 68 0a 68 cd 88 f5 10 04 70 d0 98 e4 28 02 00 a4 08 ce 70 09 50 db
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 1b 80 23 35 59 8c 50 1b 80 5b ad 3d 4b a0 1b 80 9b 69 df 5a 50 1b 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 1b 80 23 35 59 8c 50 1b 80 5b ad 3d 4b a0 1b 80 9b 69 df 5a 50 1b 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 00 80 c8 cd 98 01 00 80 60 b9 48 14 00 80 98 a4 18 0c 30 be 38 c6 00 eb b8 e0 70 bf d0 e5 b0 b4 90 c2 88 f9 f8 0d 28 09 30 ef 38 cd 08 f0 78 fa 60 1f 18 0f c8 f1 d8 18 58 fa 88 f5 b0 60 10 1f a8 e0 80 cd d0 ee 80 f2 e0 f2 d0 14 98 f1 78 e8 28 87 58 c8 f8 0c 00 80 38 c2 78 11 00 80 f8 ba 50 05 70 aa 40 ca 88 ef 08 d7 38 c7 68 eb b0 24 c8 e9 d8 e6 c8 06 80 ea 48 f2 d8 cd c8 ea 78 00 68 d6 d0 f8 b8 fc 78 3a 08 18 a8 eb 38 55 10 15 f0 ed 68 d2 c0 e9 78 0d 10 d7 90 01 40 0a 20 e0 b0 82 c0 cf 20 0b 00 80 90 bf a0 17 00 80 00 c3 98 05 50 b6 e0 ca 78 f1 20 de f0 cb a0 ed 60 e5 18 d5 78 f2 e8 ca e0 da 68 f9 60 d1 e0 e9 d0 f7 e8 1d a0 06 88 eb f8 7f 00 25 a0 e2 58 74 98 21 00 f1 08 18 08 13 40 09 c8 cd c0 09 20 13 f8 dc 78 91 98 d8 20 03 00 80 08 c5 f8 16 00 80 18 c9 68 06 98 b3 f0 cc 70 f4 50 fc 88 da c0 ea 80 57 98 ff 80 e2 60 35 80 fe 48 f1 a0 03 48 05 50 00 98 ea 60 09 10 03 78 ca f8 f9 d0 06 28 de f8 f8 a8 02 30 e0 a8 ed 68 01 98 c2 a0 de 40 06 78 e7
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 19 80 23 35 59 8c 50 19 80 5b ad 3d 4b a0 19 80 9b 69 df 5a 50 19 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 19 80 23 35 59 8c 50 19 80 5b ad 3d 4b a0 19 80 9b 69 df 5a 50 19 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 68 9b e0 da 88 02 00 80 50 cc 28 0f 00 80 c8 bc 00 09 58 cf 00 d6 88 f0 b8 e8 80 d0 d0 ec 80 c7 c0 d1 50 fb 98 0a 58 05 20 f3 38 da 98 f2 88 fb b8 17 00 0b 28 f5 88 12 58 fc 10 f8 50 48 b0 17 e0 e9 a0 da 10 f3 18 f8 e8 f6 58 0f 00 f7 08 ef 48 a5 08 d7 48 0a 00 80 d8 d1 a8 0d 00 80 28 cc 60 04 08 c0 b0 d7 d8 f3 60 e1 78 d5 a0 f0 a0 1b 58 ef 18 ed 28 05 c0 ef 98 f5 70 da f0 ef 48 00 d0 e0 98 fa 88 fd d0 2b 18 12 c0 f0 e0 3f d0 0f 98 f2 e0 dd 50 ef 58 0a 68 e1 28 01 d8 07 28 e8 00 a2 e8 db 68 08 00 80 b0 cf c8 11 f0 8f 48 d2 40 04 c0 c8 38 d8 28 f5 98 e6 08 d9 40 f2 08 ec c8 df d8 f5 30 d8 f8 e3 00 fb 10 dd 40 ef d0 f9 70 16 e8 04 98 f0 98 60 d0 1b f8 e9 40 57 38 19 d8 f4 10 12 48 0e 28 07 68 da 48 07 88 0e c8 e5 18 ad 88 e2 68 02 00 80 c8 d3 48 11 b0 94 d0 d6 d8 04 b0 c6 b0 d9 58 f7 40 fd e0 e3 10 f0 a0 41 b0 ff e0 e9 08 28 e0 fe f0 f4 b8 02 f8 03 38 00 f0 ef 08 07 50 02 d8 d7 80 fb 20 05 a0 e6 c0 fa 08 02 28 e8 40 f2 10 01 f8 d1 f8 e6 b8 04 98 ed
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 17 80 23 35 59 8c 50 17 80 5b ad 3d 4b a0 17 80 9b 69 df 5a 50 17 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 17 80 23 35 59 8c 50 17 80 5b ad 3d 4b a0 17 80 9b 69 df 5a 50 17 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 90 bb e0 e6 c8 00 60 a4 b0 dc 20 0a d0 9b 48 d2 08 06 10 df 18 e3 80 f5 58 f0 b0 df e8 f2 58 da 48 e1 c0 fc f8 06 90 04 98 f7 98 e6 00 f8 38 fd b0 0f 90 07 e8 f8 70 0c 30 fd c0 fa 58 30 88 0f 50 f0 c0 e6 68 f7 38 f9 70 f9 68 0a d0 f8 38 f4 98 c3 30 e4 78 06 48 a7 18 e1 c0 08 68 a6 80 dd a8 02 30 d5 18 e5 c0 f7 80 eb 98 e3 b8 f5 58 12 e0 f4 68 f3 60 03 38 f5 20 f9 e8 e6 58 f5 38 00 30 eb 68 fc 60 fe 38 1d f8 0b d0 f5 98 2a 80 0a f8 f6 30 e9 e0 f4 b8 06 88 eb c8 00 20 05 10 f0 50 c1 d8 e7 88 05 38 a5 c8 df d0 0b 48 b5 80 e1 d0 02 28 db 70 e5 b8 f8 10 ef f8 e5 c8 f6 b0 f2 88 ea 38 f9 70 e5 68 ed b0 fc b0 e8 f0 f4 e0 fb f8 0e 50 03 c0 f5 68 40 80 12 48 f1 28 3a c8 10 78 f8 f8 0b 80 09 98 04 e0 e6 d8 04 88 09 78 ee b8 c8 48 ec 90 01 f0 a6 80 e2 78 0b 70 b8 88 e4 38 03 c8 d9 78 e6 38 fa 28 fe 40 ed 60 f5 c0 2b c8 ff 48 f1 b0 1a 40 ff a8 f8 d0 01 a0 02 20 00 50 f5 b0 04 88 01 40 e5 f8 fc 68 03 18 ef 80 fc 50 01 18 f0 d8 f6 b8 00 48 e1 50 ef 20 03 b8 f3
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 15 80 23 35 59 8c 50 15 80 5b ad 3d 4b a0 15 80 9b 69 df 5a 50 15 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 15 80 23 35 59 8c 50 15 80 5b ad 3d 4b a0 15 80 9b 69 df 5a 50 15 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): b8 cd 78 ed 48 01 38 bc 28 e6 98 07 78 b5 60 de 80 04 a8 e7 00 eb 48 f8 60 f4 38 e8 60 f6 c0 e3 d8 e8 a0 fd 48 05 a8 02 88 f9 18 ed 48 f9 c0 fd d8 0b 78 05 90 fa 40 09 28 fe 00 fc 28 24 d8 0b e8 f4 48 ed 88 f9 08 fc 70 fb a8 07 80 fb 88 f7 a0 d2 80 eb 20 05 88 bd e8 e8 d0 06 e8 bc 18 e6 30 02 00 e0 d8 eb f0 f9 b8 f0 c0 ea 50 f8 d0 0d b0 f7 88 f6 98 02 e0 f7 d0 fa 38 ed f8 f7 28 00 68 f0 48 fd c0 fe e8 15 08 09 60 f8 f0 1f e8 07 50 f9 e8 ee a8 f7 28 05 b0 f0 90 00 f0 03 10 f4 00 d1 f0 ed 38 04 f0 bb d8 e7 e0 08 f8 c7 28 e9 20 02 60 e4 20 ec 90 fa 48 f3 88 ec 20 f9 08 f6 e8 ef f0 fa 18 ec 00 f2 80 fd 88 ee a0 f7 e8 fc 38 0b 78 02 50 f8 48 30 e8 0d 00 f5 a0 2b a0 0c 70 fa 08 09 28 07 90 03 30 ed a8 03 40 07 e8 f2 88 d6 40 f1 30 01 38 bd e0 e9 a0 08 58 ca 68 eb 68 02 58 e3 d8 ec a8 fb a0 fe f0 f1 08 f8 d0 20 d8 ff f0 f4 00 14 70 ff 78 fa 60 01 f8 01 20 00 f8 f7 80 03 28 01 f0 eb c0 fd 90 02 50 f3 58 fd 00 01 10 f4 20 f9 88 00 f8 e8 80 f3 60 02 d0 f6
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 13 80 23 35 59 8c 50 13 80 5b ad 3d 4b a0 13 80 9b 69 df 5a 50 13 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 13 80 23 35 59 8c 50 13 80 5b ad 3d 4b a0 13 80 9b 69 df 5a 50 13 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): c8 dd 70 f3 60 00 30 d2 58 ee 10 05 e8 cd 28 e9 00 03 88 ef 90 f1 c0 fa 28 f8 d8 ef 70 f9 28 ed 98 f0 60 fe 80 03 40 02 c8 fb 48 f3 00 fc 98 fe d8 07 c0 03 70 fc 30 06 90 fe 60 fd 28 18 c0 07 28 f8 60 f3 b0 fb 98 fc b0 fc 30 05 68 fc 18 fa c0 e1 18 f2 38 03 a0 d3 88 f0 60 04 38 d3 b8 ee 50 01 98 ea 88 f2 e0 fb c0 f5 c8 f1 d8 fa 28 09 70 fa b8 f9 b0 01 a0 fa 98 fc 78 f3 b0 fa 20 00 98 f5 30 fe 28 ff 98 0e 00 06 e8 fa 48 15 40 05 70 fb 98 f4 70 fa 58 03 c0 f5 60 00 90 02 00 f8 a8 e0 f0 f3 c0 02 98 d2 e0 ef e0 05 a0 da c0 f0 60 01 90 ed b8 f2 58 fc 80 f7 f8 f2 68 fb 58 f9 40 f5 98 fc b8 f2 b8 f6 58 fe 58 f4 78 fa f0 fd 78 07 a8 01 e0 fa 30 20 40 09 a0 f8 18 1d 68 08 38 fc 00 06 c0 04 48 02 70 f3 70 02 c0 04 38 f7 58 e4 20 f6 c8 00 78 d3 40 f1 c0 05 38 dc 48 f2 98 01 e0 ec 38 f3 18 fd 10 ff a0 f6 b0 fa e0 15 e8 ff a0 f8 58 0d a8 ff 50 fc e8 00 50 01 18 00 a8 fa 58 02 c8 00 a0 f2 80 fe b8 01 88 f7 40 fe a8 00 10 f8 68 fb 58 00 a8 f0 a8 f7 90 01 e0 f9
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 11 80 23 35 59 8c 50 11 80 5b ad 3d 4b a0 11 80 9b 69 df 5a 50 11 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 11 80 23 35 59 8c 50 11 80 5b ad 3d 4b a0 11 80 9b 69 df 5a 50 11 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): e0 e6 b8 f6 a0 00 18 de 18 f3 c8 03 b8 da 30 ef 40 02 d8 f3 80 f5 20 fc 28 fa 20 f4 30 fb e0 f1 70 f4 d0 fe a8 02 58 01 c8 fc 90 f6 a0 fc e0 fe e8 05 b8 02 48 fd a0 04 10 ff 08 fe 18 12 e8 05 78 fa a8 f6 c0 fc 08 fe b8 fd d0 03 b8 fd c0 fb 50 e9 b8 f5 90 02 c0 de 70 f4 68 03 70 de 08 f3 10 01 00 f0 e8 f5 f8 fc 58 f8 58 f5 20 fc e8 06 d0 fb 40 fb 48 01 e8 fb 68 fd 98 f6 f8 fb 10 00 30 f8 a8 fe 60 ff f0 0a 80 04 30 fc f8 0f f0 03 a8 fc 70 f7 d0 fb 98 02 58 f8 48 00 f8 01 08 fa 80 e8 f8 f6 18 02 f8 dd f0 f3 70 04 f8 e3 90 f4 10 01 28 f2 10 f6 48 fd a8 f9 40 f6 88 fc 00 fb f0 f7 70 fd 08 f6 f8 f8 c0 fe 40 f7 c8 fb 70 fe 98 05 38 01 20 fc 28 18 f0 06 78 fa d0 15 48 06 30 fd 88 04 90 03 c8 01 98 f6 d0 01 a0 03 68 f9 40 eb a0 f8 98 00 98 de f0 f4 50 04 28 e5 b0 f5 38 01 a8 f1 68 f6 d8 fd 50 ff f8 f8 00 fc 68 10 e8 ff 78 fa 00 0a b0 ff 38 fd a8 00 f8 00 10 00 00 fc c0 01 90 00 f8 f5 e0 fe 40 01 a8 f9 a8 fe 80 00 08 fa 90 fc 48 00 78 f4 b8 f9 28 01 68 fb
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 0f 80 23 35 59 8c 50 0f 80 5b ad 3d 4b a0 0f 80 9b 69 df 5a 50 0f 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 0f 80 23 35 59 8c 50 0f 80 5b ad 3d 4b a0 0f 80 9b 69 df 5a 50 0f 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): e0 ee b0 f9 30 00 18 e9 28 f7 88 02 f0 e6 88 f4 80 01 c0 f7 c0 f8 60 fd 10 fc e8 f7 b8 fc 90 f6 50 f8 30 ff b8 01 20 01 e0 fd a0 f9 00 fe 48 ff e8 03 e0 01 38 fe 18 03 48 ff b0 fe 18 0c e0 03 10 fc a8 f9 d8 fd 50 fe 58 fe 98 02 30 fe 10 fd e0 f0 08 f9 a0 01 d0 e9 48 f8 30 02 98 e9 60 f7 a8 00 50 f5 48 f9 e8 fd e0 fa e8 f8 68 fd 90 04 38 fd d8 fc d8 00 50 fd 48 fe b8 f9 58 fd 10 00 d0 fa 18 ff 98 ff 50 07 00 03 70 fd a0 0a a0 02 c0 fd 48 fa 38 fd a8 01 e0 fa 30 00 40 01 00 fc 58 f0 f8 f9 60 01 50 e9 f0 f7 f0 02 50 ed 60 f8 b0 00 c8 f6 58 f9 28 fe c8 fb 80 f9 b0 fd a8 fc a0 fa 50 fe 58 f9 58 fb 28 ff 28 fa 38 fd f8 fe b8 03 d0 00 70 fd 18 10 98 04 50 fc 88 0e 30 04 20 fe 00 03 60 02 28 01 b8 f9 38 01 60 02 98 fb 28 f2 10 fb 60 00 b8 e9 a0 f8 e0 02 18 ee 20 f9 d0 00 70 f6 98 f9 88 fe 88 ff 48 fb 50 fd f0 0a f0 ff 48 fc a8 06 d0 ff 28 fe 70 00 a8 00 08 00 50 fd 28 01 60 00 48 f9 40 ff d8 00 c0 fb 20 ff 50 00 08 fc b0 fd 28 00 58 f8 d8 fb c0 00 e8 fc
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 0d 80 23 35 59 8c 50 0d 80 5b ad 3d 4b a0 0d 80 9b 69 df 5a 50 0d 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 0d 80 23 35 59 8c 50 0d 80 5b ad 3d 4b a0 0d 80 9b 69 df 5a 50 0d 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 68 f3 58 fb 48 00 10 ef 88 f9 e0 01 60 ed 98 f7 18 01 e8 f9 c0 fa 10 fe 10 fd 10 fa 98 fd e8 f8 30 fa 68 ff 50 01 a8 00 60 fe 40 fb 48 fe 70 ff f8 02 58 01 a0 fe 50 02 88 ff 00 ff 08 09 f8 02 38 fd 58 fb 60 fe 00 ff e0 fe f0 01 e0 fe e0 fd a8 f4 e0 fa 48 01 60 ef 38 fa b8 01 38 ef 80 f9 88 00 f8 f7 f0 fa 78 fe 28 fc b0 fa 10 fe 70 03 e8 fd a0 fd a0 00 f8 fd b0 fe 50 fb f8 fd 08 00 18 fc 50 ff b0 ff 78 05 40 02 18 fe f8 07 f8 01 50 fe b8 fb e8 fd 48 01 28 fc 20 00 f8 00 00 fd 40 f4 80 fb 08 01 f8 ee f8 f9 38 02 f8 f1 48 fa 80 00 10 f9 00 fb a0 fe d0 fc 18 fb 40 fe 78 fd f0 fb b8 fe 08 fb 78 fc 60 ff a0 fb e0 fd 38 ff c8 02 a0 00 10 fe 10 0c 78 03 40 fd e0 0a 28 03 98 fe 40 02 c8 01 e8 00 48 fb e8 00 d0 01 b8 fc a0 f5 48 fc 48 00 50 ef 78 fa 28 02 90 f2 d8 fa 98 00 d8 f8 30 fb e8 fe a0 ff 78 fc 00 fe 30 08 f8 ff 38 fd 00 05 e0 ff a0 fe 58 00 80 00 08 00 00 fe e0 00 48 00 f8 fa 70 ff a0 00 d0 fc 58 ff 40 00 08 fd 48 fe 20 00 40 fa e0 fc 90 00 b0 fd
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 0b 80 23 35 59 8c 50 0b 80 5b ad 3d 4b a0 0b 80 9b 69 df 5a 50 0b 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 0b 80 23 35 59 8c 50 0b 80 5b ad 3d 4b a0 0b 80 9b 69 df 5a 50 0b 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): 70 f7 d8 fc 18 00 88 f4 90 fb 40 01 78 f3 48 fa b8 00 e0 fb 60 fc a8 fe 08 fe f8 fb 60 fe 48 fb 28 fc 98 ff e0 00 90 00 f0 fe d8 fc 00 ff a8 ff f8 01 f0 00 18 ff 90 01 a0 ff 50 ff 08 06 f0 01 08 fe d8 fc f0 fe 28 ff 30 ff 50 01 18 ff 88 fe 70 f8 80 fc d0 00 e8 f4 20 fc 10 01 c8 f4 b0 fb 50 00 a0 fa a0 fc f8 fe 68 fd 70 fc b8 fe 48 02 98 fe 70 fe 68 00 a8 fe 28 ff d8 fc a8 fe 08 00 60 fd 88 ff c8 ff a8 03 80 01 b8 fe 50 05 50 01 d8 fe 20 fd 98 fe d8 00 70 fd 18 00 a0 00 00 fe 28 f8 f8 fc b0 00 a0 f4 f8 fb 78 01 a8 f6 28 fc 50 00 60 fb a8 fc 18 ff e0 fd b8 fc d8 fe 50 fe 48 fd 20 ff a8 fc b0 fd 90 ff 10 fd 98 fe 78 ff e0 01 68 00 b8 fe 08 08 48 02 28 fe 40 07 18 02 08 ff 80 01 28 01 90 00 d8 fc 98 00 30 01 c8 fd 10 f9 88 fd 30 00 d8 f4 48 fc 70 01 08 f7 88 fc 60 00 38 fb c8 fc 48 ff c8 ff a8 fd a8 fe 78 05 f8 ff 28 fe 58 03 e8 ff 10 ff 38 00 58 00 08 00 a8 fe 98 00 30 00 a0 fc 98 ff 68 00 e0 fd 88 ff 20 00 00 fe d8 fe 18 00 28 fc e8 fd 60 00 78 fe
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 09 80 23 35 59 8c 50 09 80 5b ad 3d 4b a0 09 80 9b 69 df 5a 50 09 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 09 80 23 35 59 8c 50 09 80 5b ad 3d 4b a0 09 80 9b 69 df 5a 50 09 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): b0 f9 a8 fd 28 00 80 f7 c0 fc e8 00 a8 f6 c8 fb 88 00 f0 fc 58 fd 00 ff 88 fe 00 fd c8 fe 70 fc 10 fd b0 ff a0 00 50 00 28 ff 98 fd 28 ff b8 ff 78 01 a8 00 50 ff 20 01 c0 ff 80 ff 80 04 78 01 98 fe a0 fd 30 ff 80 ff 68 ff f0 00 68 ff f0 fe 50 fa 70 fd a0 00 b0 f7 20 fd e0 00 a0 f7 c0 fc 48 00 00 fc 78 fd 40 ff 18 fe 50 fd 08 ff b8 01 f0 fe d0 fe 50 00 f8 fe 58 ff a8 fd 00 ff 08 00 08 fe a8 ff d8 ff c0 02 20 01 08 ff 00 04 f8 00 28 ff e0 fd f0 fe a0 00 18 fe 10 00 78 00 80 fe 20 fa b8 fd 88 00 80 f7 f8 fc 18 01 00 f9 20 fd 40 00 88 fc 80 fd 50 ff 68 fe 90 fd 20 ff b8 fe f8 fd 58 ff 80 fd 38 fe b0 ff d0 fd f0 fe 98 ff 68 01 50 00 08 ff 08 06 b8 01 98 fe 70 05 90 01 48 ff 18 01 e0 00 70 00 a8 fd 70 00 e0 00 58 fe d0 fa 20 fe 20 00 a0 f7 38 fd 10 01 48 f9 68 fd 48 00 68 fc 98 fd 78 ff d0 ff 38 fe 00 ff 18 04 f8 ff a0 fe 80 02 f0 ff 48 ff 28 00 40 00 00 00 f8 fe 70 00 28 00 78 fd b0 ff 50 00 68 fe a8 ff 20 00 80 fe 20 ff 10 00 20 fd 70 fe 50 00 d8 fe
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 07 80 23 35 59 8c 50 07 80 5b ad 3d 4b a0 07 80 9b 69 df 5a 50 07 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 07 80 23 35 59 8c 50 07 80 5b ad 3d 4b a0 07 80 9b 69 df 5a 50 07 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): b8 fb 68 fe 08 00 48 fa c8 fd a0 00 c0 f9 20 fd 60 00 f0 fd 30 fe 58 ff 00 ff f8 fd 28 ff a0 fd 10 fe c8 ff 68 00 48 00 78 ff 68 fe 78 ff d0 ff f8 00 70 00 88 ff c8 00 d0 ff a8 ff 00 03 f8 00 00 ff 68 fe 78 ff 90 ff 98 ff a0 00 88 ff 40 ff 30 fc 40 fe 68 00 70 fa 10 fe 88 00 60 fa d0 fd 28 00 50 fd 48 fe 78 ff b0 fe 30 fe 50 ff 20 01 48 ff 30 ff 30 00 50 ff 90 ff 70 fe 58 ff 00 00 b0 fe c8 ff e0 ff d0 01 b8 00 58 ff a0 02 a8 00 68 ff 90 fe 48 ff 68 00 b8 fe 08 00 50 00 00 ff 10 fc 78 fe 58 00 50 fa f8 fd b8 00 50 fb 18 fe 28 00 b0 fd 58 fe 88 ff f0 fe 60 fe 68 ff 28 ff a8 fe 90 ff 58 fe d8 fe c8 ff 88 fe 50 ff c0 ff e8 00 38 00 58 ff 00 04 28 01 10 ff a0 03 08 01 80 ff c0 00 90 00 40 00 68 fe 48 00 98 00 e8 fe 88 fc c0 fe 18 00 70 fa 28 fe b0 00 88 fb 48 fe 30 00 98 fd 68 fe a0 ff e0 ff d0 fe 50 ff b8 02 f8 ff 10 ff a8 01 f8 ff 88 ff 18 00 28 00 00 00 50 ff 48 00 18 00 50 fe d0 ff 38 00 f0 fe c8 ff 18 00 00 ff 68 ff 08 00 10 fe f0 fe 30 00 38 ff
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 05 80 23 35 59 8c 50 05 80 5b ad 3d 4b a0 05 80 9b 69 df 5a 50 05 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 05 80 23 35 59 8c 50 05 80 5b ad 3d 4b a0 05 80 9b 69 df 5a 50 05 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): d8 fc d0 fe 10 00 c0 fb 60 fe 78 00 58 fb e0 fd 48 00 78 fe b0 fe 80 ff 40 ff 80 fe 60 ff 38 fe 88 fe d8 ff 50 00 28 00 90 ff c8 fe 90 ff d8 ff b8 00 50 00 a8 ff 90 00 e0 ff c0 ff 40 02 b8 00 48 ff d0 fe 98 ff c0 ff b0 ff 78 00 b0 ff 70 ff 28 fd b0 fe 50 00 d0 fb 88 fe 68 00 c8 fb 58 fe 18 00 f8 fd b8 fe 98 ff 08 ff a8 fe 80 ff e0 00 78 ff 68 ff 28 00 80 ff b0 ff d0 fe 78 ff 00 00 00 ff d0 ff f0 ff 60 01 88 00 80 ff 00 02 78 00 90 ff e8 fe 70 ff 50 00 08 ff 08 00 38 00 38 ff 10 fd e0 fe 40 00 b8 fb 78 fe 90 00 78 fc 90 fe 20 00 40 fe b8 fe a8 ff 30 ff c8 fe 90 ff 60 ff 00 ff a8 ff c0 fe 20 ff d8 ff e8 fe 78 ff c8 ff b0 00 28 00 80 ff 08 03 e0 00 50 ff b8 02 c8 00 a0 ff 90 00 70 00 38 00 d0 fe 38 00 70 00 30 ff 68 fd 18 ff 10 00 d0 fb a0 fe 88 00 a0 fc b0 fe 28 00 30 fe c8 fe b8 ff e8 ff 20 ff 80 ff 08 02 00 00 50 ff 40 01 f0 ff a8 ff 18 00 20 00 00 00 80 ff 38 00 10 00 c0 fe d8 ff 28 00 30 ff d0 ff 10 00 40 ff 90 ff 08 00 88 fe 30 ff 20 00 68 ff
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 03 80 23 35 59 8c 50 03 80 5b ad 3d 4b a0 03 80 9b 69 df 5a 50 03 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 03 80 23 35 59 8c 50 03 80 5b ad 3d 4b a0 03 80 9b 69 df 5a 50 03 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): d8 fd 30 ff 08 00 20 fd e0 fe 48 00 d8 fc 90 fe 30 00 f8 fe 18 ff b0 ff 80 ff 00 ff 98 ff d0 fe 08 ff e8 ff 38 00 20 00 b8 ff 30 ff b8 ff e8 ff 78 00 30 00 c8 ff 60 00 e0 ff d8 ff 80 01 78 00 80 ff 38 ff b8 ff c8 ff c8 ff 50 00 c0 ff a0 ff 18 fe 20 ff 30 00 38 fd 08 ff 40 00 30 fd e8 fe 18 00 a8 fe 20 ff b8 ff 58 ff 18 ff a8 ff 90 00 a8 ff 98 ff 18 00 a8 ff c8 ff 38 ff a8 ff 08 00 58 ff e0 ff f0 ff e8 00 60 00 a8 ff 50 01 50 00 b0 ff 48 ff a0 ff 30 00 58 ff 00 00 28 00 78 ff 08 fe 40 ff 28 00 28 fd f8 fe 60 00 a8 fd 08 ff 18 00 d8 fe 28 ff c0 ff 78 ff 30 ff b0 ff 90 ff 50 ff c8 ff 28 ff 68 ff e8 ff 48 ff a8 ff e0 ff 78 00 18 00 b0 ff 00 02 90 00 88 ff d0 01 88 00 c0 ff 60 00 50 00 20 00 30 ff 28 00 48 00 78 ff 48 fe 60 ff 10 00 38 fd 18 ff 60 00 c0 fd 20 ff 18 00 c8 fe 30 ff d0 ff e8 ff 68 ff a8 ff 58 01 00 00 88 ff d0 00 f8 ff c0 ff 08 00 08 00 00 00 a8 ff 20 00 08 00 28 ff e0 ff 18 00 78 ff e0 ff 00 00 80 ff b8 ff 00 00 08 ff 78 ff 18 00 a0 ff
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d9 ec 9b e2 12 90 01 80 23 35 59 8c 50 01 80 5b ad 3d 4b a0 01 80 9b 69 df 5a 50 01 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' in (len=33): d9 ec 9b e2 12 90 01 80 23 35 59 8c 50 01 80 5b ad 3d 4b a0 01 80 9b 69 df 5a 50 01 80 9c d1 b4 da
+Block 'pq_ecu_test/codec/fr' out (len=320): d8 fe 90 ff f8 ff 80 fe 68 ff 28 00 68 fe 40 ff 18 00 78 ff 80 ff d0 ff c0 ff 78 ff c8 ff 68 ff 88 ff f0 ff 18 00 20 00 e0 ff 90 ff e8 ff f0 ff 38 00 20 00 e0 ff 30 00 f0 ff e8 ff c0 00 38 00 b0 ff 90 ff d8 ff d0 ff e0 ff 28 00 d0 ff c8 ff 08 ff 88 ff 10 00 98 fe 80 ff 20 00 98 fe 70 ff 08 00 50 ff 90 ff d8 ff a8 ff 88 ff d0 ff 48 00 d0 ff c8 ff 08 00 d0 ff e0 ff 98 ff d8 ff 00 00 a8 ff f0 ff 00 00 78 00 30 00 d8 ff a8 00 28 00 d8 ff a8 ff d0 ff 18 00 b0 ff 00 00 10 00 c0 ff 00 ff 98 ff 10 00 90 fe 80 ff 28 00 d8 fe 88 ff 08 00 68 ff 98 ff e0 ff b8 ff 98 ff d8 ff c0 ff a8 ff e0 ff 90 ff b0 ff f0 ff a0 ff d0 ff f0 ff 38 00 00 00 d0 ff 00 01 40 00 c0 ff e8 00 40 00 e0 ff 30 00 20 00 10 00 a0 ff 10 00 20 00 b8 ff 20 ff b0 ff 00 00 98 fe 88 ff 28 00 e0 fe 90 ff 08 00 68 ff 98 ff e8 ff f8 ff b0 ff d0 ff b0 00 00 00 c8 ff 68 00 f8 ff e0 ff 08 00 08 00 f8 ff d0 ff 08 00 00 00 90 ff f0 ff 08 00 b8 ff f0 ff 00 00 c0 ff d8 ff 00 00 80 ff b8 ff 10 00 d0 ff
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' out (len=320): 80 ff 80 ff 98 ff 30 ff 30 ff 68 ff 18 ff 10 ff 28 ff f8 fe f8 fe 00 ff e0 fe a8 fe 80 fe 48 fe 30 fe 20 fe d0 fd d8 fd c8 fd 70 fd 80 fd 78 fd 28 fd 30 fd 28 fd b0 fc f0 fc 98 fc 78 fc 88 fc 58 fc 28 fc 40 fc 28 fc d8 fb 20 fc d8 fb f0 fb 78 fb 28 fc 28 fb e0 fb 60 fb a8 fb 10 fb e8 fb d0 fa a0 fb 18 fb 68 fb d0 fa b8 fb 98 fa 70 fb e8 fa 30 fb a8 fa 78 fb 78 fa 28 fb d0 fa e8 fa 90 fa 30 fb 68 fa e0 fa b8 fa a0 fa 80 fa e0 fa 50 fa 98 fa a0 fa 60 fa 60 fa a8 fa 30 fa a8 fa f8 f9 e0 fa c8 f9 c0 fa e8 f9 a8 fa a8 f9 f0 fa 78 f9 a8 fa c0 f9 78 fa 80 f9 b8 fa 50 f9 70 fa a8 f9 30 fa 68 f9 78 fa 38 f9 30 fa 98 f9 f0 f9 58 f9 38 fa 28 f9 f0 f9 88 f9 b0 f9 48 f9 00 fa 18 f9 b8 f9 70 f9 78 f9 30 f9 c8 f9 f8 f8 b8 f9 c8 f8 e8 f9 a0 f8 c0 f9 c0 f8 a0 f9 88 f8 e0 f9 58 f8 98 f9 a0 f8 68 f9 60 f8 a8 f9 30 f8 58 f9 90 f8 18 f9 50 f8 60 f9 20 f8 10 f9 80 f8 c8 f8 40 f8 10 f9 10 f8 c8 f8 68 f8 88 f8 28 f8 d0 f8 f8 f7 88 f8 50 f8 50 f8 10 f8 98 f8 d8 f7 98 f8
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' out (len=320): a8 f7 c8 f8 78 f7 a8 f8 98 f7 88 f8 58 f7 c8 f8 30 f7 88 f8 78 f7 50 f8 38 f7 90 f8 10 f7 48 f8 68 f7 00 f8 30 f7 48 f8 00 f7 f8 f7 58 f7 c0 f7 18 f7 08 f8 e8 f6 c0 f7 38 f7 80 f7 00 f7 c8 f7 c8 f6 80 f7 20 f7 48 f7 e0 f6 98 f7 b0 f6 88 f7 80 f6 b8 f7 50 f6 98 f7 70 f6 78 f7 38 f6 b8 f7 08 f6 78 f7 50 f6 40 f7 10 f6 88 f7 e8 f5 38 f7 38 f6 00 f7 00 f6 40 f7 d0 f5 f8 f6 30 f6 b0 f6 f0 f5 f8 f6 c0 f5 b0 f6 20 f6 68 f6 e0 f5 b0 f6 b0 f5 68 f6 08 f6 28 f6 d0 f5 70 f6 a0 f5 68 f6 70 f5 98 f6 40 f5 70 f6 60 f5 50 f6 28 f5 90 f6 f8 f4 48 f6 40 f5 18 f6 00 f5 58 f6 d8 f4 10 f6 30 f5 d0 f5 f8 f4 10 f6 c8 f4 c8 f5 28 f5 80 f5 f0 f4 c0 f5 c0 f4 78 f5 18 f5 38 f5 e0 f4 80 f5 b0 f4 38 f5 00 f5 f8 f4 c0 f4 48 f5 88 f4 38 f5 60 f4 70 f5 30 f4 48 f5 50 f4 28 f5 18 f4 68 f5 e8 f3 28 f5 30 f4 f8 f4 f0 f3 38 f5 c8 f3 f0 f4 18 f4 b0 f4 e0 f3 f8 f4 b0 f3 a8 f4 10 f4 68 f4 d8 f3 b0 f4 a8 f3 60 f4 00 f4 20 f4 c0 f3 70 f4 90 f3 28 f4 e8 f3 e8 f3 a8 f3 38 f4 70 f3 30 f4
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' out (len=320): 40 f3 60 f4 10 f3 38 f4 30 f3 18 f4 f0 f2 58 f4 c0 f2 18 f4 08 f3 e0 f3 c8 f2 28 f4 a0 f2 d8 f3 f8 f2 a0 f3 b8 f2 e8 f3 88 f2 98 f3 e0 f2 58 f3 a8 f2 a0 f3 70 f2 58 f3 d0 f2 10 f3 90 f2 58 f3 58 f2 10 f3 b0 f2 d0 f2 78 f2 18 f3 40 f2 10 f3 08 f2 40 f3 d8 f1 18 f3 00 f2 f8 f2 b8 f1 38 f3 90 f1 f8 f2 d8 f1 c0 f2 98 f1 08 f3 68 f1 b8 f2 c0 f1 78 f2 80 f1 c0 f2 50 f1 78 f2 a8 f1 30 f2 70 f1 78 f2 38 f1 30 f2 90 f1 e8 f1 58 f1 38 f2 28 f1 e8 f1 80 f1 a8 f1 48 f1 f8 f1 10 f1 f0 f1 e0 f0 28 f2 a8 f0 00 f2 d0 f0 e0 f1 90 f0 20 f2 60 f0 e0 f1 a8 f0 a8 f1 70 f0 e8 f1 40 f0 98 f1 98 f0 58 f1 60 f0 a0 f1 30 f0 50 f1 88 f0 10 f1 48 f0 58 f1 18 f0 10 f1 78 f0 c8 f0 38 f0 18 f1 08 f0 c8 f0 60 f0 88 f0 28 f0 d8 f0 f0 ef d0 f0 c0 ef 00 f1 90 ef d8 f0 b8 ef b8 f0 78 ef f8 f0 48 ef b8 f0 90 ef 88 f0 58 ef c8 f0 28 ef 80 f0 80 ef 48 f0 48 ef 88 f0 18 ef 40 f0 70 ef f8 ef 38 ef 40 f0 08 ef f8 ef 60 ef b0 ef 28 ef f8 ef f8 ee b0 ef 50 ef 70 ef 18 ef c0 ef e8 ee b0 ef
+Block 'pq_ecu_test/ecu/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/ecu/fr' out (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' in (len=33): d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Block 'pq_ecu_test/codec/fr' out (len=320): b8 ee e0 ef 88 ee b8 ef a8 ee 98 ef 70 ee d8 ef 40 ee 90 ef 88 ee 60 ef 48 ee a0 ef 20 ee 50 ef 78 ee 10 ef 38 ee 58 ef 10 ee 08 ef 68 ee c0 ee 30 ee 08 ef 00 ee c0 ee 60 ee 80 ee 28 ee c8 ee f0 ed 78 ee 48 ee 40 ee 08 ee 88 ee d8 ed 80 ee a8 ed b0 ee 78 ed 90 ee a0 ed 70 ee 60 ed b0 ee 30 ed 70 ee 80 ed 38 ee 48 ed 78 ee 18 ed 28 ee 70 ed e8 ed 30 ed 38 ee 00 ed f0 ed 58 ed b0 ed 10 ed f8 ed e0 ec b0 ed 38 ed 78 ed f8 ec c8 ed c8 ec 78 ed 20 ed 40 ed e0 ec 88 ed b0 ec 78 ed 88 ec a8 ed 58 ec 80 ed 78 ec 60 ed 40 ec a0 ed 10 ec 58 ed 58 ec 20 ed 20 ec 68 ed f8 eb 18 ed 50 ec d8 ec 10 ec 20 ed d8 eb d0 ec 30 ec 88 ec f8 eb d0 ec c0 eb 88 ec 18 ec 48 ec e0 eb 98 ec a8 eb 48 ec 00 ec 08 ec c8 eb 58 ec 90 eb 48 ec 60 eb 78 ec 38 eb 50 ec 60 eb 30 ec 20 eb 70 ec f8 ea 28 ec 48 eb f0 eb 10 eb 30 ec e0 ea e0 eb 38 eb a0 eb 00 eb f0 eb c8 ea a8 eb 28 eb 68 eb e8 ea b8 eb b0 ea 70 eb 08 eb 38 eb c8 ea 88 eb 90 ea 40 eb e8 ea 08 eb a8 ea 58 eb 70 ea 50 eb
+
+chunk null_context: depth=0
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 9855f5b..2b1f4c2 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -23,6 +23,13 @@ AT_CHECK([
$abs_top_builddir/tests/io/pq_rtp_test], [0], [expout])
AT_CLEANUP
+AT_SETUP([ecu/ecu_fr_test])
+AT_KEYWORDS([ecu_fr_test])
+cat $abs_srcdir/ecu/ecu_fr_test.ok > expout
+AT_CHECK([
+ $abs_top_builddir/tests/ecu/ecu_fr_test], [0], [expout])
+AT_CLEANUP
+
AT_SETUP([conv/enc/amr_efr])
AT_KEYWORDS([amr_efr])
AT_CHECK([test "x$enable_amr_efr_tests" = xyes || exit 77])