Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Aug 2003 18:39:33 +0100
From:      Stuart Walsh <stu@ipng.org.uk>
To:        "Daan Vreeken [PA4DAN]" <Danovitsch@Vitsch.net>
Cc:        FreeBSD-Hackers@FreeBSD.org
Subject:   Re: Atmel USB Wireless devices
Message-ID:  <20030828173932.GA6368@icecold.stu>
In-Reply-To: <200308281915.44317.Danovitsch@Vitsch.net>
References:  <20030828132653.GD817@icecold.stu> <200308281915.44317.Danovitsch@Vitsch.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu Aug 28, 07:15P +0200, Daan Vreeken [PA4DAN] wrote:
> On Thursday 28 August 2003 15:26, Stuart Walsh wrote:
> > Hi,
> >
> > Firstly, it would be interesting to know if anyone else is working on
> > support for these devices before I get too far into it :)
> Yes, I have bought a bunch of them about a month ago, and at this moment I 
> have a working driver for them. At this moment it's still a "beta" which can 
> only do ad-hoc mode, but it works.

Ok, that saves some duplicated effort :)

> > I've started working on support for the above devices and have had some
> > limited success so far.  The device requires two sets of firmware to be
> > uploaded for it to work and I have managed to upload the first firmware
> > but it doesnt seem to want to boot.  Any attempts to read the device
> > after uploading firmware result in error code 13(IOERROR).  The Linux
> > driver calls usb_reset_device() after uploading the firmware but I can't
> > seem to find an equivelant in FreeBSD.
> The problem is that the device really dies after uploading the internal 
> firmware. It really needs a reset before it will communicate again.
> A usb-hub can send a reset signal down it's ports with a call to :
> usbd_reset_port(sc->atuwi_udev->myhub,sc->atuwi_udev->powersrc->portno,&T);
> 

That bit works fine.

> After that the atmel processor will start communicating again. But it's 
> usb-address will be set to 0 (as always after a reset).
> So you will have to (re)set it's address back to what it was before the reset 
> with a call to :
> usbd_set_address(sc->atuwi_udev,my_old_address);

This fails with another IOERROR

> 
> The story gets more complex since the descriptors of the device have changed 
> by the reset. (first it only had a control endpoint, now it also has 2 bulk 
> endpoints). Somehow you'll have to reload the new descriptor to please the 
> kernel.
> I have come very far in this process, but I am doing something wrong with 
> releasing the old descriptors... So at this moment I use a trick to reset the 
> device.
> After uploading the internal firmware I unplug the USB connector just far 
> enough for the data-lines to disconnect, but without disconnecting the 
> power-lines. After plugging the device back in the kernel recognizes it again 
> and uploads the external firmware.
> 

Hopefully I can look into this when I can talk to the device a bit
better :)

> I'll come back to this thread tomorrow and post some links to my code, but I 
> have to run now.

Thanks for the info.. I'll wait to see your code and see where I'm going
wrong.

Regards,

Stuart



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