On Sat, Jan 25, 2014 at 1:22 AM, Andreas Eversberg andreas@eversberg.eu wrote:
once a channel was activeated, there will be RF power on the specific TS, even when osmo-bts does not send bursts anymore. i guess that some filler table of osmo-trx causes it. i think it would be nice if osmo-trx would stop transmitting, when there are no more bursts comming from osmo-bts. (at least after a while.)
Yes, this is the behaviour of the filler table, which will resend the previous frame until a new frame arrives. Sending an idle frame will disable output, which is how the filler table is managed in OpenBTS. You can disable the filler table with this patch.
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index e5ab476..9077465 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -197,19 +197,13 @@ void Transceiver::pushRadioVector(GSM::Time &nowTime) TransceiverState *state; std::vector<signalVector *> bursts(mChans); std::vector<bool> zeros(mChans); + std::vector<bool> filler(mChans, true);
for (size_t i = 0; i < mChans; i ++) { state = &mStates[i];
while ((burst = mTxPriorityQueues[i].getStaleBurst(nowTime))) { LOG(NOTICE) << "dumping STALE burst in TRX->USRP interface"; - - TN = burst->getTime().TN(); - modFN = burst->getTime().FN() % state->fillerModulus[TN]; - - delete state->fillerTable[modFN][TN]; - state->fillerTable[modFN][TN] = burst->getVector(); - burst->setVector(NULL); delete burst; }
@@ -220,9 +214,8 @@ void Transceiver::pushRadioVector(GSM::Time &nowTime) zeros[i] = state->chanType[TN] == NONE;
if ((burst = mTxPriorityQueues[i].getCurrentBurst(nowTime))) { - delete state->fillerTable[modFN][TN]; - state->fillerTable[modFN][TN] = burst->getVector(); bursts[i] = burst->getVector(); + filler[i] = false; burst->setVector(NULL); delete burst; } @@ -230,6 +223,11 @@ void Transceiver::pushRadioVector(GSM::Time &nowTime)
mRadioInterface->driveTransmitRadio(bursts, zeros);
+ for (size_t i = 0; i < mChans; i++) { + if (!filler[i]) + delete bursts[i]; + } + return; }