Portál AbcLinuxu, 7. května 2025 19:54

Dotaz: Zákaz USBHID pro 0665:5161 na RPi

22.12.2020 19:38 driver
Zákaz USBHID pro 0665:5161 na RPi
Přečteno: 465×
Odpovědět | Admin
Ahoj, mám k Raspberry PI (raspbian - debian10) připojeno zařízení, které se po USB hlásí jako 0665:5161 Cypress Semiconductor USB to Serial. Vytvoří si /dev/hidraw0. Já bych potřeboval, aby se to tvářilo jako usbserial a vytvořilo to /dev/ttyUSB0. Pohrávám si s udev rules ale zatím bez úspěchu. Měl by někdo nějakou radu jak docílit toho, abych k tomuto zařízení mohl přistupovat jako k seriové komunikaci? Jedná se o odečítání dat z daného zařízení. Protokol toho zařízení umím, ale nedaří se mi s tím zařízením přes hidraw komunikovat. Předem díky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

k3dAR avatar 22.12.2020 20:00 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Zákaz USBHID pro 0665:5161 na RPi
Odpovědět | | Sbalit | Link | Blokovat | Admin
druhej odkaz v google, resi primo i ten tvuj prevodnik ;-)
porad nemam telo, ale uz mam hlavu... nobody
22.12.2020 20:35 driver
Rozbalit Rozbalit vše Re: Zákaz USBHID pro 0665:5161 na RPi
I přes přidání /etc/udev/rules.d/50-myusb.rules s obsahem v uvedeném odkazu, a i restartu RPi pořád se tam cpe:
 |__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
22.12.2020 20:05 X
Rozbalit Rozbalit vše Re: Zákaz USBHID pro 0665:5161 na RPi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takto jednoduse to proste nefunguje..
22.12.2020 21:18 driver
Rozbalit Rozbalit vše Re: Zákaz USBHID pro 0665:5161 na RPi
V pythonu se teda moc neorientuju, ale chapu-li to správně, tak týpek využil funkcí pythonu a jeho přístupu k USB.

Takže jsem tedy splácal:
import usb.core, usb.util, usb.control
import crc16
vendorId = 0x0665
productId = 0x5161
interface = 0
dev = usb.core.find(idVendor=vendorId, idProduct=productId)
if dev.is_kernel_driver_active(interface):
    dev.detach_kernel_driver(interface)
dev.set_interface_altsetting(0,0)

def getCommand(cmd):
    cmd = cmd.encode('utf-8')
    crc = crc16.crc16xmodem(cmd).to_bytes(2,'big')
    cmd = cmd+crc
    cmd = cmd+b'\r'
    while len(cmd)<8:
        cmd = cmd+b'\0'
    return cmd

def sendCommand(cmd):
    dev.ctrl_transfer(0x21, 0x9, 0x200, 0, cmd)

def getResult(timeout=100):
    res=""
    i=0
    while '\r' not in res and i<20:
        try:
            res+="".join([chr(i) for i in dev.read(0x81, 8, timeout) if i!=0x00])
        except usb.core.USBError as e:
            if e.errno == 110:
                pass
            else:
                raise
        i+=1
    return res

sendCommand(getCommand('QPI'))
res = getResult()
print(res)
Na základě chyb, kterým jsem jakš takš porozuměl doinstaloval
apt-get install python-usb
pip install crc16
ale s tímto nevím jestli si budu vědět rady:
Traceback (most recent call last):
  File "pip.py", line 37, in <module>
    sendCommand(getCommand('QPI'))
  File "pip.py", line 13, in getCommand
    crc = crc16.crc16xmodem(cmd).to_bytes(2,'big')
AttributeError: 'int' object has no attribute 'to_bytes'
Jestli nepoužít nějaký jiný modul crc, nebo nevím. Chápu asi, že crc16.crc16xmodem(cmd) je typu int a int nemá metodu to_bytes, ale jak to udělat, aby ji měl, to netuším. Poradí někdo? Díky.
22.12.2020 21:24 driver
Rozbalit Rozbalit vše Re: Zákaz USBHID pro 0665:5161 na RPi
Tak hned jak jsem dopsal, jsem našel, že to je až od verze python3. Tyjo jede to chlapi, vypíše to odpověď ze zařízení. Diky moc. Na to že neumím v pythonu vůbec a jsem kovaný phpkář, tak jsem dobrej :D
23.12.2020 00:42 X
Rozbalit Rozbalit vše Re: Zákaz USBHID pro 0665:5161 na RPi
Imho jeste lepsi cesta a jeste tady...
23.12.2020 10:13 X
Rozbalit Rozbalit vše Re: Zákaz USBHID pro 0665:5161 na RPi
driver = blazer_usb
subdriver = cypress
protocol = mustek
vendorid = 0665
productid = 5161
port = auto

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.