2.6. ioctls CEC_ADAP_G_LOG_ADDRS 和 CEC_ADAP_S_LOG_ADDRS¶
2.6.1. 名稱¶
CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS - 獲取或設定邏輯地址
2.6.2. 概要¶
-
CEC_ADAP_G_LOG_ADDRS¶
int ioctl(int fd, CEC_ADAP_G_LOG_ADDRS, struct cec_log_addrs *argp)
-
CEC_ADAP_S_LOG_ADDRS¶
int ioctl(int fd, CEC_ADAP_S_LOG_ADDRS, struct cec_log_addrs *argp)
2.6.3. 引數¶
fd由
open()返回的檔案描述符。argp指向 struct
cec_log_addrs的指標。
2.6.4. 描述¶
要查詢當前的 CEC 邏輯地址,應用程式呼叫 ioctl CEC_ADAP_G_LOG_ADDRS,並傳遞一個指向 struct cec_log_addrs 的指標,驅動程式會將邏輯地址儲存在該結構體中。
要設定新的邏輯地址,應用程式填寫 struct cec_log_addrs,然後呼叫 ioctl CEC_ADAP_S_LOG_ADDRS,並傳遞一個指向該結構體的指標。 只有在設定了 CEC_CAP_LOG_ADDRS 時,ioctl CEC_ADAP_S_LOG_ADDRS 才可用(否則返回 ENOTTY 錯誤程式碼)。 只有當檔案描述符處於發起者模式時(參見 ioctls CEC_G_MODE 和 CEC_S_MODE),才能呼叫 ioctl CEC_ADAP_S_LOG_ADDRS,否則將返回 EBUSY 錯誤程式碼。
要清除現有的邏輯地址,請將 num_log_addrs 設定為 0。 在這種情況下,所有其他欄位都將被忽略。 介面卡將進入未配置狀態,並且 cec_version、vendor_id 和 osd_name 欄位都將重置為其預設值(CEC 版本 2.0、無供應商 ID 和空 OSD 名稱)。
如果物理地址有效(參見 ioctl CEC_ADAP_S_PHYS_ADDR),則此 ioctl 將阻塞,直到所有請求的邏輯地址都被宣告。 如果檔案描述符處於非阻塞模式,則它不會等待宣告邏輯地址,而是直接返回 0。
當宣告或清除邏輯地址時,會發送 CEC_EVENT_STATE_CHANGE 事件。
嘗試在已定義邏輯地址型別時呼叫 ioctl CEC_ADAP_S_LOG_ADDRS 將返回錯誤 EBUSY。
-
type cec_log_addrs¶
__u8 |
|
已宣告的實際邏輯地址。 由驅動程式設定。 如果無法宣告任何邏輯地址,則將其設定為 |
__u16 |
|
此介面卡已宣告的所有邏輯地址的位掩碼。 如果此介面卡未註冊,則 |
__u8 |
|
此介面卡應使用的 CEC 版本。 請參見 CEC 版本。 用於實現 |
__u8 |
|
要設定的邏輯地址數量。 必須 ≤ |
__u32 |
|
供應商 ID 是一個 24 位數字,用於標識特定的供應商或實體。 基於此 ID,可以定義供應商特定的命令。 如果您不想要供應商 ID,請將其設定為 |
__u32 |
|
標誌。 請參見 struct cec_log_addrs 的標誌,以獲取可用標誌的列表。 |
char |
|
螢幕顯示名稱,如 |
__u8 |
|
每個邏輯地址的主要裝置型別。 有關可能的型別,請參見 CEC 主要裝置型別。 |
__u8 |
|
邏輯地址型別。 有關可能的型別,請參見 CEC 邏輯地址型別。 驅動程式將使用它宣告的實際邏輯地址型別更新此型別(例如,它可能必須回退到 CEC_LOG_ADDR_TYPE_UNREGISTERED)。 |
__u8 |
|
CEC 2.0 特定:所有裝置型別的位掩碼。 請參見 CEC 所有裝置型別標誌。 它用於 CEC 2.0 |
__u8 |
|
每個邏輯地址的特性。 它用於 CEC 2.0 |
|
1 |
預設情況下,如果無法宣告所請求型別的任何邏輯地址,則它將返回到未配置狀態。 如果設定了此標誌,則它將回退到未註冊的邏輯地址。 請注意,如果明確請求了未註冊的邏輯地址,則此標誌不起作用。 |
|
2 |
預設情況下, |
|
4 |
如果設定了此標誌,則該裝置為 CDC-Only。 CDC-Only CEC 裝置是隻能處理 CDC 訊息的 CEC 裝置。 所有其他訊息都將被忽略。 |
|
4 |
根據 HDMI 1.3a 標準的 CEC 版本。 |
|
5 |
根據 HDMI 1.4b 標準的 CEC 版本。 |
|
6 |
根據 HDMI 2.0 標準的 CEC 版本。 |
|
0 |
用於電視。 |
|
1 |
用於錄製裝置。 |
|
3 |
用於帶有調諧器的裝置。 |
|
4 |
用於播放裝置。 |
|
5 |
用於音訊系統(例如,音訊/影片接收器)。 |
|
6 |
用於 CEC 交換機。 |
|
7 |
用於影片處理器裝置。 |
|
0 |
用於電視。 |
|
1 |
用於錄製裝置。 |
|
2 |
用於調諧器裝置。 |
|
3 |
用於播放裝置。 |
|
4 |
用於音訊系統裝置。 |
|
5 |
用於第二臺電視或影片處理器裝置。 |
|
6 |
如果您只想保持未註冊狀態,請使用此選項。 用於純 CEC 交換機或 CDC-only 裝置(CDC:能力發現和控制)。 |
|
0x80 |
這支援電視型別。 |
|
0x40 |
這支援錄製型別。 |
|
0x20 |
這支援調諧器型別。 |
|
0x10 |
這支援播放型別。 |
|
0x08 |
這支援音訊系統型別。 |
|
0x04 |
這支援 CEC 交換機或影片處理型別。 |
2.6.5. 返回值¶
成功時返回 0,出錯時返回 -1,並適當地設定 errno 變數。 通用錯誤程式碼在 通用錯誤程式碼 章節中描述。
ioctl CEC_ADAP_S_LOG_ADDRS 可以返回以下錯誤程式碼
- ENOTTY
未設定
CEC_CAP_LOG_ADDRS功能,因此不支援此 ioctl。- EBUSY
CEC 介面卡當前正在配置自身,或者已經配置並且
num_log_addrs非零,或者另一個檔案控制代碼處於獨佔跟隨者或發起者模式,或者該檔案控制代碼處於模式CEC_MODE_NO_INITIATOR。- EINVAL
struct
cec_log_addrs的內容無效。