aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/UHDDevice.cpp
AgeCommit message (Collapse)AuthorFilesLines
2013-09-05Transceiver52M: Setup dual Laurent pulse filterThomas Tsou1-1/+1
Provides improved transmit phase error performance below 1 degree RMS on certain devices. Requires use of 4 samples-per-symbol. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-07-14Transceiver52M: Fix crash in uhd_device destructor due to deleting ↵Alexander Chemeris1-2/+2
statically allocated memory.
2013-07-14Transceiver52M: Setup independent gain and tune elements for dual channelThomas Tsou1-32/+50
2013-06-24Transceiver52M: Setup UmTRX dual carrier supportThomas Tsou1-94/+113
2013-06-24uhd: fix local overflow handling of buffer readsThomas Tsou1-1/+1
This patches fixes the hypothetical bug in the read out of the intermediate sample buffer after a local overflow condition. Local overflows - occurring in the intermediate storage buffer and not the UHD transport - should never occur; the existence of a local overflow indicates a significant error elsewhere in the system. For example, if timestamps or timing offsets are ridiculously off, such errors may occur. Nonetheless, handle errors anyways by taking the modulo value of the calculated read index to stay within the buffer and avoid seg faulting. Signed-off-by: Thomas Tsou <ttsou@vt.edu>
2013-06-24transceiver, uhd: dynamically allocate async event threadThomas Tsou1-5/+14
Similar to the previous commit titled, "multi-arfcn, trx: allocate threads on heap and fix thread release" there is the potential for a segfault on exit if the event thread is never started. As before, address the issue by initializing the Thread pointer with NULL and later allocating the object immediately prior to use. On stop or exit, allow the thread to exit by checking a condition variable. If device is stopped or never started, the same variable can be checked for state, which avoids attempts to deallocate an empty pointer. If there is a better method to shutdown / deallocate using the OpenBTS thread library, please let me know. Signed-off-by: Thomas Tsou <ttsou@vt.edu>
2013-06-24Transceiver52M: Add UmTRX supportThomas Tsou1-3/+10
2013-06-24Transceiver52M: Explicitly check for USRP2 device typeThomas Tsou1-5/+8
Before, we assumed that non-B100 device was implicitly a USRP2 (inclusive of N200/N210). Make the check explicit so that any unknown device will causes an error and exit. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Use exception blocks for rate changesThomas Tsou1-5/+17
UHD will throw if something goes awry in these sensitive sections, so we should catch and shutdown gracefully. There is no recovery if we can't set rates. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Allow tolerance in UHD sample rate selectionThomas Tsou1-5/+8
We're performance floating point comparisons so allow a 10 Hz offset when UHD does not return an exact sample rate; Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Set resampling option automatically based on deviceThomas Tsou1-7/+10
Remove the built time resampling selection and link both options. Move the normal push/pullBuffer() calls back to the base class and overload them in the inherited resampling class. USRP2/N2xx devices are the only devices that require resampling so return that resampling is necessary on the device open(), which is the point at which the device type will be known. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Set sample rate from within the radio deviceThomas Tsou1-7/+32
The GSM transceiver only operates at a whole number multiple of the GSM rate and doesn't care about the actual device rate and if resampling is used. Therefore GSM specific portion of the transceiver should only need to submit the samples-per-symbol value to the device interface. Then, the device should be able to determine the appropriate sample rate (400 ksps or 270.833 ksps) and if resampling is appropriate. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Remove periodic alignment update from UHD buildThomas Tsou1-1/+0
Periodic timing alignment should never be required for UHD devices, though the mechanism was used as a fallback mechanism should UHD not properly recover after an underrun - as may occur in old 003.003.000 based revisions. This issue is not a concern in more recent UHD releases and deprecates this code for legacy USRP1 use only. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Add device offset correction tableThomas Tsou1-25/+60
Previously, two timing correction values were used for UHD devices depending on the sample rate of 270.833e3 or 400e3 for native GSM or resampled device rate respectively. The correction values compensate for residual timing effects due to analog component delays, filters lag times, and general fudge factors. These values are device specific and over-generalized by the two value configuration. This patch adds the following struct to store these correction values by device type and sample rate - through samples-per-symbol. struct uhd_dev_offset { enum uhd_dev_type type; int sps; double offset; }; Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Add UHD device type checkingThomas Tsou1-32/+46
UHD device type was previously detected, but only categorized in terms of bus type, USB or Ethernet, and sample rate capability. With the number of supported device increasing, we can no longer easily group devices since we need to handle more and more device-specific peculiarities. Some of these factors are managed internally by the UHD driver, but other factors (e.g. timing offsets) are specific to a single device. Start by maintaining an enumerated list of relevant device types that we can use for applying device specific operations. Also rename the USB/Ethernet grouping to transmit window type because that's what it is. enum uhd_dev_type { USRP1, USRP2, B100, NUM_USRP_TYPES, }; Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Setup test case for second UmTRX channelThomas Tsou1-9/+26
Feed the second channel with the same data buffer as channel one. The two channel send maintains the same UHD interface, so we use the same metadata for both channels. Hard code the second channel RF frequency as an offset relative to first channel for now. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24Transceiver52M: Update to UHD streamer interfaceThomas Tsou1-28/+15
This patch is long overdue and can now be merged after better understanding of timestamp stability issues. UHD tick / timespec conversions were generally used with the streamer interface, though these calls are actually independent change sets. The combination would lead to internal rounding errors and a timing drift most notably on B100 running at GSM symbol rate multiples. There are no known issues, however, with the streamer code itself. The aforementioned issue was discovered in test code only, which was never merged to mainline. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24umtrx: set timing offset and clocking frequencyThomas Tsou1-2/+2
Measured offset and set to zero based on Nokia 3120 handset. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2013-06-24umtrx: flush any possible garbage bursts at startThomas Tsou1-5/+7
In certain cases (higher sample-per-symbol counts), there is some sensitivity to either timeouts or bad metadata on the first packet. The first packet sets the transceiver clock, so this is essential. As a workaround, drop the first 50 packets to guarantee that we get a packet with a valid timestamp Signed-off-by: Thomas Tsou <ttsou@vt.edu>
2013-06-24transceiver: workaround for transmit testing with no clock resetThomas Tsou1-3/+16
Non-functional clock reset causes huge initial timing offset between expected and received timestamps. Receive an initial packet to 'set' the expected starting timestamp value for both transmit and receive. Signed-off-by: Thomas Tsou <ttsou@vt.edu>
2013-06-24Transceiver52M: add antenna selection from configurationThomas Tsou1-0/+24
Set optional transmit and receive antennas from database configuration file. Use default antenna values on empty string or if option does not exist. Signed-off-by: Thomas Tsou <tom@tsou.cc>
2012-11-23Alexander's patches:kurtis.heimerl1-1/+1
1)I did an experiment and compiled OpenBTS with clang yesterday, which immediately highlighted two potential bugs in the Transceiver52 code. I'm not sure they are indeed bugs and not the intended behavior, but they look very much like that. The first one is below and the second one is in the following mail. GSM::Time() arguments are defined like #define USB_LATENCY_INTRVL (10,0), which means that they are expanded into GSM::Time((10,0)). This expression is a GSM::Time() with a single parameter where (10,0) return value of the last argument, 0 in this case. I.e. GSM::Time((10,0)) is equivalent to GSM::Time(0). I think this was not the intention. 2) Printing \n after every complex number breaks output when you want to print it in a single line, e.g. in many debug output. I do not claim any copyright over this change, as it's very basic. Looking forward to see it merged into mainline. git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@4515 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2012-10-22Transceiver52M: UHD: Setup option to pass arguments from command linettsou1-5/+5
UHD accepts optional 'args' that can be used for device descriptions such as IP address, device type, etc. Allow these to be passed in on the transceiver command line as the third argument (number of supported carriers is the second argument). This option benefits those who may have multiple UHD devices attached to a single system. This option is not yet supported by GSM core and requires starting the transceiver independently on the command line. This option has no effect when USRP1 is used. Signed-off-by: Thomas Tsou <tom@tsou.cc> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@4315 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2012-08-08transceiver: uhd: prevent output of underrun message at ERROR levelttsou1-4/+8
The appearance of underruns on B100 due to the latency transmit window scares people. These should not be logged at ERROR level because the events are generally not real errors. So use the same behaviour of USRP1 of not logging these events. The presence of underrun events can be determined by changes in the latency window that is shown with log level set at INFO. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@3988 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2012-08-08transceiver: uhd: allow underrun flag to reset during timing alignmentttsou1-1/+1
Allowing the underrun flag to reset will prevent a single event from causing large jumps in the transmit latency threshold. This should keep unreasonable timing latencies from occurring (e.g. latencies of 20+ frames). git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@3981 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2012-03-13transceiver, uhd: output timestamps on monontonic errorttsou1-2/+2
The "Loss of monotonic time" error occurs when a timestamp arrives from the device that is earlier in time than the previous timestamp. The output is an ALERT level message generally accompanied by a transmit side timeout from the device. UHD: Loss of monotonic time UHD: Loss of monotonic time UHD: Device send timed out Add to the error description the timestamp values that generated the error and output with ALERT rather than ERR log. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@3307 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2012-02-14transceiver, uhd: fix build error due to log levelttsou1-1/+1
Previous commit r3181 used a 2.6 logging level. ALARM->ALERT Fix for 2.8 levels. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@3187 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2012-02-14transceiver, uhd: display device information on make failurettsou1-1/+1
The failure "UHD make failed" implies that a suitable device was found, but construction failed. Output the the found target device information along with message. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@3181 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2012-01-09transceiver, uhd: alert user on unrecoverable errorsttsou1-5/+13
Unrecoverable device errors include send and receive timeouts and mangled packets. Other device errors, such as non-monotonic timestamps are sometimes recoverable through a soft restart. These fatal are generally limited to development versions of UHD driver or device firmware, but can occur in release versions. Alert user on such device errors along with current UHD version. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@3012 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-12-15Matching UHD changes in gnuradiokurtis.heimerl1-3/+3
git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2817 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-28transceiver52M: bump critial errors to ALERT levelkurtis.heimerl1-4/+5
Device errors regarding properties such as sample rate or frequency tuning are almost always fatal and lead to the common error "assuming TRX is dead". Make sure that these errors are clearly presented to the user. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2700 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-28transceiver, uhd: exit informatively if no devices are foundkurtis.heimerl1-4/+11
Perform a UHD device search before constructing the object, and inform the user if no device is found. No device found is the most common reason for the transceiver to fail with the dreaded error "assuming TRX is dead". Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2699 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-28transceiver, uhd: reject usrp1 if compiled with uhd supportkurtis.heimerl1-5/+6
This configuration is invalid because of FPGA based timestamp support for the USRP1 in the UHD driver. Kindly inform the user to recompile with libusrp support from GNU Radio. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2698 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-28transceiver, uhd: runtime check for setting master clock ratekurtis.heimerl1-0/+11
Before setting the master clock rate, make sure that the device is capable of being set. For now, assume that devices that operate with default clock rates above 64 MHz, specifically USRP2/N200/N210, cannot be set at 52 MHz. Inform the user that these devices can be used with the compile time option of host based resampling. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2697 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: uhd: increase log level on constructor errorskurtis.heimerl1-1/+1
Exceptions on make are major no-start conditions. Make these errors more apparent. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2688 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: uhd: make external reference a compile time optionkurtis.heimerl1-6/+4
External reference selection was already compile-time determined by a hard coded value. Make it selectable as a configure option. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2686 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: update to log messages to work with P2.8kurtis.heimerl1-25/+25
Log level changes in P2.8: ERROR -> ERR WARN -> WARNING DEEPDEBUG -> DEBUG Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2683 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: add a newline for uhd information outputskurtis.heimerl1-3/+3
Minor change to clarify the logging output. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2679 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: reject usrp1 if detected using uhdkurtis.heimerl1-20/+40
git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2678 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: make the transmit drive loop bus dependentkurtis.heimerl1-5/+26
With the introduction of the B100, there is USB support using UHD devices. The characteristics of the trasmit side burst submissions are more reflective of the bus type than the device or driver. Use a fixed latency interval for network devices and the adaptive underrun approach for USB devices - regardless of driver or device type. The GPMC based transport on the E100 appears unaffected by either latency scheme, which defaults to network. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2677 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: reroute uhd messages to logging facilitykurtis.heimerl1-0/+26
Pipe the following uhd message types to standard warning levels (INFO, WARN, ERROR) respectively. Ignore fastpath logging messages and, instead, catch them from the asynchronous device interface. enum type_t{ status = 's', warning = 'w', error = 'e', fastpath= 'f' }; Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2676 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: add option for host based resamplingkurtis.heimerl1-2/+14
The resampling transceiver is unified with the 52MHz version. The option to resample 400ksps from the device to a GSM appropriate 270.833ksps is enabled at compile time with the following option. ./configure --with-resamp Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2672 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26uhd: keep reading on overrun or other non-fatal errorskurtis.heimerl1-1/+1
The readSamples call does not return less than the number of samples requested. Doing otherwise is a fatal error. So on overruns, which are not fatal, continue reading until the requested number of samples is received. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2671 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: uhd: update copyright headerkurtis.heimerl1-22/+19
Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2668 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26transceiver: minor cleanup of sample type sizing in uhdkurtis.heimerl1-6/+10
A small simplification of buffer indexing and sizing. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2667 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26uhd: remove external clock polarity settingkurtis.heimerl1-1/+0
Unused and causes the follwing errors on certain UHD versions. "ValueError: unhandled clock configuration reference source: _external_" Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2664 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26uhd: verify setting of master clock ratekurtis.heimerl1-8/+15
If the master clock rate fails to set - this basically only happens when the wrong transceiver is choosen for the particular device - the error is fatal and the transceiver should exit. The clock rate setting was previously never verified. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2663 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26uhd: remove uhd type argumentkurtis.heimerl1-2/+2
UHD recently modified the E100 type name from 'usrp-e' to 'e100' causing the device make to fail. Remove device type checking to keep things working with the older and newer names. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2661 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26uhd: flush receive buffer should return true on timeoutkurtis.heimerl1-4/+10
Receive buffer flush should continue to read until either the desired number of packets has been read or timeout, which means that the buffer has been emptied. These are expected behaviours and should return true. Ignore errors at this stage as the data and associated metadata can be considered garbage and not worth reporting. Actual error conditions will be caught further downstream when useful data comes in. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2659 19bc5d8c-e614-43d4-8b26-e1612bc8e597
2011-11-26uhd: log asynchronous errors as errorskurtis.heimerl1-1/+1
Bump abnormal asynchronous events - basically send errors - up to ERROR level. These errors are dominated almost entirely by underflow events, which should not be regularly occuring. Signed-off-by: Thomas Tsou <ttsou@vt.edu> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2656 19bc5d8c-e614-43d4-8b26-e1612bc8e597