Pau Espin Pedrol | d06172c | 2018-07-05 18:26:52 +0200 | [diff] [blame^] | 1 | [[osmotrx_device_support]] |
| 2 | == OsmoTRX hardware device support |
| 3 | |
| 4 | OsmoTRX consists of a _common_ part that applies to all TRX devices as well as |
| 5 | _hardware-specific_ parts for each TRX device. The hardware-specific parts are |
| 6 | usually provided by vendor-specific or device-specific libraries that are then |
| 7 | handled by some OsmoTRX glue code presenting a unified interface towards the |
| 8 | rest of the code by means of a _RadioDevice_ class. |
| 9 | |
| 10 | The common part includes the core TRX architecture as well as code for |
| 11 | implementing the external interfaces such as the TRX Manager UDP socket, |
| 12 | control, and VTY interfaces. |
| 13 | |
| 14 | The hardware-specific parts include support for driving one particular |
| 15 | implementation of a radio modem. Such a physical layer |
| 16 | implementation can come in many forms. Sometimes it runs on a general |
| 17 | purpose CPU, sometimes on a dedicated ARM core, a dedicated DSP, a |
| 18 | combination of DSP and FPGA. |
| 19 | |
| 20 | Joining the common part with each of the available backends results in a |
| 21 | different binary with different suffix for each backend. For instance, when |
| 22 | OsmoTRX is built with UHD backend, an _osmo-trx-uhd_ binary is generated; when |
| 23 | OsmoTRX is built with LimeSuite backend, an _osmo-trx-lms_ binary is generated. |
| 24 | Build of different backend can be enabled and disabled by means of configure |
| 25 | flags, which can be found in each subsection relative to each backend below. |
| 26 | |
| 27 | == `osmo-trx-uhd` for UHD based Transceivers |
| 28 | |
| 29 | This OsmoTRX model uses _libuhd_ (UHD, USRP Hardware Driver) to drive the |
| 30 | device, that is configuring it and reading/writing samples from/to it. |
| 31 | |
| 32 | So far, this backend has been mostly used to drive devices such as the Ettus |
| 33 | B200 family and Fairwaves UmTRX family, and used to be the default backend used |
| 34 | for legacy @osmo-trx@ binary when per-backend binaries didn't exist yet. |
| 35 | |
| 36 | Any device providing generic support for UHD should theoretically be able to be |
| 37 | run through this backend without much effort, but pracitcal experience showed |
| 38 | that some devices don't play well with it, such as the LimeSDR family of |
| 39 | devices, which showed far better results when using its native interface. |
| 40 | |
| 41 | Related code can be found in the _Transceiver52M/device/uhd/_ directory in |
| 42 | _osmo-trx.git_. |
| 43 | |
| 44 | == `osmo-trx-lms` for LimeSuite based Transceivers |
| 45 | |
| 46 | This OsmoTRX model uses LimeSuite API and library to drive the device, that is |
| 47 | configuring it and reading/writing samples from/to it. |
| 48 | |
| 49 | This backend was developed in order to be used together with LimeSDR-USB and |
| 50 | LimeSDR-mini devices, due to to the poor results obtained with the UHD backend, |
| 51 | and to simplify the stack. |
| 52 | |
| 53 | Related code can be found in the _Transceiver52M/device/lms/_ directory in |
| 54 | _osmo-trx.git_. |
| 55 | |
| 56 | |
| 57 | == `osmo-trx-usrp1` for libusrp based Transceivers |
| 58 | |
| 59 | This OsmoTRX model uses the legacy libusrp driver provided in GNU Radio 3.4.2. |
| 60 | |
| 61 | As this code was dropped from GNU Radio at some point and was found very |
| 62 | difficult to build, some work was done to create a standalone libusrp which can |
| 63 | be nowadays found as a separate git repository together with other osmocom git |
| 64 | repositories, in https://git.osmocom.org/libusrp/ |
| 65 | |
| 66 | Related code can be found in the _Transceiver52M/device/usrp1/_ directory in |
| 67 | _osmo-trx.git_. |