diff options
Diffstat (limited to 'Transceiver52M')
-rw-r--r-- | Transceiver52M/Transceiver.cpp | 20 | ||||
-rw-r--r-- | Transceiver52M/Transceiver.h | 4 | ||||
-rw-r--r-- | Transceiver52M/osmo-trx.cpp | 3 |
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; |