aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/Transceiver.h
diff options
context:
space:
mode:
authorThomas Tsou <ttsou@vt.edu>2012-06-05 20:31:28 -0400
committerAlexander Chemeris <Alexander.Chemeris@gmail.com>2013-06-24 01:51:02 +0400
commit41c6657938e930a1c20070d5a8952e6dea12ec32 (patch)
tree37245a030b3e44e1e3d25086af9fa29b94f6054e /Transceiver52M/Transceiver.h
parentcd576c9636244938a42d8c69da012e45e9fdd4f5 (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.h15
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 *);
-