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 |
發生了無法糾正的錯誤。 |