用Python编写USB设备

2024-10-02 20:33:03 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python,我尝试使用ioctl写入USB传感器。我有很多直接或通过pyusb从设备读取数据的例子,或者简单的文件写入,但是任何更复杂的东西都会消失。在

我需要使用控制传输来编写功能报告消息

命令是ioctl(devicehandle, Operation, Args)

我的问题是确定正确的操作。我认为Args应该是一个包含设备功能报告的缓冲区?加上可变标志设置为true

任何帮助或建议都会受到极大的欢迎

我应该补充一下;使用Python的原因是代码必须独立于设备。在


Tags: 文件命令功能消息报告args传感器读取数据
2条回答

根据文档,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调用 在

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。它会给出这种代码 在

^{pr2}$

相关问题 更多 >