mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-10 15:54:39 +08:00
7347081e8a
There are lots of internal references in the form: :ref:`foo <foo>` Simplify them to be just: :ref:`foo`. Patch generated via this small script: for j in $(find . -name '*'); do echo $j; perl -ne 'if (m/\`(\S+)\s*\<(\S+)\>\`/) { if (!($1=~'http') && $1 eq $2) { s,\s*\<(\S+)\>,,; } } print $_' <$j >a && mv a $j; done Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
267 lines
5.9 KiB
ReStructuredText
267 lines
5.9 KiB
ReStructuredText
.. -*- coding: utf-8; mode: rst -*-
|
|
|
|
.. _rds:
|
|
|
|
*************
|
|
RDS Interface
|
|
*************
|
|
|
|
The Radio Data System transmits supplementary information in binary
|
|
format, for example the station name or travel information, on an
|
|
inaudible audio subcarrier of a radio program. This interface is aimed
|
|
at devices capable of receiving and/or transmitting RDS information.
|
|
|
|
For more information see the core RDS standard :ref:`iec62106` and the
|
|
RBDS standard :ref:`nrsc4`.
|
|
|
|
Note that the RBDS standard as is used in the USA is almost identical to
|
|
the RDS standard. Any RDS decoder/encoder can also handle RBDS. Only
|
|
some of the fields have slightly different meanings. See the RBDS
|
|
standard for more information.
|
|
|
|
The RBDS standard also specifies support for MMBS (Modified Mobile
|
|
Search). This is a proprietary format which seems to be discontinued.
|
|
The RDS interface does not support this format. Should support for MMBS
|
|
(or the so-called 'E blocks' in general) be needed, then please contact
|
|
the linux-media mailing list:
|
|
`https://linuxtv.org/lists.php <https://linuxtv.org/lists.php>`__.
|
|
|
|
|
|
Querying Capabilities
|
|
=====================
|
|
|
|
Devices supporting the RDS capturing API set the
|
|
``V4L2_CAP_RDS_CAPTURE`` flag in the ``capabilities`` field of struct
|
|
:ref:`v4l2_capability <v4l2-capability>` returned by the
|
|
:ref:`VIDIOC_QUERYCAP` ioctl. Any tuner that
|
|
supports RDS will set the ``V4L2_TUNER_CAP_RDS`` flag in the
|
|
``capability`` field of struct :ref:`v4l2_tuner <v4l2-tuner>`. If the
|
|
driver only passes RDS blocks without interpreting the data the
|
|
``V4L2_TUNER_CAP_RDS_BLOCK_IO`` flag has to be set, see
|
|
:ref:`Reading RDS data <reading-rds-data>`. For future use the flag
|
|
``V4L2_TUNER_CAP_RDS_CONTROLS`` has also been defined. However, a driver
|
|
for a radio tuner with this capability does not yet exist, so if you are
|
|
planning to write such a driver you should discuss this on the
|
|
linux-media mailing list:
|
|
`https://linuxtv.org/lists.php <https://linuxtv.org/lists.php>`__.
|
|
|
|
Whether an RDS signal is present can be detected by looking at the
|
|
``rxsubchans`` field of struct :ref:`v4l2_tuner <v4l2-tuner>`: the
|
|
``V4L2_TUNER_SUB_RDS`` will be set if RDS data was detected.
|
|
|
|
Devices supporting the RDS output API set the ``V4L2_CAP_RDS_OUTPUT``
|
|
flag in the ``capabilities`` field of struct
|
|
:ref:`v4l2_capability <v4l2-capability>` returned by the
|
|
:ref:`VIDIOC_QUERYCAP` ioctl. Any modulator that
|
|
supports RDS will set the ``V4L2_TUNER_CAP_RDS`` flag in the
|
|
``capability`` field of struct
|
|
:ref:`v4l2_modulator <v4l2-modulator>`. In order to enable the RDS
|
|
transmission one must set the ``V4L2_TUNER_SUB_RDS`` bit in the
|
|
``txsubchans`` field of struct
|
|
:ref:`v4l2_modulator <v4l2-modulator>`. If the driver only passes RDS
|
|
blocks without interpreting the data the ``V4L2_TUNER_CAP_RDS_BLOCK_IO``
|
|
flag has to be set. If the tuner is capable of handling RDS entities
|
|
like program identification codes and radio text, the flag
|
|
``V4L2_TUNER_CAP_RDS_CONTROLS`` should be set, see
|
|
:ref:`Writing RDS data <writing-rds-data>` and
|
|
:ref:`FM Transmitter Control Reference <fm-tx-controls>`.
|
|
|
|
|
|
.. _reading-rds-data:
|
|
|
|
Reading RDS data
|
|
================
|
|
|
|
RDS data can be read from the radio device with the
|
|
:ref:`read() <func-read>` function. The data is packed in groups of
|
|
three bytes.
|
|
|
|
|
|
.. _writing-rds-data:
|
|
|
|
Writing RDS data
|
|
================
|
|
|
|
RDS data can be written to the radio device with the
|
|
:ref:`write() <func-write>` function. The data is packed in groups of
|
|
three bytes, as follows:
|
|
|
|
|
|
RDS datastructures
|
|
==================
|
|
|
|
|
|
.. _v4l2-rds-data:
|
|
|
|
.. flat-table:: struct v4l2_rds_data
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 1 1 5
|
|
|
|
|
|
- .. row 1
|
|
|
|
- __u8
|
|
|
|
- ``lsb``
|
|
|
|
- Least Significant Byte of RDS Block
|
|
|
|
- .. row 2
|
|
|
|
- __u8
|
|
|
|
- ``msb``
|
|
|
|
- Most Significant Byte of RDS Block
|
|
|
|
- .. row 3
|
|
|
|
- __u8
|
|
|
|
- ``block``
|
|
|
|
- Block description
|
|
|
|
|
|
|
|
.. _v4l2-rds-block:
|
|
|
|
.. flat-table:: Block description
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 1 5
|
|
|
|
|
|
- .. row 1
|
|
|
|
- Bits 0-2
|
|
|
|
- Block (aka offset) of the received data.
|
|
|
|
- .. row 2
|
|
|
|
- Bits 3-5
|
|
|
|
- Deprecated. Currently identical to bits 0-2. Do not use these
|
|
bits.
|
|
|
|
- .. row 3
|
|
|
|
- Bit 6
|
|
|
|
- Corrected bit. Indicates that an error was corrected for this data
|
|
block.
|
|
|
|
- .. row 4
|
|
|
|
- Bit 7
|
|
|
|
- Error bit. Indicates that an uncorrectable error occurred during
|
|
reception of this block.
|
|
|
|
|
|
|
|
.. _v4l2-rds-block-codes:
|
|
|
|
.. flat-table:: Block defines
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 1 1 1 5
|
|
|
|
|
|
- .. row 1
|
|
|
|
- V4L2_RDS_BLOCK_MSK
|
|
|
|
-
|
|
- 7
|
|
|
|
- Mask for bits 0-2 to get the block ID.
|
|
|
|
- .. row 2
|
|
|
|
- V4L2_RDS_BLOCK_A
|
|
|
|
-
|
|
- 0
|
|
|
|
- Block A.
|
|
|
|
- .. row 3
|
|
|
|
- V4L2_RDS_BLOCK_B
|
|
|
|
-
|
|
- 1
|
|
|
|
- Block B.
|
|
|
|
- .. row 4
|
|
|
|
- V4L2_RDS_BLOCK_C
|
|
|
|
-
|
|
- 2
|
|
|
|
- Block C.
|
|
|
|
- .. row 5
|
|
|
|
- V4L2_RDS_BLOCK_D
|
|
|
|
-
|
|
- 3
|
|
|
|
- Block D.
|
|
|
|
- .. row 6
|
|
|
|
- V4L2_RDS_BLOCK_C_ALT
|
|
|
|
-
|
|
- 4
|
|
|
|
- Block C'.
|
|
|
|
- .. row 7
|
|
|
|
- V4L2_RDS_BLOCK_INVALID
|
|
|
|
- read-only
|
|
|
|
- 7
|
|
|
|
- An invalid block.
|
|
|
|
- .. row 8
|
|
|
|
- V4L2_RDS_BLOCK_CORRECTED
|
|
|
|
- read-only
|
|
|
|
- 0x40
|
|
|
|
- A bit error was detected but corrected.
|
|
|
|
- .. row 9
|
|
|
|
- V4L2_RDS_BLOCK_ERROR
|
|
|
|
- read-only
|
|
|
|
- 0x80
|
|
|
|
- An uncorrectable error occurred.
|
|
|
|
|
|
|
|
|
|
.. ------------------------------------------------------------------------------
|
|
.. This file was automatically converted from DocBook-XML with the dbxml
|
|
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
|
.. from the linux kernel, refer to:
|
|
..
|
|
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
|
.. ------------------------------------------------------------------------------
|