用于计算fnctl.ioctl的opt参数的函数
项目描述
Python化的linux asm-generic/ioctl.h .
这样您可以复制驱动程序的代码来计算 fcntl.ioctl 的 opt 参数。
例如,从以下 IOCTL 声明(来自 input.h)开始
#include <sys/ioctl.h>
#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
您可以编写以下内容
from ioctl_opt import IOC, IOC_READ
EVIOCGNAME = lambda length: IOC(IOC_READ, ord('E'), 0x06, length)
差异很小,都是来自Python语言或编码风格
从 ioctl_opt 中使用的宏/常量不能以下划线开头
定义的宏变为可调用的(这里是一个lambda,也可以是函数)
IOC 的 nr 参数必须是一个整数,所以C的单引号字符变为 ord 调用
避免覆盖内置的 len 函数
长度参数是一个对象(通常在 fcntl.ioctl() 调用中作为I/O缓冲区使用),其大小包含在生成的ioctl opt 值中。 IOC() 将计算对象的大小。支持的对象类型包括
任何 ctypes 类型或实例
memoryview
bytearray
struct.Struct
array.array
您可能还想编写一个Python函数来方便地访问该ioctl
import ctypes
import fcntl
def getDeviceName(fd, length=1024):
name = (ctypes.c_char * length)()
actual_length = fcntl.ioctl(fd, EVIOCGNAME(length), name, True)
if actual_length < 0:
raise OSError(-actual_length)
if name[actual_length - 1] == b'\x00':
actual_length -= 1
return name[:actual_length]
更高级的示例,定义 hidraw ioctl,需要结构体(有关结构体定义的更多信息,请查看您 Python 版本的 ctype 文档)
import ctypes
from ioctl_opt import IOR, IOC, IOC_READ, IOC_WRITE
# hid.h
HID_MAX_DESCRIPTOR_SIZE = 4096
# hidraw.h
class hidraw_report_descriptor(ctypes.Structure):
_fields_ = [
('size', ctypes.c_uint),
('value', ctypes.c_ubyte * HID_MAX_DESCRIPTOR_SIZE),
]
class hidraw_devinfo(ctypes.Structure):
_fields_ = [
('bustype', ctypes.c_uint),
('vendor', ctypes.c_short),
('product', ctypes.c_short),
]
HIDIOCGRDESCSIZE = IOR(ord('H'), 0x01, ctypes.c_int)
HIDIOCGRDESC = IOR(ord('H'), 0x02, hidraw_report_descriptor)
HIDIOCGRAWINFO = IOR(ord('H'), 0x03, hidraw_devinfo)
HIDIOCGRAWNAME = lambda length: IOC(IOC_READ, ord('H'), 0x04, length)
HIDIOCGRAWPHYS = lambda length: IOC(IOC_READ, ord('H'), 0x05, length)
HIDIOCSFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x06, length)
HIDIOCGFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x07, length)
项目详情
关闭
ioctl-opt-1.3.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 5ed4f9a80d2e02e152a43d3648d7ed8821a0aac5ea88ecc5fcc14460ff7cf2f9 |
|
MD5 | 0a8991b5f58ff91bd55916eb143a65af |
|
BLAKE2b-256 | 33584e7c0921c0e92dd18928043ce167952d6201206703ff31c44e3477523362 |