xref: /openbmc/linux/Documentation/userspace-api/media/dvb/dvbproperty.rst (revision cbecf716ca618fd44feda6bd9a64a8179d031fc5)
1*059b1c5bSMauro Carvalho Chehab.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
254f38fcaSMauro Carvalho Chehab
354f38fcaSMauro Carvalho Chehab.. _frontend-properties:
454f38fcaSMauro Carvalho Chehab
554f38fcaSMauro Carvalho Chehab**************
654f38fcaSMauro Carvalho ChehabProperty types
754f38fcaSMauro Carvalho Chehab**************
854f38fcaSMauro Carvalho Chehab
954f38fcaSMauro Carvalho ChehabTuning into a Digital TV physical channel and starting decoding it
1054f38fcaSMauro Carvalho Chehabrequires changing a set of parameters, in order to control the tuner,
1154f38fcaSMauro Carvalho Chehabthe demodulator, the Linear Low-noise Amplifier (LNA) and to set the
1254f38fcaSMauro Carvalho Chehabantenna subsystem via Satellite Equipment Control - SEC (on satellite
1354f38fcaSMauro Carvalho Chehabsystems). The actual parameters are specific to each particular digital
1454f38fcaSMauro Carvalho ChehabTV standards, and may change as the digital TV specs evolves.
1554f38fcaSMauro Carvalho Chehab
1654f38fcaSMauro Carvalho ChehabIn the past (up to DVB API version 3 - DVBv3), the strategy used was to have a
1754f38fcaSMauro Carvalho Chehabunion with the parameters needed to tune for DVB-S, DVB-C, DVB-T and
1854f38fcaSMauro Carvalho ChehabATSC delivery systems grouped there. The problem is that, as the second
1954f38fcaSMauro Carvalho Chehabgeneration standards appeared, the size of such union was not big
2054f38fcaSMauro Carvalho Chehabenough to group the structs that would be required for those new
2154f38fcaSMauro Carvalho Chehabstandards. Also, extending it would break userspace.
2254f38fcaSMauro Carvalho Chehab
2354f38fcaSMauro Carvalho ChehabSo, the legacy union/struct based approach was deprecated, in favor
2454f38fcaSMauro Carvalho Chehabof a properties set approach. On such approach,
2554f38fcaSMauro Carvalho Chehab:ref:`FE_GET_PROPERTY and FE_SET_PROPERTY <FE_GET_PROPERTY>` are used
2654f38fcaSMauro Carvalho Chehabto setup the frontend and read its status.
2754f38fcaSMauro Carvalho Chehab
2854f38fcaSMauro Carvalho ChehabThe actual action is determined by a set of dtv_property cmd/data pairs.
2954f38fcaSMauro Carvalho ChehabWith one single ioctl, is possible to get/set up to 64 properties.
3054f38fcaSMauro Carvalho Chehab
3154f38fcaSMauro Carvalho ChehabThis section describes the new and recommended way to set the frontend,
3254f38fcaSMauro Carvalho Chehabwith supports all digital TV delivery systems.
3354f38fcaSMauro Carvalho Chehab
3454f38fcaSMauro Carvalho Chehab.. note::
3554f38fcaSMauro Carvalho Chehab
3654f38fcaSMauro Carvalho Chehab   1. On Linux DVB API version 3, setting a frontend was done via
3754f38fcaSMauro Carvalho Chehab      struct :c:type:`dvb_frontend_parameters`.
3854f38fcaSMauro Carvalho Chehab
3954f38fcaSMauro Carvalho Chehab   2. Don't use DVB API version 3 calls on hardware with supports
4054f38fcaSMauro Carvalho Chehab      newer standards. Such API provides no support or a very limited
4154f38fcaSMauro Carvalho Chehab      support to new standards and/or new hardware.
4254f38fcaSMauro Carvalho Chehab
4354f38fcaSMauro Carvalho Chehab   3. Nowadays, most frontends support multiple delivery systems.
4454f38fcaSMauro Carvalho Chehab      Only with DVB API version 5 calls it is possible to switch between
4554f38fcaSMauro Carvalho Chehab      the multiple delivery systems supported by a frontend.
4654f38fcaSMauro Carvalho Chehab
4754f38fcaSMauro Carvalho Chehab   4. DVB API version 5 is also called *S2API*, as the first
4854f38fcaSMauro Carvalho Chehab      new standard added to it was DVB-S2.
4954f38fcaSMauro Carvalho Chehab
5054f38fcaSMauro Carvalho Chehab**Example**: in order to set the hardware to tune into a DVB-C channel
5154f38fcaSMauro Carvalho Chehabat 651 kHz, modulated with 256-QAM, FEC 3/4 and symbol rate of 5.217
5254f38fcaSMauro Carvalho ChehabMbauds, those properties should be sent to
5354f38fcaSMauro Carvalho Chehab:ref:`FE_SET_PROPERTY <FE_GET_PROPERTY>` ioctl:
5454f38fcaSMauro Carvalho Chehab
5554f38fcaSMauro Carvalho Chehab  :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>` = SYS_DVBC_ANNEX_A
5654f38fcaSMauro Carvalho Chehab
5754f38fcaSMauro Carvalho Chehab  :ref:`DTV_FREQUENCY <DTV-FREQUENCY>` = 651000000
5854f38fcaSMauro Carvalho Chehab
5954f38fcaSMauro Carvalho Chehab  :ref:`DTV_MODULATION <DTV-MODULATION>` = QAM_256
6054f38fcaSMauro Carvalho Chehab
6154f38fcaSMauro Carvalho Chehab  :ref:`DTV_INVERSION <DTV-INVERSION>` = INVERSION_AUTO
6254f38fcaSMauro Carvalho Chehab
6354f38fcaSMauro Carvalho Chehab  :ref:`DTV_SYMBOL_RATE <DTV-SYMBOL-RATE>` = 5217000
6454f38fcaSMauro Carvalho Chehab
6554f38fcaSMauro Carvalho Chehab  :ref:`DTV_INNER_FEC <DTV-INNER-FEC>` = FEC_3_4
6654f38fcaSMauro Carvalho Chehab
6754f38fcaSMauro Carvalho Chehab  :ref:`DTV_TUNE <DTV-TUNE>`
6854f38fcaSMauro Carvalho Chehab
6954f38fcaSMauro Carvalho ChehabThe code that would that would do the above is show in
7054f38fcaSMauro Carvalho Chehab:ref:`dtv-prop-example`.
7154f38fcaSMauro Carvalho Chehab
7254f38fcaSMauro Carvalho Chehab.. code-block:: c
7354f38fcaSMauro Carvalho Chehab    :caption: Example: Setting digital TV frontend properties
7454f38fcaSMauro Carvalho Chehab    :name: dtv-prop-example
7554f38fcaSMauro Carvalho Chehab
7654f38fcaSMauro Carvalho Chehab    #include <stdio.h>
7754f38fcaSMauro Carvalho Chehab    #include <fcntl.h>
7854f38fcaSMauro Carvalho Chehab    #include <sys/ioctl.h>
7954f38fcaSMauro Carvalho Chehab    #include <linux/dvb/frontend.h>
8054f38fcaSMauro Carvalho Chehab
8154f38fcaSMauro Carvalho Chehab    static struct dtv_property props[] = {
8254f38fcaSMauro Carvalho Chehab	{ .cmd = DTV_DELIVERY_SYSTEM, .u.data = SYS_DVBC_ANNEX_A },
8354f38fcaSMauro Carvalho Chehab	{ .cmd = DTV_FREQUENCY,       .u.data = 651000000 },
8454f38fcaSMauro Carvalho Chehab	{ .cmd = DTV_MODULATION,      .u.data = QAM_256 },
8554f38fcaSMauro Carvalho Chehab	{ .cmd = DTV_INVERSION,       .u.data = INVERSION_AUTO },
8654f38fcaSMauro Carvalho Chehab	{ .cmd = DTV_SYMBOL_RATE,     .u.data = 5217000 },
8754f38fcaSMauro Carvalho Chehab	{ .cmd = DTV_INNER_FEC,       .u.data = FEC_3_4 },
8854f38fcaSMauro Carvalho Chehab	{ .cmd = DTV_TUNE }
8954f38fcaSMauro Carvalho Chehab    };
9054f38fcaSMauro Carvalho Chehab
9154f38fcaSMauro Carvalho Chehab    static struct dtv_properties dtv_prop = {
9254f38fcaSMauro Carvalho Chehab	.num = 6, .props = props
9354f38fcaSMauro Carvalho Chehab    };
9454f38fcaSMauro Carvalho Chehab
9554f38fcaSMauro Carvalho Chehab    int main(void)
9654f38fcaSMauro Carvalho Chehab    {
9754f38fcaSMauro Carvalho Chehab	int fd = open("/dev/dvb/adapter0/frontend0", O_RDWR);
9854f38fcaSMauro Carvalho Chehab
9954f38fcaSMauro Carvalho Chehab	if (!fd) {
10054f38fcaSMauro Carvalho Chehab	    perror ("open");
10154f38fcaSMauro Carvalho Chehab	    return -1;
10254f38fcaSMauro Carvalho Chehab	}
10354f38fcaSMauro Carvalho Chehab	if (ioctl(fd, FE_SET_PROPERTY, &dtv_prop) == -1) {
10454f38fcaSMauro Carvalho Chehab	    perror("ioctl");
10554f38fcaSMauro Carvalho Chehab	    return -1;
10654f38fcaSMauro Carvalho Chehab	}
10754f38fcaSMauro Carvalho Chehab	printf("Frontend set\\n");
10854f38fcaSMauro Carvalho Chehab	return 0;
10954f38fcaSMauro Carvalho Chehab    }
11054f38fcaSMauro Carvalho Chehab
11154f38fcaSMauro Carvalho Chehab.. attention:: While it is possible to directly call the Kernel code like the
11254f38fcaSMauro Carvalho Chehab   above example, it is strongly recommended to use
11354f38fcaSMauro Carvalho Chehab   `libdvbv5 <https://linuxtv.org/docs/libdvbv5/index.html>`__, as it
11454f38fcaSMauro Carvalho Chehab   provides abstraction to work with the supported digital TV standards and
11554f38fcaSMauro Carvalho Chehab   provides methods for usual operations like program scanning and to
11654f38fcaSMauro Carvalho Chehab   read/write channel descriptor files.
11754f38fcaSMauro Carvalho Chehab
11854f38fcaSMauro Carvalho Chehab.. toctree::
11954f38fcaSMauro Carvalho Chehab    :maxdepth: 1
12054f38fcaSMauro Carvalho Chehab
12154f38fcaSMauro Carvalho Chehab    fe_property_parameters
12254f38fcaSMauro Carvalho Chehab    frontend-stat-properties
12354f38fcaSMauro Carvalho Chehab    frontend-property-terrestrial-systems
12454f38fcaSMauro Carvalho Chehab    frontend-property-cable-systems
12554f38fcaSMauro Carvalho Chehab    frontend-property-satellite-systems
12654f38fcaSMauro Carvalho Chehab    frontend-header
127