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