A friend warned me when I said I was going to work on a USB controller. He
said it was a huge spec and it would take me months to figure it all out.
I didn't believe him. I went off to write a host controller for the PowerPC
8xx chip. Six month passed. Turns out he was right. Still, it was fun
to learn the entire spec from top to bottom.
Who ever claimed that USB was going to make anyone's life easier was a liar.
There are days when I am amazed it works at all. While I like many things
about it it seems way too complex for the job it need to do. Maybe I'm
just too simplistic.
It's been interesting to track the Linux USB project for the last
year. They have been slowly adding devices while struggling with
controller driver issues and (mostly) software interface issues. The
first generation of USB stack was simple and worked for keyboards and
mice but didn't help more complex devices. This was scrapped for the
2.3.x/2.4.x kernels. The new API is better but has some
synchronization holes in it which are both poorly specified and poorly
understood. But, as with most things linux it will get sorted out and
the problems will get solved.
Most of the linux code is pretty good. The UHCI and OHCI drivers are,
well, while working they still have some bugs and problems.