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:
parent
6f4906e375
commit
e0fa2bfd93
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue