diff options
-rw-r--r-- | Transceiver52M/Transceiver.cpp | 29 | ||||
-rw-r--r-- | Transceiver52M/Transceiver.h | 10 |
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 |