From cb269a32ddb3db9e8d7a8e48d5c007116348fb07 Mon Sep 17 00:00:00 2001 From: Thomas Tsou Date: Fri, 15 Nov 2013 14:15:47 -0500 Subject: Transceiver52M: Use independent power scaling varables for each channel Simply vectorize the existing power state variable. Signed-off-by: Thomas Tsou --- Transceiver52M/Transceiver.cpp | 25 +++++++++++++------------ Transceiver52M/radioInterface.cpp | 11 +++++------ Transceiver52M/radioInterface.h | 4 +--- Transceiver52M/radioInterfaceResamp.cpp | 2 +- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index 4078c8f..f2d871f 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -603,28 +603,29 @@ void Transceiver::driveControl(size_t chan) else { sprintf(response,"RSP NOISELEV 1 0"); } - } - else if (strcmp(command,"SETPOWER")==0) { + } + else if (!strcmp(command, "SETPOWER")) { // set output power in dB int dbPwr; - sscanf(buffer,"%3s %s %d",cmdcheck,command,&dbPwr); - if (!mOn) - sprintf(response,"RSP SETPOWER 1 %d",dbPwr); + sscanf(buffer, "%3s %s %d", cmdcheck, command, &dbPwr); + if (!mOn) + sprintf(response, "RSP SETPOWER 1 %d", dbPwr); else { mPower = dbPwr; - mRadioInterface->setPowerAttenuation(dbPwr, chan); - sprintf(response,"RSP SETPOWER 0 %d",dbPwr); + mRadioInterface->setPowerAttenuation(mPower, chan); + sprintf(response, "RSP SETPOWER 0 %d", dbPwr); } } - else if (strcmp(command,"ADJPOWER")==0) { + else if (!strcmp(command,"ADJPOWER")) { // adjust power in dB steps int dbStep; - sscanf(buffer,"%3s %s %d",cmdcheck,command,&dbStep); - if (!mOn) - sprintf(response,"RSP ADJPOWER 1 %d",mPower); + sscanf(buffer, "%3s %s %d", cmdcheck, command, &dbStep); + if (!mOn) + sprintf(response, "RSP ADJPOWER 1 %d", mPower); else { mPower += dbStep; - sprintf(response,"RSP ADJPOWER 0 %d",mPower); + mRadioInterface->setPowerAttenuation(mPower, chan); + sprintf(response, "RSP ADJPOWER 0 %d", mPower); } } #define FREQOFFSET 0//11.2e3 diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp index ff9f493..5bddb5c 100644 --- a/Transceiver52M/radioInterface.cpp +++ b/Transceiver52M/radioInterface.cpp @@ -38,8 +38,7 @@ RadioInterface::RadioInterface(RadioDevice *wRadio, int wReceiveOffset, GSM::Time wStartTime) : mRadio(wRadio), mSPSTx(sps), mSPSRx(1), mChans(chans), mMIMO(diversity), sendCursor(0), recvCursor(0), underrun(false), overrun(false), - receiveOffset(wReceiveOffset), mOn(false), powerScaling(1.0), - loadTest(false) + receiveOffset(wReceiveOffset), mOn(false), loadTest(false) { mClock.set(wStartTime); } @@ -63,6 +62,7 @@ bool RadioInterface::init(int type) convertSendBuffer.resize(mChans); convertRecvBuffer.resize(mChans); mReceiveFIFO.resize(mChans); + powerScaling.resize(mChans); for (size_t i = 0; i < mChans; i++) { sendBuffer[i] = new signalVector(CHUNK * mSPSTx); @@ -120,9 +120,9 @@ void RadioInterface::setPowerAttenuation(double atten, size_t chan) digAtten = atten - mRadio->maxTxGain() + rfGain; if (digAtten < 1.0) - powerScaling = 1.0; + powerScaling[chan] = 1.0; else - powerScaling = 1.0/sqrt(pow(10, (digAtten/10.0))); + powerScaling[chan] = 1.0 / sqrt(pow(10, digAtten / 10.0)); } int RadioInterface::radioifyVector(signalVector &wVector, @@ -255,7 +255,6 @@ bool RadioInterface::driveReceiveRadio() *burst->getVector(n)); } - if (mReceiveFIFO[i].size() < 32) mReceiveFIFO[i].write(burst); else @@ -363,7 +362,7 @@ void RadioInterface::pushBuffer() for (size_t i = 0; i < mChans; i++) { convert_float_short(convertSendBuffer[i], (float *) sendBuffer[i]->begin(), - powerScaling, 2 * sendCursor); + powerScaling[i], 2 * sendCursor); } /* Send the all samples in the send buffer */ diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h index 95ef2b2..b3f6b15 100644 --- a/Transceiver52M/radioInterface.h +++ b/Transceiver52M/radioInterface.h @@ -47,7 +47,7 @@ protected: std::vector convertRecvBuffer; std::vector convertSendBuffer; - + std::vector powerScaling; bool underrun; ///< indicates writes to USRP are too slow bool overrun; ///< indicates reads from USRP are too slow TIMESTAMP writeTimestamp; ///< sample timestamp of next packet written to USRP @@ -59,8 +59,6 @@ protected: bool mOn; ///< indicates radio is on - double powerScaling; - bool loadTest; int mNumARFCNs; signalVector *finalVec, *finalVec9; diff --git a/Transceiver52M/radioInterfaceResamp.cpp b/Transceiver52M/radioInterfaceResamp.cpp index 6f14a42..81b52fe 100644 --- a/Transceiver52M/radioInterfaceResamp.cpp +++ b/Transceiver52M/radioInterfaceResamp.cpp @@ -238,7 +238,7 @@ void RadioInterfaceResamp::pushBuffer() convert_float_short(convertSendBuffer[0], (float *) outerSendBuffer->begin(), - powerScaling, 2 * outer_len); + powerScaling[0], 2 * outer_len); num_sent = mRadio->writeSamples(convertSendBuffer, outer_len, -- cgit v1.2.3