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
的内容无效。