2024-10-02 20:33:03 发布
网友
使用Python,我尝试使用ioctl写入USB传感器。我有很多直接或通过pyusb从设备读取数据的例子,或者简单的文件写入,但是任何更复杂的东西都会消失。在
我需要使用控制传输来编写功能报告消息
命令是ioctl(devicehandle, Operation, Args)
ioctl(devicehandle, Operation, Args)
我的问题是确定正确的操作。我认为Args应该是一个包含设备功能报告的缓冲区?加上可变标志设置为true
任何帮助或建议都会受到极大的欢迎
我应该补充一下;使用Python的原因是代码必须独立于设备。在
根据文档,fcntl模块中的ioctl()是特定于unix的,因此它不能在Windows中工作。似乎有一个名为DeviceIoControl()的Windows变体,其工作原理类似。在
ioctl()
DeviceIoControl()
IOCTL是由设备驱动程序或操作系统声明的,因此我非常怀疑在不同的操作系统上是否存在具有相同操作id(IOCTL编号)和相同参数的IOCTL操作。在
对于Linux,您可以检查头文件中的特定设备驱动程序,或者可能检查一些usb核心头文件中的有效ioctl。在
一个很好的例子是linuxdvb和V4l2的python绑定。http://pypi.python.org/pypi/linuxdvb和{a2}但它们不是很像Python。仅适用于Linux/Unix系统。在
您必须在ctype的帮助下将ARGS结构转换为python可以理解的内容。 Operation值与C中的值相同。在
ctype
ARGS
Operation
C
对应于C调用 在
struct operation_arg { int fields1; int fields2; } struct operation_arg Args; Args.field1 = data1; Args.field2 = data2; devicehandle = open("/dev/my_usb", O_RDWR); retval = ioctl(devicehandle, Operation, &Args); /* check retval value */
您必须在python中为struct operation_arg定义相应的Ctype。它会给出这种代码 在
struct operation_arg
根据文档,fcntl模块中的
ioctl()
是特定于unix的,因此它不能在Windows中工作。似乎有一个名为DeviceIoControl()
的Windows变体,其工作原理类似。在IOCTL是由设备驱动程序或操作系统声明的,因此我非常怀疑在不同的操作系统上是否存在具有相同操作id(IOCTL编号)和相同参数的IOCTL操作。在
对于Linux,您可以检查头文件中的特定设备驱动程序,或者可能检查一些usb核心头文件中的有效ioctl。在
一个很好的例子是linuxdvb和V4l2的python绑定。http://pypi.python.org/pypi/linuxdvb和{a2}但它们不是很像Python。仅适用于Linux/Unix系统。在
您必须在
ctype
的帮助下将ARGS
结构转换为python可以理解的内容。Operation
值与C
中的值相同。在对应于
C
调用 在您必须在python中为
^{pr2}$struct operation_arg
定义相应的Ctype。它会给出这种代码 在相关问题 更多 >
编程相关推荐