aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M
diff options
context:
space:
mode:
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;