aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Transceiver52M/radioInterface.cpp15
-rw-r--r--Transceiver52M/radioVector.cpp5
-rw-r--r--Transceiver52M/radioVector.h1
3 files changed, 17 insertions, 4 deletions
diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp
index d05dcf2..5cf34de 100644
--- a/Transceiver52M/radioInterface.cpp
+++ b/Transceiver52M/radioInterface.cpp
@@ -239,12 +239,19 @@ bool RadioInterface::driveReceiveRadio()
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.
+ /*
+ * Pre-allocate head room for the largest correlation size
+ * so we can later avoid a re-allocation and copy
+ * */
+ size_t head = GSM::gRACHSynchSequence.size();
+
+ /*
+ * Form receive bursts and pass up to transceiver. Use repeating
+ * pattern of 157-156-156-156 symbols per timeslot
+ */
while (recvSz > burstSize) {
for (size_t i = 0; i < mChans; i++) {
- burst = new radioVector(burstSize, rcvClock);
+ burst = new radioVector(burstSize, head, rcvClock);
unRadioifyVector((float *) (recvBuffer[i]->begin() + readSz), *burst);
if (mReceiveFIFO[i].size() < 32)
diff --git a/Transceiver52M/radioVector.cpp b/Transceiver52M/radioVector.cpp
index c50cfa5..8ab6695 100644
--- a/Transceiver52M/radioVector.cpp
+++ b/Transceiver52M/radioVector.cpp
@@ -31,6 +31,11 @@ radioVector::radioVector(size_t size, GSM::Time& wTime)
{
}
+radioVector::radioVector(size_t size, size_t start, GSM::Time& wTime)
+ : signalVector(size, start), mTime(wTime)
+{
+}
+
GSM::Time radioVector::getTime() const
{
return mTime;
diff --git a/Transceiver52M/radioVector.h b/Transceiver52M/radioVector.h
index 5ddb638..c5c255b 100644
--- a/Transceiver52M/radioVector.h
+++ b/Transceiver52M/radioVector.h
@@ -30,6 +30,7 @@ class radioVector : public signalVector {
public:
radioVector(const signalVector& wVector, GSM::Time& wTime);
radioVector(size_t size, GSM::Time& wTime);
+ radioVector(size_t size, size_t start, GSM::Time& wTime);
GSM::Time getTime() const;
void setTime(const GSM::Time& wTime);
bool operator>(const radioVector& other) const;