| [[trx_backends]] |
| == OsmoTRX backend support |
| |
| [[backend_uhd]] |
| === `osmo-trx-uhd` for UHD based Transceivers |
| |
| This OsmoTRX model uses _libuhd_ (UHD, USRP Hardware Driver) to drive the |
| device, that is configuring it and reading/writing samples from/to it. |
| |
| So far, this backend has been mostly used to drive devices such as the Ettus |
| B200 family and Fairwaves UmTRX family, and used to be the default backend used |
| for legacy @osmo-trx@ binary when per-backend binaries didn't exist yet. |
| |
| Any device providing generic support for UHD should theoretically be able to be |
| run through this backend without much effort, but practical experience showed |
| that some devices don't play well with it, such as the LimeSDR family of |
| devices, which showed far better results when using its native interface. |
| |
| Related code can be found in the _Transceiver52M/device/uhd/_ directory in |
| _osmo-trx.git_. |
| |
| [[backend_lms]] |
| === `osmo-trx-lms` for LimeSuite based Transceivers |
| |
| This OsmoTRX model uses LimeSuite API and library to drive the device, that is |
| configuring it and reading/writing samples from/to it. |
| |
| This backend was developed in order to be used together with LimeSDR-USB and |
| LimeSDR-mini devices, due to to the poor results obtained with the UHD backend, |
| and to simplify the stack. |
| |
| Related code can be found in the _Transceiver52M/device/lms/_ directory in |
| _osmo-trx.git_. |
| |
| [[backend_usrp1]] |
| === `osmo-trx-usrp1` for libusrp based Transceivers |
| |
| This OsmoTRX model uses the legacy libusrp driver provided in GNU Radio 3.4.2. |
| |
| As this code was dropped from GNU Radio at some point and was found very |
| difficult to build, some work was done to create a standalone libusrp which can |
| be nowadays found as a separate git repository together with other osmocom git |
| repositories, in https://git.osmocom.org/libusrp/ |
| |
| Related code can be found in the _Transceiver52M/device/usrp1/_ directory in |
| _osmo-trx.git_. |
| |
| The USRPDevice module is basically a driver that reads/writes packets to a USRP |
| with two RFX900 daughterboards, board A is the Tx chain and board B is the Rx |
| chain. |
| |
| The `radioInterface` module is basically an interface between the transceiver |
| and the USRP. It operates the basestation clock based upon the sample count of |
| received USRP samples. Packets from the USRP are queued and segmented into GSM |
| bursts that are passed up to the transceiver; bursts from the transceiver are |
| passed down to the USRP. |
| |
| The transceiver basically operates "layer 0" of the GSM stack, performing the |
| modulation, detection, and demodulation of GSM bursts. It communicates with the |
| GSM stack via three UDP sockets, one socket for data, one for control messages, |
| and one socket to pass clocking information. The transceiver contains a priority |
| queue to sort to-be-transmitted bursts, and a filler table to fill in timeslots |
| that do not have bursts in the priority queue. The transceiver tries to stay |
| ahead of the basestation clock, adapting its latency when underruns are reported |
| by the radioInterface/USRP. Received bursts (from the radioInterface) pass |
| through a simple energy detector, a RACH or midamble correlator, and a DFE-based |
| demodulator. |
| |
| NOTE: There's a `SWLOOPBACK` #define statement, where the USRP is replaced |
| with a memory buffer. In this mode, data written to the USRP is actually stored |
| in a buffer, and read commands to the USRP simply pull data from this buffer. |
| This was very useful in early testing, and still may be useful in testing basic |
| Transceiver and radioInterface functionality. |