Transceiver52M: Use independent power scaling varables for each channel

Simply vectorize the existing power state variable.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
This commit is contained in:
Thomas Tsou 2013-11-15 14:15:47 -05:00
parent 1882099d15
commit cb269a32dd
4 changed files with 20 additions and 22 deletions

View File

@ -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

View File

@ -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 */

View File

@ -47,7 +47,7 @@ protected:
std::vector<short *> convertRecvBuffer;
std::vector<short *> convertSendBuffer;
std::vector<float> 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;

View File

@ -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,