garmin forerunner 305

Hans Petter Selasky hselasky at c2i.net
Tue Nov 4 09:02:09 PST 2008


On Tuesday 04 November 2008, Bruce Cran wrote:
> On Tue, 04 Nov 2008 14:57:14 +0300
>
> Boris Samorodov <bsam at ipt.ru> wrote:
> > Bruce Cran <bruce at cran.org.uk> writes:
> > > I don't know if it'll work with the usb stack that's in shipping
> > > version of FreeBSD though, and even with the new stack I had to
> > > make a change to libgpsusb.c in gpsbabel to get it working.
> >
> > Can you submit a patch? Thanks!
>
> Having just read about endpoint addresses I'm not sure who's wrong.
> gpsbabel truncates the address to the first 4 bytes using
> USB_ENDPOINT_ADDRESS_MASK from libusb20 while
> the stack clearly wants the rest, including the top 'direction' bit.  In
> fact in /sys/dev/usb2/core/usb2_device.c line 114 it masks out the
> reserved bits but still keeps the direction bit. usb2_get_pipe_by_addr
> was failing when passed address 1 because the full endpoint address is
> 0x81 (endpoint 1, direction IN).  It looks as though by changing EA_MASK
> to be just the endpoint number would fix the problem, but I'm not
> sure if that's correct.

Hi,

I'm going to fix this in libusb20. In the callbacks in libusb20 we know the 
direction and I will simply just fix it there. The applications I tested so 
far passed the correct endpoint value.

--HPS

int
usb_bulk_write(usb_dev_handle * dev, int ep, char *bytes,
    int size, int timeout)
{
        return (usb_std_io(dev, ep, bytes, size, timeout, 0));
}

int
usb_bulk_read(usb_dev_handle * dev, int ep, char *bytes,
    int size, int timeout)
{
        return (usb_std_io(dev, ep, bytes, size, timeout, 0));
}

int
usb_interrupt_write(usb_dev_handle * dev, int ep, char *bytes,
    int size, int timeout)
{
        return (usb_std_io(dev, ep, bytes, size, timeout, 1));
}

int
usb_interrupt_read(usb_dev_handle * dev, int ep, char *bytes,
    int size, int timeout)
{
        return (usb_std_io(dev, ep, bytes, size, timeout, 1));
}


More information about the freebsd-questions mailing list