From 462b9ebde7a33cafa025d626e5bd638f99dc4846 Mon Sep 17 00:00:00 2001
From: Sergey Musikhin <musihin_sergei@mail.ru>
Date: Thu, 10 Jun 2021 06:58:59 +0000
Subject: [PATCH] init_xb200

---
 grc/gen_bladerf_blocks.py     |  6 ++--
 lib/bladerf/bladerf_common.cc | 64 +++++++++++++++++++----------------
 lib/bladerf/bladerf_common.h  |  2 ++
 3 files changed, 39 insertions(+), 33 deletions(-)

diff --git a/grc/gen_bladerf_blocks.py b/grc/gen_bladerf_blocks.py
index db317c8..9df9098 100644
--- a/grc/gen_bladerf_blocks.py
+++ b/grc/gen_bladerf_blocks.py
@@ -110,9 +110,9 @@ parameters:
   category: Advanced
   label: 'XB-200'
   dtype: enum
-  default: auto
-  options: ['auto', 'auto3db', '50M', '144M', '222M', 'custom']
-  option_labels: ['auto', 'auto3db', '50M', '144M', '222M', 'custom']
+  default: 'none'
+  options: ['none','auto', 'auto3db', '50M', '144M', '222M', 'custom']
+  option_labels: ['none','auto', 'auto3db', '50M', '144M', '222M', 'custom']
   
 
   
diff --git a/lib/bladerf/bladerf_common.cc b/lib/bladerf/bladerf_common.cc
index 244d83d..9dd91c3 100644
--- a/lib/bladerf/bladerf_common.cc
+++ b/lib/bladerf/bladerf_common.cc
@@ -242,43 +242,15 @@ void bladerf_common::init(dict_t const &dict, bladerf_direction direction)
     }
   }
 
-
-
   if (bladerf_is_fpga_configured(_dev.get()) != 1) {
     BLADERF_THROW("The FPGA is not configured! Provide device argument "
                   "fpga=/path/to/the/bitstream.rbf to load it.");
   }
 
   /* XB-200 Transverter Board */
-  if (dict.count("xb200")) {
-    status = bladerf_expansion_attach(_dev.get(), BLADERF_XB_200);
-    if (status != 0) {
-      BLADERF_WARNING("Could not attach XB-200: " << bladerf_strerror(status));
-    } else {
-      bladerf_xb200_filter filter = BLADERF_XB200_AUTO_1DB;
-
-      if (_get(dict, "xb200") == "custom") {
-        filter = BLADERF_XB200_CUSTOM;
-      } else if (_get(dict, "xb200") == "50M") {
-        filter = BLADERF_XB200_50M;
-      } else if (_get(dict, "xb200") == "144M") {
-        filter = BLADERF_XB200_144M;
-      } else if (_get(dict, "xb200") == "222M") {
-        filter = BLADERF_XB200_222M;
-      } else if (_get(dict, "xb200") == "auto3db") {
-        filter = BLADERF_XB200_AUTO_3DB;
-      } else if (_get(dict, "xb200") == "auto") {
-        filter = BLADERF_XB200_AUTO_1DB;
-      } else {
-        filter = BLADERF_XB200_AUTO_1DB;
-      }
+  if (dict.count("xb200") && _get(dict, "xb200") != "none") {
+      init_xb200(_get(dict, "xb200"), direction);
 
-      status = bladerf_xb200_set_filterbank(_dev.get(), direction, filter);
-      if (status != 0) {
-        BLADERF_WARNING("Could not set XB-200 filter: "
-                        << bladerf_strerror(status));
-      }
-    }
   }
 
   if(dict.count("ref_clk"))
@@ -430,6 +402,38 @@ size_t bladerf_common::get_max_channels(bladerf_direction direction)
 #endif
 }
 
+void bladerf_common::init_xb200(const std::string &filter_name, bladerf_direction direction)
+{
+    auto status = bladerf_expansion_attach(_dev.get(), BLADERF_XB_200);
+    if (status != 0) {
+        BLADERF_WARNING("Could not attach XB-200: " << bladerf_strerror(status));
+    } else {
+        bladerf_xb200_filter filter = BLADERF_XB200_AUTO_1DB;
+
+        if (filter_name == "custom") {
+            filter = BLADERF_XB200_CUSTOM;
+        } else if (filter_name == "50M") {
+            filter = BLADERF_XB200_50M;
+        } else if (filter_name == "144M") {
+            filter = BLADERF_XB200_144M;
+        } else if (filter_name== "222M") {
+            filter = BLADERF_XB200_222M;
+        } else if (filter_name == "auto3db") {
+            filter = BLADERF_XB200_AUTO_3DB;
+        } else if (filter_name == "auto") {
+            filter = BLADERF_XB200_AUTO_1DB;
+        } else {
+            filter = BLADERF_XB200_AUTO_1DB;
+        }
+
+        status = bladerf_xb200_set_filterbank(_dev.get(), direction, filter);
+        if (status != 0) {
+        BLADERF_WARNING("Could not set XB-200 filter: "
+                        << bladerf_strerror(status));
+        }
+    }
+}
+
 void bladerf_common::init_refclk(int freq)
 {
     const bladerf_range * range = nullptr;
diff --git a/lib/bladerf/bladerf_common.h b/lib/bladerf/bladerf_common.h
index eca363c..51fa262 100644
--- a/lib/bladerf/bladerf_common.h
+++ b/lib/bladerf/bladerf_common.h
@@ -163,8 +163,10 @@ protected:
   /* Get the maximum number of channels supported in a given direction */
   size_t get_max_channels(bladerf_direction direction);
 
+  void init_xb200(const std::string & filter, bladerf_direction direction);
   void init_refclk(int freq);
 
+
   void set_channel_enable(bladerf_channel ch, bool enable);
   bool get_channel_enable(bladerf_channel ch);
 
-- 
GitLab