mirror of
https://github.com/RangeNetworks/openbts.git
synced 2025-11-01 12:23:34 +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