AgeCommit message (Collapse)AuthorFilesLines
2020-03-23Add 4/4 Tx/Rx SPS definition for OCR01whytek/ocsdrKeith1-0/+1
2020-03-23Add Device Definition for the OC Connect1 SDRKeith2-1/+6
This patch forward ports the relevant parts of a patch from OpenCellular for osmo-trx versions previous to commit 1fb0ce67d86067d81bd0f8d18b8c11890e36e755 so that osmo-trx-uhd recognizes the hardware, somewhat documented here: https://github.com/Telecominfraproject/OpenCellular/blob/master/electronics/radio/SDR/ Note: I'm not very familiar with the hardware. It requires a patch to the Ettus UHD driver to load the correct FPGA fw in which one call to check_fpga_compat() is commented. Otherwise mostly changes identifiers and log messages to "OCR01". The usb device is reported as Vid:2500 Pid:0020 (Ettus,B200) but I'm not sure how compatible it is. The fpga FW is different.
2020-03-12radioDevice: Drop unused isControl param from WriteSamples APIPau Espin Pedrol7-26/+18
The out "isControl" parameter is only used by internal callers of USRPDevice, and not used at all by any user of the generic API (radioInterface*.cpp). Hence, we can get rid of it and keep it as a flag for an internal API of USRPDevice. Change-Id: I843384e24b76cdd28a95f9ee4e95e6157098e4a3
2020-03-12radioDevice: Drop unused RSSI param from readSamples APIPau Espin Pedrol7-14/+11
The out "RSSI" parameter is only filled by USRPDevice, and not used at all by any user of the API (radioInterface*.cpp). RSSI seems to be computed nowadays in the common path in Transceiver::pullRadioVector(). Change-Id: I06c2ea5a9891d170bc468f952bbf2a7e64d95784
2020-02-25cosmetic: fix several typos found by codespellPau Espin Pedrol3-4/+4
Change-Id: Id1f6766572fd313463201e6d03964965f227db25
2020-02-19debug.h: Fix print format of chan in CLOGCHANPau Espin Pedrol1-1/+1
Under armv7l arch, size_t is actually an unsigned int and not a long unsigned int, and compiler errors: CommonLibs/debug.h:28:24: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 8 has type ‘size_t {aka unsigned int}’ [-Werror=format=] Change-Id: I7f6ded5a984570b5267916d6c84eb7d019db73a8
2020-02-19debug.h: Avoid printing pthread_t typePau Espin Pedrol3-4/+37
Using %lu for pthread_t was wrong on armv7l arch. Even worse, according to pthread_self() man page, pthread_t cannot be assumed to be of a simple type and hence printable: """ POSIX.1 allows an implementation wide freedom in choosing the type used to represent a thread ID; for example, representation using either an arithmetic type or a structure is permitted. """ Let's use gettid() instead. According to glibc documentation: """ The pid_t data type is a signed integer type which is capable of representing a process ID. In the GNU C Library, this is an int. """ It may not be the same on other libc's though, so let's better cast to a long int just in case. Accordign to gettid() man, the libc function was only added recently during glibc 2.30, however the system call has been around for quite some time (linux 2.4.11). Let's accomodate use udner non-glibc or older versions of it by having a direct syscall fallback. Change-Id: I40265fd4c62e550014ba3ff3335ca053c5bc01f2
2020-02-19contrib/jenkins.sh: Reorder sanity checksPau Espin Pedrol1-7/+14
Change-Id: Idfe12148aa7a8030bdaf56d11c1547ebc3f56d14
2020-01-15lms: Initial multi-arfcn supportPau Espin Pedrol1-7/+17
With current state multi-arfcn can be used (eg. I can place a call between 2 phones using TRX1 and sustain for as long as wanted), but from time to time (around every 20seconds), a burst of Tx packed dropped events from LimeSuite appears. LimeNet-micro coefficients have yet not been tested. Related: OS#4362 Change-Id: I7e67d90a8126546eeeeba376f816ec5d158d4712
2020-01-15lms: Make ts_offset and smpl rate coefs device-specificPau Espin Pedrol1-8/+12
Right now the values are the same for all devices, but they will differ in forthcoming commits once multi-arfcn support is added. Change-Id: I262d3a71848fc3070473e29e42820848e7591d02
2020-01-15lms: Store device type specific parameters in one placePau Espin Pedrol4-26/+119
Add an enum containing each supported device type (LimeSDR-USB, LimeSDR-Mini and LimeNet-Micro) plus "unknown", to leave some room for yet-to-come devices to run with some generic parameters without rebuilding osmo-trx. Each device type is assigned a dev_desc structure, and all of them are put in HashMap, similar to what's already done in UHDDevice.cpp. Device type is infered from string provided by LMS_GetDeviceInfo(), as it was already done before in several places. From now on, we only need to parse the string once since we store the device type after first during open time. Later on, more fields will be moved to device-type specific structure, such as Tx timing offset, clock rate, etc. Change-Id: I7658615787c5bc41c365bab9c11733b701ac2ae5
2020-01-15lms: Move rx_buffers allocation to constructorPau Espin Pedrol1-4/+5
Release is done in destructor, so let's move allocation to constructor since there's really no need to have them in open() which is already quite complex and large. Change-Id: I8a4fd973590c4c165abd8f2837b2da8fc14a2066
2020-01-15lms: Make reference to std::vector unambiguousPau Espin Pedrol1-1/+1
Change-Id: Ieebdbd3d5082a02aea2441e6737783370511cbc1
2020-01-13lms: Change radioDevice constructor arg name to avoid masking instance attrPau Espin Pedrol6-9/+9
channel number mangling based on multi-arfcn feature being enabled was moved to generic radioDevice() to reuse code. Hence, the generic parent constructor sets this->chans to 1 if multi-arfcn feature is requested. However, LMSDevice constructor argument had same name as the class instance attribute, taking preference. As a result, if multi-arfcn is enabled in LMSDevice, the generic constructor first sets this->chans=1 but afterwards LMSDEvice constructor keeps calling .resize() with the argument value "chans" instead of using this->chans. Let's rename the argument in all radioDevice child class constructors to avoid potential future bugs in all of them. Change-Id: Id6c837e9133f22783dd92a81dfcc493e51bf2d21
2020-01-13lms: Improve smpl_buf error loggingPau Espin Pedrol1-2/+3
Change-Id: I511abe2c333443b978a3767bd7b7e320e07c4930
2020-01-13smpl_buf: Fix str_code() param and print unknown error valPau Espin Pedrol2-3/+5
Change-Id: I95fadac15b9ad337ebc7cfb44a20dcf803ff8a47
2020-01-07lms: Drop unused definePau Espin Pedrol1-1/+0
Change-Id: Iaf3361ed29dd552e5e52b62bc738fa20c6b583fe
2020-01-07lms: Move initialization of field started to constructorPau Espin Pedrol1-3/+1
Change-Id: I135a2ff4a419775169452be1128c7b30f7d638ad
2020-01-07doc: Update vty reference xml filePau Espin Pedrol1-46/+135
Change-Id: Ib2707204cbba6df813ffc08d7098093cf4393da0
2020-01-07radioInterfaceMulti: Fail to tune on freq not following multi-arfcn restrictionsPau Espin Pedrol2-22/+59
multi-arfcn feature uses a hardcoded disposition of logical channels on a physical channel. Logical channels in the phisical channel are separated by MCBTS_SPACING Hz, that is 4 GSM ARFCNs. As a result, multi-arfcn restricts the TRX ARFCN setup to the following: ARFCN(TRX0)=N, ARFCN(TRX1)=N+1*4, ARFCN(TRX2)=N+2*4, ... Let's make sure radioInterfaceMulti verifies the requested Rx/Tx frequencies for each logical channel over TRXC match the restriction explained above. It will check freq going to be set is indeed separated by MCBTS_SPACING from already set channels, making sure the ARFCN series is consistent. Otherwise, before this patch, one could set in osmo-bsc: ARFCN(TRX0)=N, ARFCN(TRX1)=N+2 and osmo-trx would silently ack the related Rx/TxTUNE TRXC commands, but actually still transmit on ARFCN N+4 instead. As a result, in this scenario TRX!=0 were unusable with multi-arfcn. Related: OS#4207 Change-Id: I2f3d66a611d3a489b3e4d9431994f4ec77b4460f
2020-01-07doc: clarify number of channels on B210 with multi-arfcn enabledPau Espin Pedrol1-4/+5
Change-Id: I082d4d8c346f1be1569fe63baa856029e439cb2c
2020-01-07uhd: Improve some logging lines printing UHD pretty-print outputPau Espin Pedrol1-3/+6
Change-Id: If5aba28aaf8a3312d89b3e963184f9f20966d199
2020-01-07uhd: Use DEVDRV log category and support UHD >=3.11 logging frameworkPau Espin Pedrol2-12/+51
Change-Id: I36f1ff7d425a2144fb512ff393af02741eb4a3d4
2020-01-07Make logging category DLMS generic and reusable for other backendsPau Espin Pedrol5-6/+9
Make sure old configs using "logging level lms <level>" are still accepted. Initialization order of VTY componenets need to be resorted since newly introduced command requires logging VTY node to be already setup beforehand. Change-Id: Ia195a74a62a8a3dd6267fb1359acaa5628208d8e
2020-01-03Bump version: → Espin Pedrol4-5/+57
Change-Id: I9009eb44e7d8100294da139300480fc3a2f6b616
2019-12-20Transceiver.cpp: Introduce and use new logging categoriesPau Espin Pedrol3-35/+56
Take the chance to clean up logging lines in this file: * Use LOGCHAN in more places where chan is useful * Replace inherited (old osmo-trx) categories such as WARNING with osmocom ones. Change-Id: Ic8c218f050f35d48046ccf1561fb0bfc505d4f63
2019-12-19uhd: use value already cached in tmp variablePau Espin Pedrol1-1/+1
Change-Id: I4568eaed6db3da12f83f2f503a50032f7bfb482c
2019-12-03trx: exit() on unsupported positional arguments on command lineHarald Welte1-0/+5
Change-Id: Ifeea65a359e9ca307efb2c721fd0fb6f0959e976
2019-11-27Transceiver: Fix wrong response upon CMD HANDOVER failurePau Espin Pedrol1-1/+1
Change-Id: I9d3f120b1696a9ce92c81097d04e81dbb717287d
2019-10-21vty: Simplify filler burst settings and improve help and readability.Alexander Chemeris3-75/+81
In the command line options time, filler table/filer burts settings were a bit difficult to undertand because the number of one-letter settings was limited. Now, with VTY configuration, there is no reason to keep it so difficult. Also, after the previous commit it was no longer posible to enable random 8-PSK filler bursts. With this patch you can configure all supported filler bursts in a simple and logical way. Change-Id: I752eb2c1162d084e8769181f2fcd6c0877663448
2019-10-17Fix common misspellings and typosMartin Hauke34-40/+40
Change-Id: I4ec7accb1912c052b446be7c399bed32a8c62253
2019-10-15vty: Don't enable random filler bursts automatically with EDGE.Alexander Chemeris1-1/+0
The EGPRS switch in the VTY config enables 8-PSK burst detection on uplink. Enabling it shouldn't turn on filler bursts. Change-Id: I2786c768e038b769a80c8b78fe58cfa09eb322a9
2019-10-09Use new libosmocore logging lock APIPau Espin Pedrol4-63/+5
Since libosmocore Id7711893b34263baacac6caf4d489467053131bb, a new API log_enable_multithread() is available which takes care of protecting logging infrastructure from us (and actually does it correctly since we cannot protect internal libosmocore structures from osmo-trx). Let's drop all mutex related code from osmo-trx logging infra and simply rely on libosmocore's. Related: OS#4088 Change-Id: I519d0f30bce871005ca26b90177ea4aa4839360a
2019-09-30radioInterfaceMulti: write frequency offset direction (rx/tx) in log linePau Espin Pedrol1-2/+2
Change-Id: I7b89426e5d7d5e7570d4ef800a30c7b74bd09b82
2019-09-20radioInterface: Atomically fetch and change underrun variablePau Espin Pedrol8-20/+62
Otherwise, it could happen that underrun events are lost: TxLower (isUnderrun): RxLower (pullBuffer): read(underrun) read(underrun) write(underrun, |val) [maybe underrun becomes TRUE] write(underrun, false) Similary, it could happen the other direction if atomic was only applied to isUnderrun: TxLower (isUnderrun): RxLower (pullBuffer): read(underrun) -> true read(underrun)-> true write(underrun, false) write(underrun, true|val) where val=false So in here isUnderrun would return true twice while it should only return one. Change-Id: I684e0a5d2a9583a161d5a6593559b3a9e7cd57e3
2019-09-20Move multi-ARFCN chan amount modification from UHDDevice to parent classPau Espin Pedrol2-3/+7
This way switch is applied correctly to parent structures and features can be used later by other children classes (other devices). Change-Id: I24d6c66bb3195ba2513b4a67daa14cdfbacdce6d
2019-09-20radioInterface: Mark setRxGain as virtualPau Espin Pedrol1-2/+2
Otherwise the parent function is always called even if the iface is radioInterfaceMult. Change-Id: Ie41efab1e60b88677bbd1ec333ea656794503a5a
2019-09-20Transceiver: Fixed copying of history into and from channelizer buffer.Timo Jacobus1-1/+1
In multi arfcn mode, osmo-trx would drop some bursts because it couldn't detect it and would emit idle burst instead. Specificaly detection of peak in correlation vector failed. Correcting copying of history in pullBuffer method fixes this issue. [Re-worked by Pau Espin Pedrol <pespin@sysmocom.de>] Fixes: 57df2362f0eca0a330aad3e18906046dfadb9c8b Change-Id: I93e43f6868cd67e69fc59d2980a03550d2505bf8
2019-09-13radioInterface{Multi,Resamp}: Fix successful writeSamples() masking underrun ↵Pau Espin Pedrol2-2/+6
from readSamples() The only who should be setting class instance value "underrun" to false is isUnderrun(). Similar fixes were already applied lately to radioInterface.cpp. Change-Id: I3239b1df4536c080365106b3e4daa523b57f5dff
2019-09-13UHDDevice: Drop unneeded MULTI_ARFCN checksPau Espin Pedrol1-12/+0
After previous changes, radioInterfaceMulti is expected to handle channel conversion correctly, so it will always use chan 0 for all these functions. This simplifies code in radioDevice avoiding need to add checks to all devices supporting multi-arfcn in the future. Change-Id: Ib2cd50a6ceaeedc6aaf3e1bb51d33b52911b6eba
2019-09-13radioInterfaceMulti: Override setTxGain() to avoid chan!=0 callsPau Espin Pedrol3-1/+19
Change-Id: I7e67f660c3b0b009db59b405de603f6058021802
2019-09-13radioDevice: Introduce getTxGain() APIPau Espin Pedrol5-0/+25
It will be used in later commits by radioInterfaceMulti. Change-Id: Ie3caca8971ed1e5370dfed6fb60716a24e7d82a5
2019-09-13radioInterface: Remove unusued getRxGain()Pau Espin Pedrol2-8/+0
Only the radioDevice->getRxGain() is called from inside radioInterfaceMulti, so the API in radioInterface is not used at all. Change-Id: Icc4e9a7ebfdafe7c72c535752a5e379d12592c9a
2019-09-13LMSDevice: Return previous txGain/rxGain if setting value failedPau Espin Pedrol2-6/+10
Change-Id: I11e853e11bec99fc88e81642f9b2cd87d5815398
2019-09-13USRPDevice: Return previous txGain if setting value failedPau Espin Pedrol2-2/+5
Change-Id: I0d8fd51586ef01141d4e5896f0fc3029a22743f8
2019-09-13USRPDevice: Fix setRxGain return on error and getRxGain() returning always 0Pau Espin Pedrol1-2/+3
field rxGain is set to 0 during constructor and never set after that point. Change-Id: I7fae7a315e5ab98a15c27628a88a92226ef89469
2019-09-13radioInterfaceMulti: Check equals zero explicitlyPau Espin Pedrol1-1/+1
It's not a pointer check or a boolean expression, in here we really check chan index is 0, so it's more clear doing so this way like it's done in all other places. Change-Id: I83b14487d14ba8272f58796f640f58a88891e532
2019-09-13radioInterface: Rename mRadio to mDevicePau Espin Pedrol4-37/+37
Previous naming is ready confusing, because "Radio" is actually the common term between radioInterface and radioDevice, and it looks like it's referring to radioInterface rather than radioDevice. On the other hand, mDevice cleary states it refers to the radioDevice item. Change-Id: I708bb1992a156fb63334f5590f2c6648ca27495e
2019-09-09Transceiver: Don't stop TRX if pulling from OFF timeslotPau Espin Pedrol2-9/+17
BTS may have any timeslot disabled, or may have not yet sent initial SETSLOT cmd to properly configure the timeslot. Change-Id: Icf62e5d1200c7a440f255bb46023cdbf61532b7f
2019-09-09Transceiver: pullRadioVector(): Fix use of uninitialized value bi->tnPau Espin Pedrol1-13/+13
Change-Id: Ia0f2b5a51040663d7e8219e6ed51e0513b876548