4.9. RDS 接口¶
无线数据系统 (Radio Data System, RDS) 在无线电节目的不可听音频副载波上以二进制格式传输补充信息,例如电台名称或旅行信息。此接口旨在用于能够接收和/或发送 RDS 信息的设备。
有关更多信息,请参阅核心 RDS 标准 IEC 62106 和 RBDS 标准 NRSC-4-B。
注意
请注意,在美国使用的 RBDS 标准与 RDS 标准几乎相同。任何 RDS 解码器/编码器也可以处理 RBDS。只有一些字段的含义略有不同。有关更多信息,请参阅 RBDS 标准。
RBDS 标准还规定了对 MMBS (Modified Mobile Search, 修改的移动搜索) 的支持。这是一种似乎已停止使用的专有格式。RDS 接口不支持此格式。如果需要支持 MMBS (或通常所谓的“E 块”),请联系 linux-media 邮件列表:https://linuxtv.org/lists.php。
4.9.1. 查询功能¶
支持 RDS 捕获 API 的设备在 v4l2_capability
结构体的 capabilities
字段中设置 V4L2_CAP_RDS_CAPTURE
标志,该结构体由 ioctl VIDIOC_QUERYCAP ioctl 返回。任何支持 RDS 的调谐器都会在 v4l2_tuner
结构体的 capability
字段中设置 V4L2_TUNER_CAP_RDS
标志。如果驱动程序仅传递 RDS 块而不解释数据,则必须设置 V4L2_TUNER_CAP_RDS_BLOCK_IO
标志,请参阅 读取 RDS 数据。为了将来使用,还定义了 V4L2_TUNER_CAP_RDS_CONTROLS
标志。但是,尚不存在具有此功能的无线电调谐器的驱动程序,因此如果您计划编写这样的驱动程序,则应在 linux-media 邮件列表上进行讨论:https://linuxtv.org/lists.php。
可以通过查看 v4l2_tuner
结构体的 rxsubchans
字段来检测是否存在 RDS 信号:如果检测到 RDS 数据,则将设置 V4L2_TUNER_SUB_RDS
。
支持 RDS 输出 API 的设备在 v4l2_capability
结构体的 capabilities
字段中设置 V4L2_CAP_RDS_OUTPUT
标志,该结构体由 ioctl VIDIOC_QUERYCAP ioctl 返回。任何支持 RDS 的调制器都会在 v4l2_modulator
结构体的 capability
字段中设置 V4L2_TUNER_CAP_RDS
标志。为了启用 RDS 传输,必须在 v4l2_modulator
结构体的 txsubchans
字段中设置 V4L2_TUNER_SUB_RDS
位。如果驱动程序仅传递 RDS 块而不解释数据,则必须设置 V4L2_TUNER_CAP_RDS_BLOCK_IO
标志。如果调谐器能够处理诸如节目识别码和无线电文本之类的 RDS 实体,则应设置 V4L2_TUNER_CAP_RDS_CONTROLS
标志,请参阅 写入 RDS 数据 和 FM 发射器控制参考。
4.9.2. 读取 RDS 数据¶
可以使用 read()
函数从无线电设备读取 RDS 数据。数据以三个字节为一组打包。
4.9.3. 写入 RDS 数据¶
可以使用 write()
函数将 RDS 数据写入无线电设备。数据以三个字节为一组打包,如下所示
4.9.4. RDS 数据结构¶
-
类型 v4l2_rds_data¶
__u8 |
|
RDS 块的最低有效字节 |
__u8 |
|
RDS 块的最高有效字节 |
__u8 |
|
块描述 |
位 0-2 |
接收数据的块(也称为偏移量)。 |
位 3-5 |
已弃用。当前与位 0-2 相同。请勿使用这些位。 |
位 6 |
已更正位。表示已为此数据块更正了错误。 |
位 7 |
错误位。表示在此块的接收期间发生了无法更正的错误。 |
V4L2_RDS_BLOCK_MSK |
7 |
用于获取块 ID 的位 0-2 的掩码。 |
|
V4L2_RDS_BLOCK_A |
0 |
块 A。 |
|
V4L2_RDS_BLOCK_B |
1 |
块 B。 |
|
V4L2_RDS_BLOCK_C |
2 |
块 C。 |
|
V4L2_RDS_BLOCK_D |
3 |
块 D。 |
|
V4L2_RDS_BLOCK_C_ALT |
4 |
块 C’。 |
|
V4L2_RDS_BLOCK_INVALID |
只读 |
7 |
无效块。 |
V4L2_RDS_BLOCK_CORRECTED |
只读 |
0x40 |
检测到一位错误但已更正。 |
V4L2_RDS_BLOCK_ERROR |
只读 |
0x80 |
发生了无法更正的错误。 |