aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-10-22 02:52:18 +0200
committerMax <msuraev@sysmocom.de>2019-01-24 15:47:48 +0100
commita8b3565246ce4c36cba07b1ebdefa45b895de78f (patch)
treec19b97d1557d4531079fb4ba748015beb6b45f0e /Transceiver52M
parenta3934a11a4a9cd7f510cc188192bf27302695ef5 (diff)
VTY: add extended (11-bit) RACH detection toggle
Since I838c21db29c54f1924dd478c2b34b46b70aab2cd we have both TS1 and TS2 synch. sequences, in addition to "default" TS0. Let's finally introduce the VTY configuration parameter, that can be used to toggle optional detection of both TS1 and TS2. Note: we keep this optional because of potentially bad impact on performance. There's no point in paying the performance penalty unless upper levels (BTS, PCU) actually make use of it. Change-Id: I1aee998d83b06692d76a83f79748f9129a2547e8 Related: OS#3054
Diffstat (limited to 'Transceiver52M')
-rw-r--r--Transceiver52M/Transceiver.cpp20
-rw-r--r--Transceiver52M/Transceiver.h4
-rw-r--r--Transceiver52M/osmo-trx.cpp3
3 files changed, 17 insertions, 10 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index df1c0bd..cfb36c3 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -159,7 +159,8 @@ Transceiver::~Transceiver()
* are still expected to report clock indications through control channel
* activity.
*/
-bool Transceiver::init(FillerType filler, size_t rtsc, unsigned rach_delay, bool edge)
+bool Transceiver::init(FillerType filler, size_t rtsc, unsigned rach_delay,
+ bool edge, bool ext_rach)
{
int d_srcport, d_dstport, c_srcport, c_dstport;
@@ -173,6 +174,7 @@ bool Transceiver::init(FillerType filler, size_t rtsc, unsigned rach_delay, bool
return false;
}
+ mExtRACH = ext_rach;
mEdge = edge;
mDataSockets.resize(mChans);
@@ -497,16 +499,16 @@ CorrType Transceiver::expectedCorrType(GSM::Time currTime,
break;
case IV:
case VI:
- return RACH;
+ return mExtRACH ? EXT_RACH : RACH;
break;
case V: {
int mod51 = burstFN % 51;
if ((mod51 <= 36) && (mod51 >= 14))
- return RACH;
+ return mExtRACH ? EXT_RACH : RACH;
else if ((mod51 == 4) || (mod51 == 5))
- return RACH;
+ return mExtRACH ? EXT_RACH : RACH;
else if ((mod51 == 45) || (mod51 == 46))
- return RACH;
+ return mExtRACH ? EXT_RACH : RACH;
else if (mHandover[burstTN][sdcch4_subslot[burstFN % 102]])
return RACH;
else
@@ -524,7 +526,7 @@ CorrType Transceiver::expectedCorrType(GSM::Time currTime,
case XIII: {
int mod52 = burstFN % 52;
if ((mod52 == 12) || (mod52 == 38))
- return RACH;
+ return mExtRACH ? EXT_RACH : RACH;
else if ((mod52 == 25) || (mod52 == 51))
return IDLE;
else
@@ -635,9 +637,11 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime, double &RSSI, bool &i
noise = 20.0 * log10(rxFullScale / state->mNoiseLev);
}
+ unsigned max_toa = (type == RACH || type == EXT_RACH) ?
+ mMaxExpectedDelayAB : mMaxExpectedDelayNB;
+
/* Detect normal or RACH bursts */
- rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, amp, toa,
- (type==RACH)?mMaxExpectedDelayAB:mMaxExpectedDelayNB);
+ rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, amp, toa, max_toa);
if (rc > 0) {
type = (CorrType) rc;
diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h
index e250adc..432e3b4 100644
--- a/Transceiver52M/Transceiver.h
+++ b/Transceiver52M/Transceiver.h
@@ -114,7 +114,8 @@ public:
~Transceiver();
/** Start the control loop */
- bool init(FillerType filler, size_t rtsc, unsigned rach_delay, bool edge);
+ bool init(FillerType filler, size_t rtsc, unsigned rach_delay,
+ bool edge, bool ext_rach);
/** attach the radioInterface receive FIFO */
bool receiveFIFO(VectorFIFO *wFIFO, size_t chan)
@@ -210,6 +211,7 @@ private:
int mSPSRx; ///< number of samples per Rx symbol
size_t mChans;
+ bool mExtRACH;
bool mEdge;
bool mOn; ///< flag to indicate that transceiver is powered on
bool mForceClockInterface; ///< flag to indicate whether IND CLOCK shall be sent unconditionally after transceiver is started
diff --git a/Transceiver52M/osmo-trx.cpp b/Transceiver52M/osmo-trx.cpp
index 0e63020..1f35cd8 100644
--- a/Transceiver52M/osmo-trx.cpp
+++ b/Transceiver52M/osmo-trx.cpp
@@ -144,7 +144,7 @@ int makeTransceiver(struct trx_ctx *trx, RadioInterface *radio)
trx->cfg.rx_sps, trx->cfg.num_chans, GSM::Time(3,0),
radio, trx->cfg.rssi_offset);
if (!transceiver->init(trx->cfg.filler, trx->cfg.rtsc,
- trx->cfg.rach_delay, trx->cfg.egprs)) {
+ trx->cfg.rach_delay, trx->cfg.egprs, trx->cfg.ext_rach)) {
LOG(ALERT) << "Failed to initialize transceiver";
return -1;
}
@@ -408,6 +408,7 @@ static void print_config(struct trx_ctx *trx)
ost << " Tx Samples-per-Symbol... " << trx->cfg.tx_sps << std::endl;
ost << " Rx Samples-per-Symbol... " << trx->cfg.rx_sps << std::endl;
ost << " EDGE support............ " << trx->cfg.egprs << std::endl;
+ ost << " Extended RACH support... " << trx->cfg.ext_rach << std::endl;
ost << " Reference............... " << trx->cfg.clock_ref << std::endl;
ost << " C0 Filler Table......... " << trx->cfg.filler << std::endl;
ost << " Multi-Carrier........... " << trx->cfg.multi_arfcn << std::endl;