aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Tsou <tom@tsou.cc>2013-11-15 14:15:47 -0500
committerThomas Tsou <tom@tsou.cc>2013-11-15 23:35:07 -0500
commitcb269a32ddb3db9e8d7a8e48d5c007116348fb07 (patch)
tree91534eb5414a3a905e57e3e67cd0a2fba506e769
parent1882099d1562a4575b447ef90ad021ff2e6be10a (diff)
Transceiver52M: Use independent power scaling varables for each channel
Simply vectorize the existing power state variable. Signed-off-by: Thomas Tsou <tom@tsou.cc>
-rw-r--r--Transceiver52M/Transceiver.cpp25
-rw-r--r--Transceiver52M/radioInterface.cpp11
-rw-r--r--Transceiver52M/radioInterface.h4
-rw-r--r--Transceiver52M/radioInterfaceResamp.cpp2
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<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;
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,