Atmel USB Wireless devices

Daan Vreeken [PA4DAN] Danovitsch at Vitsch.net
Thu Aug 28 10:15:40 PDT 2003


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.

> 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);

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);

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.

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

grtz,
Daan


More information about the freebsd-hackers mailing list