aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M
diff options
context:
space:
mode:
authorThomas Tsou <tom@tsou.cc>2013-10-29 15:17:34 -0400
committerThomas Tsou <tom@tsou.cc>2013-11-08 11:33:31 -0500
commitd647ec5dc1d8c3ff30544f7ef2bc6e0aa06f6633 (patch)
treedfd07bbb17b50f72f729763eddf5c9eea6962526 /Transceiver52M
parentc289d7a4095cd753d8c80a4b9e5c1001d78586fc (diff)
Transceiver52M: Delay socket allocation to heap
For multiple transceiver connections, it is inappropriate to allocate all sockets in the transceiver constructor due to not knowing how many connections are avaialble in advance and for error checking purposes. Instead, store the base socket address port combination and setup the sockets in the initialization call. Signed-off-by: Thomas Tsou <tom@tsou.cc>
Diffstat (limited to 'Transceiver52M')
-rw-r--r--Transceiver52M/Transceiver.cpp29
-rw-r--r--Transceiver52M/Transceiver.h10
2 files changed, 22 insertions, 17 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 63e62be..7a1160d 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -47,10 +47,9 @@ Transceiver::Transceiver(int wBasePort,
int wSPS,
GSM::Time wTransmitLatency,
RadioInterface *wRadioInterface)
- :mDataSocket(wBasePort+2,TRXAddress,wBasePort+102),
- mControlSocket(wBasePort+1,TRXAddress,wBasePort+101),
- mClockSocket(wBasePort,TRXAddress,wBasePort+100),
- mSPSTx(wSPS), mSPSRx(1), mNoises(NOISE_CNT)
+ : mBasePort(wBasePort), mAddr(TRXAddress),
+ mDataSocket(NULL), mCtrlSocket(NULL), mClockSocket(NULL),
+ mSPSTx(wSPS), mSPSRx(1), mNoises(NOISE_CNT)
{
GSM::Time startTime(random() % gHyperframe,0);
@@ -81,6 +80,10 @@ Transceiver::~Transceiver()
{
sigProcLibDestroy();
mTransmitPriorityQueue.clear();
+
+ delete mClockSocket;
+ delete mCtrlSocket;
+ delete mDataSocket;
}
bool Transceiver::init()
@@ -90,6 +93,10 @@ bool Transceiver::init()
return false;
}
+ mClockSocket = new UDPSocket(mBasePort, mAddr.c_str(), mBasePort + 100);
+ mCtrlSocket = new UDPSocket(mBasePort + 1, mAddr.c_str(), mBasePort + 101);
+ mDataSocket = new UDPSocket(mBasePort + 2, mAddr.c_str(), mBasePort + 102);
+
// initialize filler tables with dummy bursts
for (int i = 0; i < 8; i++) {
signalVector* modBurst = modulateBurst(gDummyBurst,
@@ -395,8 +402,8 @@ void Transceiver::driveControl()
char buffer[MAX_PACKET_LENGTH];
int msgLen = -1;
buffer[0] = '\0';
-
- msgLen = mControlSocket.read(buffer);
+
+ msgLen = mCtrlSocket->read(buffer);
if (msgLen < 1) {
return;
@@ -544,8 +551,7 @@ void Transceiver::driveControl()
LOG(WARNING) << "bogus command " << command << " on control interface.";
}
- mControlSocket.write(response,strlen(response)+1);
-
+ mCtrlSocket->write(response, strlen(response) + 1);
}
bool Transceiver::driveTransmitPriorityQueue()
@@ -554,7 +560,7 @@ bool Transceiver::driveTransmitPriorityQueue()
char buffer[gSlotLen+50];
// check data socket
- size_t msgLen = mDataSocket.read(buffer);
+ size_t msgLen = mDataSocket->read(buffer);
if (msgLen!=gSlotLen+1+4+1) {
LOG(ERR) << "badly formatted packet on GSM->TRX interface";
@@ -644,9 +650,8 @@ void Transceiver::driveReceiveFIFO()
burstString[gSlotLen+9] = '\0';
delete rxBurst;
- mDataSocket.write(burstString,gSlotLen+10);
+ mDataSocket->write(burstString, gSlotLen + 10);
}
-
}
void Transceiver::driveTransmitFIFO()
@@ -711,7 +716,7 @@ void Transceiver::writeClockInterface()
LOG(INFO) << "ClockInterface: sending " << command;
- mClockSocket.write(command,strlen(command)+1);
+ mClockSocket->write(command, strlen(command) + 1);
mLastClockUpdateTime = mTransmitDeadlineClock;
diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h
index c3be343..4b549ef 100644
--- a/Transceiver52M/Transceiver.h
+++ b/Transceiver52M/Transceiver.h
@@ -32,15 +32,15 @@
/** The Transceiver class, responsible for physical layer of basestation */
class Transceiver {
-
private:
-
+ int mBasePort;
+ std::string mAddr;
GSM::Time mTransmitLatency; ///< latency between basestation clock and transmit deadline clock
GSM::Time mLatencyUpdateTime; ///< last time latency was updated
- UDPSocket mDataSocket; ///< socket for writing to/reading from GSM core
- UDPSocket mControlSocket; ///< socket for writing/reading control commands from GSM core
- UDPSocket mClockSocket; ///< socket for writing clock updates to GSM core
+ UDPSocket *mDataSocket; ///< socket for writing to/reading from GSM core
+ UDPSocket *mCtrlSocket; ///< socket for writing/reading control commands from GSM core
+ UDPSocket *mClockSocket; ///< socket for writing clock updates to GSM core
VectorQueue mTransmitPriorityQueue; ///< priority queue of transmit bursts received from GSM core
VectorFIFO* mTransmitFIFO; ///< radioInterface FIFO of transmit bursts