2011-11-21 27 views
6

Tôi đang cố gắng tạo một tập lệnh (trên linux) có thể bật hoặc tắt một con chuột.pyusb: không thể đặt cấu hình

Đây là mã tôi có cho đến nay:

import usb.core 
import usb.util 
import sys 
interface = 0 
dev = usb.core.find(idVendor=0x1532, idProduct=0x0017) 

def main(): 

     if dev is None: 
      print "device not found" 

     else: 
     print "device found" 
     if dev.is_kernel_driver_active(interface) is True: 
      print "but we need to detach kernel driver" 
      dev.detach_kernel_driver(interface) 
      print "claiming device" 
      usb.util.claim_interface(dev, interface) 


      print "release claimed interface" 
      usb.util.release_interface(dev, interface) 
      print "now attaching the kernel driver again" 
      dev.attach_kernel_driver(interface) 
      print "all done" 
return 0 

if __name__ == '__main__': 
    main() 

này hoạt động tốt nhưng nếu tôi cố gắng để làm một: dev.set_configuration ()

sau claim_interface (dev, giao diện)

tập lệnh trả về lỗi: usb.core.USBError: Tài nguyên bận

Tại sao nó vẫn còn bận sau khi tôi đã tách trình điều khiển hạt nhân của nó?

Trả lời

6

Bạn không chắc chắn điều này có giải quyết được hay không, nhưng quy tắc udev cho chuột của bạn có được thiết lập chính xác không? Tôi đã có một vấn đề tương tự với một thiết bị tùy chỉnh một người bạn đã làm cho tôi và tôi giải quyết bằng cách thêm một quy luật như:

SUBSYSTEM !="usb_device", ACTION !="add", GOTO="device_rules_end" 
SYSFS{idVendor} =="1532", SYSFS{idProduct} =="0017", SYMLINK+="mydevice" 
MODE="0666", OWNER="<your-username-here>", GROUP="root" 
LABEL="device_rules_end" 

trong thư mục /etc/udev/rules.d tôi.

HTH!

EDIT: Trước khi thêm quy tắc, hãy thử chạy tập lệnh của bạn với sudo. Nếu nó sẽ làm việc theo cách đó, nó gần như chắc chắn là một thiết lập quyền sẽ được cố định bởi quy tắc trên.

+0

Tôi vẫn nhận được "usb.core.USBError: Tài nguyên bận" khi chạy tài khoản này dưới dạng gốc và với quy tắc được thêm vào. Nhưng câu trả lời của bạn khiến tôi có thể chạy tập lệnh như một người dùng bình thường :) – IronMonkey

+0

@IronMonkey - Có. Đó là ý tưởng của quy tắc: gán quyền điều khiển thiết bị cho bạn! :) Nếu câu trả lời này hữu ích cho bạn đừng quên upvote và cuối cùng chấp nhận nó nếu nó giải quyết vấn đề cho tốt. – mac

4

Tôi cũng gặp sự cố này. Mã của bạn hoạt động tốt nếu bạn "set_configuration" đầu tiên và chỉ sau đó yêu cầu giao diện. Đây cũng là đơn đặt hàng được đề xuất ở đây: http://libusb.sourceforge.net/api-1.0/caveats.html

+0

Có cùng một vấn đề chính xác, điều này giải quyết được vấn đề cho tôi. Trích dẫn từ liên kết trong câu trả lời: _Phương pháp trên [đặt cấu hình, giao diện yêu cầu] hoạt động vì một khi giao diện được xác nhận, không có ứng dụng hoặc trình điều khiển nào có thể chọn cấu hình khác._ Điều này cũng giải thích tại sao lỗi được đưa ra: mã xác nhận thiết bị, do đó khóa cấu hình của nó. – jro

Các vấn đề liên quan