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