Biblioteka pyUSB nie działa.

0

Nie jestem zawodowym programistą. Programowanie to moje hobby od 30 lat.
Mój system to Ubuntu 20.04
Chcę wykonać transmisję z STM32 do PC-ta. Próbuję wykorzystać bibliotekę pyUSB . W internecie w zasadzie nie ma dokumentacji, jest tylko jeden przykład z sensownym opisem który wszyscy kopiują więc z niego skorzystałem.
Skopiowałem kod i uruchomiłem pierwszych kilka poleceń.

import usb.core
import usb.util
dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001)
if dev is None:
    raise ValueError('Device not found')
dev.set_configuration()
cfg = dev.get_active_configuration()
intf = cfg[(0,0)]

Polecenie dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001) działa bo wpisując print(dev) dostaję cała listę.
Przy poleceniu
dev.set_configuration()
które nie powinno sprawiać problemów bo jest bezparametrowe pojawiła się cała lista błędów.

Traceback (most recent call last):
  File "/usr/lib/python3.8/idlelib/run.py", line 559, in runcode
    exec(code, self.locals)
  File "/home/kotek/Pulpit/USBtest/test1.py", line 9, in <module>
    dev.set_configuration()
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/core.py", line 915, in set_configuration
    self._ctx.managed_set_configuration(self, configuration)
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/core.py", line 113, in wrapper
    return f(self, *args, **kwargs)
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/core.py", line 158, in managed_set_configuration
    self.managed_open()
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/core.py", line 113, in wrapper
    return f(self, *args, **kwargs)
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/core.py", line 131, in managed_open
    self.handle = self.backend.open_device(self.dev)
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/backend/libusb1.py", line 804, in open_device
    return _DeviceHandle(dev)
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/backend/libusb1.py", line 652, in __init__
    _check(_lib.libusb_open(self.devid, byref(self.handle)))
  File "/home/kotek/.local/lib/python3.8/site-packages/usb/backend/libusb1.py", line 604, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 13] Access denied (insufficient permissions)
>>>

Ostatni błąd można wyeliminować uruchamiając skrypt poleceniem sudo ale w zamian pojawia się inna lista błędów

Traceback (most recent call last):
  File "test1.py", line 9, in <module>
    dev.set_configuration()
  File "/usr/local/lib/python3.8/dist-packages/usb/core.py", line 915, in set_configuration
    self._ctx.managed_set_configuration(self, configuration)
  File "/usr/local/lib/python3.8/dist-packages/usb/core.py", line 113, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/usb/core.py", line 159, in managed_set_configuration
    self.backend.set_configuration(self.handle, cfg.bConfigurationValue)
  File "/usr/local/lib/python3.8/dist-packages/usb/backend/libusb1.py", line 812, in set_configuration
    _check(self.lib.libusb_set_configuration(dev_handle.handle, config_value))
  File "/usr/local/lib/python3.8/dist-packages/usb/backend/libusb1.py", line 604, in _check
    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 16] Resource busy

Próbowałem podejrzeć kod biblioteki ale bez efektów. Czy jest ktoś kto może coś wyjaśnić. Z góry dziękuję.

0

@dinosaur:

usb.core.USBError: [Errno 16] Resource busy

Pozyskałeś jakieś zasoby i ich nie zwolniłeś/próbujesz pozyskać zajęte przez inne oprogramowanie zasoby?

0

Radzę najpierw podłączyć tego STMa do kompa, potem wykorzystać polecenie lsusb żeby potwierdzić idVendor=0xfffe, idProduct=0x0001 - być może próbujesz się dostać do innego urządzenia.

Inna sprawa że problem może być po stronie STMa.

Ja bym odpalił jakiś emulator klawiatury USB na STM'ie i sprawdził czy system wykryje jako klawiaturę i dodał swich na literę A i sprawdził czy to zadziała.
Jeżeli STM będzi poprawnie rozpoznany i będzie działał, to można szukać problemu w Pythonie...

0
Eldorad O. napisał(a):

@dinosaur:

usb.core.USBError: [Errno 16] Resource busy

Pozyskałeś jakieś zasoby i ich nie zwolniłeś/próbujesz pozyskać zajęte przez inne oprogramowanie zasoby?

Witam - Widziałem ten komunikat ale jedynym zasobem jaki może być brany pod uwagę jest dev jako obiekt zawierający wszystkie dane o urządzeniu. Po wyswietleniu print(dev) wyswietlaja się wszystkie dane urządzenia a więc widzę czy takie jak się spodziewałem, więc to co sugeruje użytkownik Oxmarcin też jest mało prawdopodobne. Próbowałem połączyć się z drukarką i smartfonem i polecenie dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001) oczywiście ze zmienionymi parametrami działa za każdym razem . wyswietlając dane urządzenia do którego się podłączałem. Polecenie lsusb jest mi znane także w wersji

lsusb -D /dev/bus/usb-parametry.

W każdym razie dziękuję za chęć pomocy.Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1