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
struct v4l2_rds_data

__u8

lsb

RDS 塊的最低有效位元組

__u8

msb

RDS 塊的最高有效位元組

__u8

block

塊描述

塊描述

位 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

發生了無法糾正的錯誤。