From d62c3d7805f93328690d0e7dfb2cd96bf5b8a6dc Mon Sep 17 00:00:00 2001
From: zhouzhiwen2000 <zhouzhiwen2000@gmail.com>
Date: Sat, 15 Jan 2022 17:30:37 +0800
Subject: [PATCH] iio: fix problems with fmcomms2/3/4 sources and sinks.

This commit fixes NameError("'len_tag_key' is not defined") problem during
generation when using fmcomms2/3/4 sources or sinks and the"tx1_en/rx1_en not found"
errors during running.

This commit also deals with the wrong logic in fmcomms2_sink and source cc source files.
---
 gr-iio/grc/iio_fmcomms2_sink.block.yml   | 7 ++++++-
 gr-iio/grc/iio_fmcomms2_source.block.yml | 8 +++++++-
 gr-iio/lib/fmcomms2_sink_impl.cc         | 2 +-
 gr-iio/lib/fmcomms2_source_impl.cc       | 4 ++--
 4 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/gr-iio/grc/iio_fmcomms2_sink.block.yml b/gr-iio/grc/iio_fmcomms2_sink.block.yml
index 6530de048..829d17bce 100644
--- a/gr-iio/grc/iio_fmcomms2_sink.block.yml
+++ b/gr-iio/grc/iio_fmcomms2_sink.block.yml
@@ -77,6 +77,11 @@ parameters:
     default: 10.0
     hide: ${ ('part' if tx2_en else 'all') }
 
+-   id: len_tag_key
+    label: Packet Length Tag
+    dtype: string
+    hide: ${( 'part' )}
+
 -   id: filter_source
     category: Filter
     label: Filter Configuration
@@ -132,7 +137,7 @@ asserts:
 templates:
     imports: from gnuradio import iio
     make: |
-        iio.fmcomms2_sink_${type.type}(${uri}, [tx1_en, tx2_en], ${buffer_size}, ${cyclic})
+        iio.fmcomms2_sink_${type.type}(${uri}, [${tx1_en}, ${tx2_en}], ${buffer_size}, ${cyclic})
         self.${id}.set_len_tag_key(${len_tag_key})
         self.${id}.set_bandwidth(${bandwidth})
         self.${id}.set_frequency(${frequency})
diff --git a/gr-iio/grc/iio_fmcomms2_source.block.yml b/gr-iio/grc/iio_fmcomms2_source.block.yml
index ecd21f89f..bcf4ed24e 100644
--- a/gr-iio/grc/iio_fmcomms2_source.block.yml
+++ b/gr-iio/grc/iio_fmcomms2_source.block.yml
@@ -102,6 +102,12 @@ parameters:
     options: ["'A_BALANCED'", "'B_BALANCED'", "'C_BALANCED'", "'A_N'", "'A_P'", "'B_N'", "'B_P'", "'C_N'", "'C_P'", "'TX_MONITOR1'", "'TX_MONITOR2'", "'TX_MONITOR1_2'"]
     option_labels: ['A_BALANCED', 'B_BALANCED', 'C_BALANCED', 'A_N', 'A_P', 'B_N', 'B_P', 'C_N', 'C_P', 'TX_MONITOR1', 'TX_MONITOR2', 'TX_MONITOR1_2']
 
+-   id: len_tag_key
+    label: Packet Length Tag
+    dtype: string
+    default: packet_len
+    hide: part
+
 -   id: filter_source
     category: Filter
     label: Filter Configuration
@@ -157,7 +163,7 @@ asserts:
 templates:
     imports: from gnuradio import iio
     make: |
-        iio.fmcomms2_source_${type.type}(${uri}, [rx1_en, rx2_en], ${buffer_size})
+        iio.fmcomms2_source_${type.type}(${uri}, [${rx1_en}, ${rx2_en}], ${buffer_size})
         self.${id}.set_len_tag_key(${len_tag_key})
         self.${id}.set_frequency(${frequency})
         self.${id}.set_samplerate(${samplerate})
diff --git a/gr-iio/lib/fmcomms2_sink_impl.cc b/gr-iio/lib/fmcomms2_sink_impl.cc
index 21d22c655..992ea066f 100644
--- a/gr-iio/lib/fmcomms2_sink_impl.cc
+++ b/gr-iio/lib/fmcomms2_sink_impl.cc
@@ -228,7 +228,7 @@ void fmcomms2_sink_impl<T>::set_samplerate(unsigned long samplerate)
 template <typename T>
 void fmcomms2_sink_impl<T>::set_attenuation(size_t chan, double attenuation)
 {
-    bool is_fmcomms4 = !iio_device_find_channel(phy, "voltage1", false);
+    bool is_fmcomms4 = iio_device_find_channel(phy, "voltage1", false);
     if ((!is_fmcomms4 && chan > 0) || chan > 1) {
         throw std::runtime_error("Channel out of range for this device");
     }
diff --git a/gr-iio/lib/fmcomms2_source_impl.cc b/gr-iio/lib/fmcomms2_source_impl.cc
index 532689fcf..bc07f591f 100644
--- a/gr-iio/lib/fmcomms2_source_impl.cc
+++ b/gr-iio/lib/fmcomms2_source_impl.cc
@@ -333,7 +333,7 @@ void fmcomms2_source_impl<T>::set_samplerate(unsigned long samplerate)
 template <typename T>
 void fmcomms2_source_impl<T>::set_gain_mode(size_t chan, const std::string& mode)
 {
-    bool is_fmcomms4 = !iio_device_find_channel(phy, "voltage1", false);
+    bool is_fmcomms4 = iio_device_find_channel(phy, "voltage1", false);
     if ((!is_fmcomms4 && chan > 0) || chan > 1) {
         throw std::runtime_error("Channel out of range for this device");
     }
@@ -349,7 +349,7 @@ void fmcomms2_source_impl<T>::set_gain_mode(size_t chan, const std::string& mode
 template <typename T>
 void fmcomms2_source_impl<T>::set_gain(size_t chan, double gain_value)
 {
-    bool is_fmcomms4 = !iio_device_find_channel(phy, "voltage1", false);
+    bool is_fmcomms4 = iio_device_find_channel(phy, "voltage1", false);
     if ((!is_fmcomms4 && chan > 0) || chan > 1) {
         throw std::runtime_error("Channel out of range for this device");
     }
-- 
2.30.2

