Linux 4.8.3
[linux/fpc-iii.git] / Documentation / media / uapi / v4l / dev-rds.rst
blobcd6ad63cb90b5b8e10959d2e6fb1ccabf0c19dc2
1 .. -*- coding: utf-8; mode: rst -*-
3 .. _rds:
5 *************
6 RDS Interface
7 *************
9 The Radio Data System transmits supplementary information in binary
10 format, for example the station name or travel information, on an
11 inaudible audio subcarrier of a radio program. This interface is aimed
12 at devices capable of receiving and/or transmitting RDS information.
14 For more information see the core RDS standard :ref:`iec62106` and the
15 RBDS standard :ref:`nrsc4`.
17 .. note:: Note that the RBDS standard as is used in the USA is almost
18    identical to the RDS standard. Any RDS decoder/encoder can also handle
19    RBDS. Only some of the fields have slightly different meanings. See the
20    RBDS standard for more information.
22 The RBDS standard also specifies support for MMBS (Modified Mobile
23 Search). This is a proprietary format which seems to be discontinued.
24 The RDS interface does not support this format. Should support for MMBS
25 (or the so-called 'E blocks' in general) be needed, then please contact
26 the linux-media mailing list:
27 `https://linuxtv.org/lists.php <https://linuxtv.org/lists.php>`__.
30 Querying Capabilities
31 =====================
33 Devices supporting the RDS capturing API set the
34 ``V4L2_CAP_RDS_CAPTURE`` flag in the ``capabilities`` field of struct
35 :ref:`v4l2_capability <v4l2-capability>` returned by the
36 :ref:`VIDIOC_QUERYCAP` ioctl. Any tuner that
37 supports RDS will set the ``V4L2_TUNER_CAP_RDS`` flag in the
38 ``capability`` field of struct :ref:`v4l2_tuner <v4l2-tuner>`. If the
39 driver only passes RDS blocks without interpreting the data the
40 ``V4L2_TUNER_CAP_RDS_BLOCK_IO`` flag has to be set, see
41 :ref:`Reading RDS data <reading-rds-data>`. For future use the flag
42 ``V4L2_TUNER_CAP_RDS_CONTROLS`` has also been defined. However, a driver
43 for a radio tuner with this capability does not yet exist, so if you are
44 planning to write such a driver you should discuss this on the
45 linux-media mailing list:
46 `https://linuxtv.org/lists.php <https://linuxtv.org/lists.php>`__.
48 Whether an RDS signal is present can be detected by looking at the
49 ``rxsubchans`` field of struct :ref:`v4l2_tuner <v4l2-tuner>`: the
50 ``V4L2_TUNER_SUB_RDS`` will be set if RDS data was detected.
52 Devices supporting the RDS output API set the ``V4L2_CAP_RDS_OUTPUT``
53 flag in the ``capabilities`` field of struct
54 :ref:`v4l2_capability <v4l2-capability>` returned by the
55 :ref:`VIDIOC_QUERYCAP` ioctl. Any modulator that
56 supports RDS will set the ``V4L2_TUNER_CAP_RDS`` flag in the
57 ``capability`` field of struct
58 :ref:`v4l2_modulator <v4l2-modulator>`. In order to enable the RDS
59 transmission one must set the ``V4L2_TUNER_SUB_RDS`` bit in the
60 ``txsubchans`` field of struct
61 :ref:`v4l2_modulator <v4l2-modulator>`. If the driver only passes RDS
62 blocks without interpreting the data the ``V4L2_TUNER_CAP_RDS_BLOCK_IO``
63 flag has to be set. If the tuner is capable of handling RDS entities
64 like program identification codes and radio text, the flag
65 ``V4L2_TUNER_CAP_RDS_CONTROLS`` should be set, see
66 :ref:`Writing RDS data <writing-rds-data>` and
67 :ref:`FM Transmitter Control Reference <fm-tx-controls>`.
70 .. _reading-rds-data:
72 Reading RDS data
73 ================
75 RDS data can be read from the radio device with the
76 :ref:`read() <func-read>` function. The data is packed in groups of
77 three bytes.
80 .. _writing-rds-data:
82 Writing RDS data
83 ================
85 RDS data can be written to the radio device with the
86 :ref:`write() <func-write>` function. The data is packed in groups of
87 three bytes, as follows:
90 RDS datastructures
91 ==================
94 .. _v4l2-rds-data:
96 .. flat-table:: struct v4l2_rds_data
97     :header-rows:  0
98     :stub-columns: 0
99     :widths:       1 1 5
102     -  .. row 1
104        -  __u8
106        -  ``lsb``
108        -  Least Significant Byte of RDS Block
110     -  .. row 2
112        -  __u8
114        -  ``msb``
116        -  Most Significant Byte of RDS Block
118     -  .. row 3
120        -  __u8
122        -  ``block``
124        -  Block description
128 .. _v4l2-rds-block:
130 .. flat-table:: Block description
131     :header-rows:  0
132     :stub-columns: 0
133     :widths:       1 5
136     -  .. row 1
138        -  Bits 0-2
140        -  Block (aka offset) of the received data.
142     -  .. row 2
144        -  Bits 3-5
146        -  Deprecated. Currently identical to bits 0-2. Do not use these
147           bits.
149     -  .. row 3
151        -  Bit 6
153        -  Corrected bit. Indicates that an error was corrected for this data
154           block.
156     -  .. row 4
158        -  Bit 7
160        -  Error bit. Indicates that an uncorrectable error occurred during
161           reception of this block.
165 .. _v4l2-rds-block-codes:
167 .. flat-table:: Block defines
168     :header-rows:  0
169     :stub-columns: 0
170     :widths:       1 1 1 5
173     -  .. row 1
175        -  V4L2_RDS_BLOCK_MSK
177        -
178        -  7
180        -  Mask for bits 0-2 to get the block ID.
182     -  .. row 2
184        -  V4L2_RDS_BLOCK_A
186        -
187        -  0
189        -  Block A.
191     -  .. row 3
193        -  V4L2_RDS_BLOCK_B
195        -
196        -  1
198        -  Block B.
200     -  .. row 4
202        -  V4L2_RDS_BLOCK_C
204        -
205        -  2
207        -  Block C.
209     -  .. row 5
211        -  V4L2_RDS_BLOCK_D
213        -
214        -  3
216        -  Block D.
218     -  .. row 6
220        -  V4L2_RDS_BLOCK_C_ALT
222        -
223        -  4
225        -  Block C'.
227     -  .. row 7
229        -  V4L2_RDS_BLOCK_INVALID
231        -  read-only
233        -  7
235        -  An invalid block.
237     -  .. row 8
239        -  V4L2_RDS_BLOCK_CORRECTED
241        -  read-only
243        -  0x40
245        -  A bit error was detected but corrected.
247     -  .. row 9
249        -  V4L2_RDS_BLOCK_ERROR
251        -  read-only
253        -  0x80
255        -  An uncorrectable error occurred.