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
指向结构体
cec_log_addrs
的指针。
2.6.4. 描述¶
要查询当前 CEC 逻辑地址,应用程序使用指向结构体 cec_log_addrs
的指针调用 ioctl CEC_ADAP_G_LOG_ADDRS,驱动程序会将逻辑地址存储在该结构体中。
要设置新的逻辑地址,应用程序需要填写结构体 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
。
-
类型 cec_log_addrs¶
__u8 |
|
已声明的实际逻辑地址。这由驱动程序设置。如果没有逻辑地址可以被声明,则将其设置为 |
__u16 |
|
此适配器已声明的所有逻辑地址的位掩码。如果此适配器未注册,则 |
__u8 |
|
此适配器应使用的 CEC 版本。请参阅 CEC 版本。用于实现 |
__u8 |
|
要设置的逻辑地址数量。必须 ≤ |
__u32 |
|
供应商 ID 是一个 24 位数字,用于标识特定的供应商或实体。可以根据此 ID 定义特定于供应商的命令。如果您不想要供应商 ID,请将其设置为 |
__u32 |
|
标志。有关可用标志的列表,请参阅 结构体 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 设备(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
cec_log_addrs
结构的内容无效。