aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/radioInterfaceResamp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Transceiver52M/radioInterfaceResamp.cpp')
-rw-r--r--Transceiver52M/radioInterfaceResamp.cpp37
1 files changed, 24 insertions, 13 deletions
diff --git a/Transceiver52M/radioInterfaceResamp.cpp b/Transceiver52M/radioInterfaceResamp.cpp
index 6c3839a..95ed16d 100644
--- a/Transceiver52M/radioInterfaceResamp.cpp
+++ b/Transceiver52M/radioInterfaceResamp.cpp
@@ -55,14 +55,11 @@ static int resamp_inchunk = 0;
static int resamp_outrate = 0;
static int resamp_outchunk = 0;
-short *convertRecvBuffer = NULL;
-short *convertSendBuffer = NULL;
-
RadioInterfaceResamp::RadioInterfaceResamp(RadioDevice *wRadio,
int wReceiveOffset,
- int wSPS,
+ size_t sps, size_t chan,
GSM::Time wStartTime)
- : RadioInterface(wRadio, wReceiveOffset, wSPS, wStartTime),
+ : RadioInterface(wRadio, wReceiveOffset, sps, chan, wStartTime),
innerSendBuffer(NULL), outerSendBuffer(NULL),
innerRecvBuffer(NULL), outerRecvBuffer(NULL)
{
@@ -87,12 +84,15 @@ void RadioInterfaceResamp::close()
outerSendBuffer = NULL;
innerRecvBuffer = NULL;
outerRecvBuffer = NULL;
- sendBuffer = NULL;
- recvBuffer = NULL;
upsampler = NULL;
dnsampler = NULL;
+ if (sendBuffer.size())
+ sendBuffer[0] = NULL;
+ if (recvBuffer.size())
+ recvBuffer[0] = NULL;
+
RadioInterface::close();
}
@@ -101,8 +101,19 @@ bool RadioInterfaceResamp::init(int type)
{
float cutoff = 1.0f;
+ if (mChans != 1) {
+ LOG(ALERT) << "Unsupported channel configuration " << mChans;
+ return false;
+ }
+
close();
+ sendBuffer.resize(1);
+ recvBuffer.resize(1);
+ convertSendBuffer.resize(1);
+ convertRecvBuffer.resize(1);
+ mReceiveFIFO.resize(1);
+
switch (type) {
case RadioDevice::RESAMP_64M:
resamp_inrate = RESAMP_64M_INRATE;
@@ -156,11 +167,11 @@ bool RadioInterfaceResamp::init(int type)
innerRecvBuffer =
new signalVector(NUMCHUNKS * resamp_inchunk / mSPSTx);
- convertSendBuffer = new short[outerSendBuffer->size() * 2];
- convertRecvBuffer = new short[outerRecvBuffer->size() * 2];
+ convertSendBuffer[0] = new short[outerSendBuffer->size() * 2];
+ convertRecvBuffer[0] = new short[outerRecvBuffer->size() * 2];
- sendBuffer = innerSendBuffer;
- recvBuffer = innerRecvBuffer;
+ sendBuffer[0] = innerSendBuffer;
+ recvBuffer[0] = innerRecvBuffer;
return true;
}
@@ -186,7 +197,7 @@ void RadioInterfaceResamp::pullBuffer()
}
convert_short_float((float *) outerRecvBuffer->begin(),
- convertRecvBuffer, 2 * resamp_outchunk);
+ convertRecvBuffer[0], 2 * resamp_outchunk);
underrun |= local_underrun;
readTimestamp += (TIMESTAMP) resamp_outchunk;
@@ -227,7 +238,7 @@ void RadioInterfaceResamp::pushBuffer()
LOG(ALERT) << "Sample rate downsampling error";
}
- convert_float_short(convertSendBuffer,
+ convert_float_short(convertSendBuffer[0],
(float *) outerSendBuffer->begin(),
powerScaling, 2 * outer_len);