6.5.2. LIRC write()

6.5.2.1. 名称

lirc-write - 写入 LIRC 设备

6.5.2.2. 概要

#include <unistd.h>
ssize_t write(int fd, void *buf, size_t count)

6.5.2.3. 参数

fd

open() 返回的文件描述符。

buf

带有要写入的数据的缓冲区

count

缓冲区中的字节数

6.5.2.4. 描述

write()buf 开始的缓冲区中,最多向文件描述符 fd 引用的设备写入 count 个字节。

数据的确切格式取决于驱动程序所处的模式,使用 ioctl LIRC_GET_FEATURES 获取支持的模式,并使用 ioctls LIRC_GET_SEND_MODE 和 LIRC_SET_SEND_MODE 设置模式。

当处于 LIRC_MODE_PULSE 模式时,写入字符设备的数据是整数值的脉冲/间隔序列。脉冲和间隔仅通过它们的位置隐式标记。数据必须以脉冲开始和结束,因此,数据必须始终包含奇数个样本。write 函数会阻塞,直到硬件传输数据。如果提供的数据超过硬件可以发送的数据,则驱动程序返回 EINVAL

当处于 LIRC_MODE_SCANCODE 模式时,必须一次向字符设备写入一个 struct lirc_scancode,否则返回 EINVAL。在 scancode 成员中设置所需的扫描码,并在 rc_proto:成员中设置 IR 协议。所有其他成员必须设置为 0,否则返回 EINVAL。如果协议没有协议编码器,或者扫描码对于指定的协议无效,则返回 EINVAL。write 函数会阻塞,直到硬件传输扫描码。

6.5.2.5. 返回值

成功时,返回写入的字节数。如果此数字小于请求的字节数,或者一个帧所需的数据量,则不是错误。如果发生错误,则返回 -1,并且会适当地设置 errno 变量。通用错误代码在 通用错误代码 章节中描述。