[[osmotrx_device_support]]
== OsmoTRX hardware device support

OsmoTRX consists of a _common_ part that applies to all TRX devices as well as
_hardware-specific_ parts for each TRX device. The hardware-specific parts are
usually provided by vendor-specific or device-specific libraries that are then
handled by some OsmoTRX glue code presenting a unified interface towards the
rest of the code by means of a _RadioDevice_ class.

The common part includes the core TRX architecture as well as code for
implementing the external interfaces such as the TRX Manager UDP socket,
control, and VTY interfaces.

The hardware-specific parts include support for driving one particular
implementation of a radio modem.  Such a physical layer
implementation can come in many forms.  Sometimes it runs on a general
purpose CPU, sometimes on a dedicated ARM core, a dedicated DSP, a
combination of DSP and FPGA.

Joining the common part with each of the available backends results in a
different binary with different suffix for each backend. For instance, when
OsmoTRX is built with UHD backend, an _osmo-trx-uhd_ binary is generated; when
OsmoTRX is built with LimeSuite backend, an _osmo-trx-lms_ binary is generated.
Build of different backend can be enabled and disabled by means of configure
flags, which can be found in each subsection relative to each backend below.
