transceiver: reroute uhd  messages to logging facility

Pipe the following uhd message types to standard warning
levels (INFO, WARN, ERROR) respectively. Ignore fastpath
logging messages and, instead, catch them from the
asynchronous device interface.

    enum type_t{
        status  = 's',
        warning = 'w',
        error   = 'e',
        fastpath= 'f'
    };

Signed-off-by: Thomas Tsou <ttsou@vt.edu>

git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2676 19bc5d8c-e614-43d4-8b26-e1612bc8e597
diff --git a/Transceiver52M/UHDDevice.cpp b/Transceiver52M/UHDDevice.cpp
index cc90d73..261eabc 100644
--- a/Transceiver52M/UHDDevice.cpp
+++ b/Transceiver52M/UHDDevice.cpp
@@ -24,6 +24,7 @@
 #include "Logger.h"
 #include <uhd/usrp/single_usrp.hpp>
 #include <uhd/utils/thread_priority.hpp>
+#include <uhd/utils/msg.hpp>
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -240,6 +241,28 @@
 	}
 }
 
+/* 
+    Catch and drop underrun 'U' and overrun 'O' messages from stdout
+    since we already report using the logging facility. Direct
+    everything else appropriately.
+ */
+void uhd_msg_handler(uhd::msg::type_t type, const std::string &msg)
+{
+	switch (type) {
+	case uhd::msg::status:
+		LOG(INFO) << msg;
+		break;
+	case uhd::msg::warning:
+		LOG(WARN) << msg;
+		break;
+	case uhd::msg::error:
+		LOG(ERROR) << msg;
+		break;
+	case uhd::msg::fastpath:
+		break;
+	}
+}
+
 uhd_device::uhd_device(double rate, bool skip_rx)
 	: desired_smpl_rt(rate), actual_smpl_rt(0),
 	  tx_gain(0.0), tx_gain_min(0.0), tx_gain_max(0.0),
@@ -352,6 +375,9 @@
 {
 	LOG(INFO) << "creating USRP device...";
 
+	// Register msg handler
+	uhd::msg::register_handler(&uhd_msg_handler);
+
 	// Allow all UHD devices
 	uhd::device_addr_t dev_addr("");
 	try {