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