[PATCH] osmo-trx[master]: uhd: Add non-UmTRX channel swap support

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Tom Tsou gerrit-no-reply at lists.osmocom.org
Fri Jun 9 22:53:44 UTC 2017


Review at  https://gerrit.osmocom.org/2872

uhd: Add non-UmTRX channel swap support

Previously an UmTRX-only feature.

Change-Id: I4a0e0c1d69e89993158e948535ad33f54e568d2d
Signed-off-by: Tom Tsou <tom.tsou at ettus.com>
---
M Transceiver52M/UHDDevice.cpp
1 file changed, 44 insertions(+), 21 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-trx refs/changes/72/2872/1

diff --git a/Transceiver52M/UHDDevice.cpp b/Transceiver52M/UHDDevice.cpp
index 0436265..5b62b75 100644
--- a/Transceiver52M/UHDDevice.cpp
+++ b/Transceiver52M/UHDDevice.cpp
@@ -293,6 +293,7 @@
 	std::vector<smpl_buf *> rx_buffers;
 
 	void init_gains();
+	void set_channels(bool swap);
 	void set_rates();
 	bool parse_dev_type();
 	bool flush_recv(size_t num_pkts);
@@ -566,6 +567,45 @@
 	return true;
 }
 
+void uhd_device::set_channels(bool swap)
+{
+	if (iface == MULTI_ARFCN) {
+		if (dev_type != B200 && dev_type != B210)
+			throw std::invalid_argument("Device does not support MCBTS");
+		dev_type = B2XX_MCBTS;
+		chans = 1;
+	}
+
+	if (chans > dev_param_map.at(dev_key(dev_type, 1, 1)).channels)
+		throw std::invalid_argument("Device does not support number of requested channels");
+
+	std::string subdev_string;
+	switch (dev_type) {
+	case B210:
+	case E3XX:
+		if (chans == 1)
+			subdev_string = swap ? "A:B" : "A:A";
+		else if (chans == 2)
+			subdev_string = swap ? "A:B A:A" : "A:A A:B";
+		break;
+	case X3XX:
+	case UMTRX:
+		if (chans == 1)
+			subdev_string = swap ? "B:0" : "A:0";
+		else if (chans == 2)
+			subdev_string = swap ? "B:0 A:0" : "A:0 B:0";
+		break;
+	default:
+		break;
+	}
+
+	if (!subdev_string.empty()) {
+		uhd::usrp::subdev_spec_t spec(subdev_string);
+		usrp_dev->set_tx_subdev_spec(spec);
+		usrp_dev->set_rx_subdev_spec(spec);
+	}
+}
+
 int uhd_device::open(const std::string &args, int ref, bool swap_channels)
 {
 	const char *refstr;
@@ -596,27 +636,10 @@
 		return -1;
 	}
 
-	// Verify and set channels
-	if (iface == MULTI_ARFCN) {
-		if ((dev_type != B200) && (dev_type != B210)) {
-			LOG(ALERT) << "Unsupported device configuration";
-			return -1;
-		}
-
-		dev_type = B2XX_MCBTS;
-		chans = 1;
-	} else if (chans == 2) {
-		if (dev_type == B210) {
-		} else if (dev_type == UMTRX) {
-			uhd::usrp::subdev_spec_t subdev_spec(swap_channels?"B:0 A:0":"A:0 B:0");
-			usrp_dev->set_tx_subdev_spec(subdev_spec);
-			usrp_dev->set_rx_subdev_spec(subdev_spec);
-		} else {
-			LOG(ALERT) << "Invalid device configuration";
-			return -1;
-		}
-	} else if (chans != 1) {
-		LOG(ALERT) << "Invalid channel combination for device";
+	try {
+		set_channels(swap_channels);
+        } catch (const std::exception &e) {
+		LOG(ALERT) << "Channel setting failed - " << e.what();
 		return -1;
 	}
 

-- 
To view, visit https://gerrit.osmocom.org/2872
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4a0e0c1d69e89993158e948535ad33f54e568d2d
Gerrit-PatchSet: 1
Gerrit-Project: osmo-trx
Gerrit-Branch: master
Gerrit-Owner: Tom Tsou <tom at tsou.cc>



More information about the gerrit-log mailing list