From eceec213a5b76e2025a0b1ee622f025a2c0fa54b Mon Sep 17 00:00:00 2001 From: Thomas Tsou Date: Mon, 6 Oct 2014 10:26:58 -0700 Subject: [PATCH] Transceiver52M: Match handover and slot mask flags with TransceiverRAD1 The following flags affect GPRS performance. Add flags for HANDOVER/NOHANDOVER commands, which force RACH burst processing on selected slots. Also turn on the previously disabled filler table slot mask (i.e. 'Magic flag'). These changes match Transceiver52M with TransceiverRAD1 command handling that took place in commit 5289a229d9f92b5e18798671c3dd457a3ee66bc4 'sync of openbts' Signed-off-by: Thomas Tsou --- Transceiver52M/Transceiver.cpp | 18 +++++++++--------- Transceiver52M/Transceiver.h | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index c63f04d..ae20423 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -118,6 +118,7 @@ bool Transceiver::init() DFEForward[i] = NULL; DFEFeedback[i] = NULL; channelEstimateTime[i] = mTransmitDeadlineClock; + mHandoverActive[i] = false; } return true; @@ -267,6 +268,9 @@ Transceiver::CorrType Transceiver::expectedCorrType(GSM::Time currTime) unsigned burstTN = currTime.TN(); unsigned burstFN = currTime.FN(); + if (mHandoverActive[burstTN]) + return RACH; + switch (mChanType[burstTN]) { case NONE: return OFF; @@ -593,10 +597,8 @@ void Transceiver::driveControl() sprintf(response,"RSP HANDOVER 1 %d",timeslot); } else { - //mHandoverActive[ARFCN][timeslot] = true; - //sprintf(response,"RSP HANDOVER 0 %d",timeslot); - //handover fails! -kurtis - sprintf(response,"RSP HANDOVER 1 %d",timeslot); + mHandoverActive[timeslot] = true; + sprintf(response,"RSP HANDOVER 0 %d",timeslot); } } else if (strcmp(command,"NOHANDOVER")==0) { @@ -608,10 +610,8 @@ void Transceiver::driveControl() sprintf(response,"RSP NOHANDOVER 1 %d",timeslot); } else { - //mHandoverActive[ARFCN][timeslot] = false; - //sprintf(response,"RSP NOHANDOVER 0 %d",timeslot); - //hanover fails! -kurtis - sprintf(response,"RSP NOHANDOVER 1 %d",timeslot); + mHandoverActive[timeslot] = false; + sprintf(response,"RSP NOHANDOVER 0 %d",timeslot); } } else if (strcmp(command,"SETSLOT")==0) { @@ -700,7 +700,7 @@ bool Transceiver::driveTransmitPriorityQueue() radioVector *newVec = fixRadioVector(newBurst,RSSI,currTime); - if (false && fillerFlag) { + if (fillerFlag) { setFiller(newVec,false,true); } else { mTransmitPriorityQueue.write(newVec); diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h index 34c7d2d..22c2dbe 100644 --- a/Transceiver52M/Transceiver.h +++ b/Transceiver52M/Transceiver.h @@ -133,6 +133,7 @@ private: unsigned mTSC; ///< the midamble sequence code int fillerModulus[8]; ///< modulus values of all timeslots, in frames signalVector *fillerTable[102][8]; ///< table of modulated filler waveforms for all timeslots + bool mHandoverActive[8]; unsigned mMaxExpectedDelay; ///< maximum expected time-of-arrival offset in GSM symbols GSM::Time channelEstimateTime[8]; ///< last timestamp of each timeslot's channel estimate