diff options
author | Thomas Tsou <ttsou@vt.edu> | 2012-06-05 20:31:28 -0400 |
---|---|---|
committer | Alexander Chemeris <Alexander.Chemeris@gmail.com> | 2013-06-24 01:51:02 +0400 |
commit | 41c6657938e930a1c20070d5a8952e6dea12ec32 (patch) | |
tree | 37245a030b3e44e1e3d25086af9fa29b94f6054e /Transceiver52M/Transceiver.h | |
parent | cd576c9636244938a42d8c69da012e45e9fdd4f5 (diff) |
multi-arfcn: refactor to match upstream GSM core
This patch aligns the multicarrier (MC) USRP code with
released GSM core changes that accommodate the MC RAD1.
Primary changes are:
1. Runtime setting of number of channelizer paths
2. Matching channelizer path to ARFCN mapping of GSM core
3. Use a single clock update socket on the drive loop
4. Match transceiver data and control socket ports
Setting of channelizer paths (or width) was previously fixed
at compile time. In either case, channelizer width is limited
by the sample rate of the device and channel spacing of the
maximally decimated filterbank. Available settings are 1, 5,
and 10 channels, which accommodate any number of ARFCN's in
between. Also add the frequency offsets to handle the effective
shift in setting RF frequency.
Previous assumption was to place C0 at the center frequency,
but RAD1 assumes C0 at the leftmost carrier, so adjust
accordingly.
The rest is general consolidation to mostly match the RAD1
interaction with GSM core. There is some loss of flexibility to
run, say, multiple independent instances of OpenBTS through a
single bank of channelized transceivers. But, the better
compatibility and reduction in code is the appropriate tradeoff.
Signed-off-by: Thomas Tsou <ttsou@vt.edu>
Diffstat (limited to 'Transceiver52M/Transceiver.h')
-rw-r--r-- | Transceiver52M/Transceiver.h | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h index 840f87b..56acd9c 100644 --- a/Transceiver52M/Transceiver.h +++ b/Transceiver52M/Transceiver.h @@ -49,7 +49,6 @@ private: 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 VectorQueue *mTransmitPriorityQueue; ///< priority queue of transmit bursts received from GSM core VectorFIFO* mReceiveFIFO; ///< radioInterface FIFO of receive bursts @@ -60,9 +59,6 @@ private: int mChannel; ///< channelizer attach number between 0 and 'M-1' - GSM::Time *mTransmitDeadlineClock; ///< deadline for pushing bursts into transmit FIFO - GSM::Time mLastClockUpdateTime; ///< last time clock update was sent up to core - RadioInterface *mRadioInterface; ///< associated radioInterface object double txFullScale; ///< full scale input to radio double rxFullScale; ///< full scale output to radio @@ -96,8 +92,10 @@ private: bool mOn; ///< flag to indicate that transceiver is powered on bool mRunning; ///< flag to indicate control loop is running + bool mPrimary; ///< flag to indicate C0 channel double mTxFreq; ///< the transmit frequency double mRxFreq; ///< the receive frequency + double mFreqOffset; ///< RF frequency offset int mPower; ///< the transmit power in dB int mTSC; ///< the midamble sequence code double mEnergyThreshold; ///< threshold to determine if received data is potentially a GSM burst @@ -112,7 +110,7 @@ private: float chanRespOffset[8]; ///< most recent timing offset, e.g. TOA, of all timeslots complex chanRespAmplitude[8]; ///< most recent channel amplitude of all timeslots - bool mRadioLocked; + static int mTSC; ///< the midamble sequence code public: @@ -128,7 +126,7 @@ public: int wSamplesPerSymbol, RadioInterface *wRadioInterface, DriveLoop *wDriveLoop, - int wChannel); + int wChannel, bool wPrimary); /** Destructor */ ~Transceiver(); @@ -169,9 +167,11 @@ protected: /** return control loop operational status */ bool running() { return mRunning; } + /** return the drive loop pointer */ + DriveLoop *getDriveLoop() { return mDriveLoop; } + /** set priority on current thread */ void setPriority() { mRadioInterface->setPriority(); } - }; /** FIFO thread loop */ @@ -182,4 +182,3 @@ void *ControlServiceLoopAdapter(Transceiver *); /** transmit queueing thread loop */ void *TransmitPriorityQueueServiceLoopAdapter(Transceiver *); - |