path: root/Transceiver52M
AgeCommit message (Collapse)AuthorFilesLines
2018-12-12WIP: move comma_delimited_to_vector to Utils.cpposmith/select-limesdr-by-serialOliver Smith1-15/+1
Change-Id: If3f0f682ca453c2b0a06175ec9626567932cfce6
2018-12-12LMSDevice: make use of dev-args in osmo-trx.cfgOliver Smith1-2/+40
Allow selecting a specific LimeSDR device by setting dev-args in the config file. Split up the given dev-args address by comma and select the device where all substrings can be found. I could not test this with real hardware, but I have added a test case to make sure this works as expected. Related: OS#3654 Change-Id: Ib9aaa066a01bf9de3f78234d7ada884d6f28c852
2018-12-07lms: Do {under,over}run checks even if LMS_RecvStream failsPau Espin Pedrol1-1/+1
Under failure, it could still be that stream status is updated, so let's father that in all cases. Change-Id: I4e2b8be06d2993db1bab233948a8ee774b8ac4ee
2018-12-07lms: Move {under,over}run checks into separate methodPau Espin Pedrol2-11/+16
Change-Id: I7f450aa79f6285d14826c40ecfdd9490d00509ef
2018-12-07transceiver: Log TRXCTRL iface responses towards osmo-bts-trxPau Espin Pedrol1-1/+2
Change-Id: I8128c42e63ab1fcd2a58812f3b7cf94435b5bbd8
2018-12-07Add TRXCTRL log categoryPau Espin Pedrol1-7/+7
This log category is applied to messages related to TRX CTRL socket interface, and it's printed in yellow, same color used in osmo-bts-trx for TRX category (so same messages are printed with same color in both sides). Change-Id: I98ec5e416272783ad3fbadf70478a4e48ae64983
2018-12-05transceiver: log chan on CTRL command receivedPau Espin Pedrol1-1/+1
Change-Id: Ia3b2a35e03a8aaddd6efebc8db2ccca872f51f20
2018-12-05lms: Improve Set{Rx,Tx}{Gain,Freq} loggingPau Espin Pedrol1-6/+10
Change-Id: I6713a27c5f74beb7fcfdd712fcf695afccbc3d76
2018-12-05lms: Allow setting Tx/RxFreq for lchan!=0Pau Espin Pedrol1-11/+0
Related: OS#3346 Change-Id: I9dd0bb41d1863111d28947fc0d7c7e7ecfaf5fa8
2018-12-05lms: Allow setting Tx/RxGain for chan!=0Pau Espin Pedrol1-10/+0
Related: OS#3346 Change-Id: I5fae92a7ed5e2d92be12b9dfd33fc56195030c0b
2018-12-05SigProcLib: Improve Vector buffer allocation messPau Espin Pedrol5-35/+21
Original issue: In order to use SSE instructions, 16-byte aligned memory chunks are needed, and C++ version < C++11 doesn't provide for a native new/delete store. For that reason, memalign() must be used in the implementation of convolve_h_alloc() for some buffers. On the other side, The C++ code relies on C++ "new T[]" operator to allocate a chunk of memory containing an array of class instances. As classes are complex types, they cannot be allocated through C structures (calling malloc). Experimentally can be seen too that it's unreliable and the process will crash during startup if malloc() is used and then a Complex<> deferred from it. Previous implementation allowed for use of convolve_h_alloc or new[] based on how the (signal)Vector is called, because then the buffer is not going to be managed internally. But that's unreliable since resize() calling resize() on it could use "delete" operator on a malloc'ed buffer, and end up having a new new[] allocated buffer. It was also found that some of the callers were actually leaking memory through ASan (because the buffer is not managed by the Vector instance). IMHO best option would be to rewrite all this code using C structures and malloc/free exclusively, since it would make all this cod eeasier to maintain. But for now, let's extend the Vector class to allow specifying an external alloc/free function and let the Vector instance take care of the ownership of the buffer in all scenarios. Change-Id: Ie484a4762a7f77fe1b105188ea03a6f025730b82
2018-12-04lms: Close device on LMS_Init failurePau Espin Pedrol1-1/+1
Change-Id: I0b307452a9e122a0ea39a46f096423c9a5293d30
2018-12-04osmo-trx: Change some lines to use libosmocore logging instead of coutPau Espin Pedrol1-5/+5
Change-Id: I66e3c37014ba12cd002e5b678bc0a6026f5dfc7e
2018-12-04lms: Make sure LMS_Close is called when Device is torn downPau Espin Pedrol2-0/+11
This change fixes lots of memory leaks inside libLimeSuite as announced by ASan after exiting the osmo-trx process (throgh CTRL+C for instance). This way also we make sure libLimeSuite can communicate with the HW and close whatever subsystems were enabled during LMS_Open time. Change-Id: I56ffb87079e34aa2d0322fd2ca6429742f9f7640
2018-12-03radioInterface: Fix memleak during close()Pau Espin Pedrol1-0/+8
destructors of pointers created through "new" must be destroyed manually through "delete". Change-Id: I10d37579f16bec89cc762f200a8951218305c708
2018-12-03lms: Destroy streams on device stopPau Espin Pedrol1-0/+4
They are recreated during start(). Actually, if they are not stopped here, during start() after stop(), LMS_SetupStream() will fail because it will detect the streams are already opened. Change-Id: I70d47c287aabdabc5dc1304a942d130aeb10bdc5
2018-12-03lms: Fix start after stop of devicePau Espin Pedrol1-0/+6
Change-Id: I56358a1d1601853bc6dd2e6bb5f80798d0ba84b2
2018-12-02UHDDevice: log exception information on device open failured0gtail1-2/+2
Change-Id: Ia84ddcf50cc83f9326b22bfdfb4f259b4e0bc5f1
2018-11-29lms: Set Rx gain to midpoint, as comment suggests.Harald Welte1-1/+1
So far, the Rx gain was set to 34 dB, wile the comment stated it would be set to half-point, which is 73/2=36dB. Let's adjust the code to match the comment. Change-Id: Idc646def53b83faf4e6c011fb595fa436e223b32
2018-11-29lms: User correct scale factor for transmit samplesHarald Welte1-1/+8
Due to (I believe) a copy+paste mistake from the USRP1 code, we were using only a scale range of up to 9830 when transmitting samples, rather than the full 16 bit signed integer range up to 32767. As a result, we were loosing almost two bits (MSBs) of resolution as well as a lot of transmit power. This changes the scale factor to 0.707 (1/sqrt(2)). Please note that the much higher DAC output level means that the analog gain should be reduced. The theoretic range of up to 73dB should not be used, but Lime Microsystems suggest a value of 61..67 dB. This can be achieved by using a "osmotrx tx-attenuation" value of 6..12 inside the osmo-bts-trx configuration file. Related: OS#3341 Related: OS#3342 Change-Id: I71702feaa11f53e7614a6938a984dd748405474a
2018-11-23lms: Apply LMS->OSMO log level conversionPau Espin Pedrol1-1/+1
Change-Id: I3a8fbcc7cacebc7038c60175a8ae43b21f713cbb
2018-11-23lms: Use LimeSuite.h log level defines instead of hardcoded valuesPau Espin Pedrol1-4/+4
Change-Id: Iee693da1a0fa1db23deafa8d3845c04171e24799
2018-11-19UHDDevice: setRxGain on chan 0 when using multi-arfcnPau Espin Pedrol1-0/+3
When using multi-arfcn feature, several logical channels (arfcn) are multiplxed into one physical transceiver, as can be seen in uhd_device::set_channels. As a result, when multi-arfcn is enabled some properties are actually shared for those logical channels, and internally mapped to the first (only existing) channel, and per-channel internal array variables are allocated accordingly (size() == 1). When setting RxGain, we need to set the correct existing physical channel. Same check is done in getRxGain, and then we apply the RxGain correctly and we avoid outputing an error "Requested non-existent channel" immediatelly after. Change-Id: I5b02bb1ef6450dc48be7b8058d96a5691847d3cc
2018-11-01ChannelizerBase: Fix ASan alloc-dealloc-mismatchPau Espin Pedrol1-1/+1
Fixes following Adress Sanitizer warning: ================================================================= ==27120==ERROR: AddressSanitizer: alloc-dealloc-mismatch (operator new [] vs operator delete) on 0x60c00003d900 #0 0x7f2f216de421 in operator delete(void*, unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:151 #1 0x561641ce18b7 in ChannelizerBase::~ChannelizerBase() (/build/new/out/bin/osmo-trx-uhd+0x4a8b7) #2 0x561641ce1cad in Channelizer::~Channelizer() (/build/new/out/bin/osmo-trx-uhd+0x4acad) #3 0x561641cd5160 in RadioInterfaceMulti::close() (/build/new/out/bin/osmo-trx-uhd+0x3e160) #4 0x561641cd5047 in RadioInterfaceMulti::~RadioInterfaceMulti() (/build/new/out/bin/osmo-trx-uhd+0x3e047) #5 0x561641cd5093 in RadioInterfaceMulti::~RadioInterfaceMulti() (/build/new/out/bin/osmo-trx-uhd+0x3e093) #6 0x561641ca3fdd in trx_stop() (/build/new/out/bin/osmo-trx-uhd+0xcfdd) #7 0x561641ca4b32 in main (/build/new/out/bin/osmo-trx-uhd+0xdb32) #8 0x7f2f1f555222 in __libc_start_main (/usr/lib/libc.so.6+0x24222) #9 0x561641ca195d in _start (/build/new/out/bin/osmo-trx-uhd+0xa95d) 0x60c00003d900 is located 0 bytes inside of 128-byte region [0x60c00003d900,0x60c00003d980) allocated by thread T0 here: #0 0x7f2f216dcf19 in operator new[](unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:93 #1 0x561641ce142d in ChannelizerBase::init() (/build/new/out/bin/osmo-trx-uhd+0x4a42d) #2 0x561641cd5865 in RadioInterfaceMulti::init(int) (/build/new/out/bin/osmo-trx-uhd+0x3e865) #3 0x561641ca1cb7 in makeRadioInterface(trx_ctx*, RadioDevice*, int) (/build/new/out/bin/osmo-trx-uhd+0xacb7) #4 0x561641ca44c6 in trx_start(trx_ctx*) (/build/new/out/bin/osmo-trx-uhd+0xd4c6) #5 0x561641ca4b05 in main (/build/new/out/bin/osmo-trx-uhd+0xdb05) #6 0x7f2f1f555222 in __libc_start_main (/usr/lib/libc.so.6+0x24222) SUMMARY: AddressSanitizer: alloc-dealloc-mismatch /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:151 in operator delete(void*, unsigned long) ==27120==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0 ==27120==ABORTING Change-Id: Ib7c98ae478f319573dd86a0d2cb264f676bb3859
2018-10-24sigProcLib: add a CorrType for extended (11-bit) RACHVadim Yanitskiy2-6/+12
This is a preparatory change that enables a possibility to choose the amount of synch. sequences to be used for Access Burst (RACH) detection. The VTY flag will be introduced in further changes. There are two correlation types now: - RACH (default) - TS0 only; - EXT_RACH - all TS0, TS1, and TS2 together. Change-Id: Ia4f20524350bb8c380d7e10360758eddae8b03e9 Related: OS#3054
2018-10-24sigProcLib: introduce both TS1 and TS2 RACH synch. sequencesVadim Yanitskiy2-17/+24
According to 3GPP TS 05.02, section 5.2.7, there are three synch. sequences for Access Bursts: - TS0: GSM, GMSK (default), - TS1: EGPRS, 8-PSK, - TS2: EGPRS, GMSK. Let's prepare everythyng to be able to detect all TS0-3 synch. sequences, but keep detection of both TS1 and TS2 disabled until the corresponding VTY option is introduced. Change-Id: I838c21db29c54f1924dd478c2b34b46b70aab2cd Related: OS#3054
2018-10-23Add long parameters (--help, --version, ...)Oliver Smith1-5/+13
Makes osmo-trx-* more consistent with other Osmocom programs, and allows an unified test for not having "UNKNOWN" in --version. Related: OS#3578 Change-Id: I90cf01d972aa10b48c59b67a1e7f82a4255ef526
2018-10-21trx_validate_config(): Fix validation of rx_spsHarald Welte1-1/+1
Change-Id: I7e932cff59335add09c76caba6f9ac1e7cf69022 Fixes: Coverity CID#188871
2018-10-02Transciever: Log values causing Tx underrunPau Espin Pedrol1-1/+2
Change-Id: I68e18075eade55034567d96fc774d00a794afeeb
2018-09-28Use pthread_setname_np to name threadsPau Espin Pedrol3-0/+18
osmo-trx can start a considerable amount of threads that can make debugging it challenging at least. By using phtread_setname_np, the system sets a meaningful name to the thread which can be seen while debugging with gdb or by printing /proc/$pid/task/$tid/comm. Now we also log system TID when setting the name so we can identify different tasks in /proc even if pthread_setname_np fails. Change-Id: I84711739c3e224cb383fd12b6db933785b28209e
2018-09-20device/lms/LMSDevice.cpp: fix compilation warningVadim Yanitskiy1-1/+1
The following warning was observed with GCC 4.8.5: make[4]: Entering directory `.../osmo-trx/Transceiver52M/device/lms' CXX LMSDevice.lo LMSDevice.cpp: In member function 'LMSDevice::writeSamples()': LMSDevice.cpp:582:22: warning: 'rc' may be used uninitialized in this function [-Wmaybe-uninitialized] samplesWritten += rc; Let's fix this by zero-initializing 'rc'. Change-Id: I4b4a061fc12e5fd1db8d1087d8e0c46ff1e23412
2018-09-13cosmetic: Use proper whitespace in several for loopsPau Espin Pedrol1-1/+1
Change-Id: I82bdeb8a3fa38f3d125e8cbccc3eddbf2b8d8f58
2018-09-10Vector: Copy arrays in a sane way for non-trivially copyable typesPau Espin Pedrol1-3/+15
Avoids this type of compilation warnings: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of non-trivially copyable type ‘class Complex<float>’; use copy-assignment or copy-initialization instead [-Werror=class-memaccess] Change-Id: I9724454dfb7b87f74f39074e4004580ac3b5fe5c
2018-09-10radioInterfaceMulti:pullBuffer: Sanely convert float array to complex arrayPau Espin Pedrol1-3/+16
Fixes this type of compilation warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of non-trivially copyable type ‘class Complex<float>’; use copy-assignment or copy-initialization instead [-Werror=class-memaccess] Change-Id: Ibb2380a0a335ce798fe87221519fbbebade53054
2018-09-10cosmetic: Fix trailing whitespace in several filesPau Espin Pedrol1-9/+9
Change-Id: Ibf5a69f0a3a309e87814635fd903b114fe68890c
2018-09-10SigProcLib: Use available copyTo Vector API instead of memcopyPau Espin Pedrol1-6/+4
This change allows to remove some wrong use of code as per compilation warning: osmo-trx/Transceiver52M/sigProcLib.cpp:1266:40: error: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of non-trivially copyable type ‘class Complex<float>’; use copy-assignment or copy-initialization instead [-Werror=class-memaccess] midMidamble->size() * sizeof(complex)); Change-Id: Id446711349bec70fa4e7c8efe0f7f9faf7e4f277
2018-09-10UHHDDevice: Replace deprecated header uhd/utils/thread_priority.hppPau Espin Pedrol1-1/+3
Fixes compilation warning: In file included from osmo-trx/Transceiver52M/device/uhd/UHDDevice.cpp:31: /usr/include/uhd/utils/thread_priority.hpp:10:17: note: #pragma message: This header is deprecated - please use <uhd/utils/thread.hpp> instead. Header was moved in uhd.git c33928d2bbdd27688c3475e77fc461e7d16eba5a. Change-Id: I6299df48a5e14c54eaa07288d166c705eb9ebdbe
2018-09-04radioInterface: Fix variable storing integer return valuePau Espin Pedrol1-2/+3
Change-Id: I0a0a06a6d16a228cfcb7bd746bab2d79f10ce244
2018-09-04osmo-trx: Add osmo_signal to stop whole transceiver chain correctly on errorPau Espin Pedrol3-2/+43
Transceiver::stop() can only be called from either CTRL iface thread or from main thread (running osmocom loop). That's because stop attempts to cancel and then join all the other threads, which would then lock if attempting to stop from some of them. As a result, the best option is to indicate to the user of the transceiver option (osmo-trx.cpp) to stop it in a correct fashion by destroying the object from the main thread. Change-Id: Iac1d2dbe2328e735db2d4b933cb67b1af1babca1
2018-09-03lms: Return error on device read timeoutPau Espin Pedrol1-3/+5
If LImeSDR device is unplugged or its fw crashes during operation, reading from the device will fail and will first receive short reads and finally 0 byte reads. Let's quickly notify these events to upper layers instead of trying to process the buffer and checking timestamps for something we know it's already not useful. Related: OS#3340 Change-Id: Ib1af8cdd6cdadf581b039882add4049eea45a0f7
2018-09-03radioInterface: forward errors from RadioDevice to Transceiver in recv pathPau Espin Pedrol4-18/+22
Change-Id: Id7b08b19d6575c79b4d57db656a17ff05bb61ee9
2018-09-03cosmetic: Fix trailing whitespacePau Espin Pedrol3-4/+4
Change-Id: Ia647cfed0acb35adeb9b3b7824170d06c0369ef7
2018-08-17logging: Introduce new "DDEV" category for device-specific codeHarald Welte3-171/+171
The DMAIN category got too overloaded. Let's have the code in Transceive52M/device/* use the new DDEV category. Also, in some cases the log levels have been adjusted to ensure that enabling INFO level should not result in a complete overflow of messages during normal operation. Change-Id: I844fe4a75bf277cd3cc5bd8fa06e06ad97b2ea95
2018-06-20lms: Allow values diff than 34dB to be set by setRxGain()Pau Espin Pedrol1-3/+1
Until now, setRxGain in LMSDevice did not take into account the setter parameter and was always using hardcoded 34dB, which was experimentally found to be a good default value. Let's force that value during initialization, but still allow the upper layers (controlled by BTS) to set different values. osmo-bts only sends a SETRXGAIN command (which calls setRxGain in osmo-trx) if a value is explicitly set in its VTY config, so we are on the safe side if the user doesn't explicitly configure a desired dB. Change-Id: I5684e675281a3f581855dbb56d199a6fe238a712
2018-06-20Add -V param to print versionPau Espin Pedrol1-1/+8
Change-Id: I9f2d6c4b1a508aceb1ccc0559f0902eedf2ec5af
2018-06-14usrp1: Fail in case of unsupported configurationHarald Welte1-0/+12
There might be some configuration that's not supported by osmo-bts-usrp1, and we should reject that properly. Change-Id: Ic7308ce0c57439fe97668bd31801c4bf76b797ad Closes: OS#3348
2018-06-14lms: Fail in case of unsupported configurationHarald Welte1-0/+8
There might be some configuration that's not supported by osmo-bts-lms, and we should reject that properly. Change-Id: I6f82edce589030a4407f6150fb7e8abe6417c1f2 Closes: OS#3347
2018-06-14lms: Fix coding styleHarald Welte1-10/+10
In Change-Id Ib2fca81b76d027b08e2891056fa076d071597783 we introduced some coding style violations. Let's make newly-added code follows standard Osmocom coding style. Change-Id: Ib7ddd275014f03a2eed3cddc02b1356e2b00c0bc
2018-06-14radioDevice: better encapsulation in base classHarald Welte6-34/+38
It's not good style to have the derived classes initialize members inherited from the base class using "this->foo = bar". Rather, let's make the base class have a constructor, and call that constructor to initialize the members of the base class. While doing this * rename 'offset' to 'lo_offset' to avoid confusion with timestamp offset * move 'InterfaceType' into the base class * move 'chans' into the base class * move 'rx_sps' into the base class * mark base class members as 'protected' Change-Id: Ib885675a7612a392aa7f75fca81269ddcff2f6ab
2018-06-13radioDevice: Move tx_sps from derived into base classHarald Welte6-17/+18
All three derived classes use a tx_sps member, let's move this into the base class. Change-Id: I73b4aa2705c5049561e2d7b21301a0d2b3c96ced