From 6e69277e27b3c9286244a1664f7c06c38ec2882c Mon Sep 17 00:00:00 2001 From: Tom Tsou Date: Wed, 3 Dec 2014 11:25:53 -0800 Subject: [PATCH] Transceiver52M: Add USRP X300/X310 support X300/X310 support was missing due to the very high bandwidth X-series being somewhat of an excessive solution for relatively narrowband GSM. Nevertheless, the X300/X310 is a useful and capable device for OpenBTS use. Signed-off-by: Tom Tsou --- Transceiver52M/UHDDevice.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Transceiver52M/UHDDevice.cpp b/Transceiver52M/UHDDevice.cpp index 2c7d9c7..f24a5f3 100644 --- a/Transceiver52M/UHDDevice.cpp +++ b/Transceiver52M/UHDDevice.cpp @@ -33,7 +33,7 @@ #endif #define B2XX_CLK_RT 26e6 -#define B2XX_BASE_RT GSMRATE +#define X3XX_CLK_RT 104e6 #define B100_BASE_RT 400000 #define USRP2_BASE_RT 390625 #define TX_AMPL 0.3 @@ -44,6 +44,7 @@ enum uhd_dev_type { USRP2, B100, B2XX, + X3XX, UMTRX, NUM_USRP_TYPES, }; @@ -73,6 +74,8 @@ static struct uhd_dev_offset uhd_offsets[NUM_USRP_TYPES * 2] = { { B100, 4, 7.9307e-5 }, { B2XX, 1, 9.9692e-5 }, { B2XX, 4, 6.9248e-5 }, + { X3XX, 1, 1.5360e-4 }, + { X3XX, 4, 1.1264e-4 }, { UMTRX, 1, 9.9692e-5 }, { UMTRX, 4, 7.3846e-5 }, }; @@ -107,6 +110,7 @@ static double select_rate(uhd_dev_type type, int sps) switch (type) { case USRP2: + case X3XX: return USRP2_BASE_RT * sps; case B100: return B100_BASE_RT * sps; @@ -474,7 +478,8 @@ bool uhd_device::parse_dev_type() { std::string mboard_str, dev_str; uhd::property_tree::sptr prop_tree; - size_t usrp1_str, usrp2_str, b100_str, b200_str, b210_str, umtrx_str; + size_t usrp1_str, usrp2_str, b100_str, b200_str, + b210_str, x300_str, x310_str, umtrx_str; prop_tree = usrp_dev->get_device()->get_tree(); dev_str = prop_tree->access("/name").get(); @@ -485,6 +490,8 @@ bool uhd_device::parse_dev_type() b100_str = mboard_str.find("B100"); b200_str = mboard_str.find("B200"); b210_str = mboard_str.find("B210"); + x300_str = mboard_str.find("X300"); + x310_str = mboard_str.find("X310"); umtrx_str = dev_str.find("UmTRX"); if (usrp1_str != std::string::npos) { @@ -504,6 +511,10 @@ bool uhd_device::parse_dev_type() dev_type = B2XX; } else if (b210_str != std::string::npos) { dev_type = B2XX; + } else if (x300_str != std::string::npos) { + dev_type = X3XX; + } else if (x310_str != std::string::npos) { + dev_type = X3XX; } else if (usrp2_str != std::string::npos) { dev_type = USRP2; } else if (umtrx_str != std::string::npos) { @@ -583,6 +594,7 @@ int uhd_device::open(const std::string &args, bool extref) case B100: return RESAMP_64M; case USRP2: + case X3XX: return RESAMP_100M; }