[英]Writing to USB device with Python using ioctl
使用Python,我試圖使用ioctl寫入USB傳感器。 我有很多直接或通過pyusb從設備讀取數據的示例,或者簡單的文件寫入操作,但是更復雜的事情就不復存在了。
我需要使用control_transfer編寫功能報告消息
該命令是ioctl(devicehandle, Operation, Args)
我遇到的問題是確定正確的操作。 我認為Args應該是包含設備功能報告的緩沖區嗎? 加上將Mutable標志設置為true
任何幫助或建議將不勝感激
我應該補充; 使用Python的原因是代碼必須與設備無關。
一個很好的例子是linuxdvb和V4l2的python綁定。 http://pypi.python.org/pypi/linuxdvb和http://pypi.python.org/pypi/v4l2,但這些並不是pythonic。 僅適用於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。 它將給出這種代碼
import ctypes
import linuxdvb
import fcntl
class operation_arg(ctypes.Structure):
_fields_ = [
('field1', ctypes.c_int),
('field2', ctypes.c_int)
]
Args = operation_args()
Args.field1 = data1;
Args.field2 = data2;
devicehandle = open('/dev/my_usb', 'rw')
# try:
fcntl.ioctl(devicehandle, operation, Args)
# exception block to check error
根據文檔,fcntl模塊中的ioctl()
是特定於Unix的,因此它將無法在Windows中使用。 似乎有一個名為DeviceIoControl()
的Windows變體,其工作原理類似。
IOCTL由設備驅動程序或操作系統聲明,因此我非常懷疑在不同的操作系統上是否存在具有相同操作ID(IOCTL號)和相同參數的IOCTL操作。
對於Linux,您可以檢查特定設備驅動程序的頭文件,或檢查某些USB核心頭文件的有效IOCTL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.