GPIO_GET_LINEHANDLE_IOCTL¶
警告
此ioctl是GPIO字符设备用户空间API (v1)的一部分,已被GPIO_V2_GET_LINE_IOCTL取代。
名称¶
GPIO_GET_LINEHANDLE_IOCTL - 从内核请求一个或多个线路。
概要¶
-
GPIO_GET_LINEHANDLE_IOCTL¶
int ioctl(int chip_fd, GPIO_GET_LINEHANDLE_IOCTL, struct gpiohandle_request *request)
参数¶
chip_fd
由open()返回的GPIO字符设备的文件描述符。
request
指定要请求的线路及其配置的
handle_request
。
描述¶
从内核请求一个或多个线路。
虽然可以请求多个线路,但相同的配置适用于请求中的所有线路。
成功后,请求进程将被授予对线路值的独占访问权和对线路配置的写入权限。
线路的状态,包括输出线路的值,保证保持请求的状态,直到返回的文件描述符关闭。一旦文件描述符关闭,从用户空间的角度来看,线路的状态变得不受控制,并且可能恢复到其默认状态。
请求已使用的线路是一个错误 (EBUSY)。
关闭chip_fd
对现有线路句柄没有影响。
配置规则¶
以下配置规则适用
方向标志,GPIOHANDLE_REQUEST_INPUT
和 GPIOHANDLE_REQUEST_OUTPUT
,不能组合。如果两者都没有设置,则唯一可以设置的另一个标志是 GPIOHANDLE_REQUEST_ACTIVE_LOW
,并且线路被请求为“原样”,以便在不改变电气配置的情况下读取线路值。
驱动标志,GPIOHANDLE_REQUEST_OPEN_xxx
,要求设置 GPIOHANDLE_REQUEST_OUTPUT
。只能设置一个驱动标志。如果未设置任何驱动标志,则假定该线路为推挽。
只能设置一个偏置标志,GPIOHANDLE_REQUEST_BIAS_xxx
,并且它需要同时设置一个方向标志。如果未设置任何偏置标志,则偏置配置不会更改。
请求无效配置是一个错误 (EINVAL)。
配置支持¶
如果底层硬件和驱动程序不直接支持请求的配置,则内核应用以下方法之一
拒绝请求
在软件中模拟该功能
将该功能视为尽力而为
应用的方法取决于该功能是否可以在软件中合理地模拟,以及如果不支持该功能,对硬件和用户空间的影响。每个功能应用的方法如下
功能 |
方法 |
---|---|
偏置 |
尽力而为 |
方向 |
拒绝 |
驱动 |
模拟 |
偏置被视为尽力而为,以允许用户空间为支持内部偏置的平台应用与需要外部偏置的平台相同的配置。最坏的情况下,线路浮动,而不是按预期进行偏置。
驱动是通过在线路不应被驱动时将其切换到输入来模拟的。
在所有情况下,GPIO_GET_LINEINFO_IOCTL 报告的配置是请求的配置,而不是最终的硬件配置。用户空间无法确定该功能是否在硬件中受支持、是否被模拟或是否尽力而为。
返回值¶
成功时返回 0,并且 request.fd
包含请求的文件描述符。
出错时返回 -1,并且 errno
变量被适当地设置。常见的错误代码在GPIO 错误代码中描述。