path: root/Transceiver52M/Transceiver.cpp
AgeCommit message (Collapse)AuthorFilesLines
2016-05-02common: Add mandatory length field to UDP receive callsTom Tsou1-2/+2
Current UDP receive reads up to MAX_UDP_LENGTH bytes into the passed in buffer, which may lead to buffer overflow if the write buffer is of insufficient size. Add mandatory length argument to UDP socket receive calls. Reported-by: Simone Margaritelli <simone@zimperium.com> Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-04-26transceiver: Do not pass transceiver state struct to function where it's not ↵Alexander Chemeris1-6/+5
2016-04-20transceiver: Add an option to generate random Access Bursts.Alexander Chemeris1-0/+3
2016-04-20transceiver: Properly handle MAXDLY.Alexander Chemeris1-5/+14
Previously MAXDLY value was applied to Normal Bursts, which was nice when working with sloppy test equipment like CMD57, but useless for real world usage. At the same time documentation and de facto usage of MAXDLY in OsmoBTS and OpenBTS assumed that it actually applies to Access Bursts (RACH). So this patch changes osmo-rx behavior to apply MAXDLY to RACH bursts and introduces a new command MAXDLYNB for the old behavior.
2016-03-08EDGE: Add random burst generator filler optionTom Tsou1-3/+8
When EDGE is enabled with the '-e' option, the random burst generator switches from GMSK normal bursts to 8-PSK EDGE bursts. $ ./osmo-trx -e -r 7 Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-03-08sigproc: Add various GSM burst generatorsTom Tsou1-41/+3
Setup generators for empty, random, and dummy bursts. This moves error prone burst length handling out of the Transceiver and into the signal processing core. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-03-08EDGE: Add interfaces to enable EDGE transceiverTom Tsou1-36/+69
Create EDGE slot type in the Transceiver. When EDGE mode is enabled for a particular slot, blind detection will be performed by correlating against EDGE followed by normal bursts if no EDGE burst is found. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-03-06EDGE: Setup variable sampling on receive pathTom Tsou1-2/+2
Allow setting the device to non single SPS sample rates - mainly running at 4 SPS as the signal processing library does not support other rates. Wider bandwith support is required on the receive path to avoid 8-PSK bandlimiting distortion for EDGE. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-03-06sigproc: Remove normal burst DFE equalizerTom Tsou1-81/+20
DFE equalizer is unused and has been experiencing code rot for multiple years. The effect is a significant amount of baggage being carried in the Transceiver and interfaces. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2016-03-06sigproc: Remove dynamic SPS configurationTom Tsou1-2/+1
Samples per symbol used by the transceiver is not configurable through the socket interface once running, so stop pretending like it could be. Initialize all tables and midambles at start. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30Transceiver: Add support for OsmoBTS style handover.Alexander Chemeris1-4/+46
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30transceiver: Add a debug option to dump selected timeslots to disk.Alexander Chemeris1-1/+26
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30Transceiver: Do not update state->SNRestimate if equalization is disabled.Alexander Chemeris1-4/+4
This also fix a bug of using bool type for noise instead of float. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30sigProcLib: Abstract out common part of Normal/RACH burst detection.Alexander Chemeris1-3/+3
As a side change - get rid of passing toa and amp arguments as pointers and use references instead. The commit doesn't change behaviour, but makes the code cleaner. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30Transceiver: Update noise level only when the timeslot is marked as IDLE.Alexander Chemeris1-15/+31
We can't rely on an assumption that if we can't decode a burst - it's noise. There are many rasons why we can't decode a burst even if it's well above the noise level. Just one example is a RACH burst which can be overlapped with another RACH burst up to a level both are completely unrecognizable. Another example is when a burst is destroyed by bad multi-path. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30transceiver: Remove noise/RSSI gating.Alexander Chemeris1-2/+1
It does more harm than good. the current noise calculation is too error prone, so we can't trust it. And we end up loosing perfectly good bursts because of that. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30Transceiver: Fix clipping detection.Alexander Chemeris1-15/+18
There are two primary changes in this commit: 1) Return values of detect functions changed form bool to int to actually pass the return value from the inner function and notify higher levels about clipping. Previously the information was lost due to conversion to bool. 2) Clipping level is not the final verdict now. We still try to demod a burst and mark it as clipped only if the level is above the clipping level AND we can't demod it. The reasoning for this is that in real life we want to do as much as possible to demod the burst, because we want to get as much from our dynamic range as possible. So a little bit of clipping is fine and is expected. We just don't want too much of it to break our demod. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30Transceiver: Print noise level for each burst in debug mode.Alexander Chemeris1-9/+12
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-07-30osmo-trx: Add a command line option for the dBFS to dBm offset.Alexander Chemeris1-19/+27
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-06-01transceiver: Drive clock indication form the receive thread.Alexander Chemeris1-10/+5
Receive thread receives data from the device, which is a more stable source of clocking than the transmit side. If transmit side has a hiccup, osmo-trx doesn't send the clock indication, and transmit side is getting completely lost in time. With this patch we ensure that clock indication keeps coming. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-06-01transceiver: Fix out-of-bounds acces in genRandNormalBurst().Alexander Chemeris1-2/+2
We should read gTrainingSequence starting from 0 bit index, not 61 bit index. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-05-24Transceiver52M: Change POWERON behavior to return success if the transceiver ↵Ivan Kluchnikov1-1/+1
is already running, and only return fail on device failure
2015-05-20Transceiver: Check TSC values to be in [0..7] range.Alexander Chemeris1-3/+3
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-05-20Transceiver: Make error response to an unknown command on UDP command ↵Alexander Chemeris1-0/+1
interface more understandable. Previously we just repeated the last response which could confuse a command sender. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2015-05-19test: Add command line random normal burst optionTom Tsou1-18/+70
2015-05-18sigproc: Add clipping detection on RACH and TSC inputTom Tsou1-2/+10
Alert user of overdriven burst input indicated by a positive threshold detector result. This indication serves as notification that the receive RF gain level is too high for the configured transceiver setup. Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
2014-12-15Transceiver52M: Implement POWEROFF commandTom Tsou1-71/+139
Add stop and restart capability through the POWEROFF and POWERON commands. Calling stop causes receive streaming to cease, and I/O threads to shutdown leaving only the control handling thread running. Upon receiving a POWERON command, I/O threads and device streaming are restarted. Proper shutdown of the transceiver is now initiated by the destructor, which calls the stop command internally to wind down and deallocate threads. Signed-off-by: Tom Tsou <tom@tsou.cc>
2014-12-15Transceiver52M: Allow setting gain before POWERONTom Tsou1-23/+13
There is no reason gain settings should not be modifiable when the radio is running or not. Signed-off-by: Tom Tsou <tom@tsou.cc>
2014-04-15Transceiver52M: Fix retransmissions when filler table is enabledThomas Tsou1-0/+4
Commit 15d743efaf8d3ec8dacd37fbac434c1e719c0b30 "Disable filler table retransmissions by default" made OpenBTS style filler table behavior optional. When enabled, dummy bursts were automatically loaded into the filler table, but the table was not updated and only filler busts were retransmitted. Enable the restransmit state flag when the filler table option is specified. Only preload filler table and enable retransmissions on channel zero. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2014-01-26Transceiver52M: Disable filler table retransmissions by defaultThomas Tsou1-17/+42
Burst selection at a particular time works in the following order of priority. 1. Slot is disabled with channel combination set to NONE (default) 1. Burst exists in priority queue for the current time. 2. Filler table entry is used This patch sets default behaviour to force all filler table entries to zero and disallows filler table changes. This effectively means that only bursts received from upper layers will be transmitted and nothing will be automatically transmitted in the absence or delay of incoming burts at a particular time. New Command line option "Enable C0 filler table" allows reverting to previous idle burst generation and retransmission behaviour on TRX0. Retransmission cannot be enabled on non-C0 channels. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-16Transceiver52M: Ignore channel estimation if we are not equalizingThomas Tsou1-1/+1
Equalization is currently disabled by default. As such, we don't need to run channel estimates or even track the update state, which would otherwise be allocating/decallocating the channel state vector at regular intervals. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Enable all warnings and resolveThomas Tsou1-1/+1
Mainly basic signed vs unsigned comparisons and intializer ordering. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Remove unused codeThomas Tsou1-20/+2
This includes unknown and unused variables, functions, and non-relevant documentation. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Allow only channel zero to set TSC valueThomas Tsou1-3/+5
We support one TSC value per each transceiver object. Only channel zero can set this value. Other channels can attempt to set the TSC value, but will error if the TSC does not match the existing value. In either case, non-zero channels do not manipulate the gloabl TSC setting. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Use independent power scaling varables for each channelThomas Tsou1-12/+13
Simply vectorize the existing power state variable. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Use independent noise vectors for each channelThomas Tsou1-13/+16
Each ARFCN channel may be independently configureted and possibly on separate hardware, so don't share a single vector for noise estimate calculations. Allow a non-pointer based iterator so we can get away with using the default copy constructor. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Ignore detected bursts at the noise floorThomas Tsou1-4/+5
The transceiver has the ability to detect bursts below the noise floor, but little hope in successful decoding, so don't even try. We still use the detected burst to differentiate against noise vs actual data. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Check time slot validity of incoming burstsThomas Tsou1-0/+5
In errant cases, GSM core may send bursts with invalid slot values, which is allowed by the GSM::Time object. If we find a burst like this coming into the transceiver, then drop it immediately. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Add dual channel diversity receiver optionThomas Tsou1-1/+18
This patch add support for dual channel diversity on the receive path. This allows two antennas two shared antennas to be used for each ARFCN handling channel in the receiver. This configuration may improvde performance in multi-path fading environments, however, noise andpotential interference levels are increased due to the higher bandwidth used. The receive path is oversampled by a factor of four for a rate of 1.083333 Msps. If the receive paths are tuned within a maximum channel spacing (currently set at 600 kHz), then both ARFCN frequencies are processed by each channel of the receiver. Otherwise, the frequency shifted diversity path is disabled and standard non-diversity operation takes place. Diversity processing is handled by selecting the path with the higheset energy level and discarding the burst on the second path. Selection occurs on a burst-by-burst basis. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Refactor receive path outer burst handlingThomas Tsou1-95/+125
Separate the large pullRadioVector() call, which forms the central portion of the receive path burst processing. Break out RACH, normal burst, and demodulation into separate methods. This makes the burst handling from the FIFO read to soft bit output somewhat more manageable. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Add vectorized radio burst capabilityThomas Tsou1-13/+17
This patch allows multiple signalVectors to be stored within a single radioVector object. The motivation is to provide a facility for diversity and/or MIMO burst handling. When no channel value is specified, single channel bevhaviour is maintained. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Rearrange socket port assignemntsThomas Tsou1-4/+8
Style change for clarity only. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Set priority on downlink socket threadThomas Tsou1-0/+2
Clock indications passed up to GSM core originate on the transciever downlink side. Set priority to keep the flow of clock updates consistent. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Set variable thread priority levelsThomas Tsou1-1/+5
The transceiver and underlying device drivers are threaded. use the following priority levels. 0.50 - UHD driver internal threads 0.45 - Receive device drive thread 0.44 - Transmit device drive thread 0.43 - UHD asynchronous update thread (error reporting) 0.42 - Receive burst processing thread(s) Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-15Transceiver52M: Add multi channel transceiver supportThomas Tsou1-165/+238
This patch primarily addresses devices with multiple RF front end support. Currently device support is limited to UmTRX. Vectorize transceiver variables to allow multiple asynchronous threads on the upper layer with single downlink and uplink threads driving the UHD I/O interface synchronously. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-08Transceiver52M: Separate transceiver per-slot state informationThomas Tsou1-72/+94
Collect the slot information into an indpendent state object. This will allow us to easily create multiple instances of internal state variables without having to replicate the transceiver object itself. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-11-08Transceiver52M: Delay socket allocation to heapThomas Tsou1-12/+17
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>
2013-11-08Transceiver52M: Remove transmit logging optionThomas Tsou1-37/+0
The current status and operability of this compile option is unknown. Remove due to lack of use, demand, and maintenance. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-10-18Transceiver52M: Update RSSI calculationThomas Tsou1-3/+4
Use the same measurement method for RSSI as the noise level. Previous method was to use the peak correlation amplitude relative to the expected value. This created two very different amplitude approaches between the noise measurement and RSSI measurement, which would throw off the upper layer MS power control loop. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-10-18Transceiver52M: Update noise measurement calculationThomas Tsou1-53/+22
Previous removal of the energy detector requirement broke the noise level calculation loop. The previous adaptive approach was finicky - noticably at high gain levels. Since we no longer use the energy threshold for primary burst gating, we can return to a simpler world. In the new approach, we compute a running average of energy levels and track them with a noise vector. A timeslot that passes the correlator threshold is a valid burst. These are not used in the noise calculation. Everything else is considered noise and used to compute the noise level with respect to full scale input level, which for almost all supported devices is 2^15. Signed-off-by: Thomas Tsou <tom@tsou.cc>