mirror of
				https://github.com/RangeNetworks/openbts.git
				synced 2025-11-04 05:43:14 +00:00 
			
		
		
		
	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 <tom@tsou.cc>
This commit is contained in:
		@@ -33,7 +33,7 @@
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define B2XX_CLK_RT      26e6
 | 
					#define B2XX_CLK_RT      26e6
 | 
				
			||||||
#define B2XX_BASE_RT     GSMRATE
 | 
					#define X3XX_CLK_RT      104e6
 | 
				
			||||||
#define B100_BASE_RT     400000
 | 
					#define B100_BASE_RT     400000
 | 
				
			||||||
#define USRP2_BASE_RT    390625
 | 
					#define USRP2_BASE_RT    390625
 | 
				
			||||||
#define TX_AMPL          0.3
 | 
					#define TX_AMPL          0.3
 | 
				
			||||||
@@ -44,6 +44,7 @@ enum uhd_dev_type {
 | 
				
			|||||||
	USRP2,
 | 
						USRP2,
 | 
				
			||||||
	B100,
 | 
						B100,
 | 
				
			||||||
	B2XX,
 | 
						B2XX,
 | 
				
			||||||
 | 
						X3XX,
 | 
				
			||||||
	UMTRX,
 | 
						UMTRX,
 | 
				
			||||||
	NUM_USRP_TYPES,
 | 
						NUM_USRP_TYPES,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -73,6 +74,8 @@ static struct uhd_dev_offset uhd_offsets[NUM_USRP_TYPES * 2] = {
 | 
				
			|||||||
	{ B100,  4, 7.9307e-5 },
 | 
						{ B100,  4, 7.9307e-5 },
 | 
				
			||||||
	{ B2XX,  1, 9.9692e-5 },
 | 
						{ B2XX,  1, 9.9692e-5 },
 | 
				
			||||||
	{ B2XX,  4, 6.9248e-5 },
 | 
						{ B2XX,  4, 6.9248e-5 },
 | 
				
			||||||
 | 
						{ X3XX,  1, 1.5360e-4 },
 | 
				
			||||||
 | 
						{ X3XX,  4, 1.1264e-4 },
 | 
				
			||||||
	{ UMTRX, 1, 9.9692e-5 },
 | 
						{ UMTRX, 1, 9.9692e-5 },
 | 
				
			||||||
	{ UMTRX, 4, 7.3846e-5 },
 | 
						{ UMTRX, 4, 7.3846e-5 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -107,6 +110,7 @@ static double select_rate(uhd_dev_type type, int sps)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	switch (type) {
 | 
						switch (type) {
 | 
				
			||||||
	case USRP2:
 | 
						case USRP2:
 | 
				
			||||||
 | 
						case X3XX:
 | 
				
			||||||
		return USRP2_BASE_RT * sps;
 | 
							return USRP2_BASE_RT * sps;
 | 
				
			||||||
	case B100:
 | 
						case B100:
 | 
				
			||||||
		return B100_BASE_RT * sps;
 | 
							return B100_BASE_RT * sps;
 | 
				
			||||||
@@ -474,7 +478,8 @@ bool uhd_device::parse_dev_type()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	std::string mboard_str, dev_str;
 | 
						std::string mboard_str, dev_str;
 | 
				
			||||||
	uhd::property_tree::sptr prop_tree;
 | 
						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();
 | 
						prop_tree = usrp_dev->get_device()->get_tree();
 | 
				
			||||||
	dev_str = prop_tree->access<std::string>("/name").get();
 | 
						dev_str = prop_tree->access<std::string>("/name").get();
 | 
				
			||||||
@@ -485,6 +490,8 @@ bool uhd_device::parse_dev_type()
 | 
				
			|||||||
	b100_str = mboard_str.find("B100");
 | 
						b100_str = mboard_str.find("B100");
 | 
				
			||||||
	b200_str = mboard_str.find("B200");
 | 
						b200_str = mboard_str.find("B200");
 | 
				
			||||||
	b210_str = mboard_str.find("B210");
 | 
						b210_str = mboard_str.find("B210");
 | 
				
			||||||
 | 
						x300_str = mboard_str.find("X300");
 | 
				
			||||||
 | 
						x310_str = mboard_str.find("X310");
 | 
				
			||||||
	umtrx_str = dev_str.find("UmTRX");
 | 
						umtrx_str = dev_str.find("UmTRX");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (usrp1_str != std::string::npos) {
 | 
						if (usrp1_str != std::string::npos) {
 | 
				
			||||||
@@ -504,6 +511,10 @@ bool uhd_device::parse_dev_type()
 | 
				
			|||||||
		dev_type = B2XX;
 | 
							dev_type = B2XX;
 | 
				
			||||||
	} else if (b210_str != std::string::npos) {
 | 
						} else if (b210_str != std::string::npos) {
 | 
				
			||||||
		dev_type = B2XX;
 | 
							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) {
 | 
						} else if (usrp2_str != std::string::npos) {
 | 
				
			||||||
		dev_type = USRP2;
 | 
							dev_type = USRP2;
 | 
				
			||||||
	} else if (umtrx_str != std::string::npos) {
 | 
						} else if (umtrx_str != std::string::npos) {
 | 
				
			||||||
@@ -583,6 +594,7 @@ int uhd_device::open(const std::string &args, bool extref)
 | 
				
			|||||||
	case B100:
 | 
						case B100:
 | 
				
			||||||
		return RESAMP_64M;
 | 
							return RESAMP_64M;
 | 
				
			||||||
	case USRP2:
 | 
						case USRP2:
 | 
				
			||||||
 | 
						case X3XX:
 | 
				
			||||||
		return RESAMP_100M;
 | 
							return RESAMP_100M;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user