2.7. ioctls CEC_ADAP_G_PHYS_ADDR 和 CEC_ADAP_S_PHYS_ADDR¶
2.7.1. 名稱¶
CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR - 獲取或設定物理地址
2.7.2. 概要¶
-
CEC_ADAP_G_PHYS_ADDR¶
int ioctl(int fd, CEC_ADAP_G_PHYS_ADDR, __u16 *argp)
-
CEC_ADAP_S_PHYS_ADDR¶
int ioctl(int fd, CEC_ADAP_S_PHYS_ADDR, __u16 *argp)
2.7.3. 引數¶
fd由
open()返回的檔案描述符。argp指向 CEC 地址的指標。
2.7.4. 描述¶
要查詢當前的物理地址,應用程式呼叫 ioctl CEC_ADAP_G_PHYS_ADDR 並傳遞一個指向 __u16 的指標,驅動程式會將物理地址儲存在該位置。
要設定新的物理地址,應用程式將物理地址儲存在一個 __u16 中,並呼叫 ioctl CEC_ADAP_S_PHYS_ADDR 並傳遞一個指向此整數的指標。 只有在設定了 CEC_CAP_PHYS_ADDR 時,ioctl CEC_ADAP_S_PHYS_ADDR 才可用(否則將返回 ENOTTY 錯誤程式碼)。 只有在發起者模式下才能呼叫 ioctl CEC_ADAP_S_PHYS_ADDR(請參閱 ioctls CEC_G_MODE 和 CEC_S_MODE),否則將返回 EBUSY 錯誤程式碼。
要清除現有的物理地址,請使用 CEC_PHYS_ADDR_INVALID。 介面卡將進入未配置狀態。
如果已定義邏輯地址型別(請參閱 ioctl CEC_ADAP_S_LOG_ADDRS),則此 ioctl 將阻塞,直到聲明瞭所有請求的邏輯地址。 如果檔案描述符處於非阻塞模式,則它不會等待宣告邏輯地址,而是直接返回 0。
當物理地址更改時,將傳送 CEC_EVENT_STATE_CHANGE 事件。
物理地址是一個 16 位數字,其中每 4 位代表物理地址 a.b.c.d 的一位數字,其中最高有效 4 位代表 “a”。 CEC 根裝置(通常是電視)的地址為 0.0.0.0。 連線到電視輸入的每個裝置的地址均為 a.0.0.0(其中 “a” ≥ 1),依次連線到這些裝置的裝置的地址為 a.b.0.0 等。 因此,支援最多 5 個裝置的拓撲。 裝置應使用的物理地址儲存在接收器的 EDID 中。
例如,電視每個 HDMI 輸入的 EDID 都將具有 a.0.0.0 形式的不同物理地址,源將讀取並用作其物理地址。
2.7.5. 返回值¶
成功時返回 0,出錯時返回 -1,並適當設定 errno 變數。 通用錯誤程式碼在 通用錯誤程式碼 章節中描述。
ioctl CEC_ADAP_S_PHYS_ADDR 可以返回以下錯誤程式碼
- ENOTTY
未設定
CEC_CAP_PHYS_ADDR功能,因此不支援此 ioctl。- EBUSY
另一個檔案控制代碼處於獨佔跟隨者或發起者模式,或者檔案控制代碼處於模式
CEC_MODE_NO_INITIATOR。- EINVAL
物理地址格式不正確。