Aygıt PyUSB'de Kullanılamıyor
PyUSB ile biraz uğraşmak , kullandığım bir WebUSB kitaplığının neden cihazımı bulamadığına dair bazı bilgiler sunup sunmadığını görmek için. Ben yüklü Homebrew aracılığıyla Mac libusb1 ile brew install libusb.
Ran lsusb -vvcihaz bilgilerini almak için. Ayrıca PyUSB için birkaç ortam değişkeni ayarlayın:
export PYUSB_LOG_FILENAME=pysubdebug.log ve export PYUSB_DEBUG=debug
import usb
VENDOR_ID = 0x0483
PRODUCT_ID = 0x5740
DATA_SIZE = 1
device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
>>> device
<DEVICE ID 0483:5740 on Bus 020 Address 014>
>>> device.is_kernel_driver_active(0)
False
>>> device.set_configuration()
Traceback (abridged)
usb.core.USBError: [Errno 19] No such device (it may have been disconnected)
>>> cfg = device.get_active_configuration()
Traceback (abridged)
usb.core.USBError: [Errno None] Configuration not set
Günlük dosyasından python (bir venv'de bulunan) şu konumda bulunan bir dosyayı kullanıyor gibi görünüyor /usr/local/lib/:
2020-10-27 12:20:41,706 DEBUG:usb.backend.libusb1:_LibUSB.__init__(<CDLL '/usr/local/lib/libusb-1.0.dylib', handle 7f8ba652c7f0 at 0x1101a5f70>)
2020-10-27 12:20:41,712 INFO:usb.core:find(): using backend "usb.backend.libusb1"
Demlenmiş dosyalar:
$brew ls libusb
/usr/local/Cellar/libusb/1.0.23/include/libusb-1.0/libusb.h
/usr/local/Cellar/libusb/1.0.23/lib/libusb-1.0.0.dylib
/usr/local/Cellar/libusb/1.0.23/lib/pkgconfig/libusb-1.0.pc
/usr/local/Cellar/libusb/1.0.23/lib/ (2 other files)
/usr/local/Cellar/libusb/1.0.23/share/libusb/ (13 files)
Ve PyUSB'nin doğru yere baktığını doğrulamak:
ls -l /usr/local/lib/libusb-1.0.dylib
lrwxr-xr-x #details# /usr/local/lib/libusb-1.0.dylib@ -> ../Cellar/libusb/1.0.23/lib/libusb-1.0.dylib
El ile bir kitaplık belirlemek için bir işlev oluşturmam gerekir mi? Sorun bu gibi görünmüyor.
Belki de kaçırdığım bir yapılandırma adımı vardır.
Yanıtlar
http://Veri aktarımı için kullanılan USB daha kırılgan ve platforma özgü görünüyor.
Örneğin, genel olarak bir web uygulamasını istediğim kadar tarayıcıya yükleyebildiğimde, bir USB cihazı yalnızca tek bir cihaz, uygulama (ve belki de işlem) tarafından "talep edilebilir".
Seri adında (ücretsiz demoyu kullanarak) cihazımın "hak iddia edildiğini" veya olmadığını doğrulayabileceğim (ticari) bir uygulama buldum .
Bazı Apple kullanıcılarıkextunload bir cihazı "hak talebini geri almak" için kullanabildiler .
OSX'te, kextstatterminal uygulaması, hangi çekirdeklerin hangi aygıtları iddia ettiği hakkında bazı ayrıntılar verdi:
kextstat | grep usb
22 8 0xffffff7f813ec000 0x8000 0x8000 com.apple.driver.usb.AppleUSBCommon (1.0) C2917767-E187-3F86-8E1D-3342A98EF53A <6 5 3 1>
53 0 0xffffff7f817cf000 0x5000 0x5000 com.apple.driver.usb.AppleUSBHostPacketFilter (1.0) 2569DC26-1911-36D4-9BE3-A727E9535BB2 <23 22 8 7 6 5 3 1>
54 1 0xffffff7f816a8000 0x56000 0x56000 com.apple.driver.usb.AppleUSBXHCI (1.2) 0E02208C-A8FC-3966-9C74-F09EF887E7E7 <23 22 12 8 7 6 5 3 1>
etc...
Ancak "kullanımda" olduklarına ve yüklenemeyeceklerine dair bir hata almaya devam ettim.
Sonunda, iyi bir USB kablosu kullanarak doğrudan takılan USB cihazıyla bilgisayarı YENİDEN BAŞLATTIM ve PyUSB eğitim belgeleri sayesinde ve bu gönderi en azından bu kodla cihazdan bazı verileri çekebildi:
import usb.core
import usb.util
# got these using the command lsusb -vv
VENDOR_ID = 0x0483
PRODUCT_ID = 0x5740
DATA_SIZE = 1
device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
device.is_kernel_driver_active(0)
device.set_configuration()
device.read(0x81, 255, 1000000)
Bak:
array('B', [51, 48, 51, 32, 86, 49, 46, 48, 50, 32, 53, 56, 51, 51, 98, 49, 49, 56, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 50, 57, 99, 97, 54, 32, 48, 48, 48, 48, 48, 48, 48, 54, 13, 10])
Anladım
Zaman readaşımını ilk denediğimde çok kısaydı ve / veya tampon çok küçüktü ve ardından sonraki readistekler geri dönüyordu usb.core.USBError: [Errno 32] Pipe error.
Bunun, python'un bir şeyler yapmaya çalışmakla meşguldü veya bağlantısının kesilmesi gerektiğinden olduğunu hayal ediyorum. Çözüm sadece exit()python ve daha yüksek parametrelerle tekrar denemekti.