From e02f0af785fc4581d3f69def7dd3f578df8934d8 Mon Sep 17 00:00:00 2001
From: Sergey Musikhin <musihin_sergei@mail.ru>
Date: Mon, 7 Jun 2021 20:47:48 +0000
Subject: [PATCH] power_monitoring for sink

---
 grc/gen_bladerf_blocks.py     | 13 +++++++------
 lib/bladerf/bladerf_sink_c.cc | 12 ++++++++++++
 lib/sink_impl.cc              |  5 +++++
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/grc/gen_bladerf_blocks.py b/grc/gen_bladerf_blocks.py
index 746ffc0..7f7d1ab 100644
--- a/grc/gen_bladerf_blocks.py
+++ b/grc/gen_bladerf_blocks.py
@@ -121,27 +121,28 @@ inputs:
 - domain: message
   id: command
   optional: true
-% if sourk == 'source':
+  
 - domain: message
   id: pmic_in
   optional: true
-
+  
+% if sourk == 'source':
 outputs:
-- domain: message
-  id: pmic_out
-  optional: true
+
 % endif
 - domain: stream
   dtype: ${'$'}{type.type}
   multiplicity: ${'$'}{nchan}
 % if sourk == 'sink':
-
 outputs:
 - domain: message
   id: async_msgs
   optional: true
 % endif
 
+- domain: message
+  id: pmic_out
+  optional: true
 
 
 templates:
diff --git a/lib/bladerf/bladerf_sink_c.cc b/lib/bladerf/bladerf_sink_c.cc
index 6ee3acd..928f843 100644
--- a/lib/bladerf/bladerf_sink_c.cc
+++ b/lib/bladerf/bladerf_sink_c.cc
@@ -73,6 +73,18 @@ bladerf_sink_c::bladerf_sink_c(const std::string &args) :
   _in_burst(false),
   _running(false)
 {
+    message_port_register_in(pmt::mp("pmic_in"));
+    message_port_register_out(pmt::mp("pmic_out"));
+
+    set_msg_handler(pmt::mp("pmic_in"),[=](const pmt::pmt_t & msg)
+    {
+        auto type = pmt::symbol_to_string(msg);
+        auto value = get_pmic_value(type);
+        auto pair = pmt::cons(msg,pmt::string_to_symbol(value));
+        message_port_pub(pmt::mp("pmic_out"), pair);
+
+    });
+
   dict_t dict = params_to_dict(args);
 
   /* Perform src/sink agnostic initializations */
diff --git a/lib/sink_impl.cc b/lib/sink_impl.cc
index 2d3b105..126e3d7 100644
--- a/lib/sink_impl.cc
+++ b/lib/sink_impl.cc
@@ -27,12 +27,17 @@ namespace gr {
                         gr::io_signature::make(0, 0, 0))
       , sample_rate_(0)
     {
+        message_port_register_hier_in(pmt::mp("pmic_in"));
+        message_port_register_hier_out(pmt::mp("pmic_out"));
+
         auto dev_list = bladerf_sink_c::get_devices();
         if(dev_list.size() == 0)
             throw std::runtime_error("No supported devices found "
                                      "(check the connection and/or udev rules).");
 
         device_ = make_bladerf_sink_c( args ); //todo: get by id from block args
+        msg_connect(self(), pmt::mp("pmic_in"), device_, pmt::mp("pmic_in"));
+        msg_connect(device_,pmt::mp("pmic_out"), self(), pmt::mp("pmic_out"));
     }
 
     /*
-- 
GitLab