4.9. RDS 接口¶
无线电数据系统以二进制格式传输补充信息,例如电台名称或旅行信息,在无线电节目的听不见的音频副载波上。 此接口针对能够接收和/或传输 RDS 信息的设备。
有关更多信息,请参阅核心 RDS 标准 IEC 62106 和 RBDS 标准 NRSC-4-B。
注意
请注意,在美国使用的 RBDS 标准与 RDS 标准几乎相同。 任何 RDS 解码器/编码器也可以处理 RBDS。 只有一些字段的含义略有不同。 有关更多信息,请参阅 RBDS 标准。
RBDS 标准还指定了对 MMBS(修改的移动搜索)的支持。 这是一种专有格式,似乎已停止使用。 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 数据结构¶
-
type 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 |
发生了无法纠正的错误。 |