Transceiver52M: Remove extra copy in receive drive path

Currently the code allocations a signalVector and then copies
into a radioVector. This is unnecessary because the latter is
a derived class making the first allocation unnecessary.
Modify the radioVector constructor to allow direct use in the
case above.

Signed-off-by: Thomas Tsou <tom@tsou.cc>
This commit is contained in:
Thomas Tsou 2013-11-09 02:46:29 -05:00
parent 6f4906e375
commit e0fa2bfd93
3 changed files with 17 additions and 14 deletions

View File

@ -234,36 +234,33 @@ bool RadioInterface::driveReceiveRadio()
GSM::Time rcvClock = mClock.get();
rcvClock.decTN(receiveOffset);
unsigned tN = rcvClock.TN();
int rcvSz = recvCursor;
int recvSz = recvCursor;
int readSz = 0;
const int symbolsPerSlot = gSlotLen + 8;
int burstSize = (symbolsPerSlot + (tN % 4 == 0)) * mSPSRx;
// while there's enough data in receive buffer, form received
// GSM bursts and pass up to Transceiver
// Using the 157-156-156-156 symbols per timeslot format.
while (rcvSz > (symbolsPerSlot + (tN % 4 == 0)) * mSPSRx) {
GSM::Time tmpTime = rcvClock;
while (recvSz > burstSize) {
for (size_t i = 0; i < mChans; i++) {
signalVector rxVector((symbolsPerSlot + (tN % 4 == 0)) * mSPSRx);
unRadioifyVector((float *) (recvBuffer[i]->begin() + readSz), rxVector);
burst = new radioVector(burstSize, rcvClock);
if (rcvClock.FN() >= 0)
burst = new radioVector(rxVector, tmpTime);
if (burst && (mReceiveFIFO[i].size() < 32))
unRadioifyVector((float *) (recvBuffer[i]->begin() + readSz), *burst);
if (mReceiveFIFO[i].size() < 32)
mReceiveFIFO[i].write(burst);
else {
else
delete burst;
}
}
mClock.incTN();
rcvClock.incTN();
readSz += (symbolsPerSlot+(tN % 4 == 0)) * mSPSRx;
rcvSz -= (symbolsPerSlot+(tN % 4 == 0)) * mSPSRx;
readSz += burstSize;
recvSz -= burstSize;
tN = rcvClock.TN();
burstSize = (symbolsPerSlot + (tN % 4 == 0)) * mSPSRx;
}
if (readSz > 0) {

View File

@ -26,6 +26,11 @@ radioVector::radioVector(const signalVector& wVector, GSM::Time& wTime)
{
}
radioVector::radioVector(size_t size, GSM::Time& wTime)
: signalVector(size), mTime(wTime)
{
}
GSM::Time radioVector::getTime() const
{
return mTime;

View File

@ -29,6 +29,7 @@
class radioVector : public signalVector {
public:
radioVector(const signalVector& wVector, GSM::Time& wTime);
radioVector(size_t size, GSM::Time& wTime);
GSM::Time getTime() const;
void setTime(const GSM::Time& wTime);
bool operator>(const radioVector& other) const;