Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 08 Apr 2005 18:06:30 -0700
From:      Julian Elischer <julian@elischer.org>
To:        Maksim Yevmenkin <maksim.yevmenkin@savvis.net>
Cc:        David Gilbert <dgilbert@dclg.ca>
Subject:   Re: Tricky USB device.
Message-ID:  <42572A96.4090205@elischer.org>
In-Reply-To: <4257181F.1040904@savvis.net>
References:  <16982.46075.115518.130213@canoe.dclg.ca> <4256B5EB.9080506@savvis.net> <16982.47024.135663.645297@canoe.dclg.ca> <20050408190514.GS96690@cicely12.cicely.de> <16983.465.572693.73195@canoe.dclg.ca> <20050408233301.GW96690@cicely12.cicely.de> <4257181F.1040904@savvis.net>

next in thread | previous in thread | raw e-mail | index | archive | help


Maksim Yevmenkin wrote:

> 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.
>

the device may accept 5 bytes of data. if it's feeling charitable.
but you probably should send teh number of bytes suggested by the 
endpoint descriptor.
that number is at least guaranteed to work.  Hang on.. I'm trying to 
remember if the 8 includes the header..
if so then you probably only get 5 bytes of data space.. I need to go 
back to my USB book.

 From what I saw before, you may need to set the configuration number
 to 1 before it will do anything.
so you may need to do a setConfiguration(1)
then you should be able to read on the descriptor for endpoint 81.
it should block until there is some activity to report on the switch.
I'm guessing writing all 1s to endpoint 1 sets some leds or something.



>
> 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.


yes bMaxPacketSize is the maximum single packet that the endpoint will 
handle, however many such transactions can be used to make up
a USB request fronm the user..

>
> max
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to 
> "freebsd-hackers-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?42572A96.4090205>