Tricky USB device.

Maksim Yevmenkin maksim.yevmenkin at savvis.net
Fri Apr 8 16:47:54 PDT 2005


Bernd Walter wrote:
> On Fri, Apr 08, 2005 at 06:12:33PM -0400, David Gilbert wrote:
> 
>> Bernd> Has this device multiple interfaces?  e.g. one HID and
>> another Bernd> as described.  I often thought about getting ugen
>> working at Bernd> interface level too.
>> 
>> Here's the output of udesc_dump on it.  Right now, using the
>> current version of libusb (not the version from ports), I can use 
>> usb_interrupt_write(dev, 1, "MK255", 5, 0) to send data to it ---
>> and the data is sent --- at least lights on the USB hub flash.  If
>> I replace '1' with anything else, it doesn't accept it.  However,
>> it doesn't seem to have opened the relays.
> 
> Yes - you must use 1 - there is only one out-endpoint. 0x81 is for
> receiving data and endpoint 0 is the mandandory control endpoint. 
> Interrupt Endpoints are not variable in size. Both interrupt
> endpoints are 8 Bytes, so you must read and write exact 8 Bytes per
> transfer - 5 shouldn't work for USB compliant devices.

hmmm... i was always confused about bMaxPacketSize. i was thinking that 
it limits the size of one usb transaction, and it could take several usb 
transactions to transfer one data packet.

for example i have a bluetooth usb dongle that has

         Standard Endpoint Descriptor:
           bLength          7
           bDescriptorType  05
           bEndpointAddress 81 (in)
           bmAttributes     03 (Interruput)
           wMaxPacketSize   16
           bInterval        1

and i certanly can receive data packets from this endpoint that are more 
(and less) then 16 bytes in size. so, i would guess (and i might be 
wrong) that it is ok to send/receive data packets that are not equal to 
bMaxPacketSize in size.

max


More information about the freebsd-hackers mailing list