- Google Summer of Code project: Sub-pixel anti-aliasing
- Google Summer of Code Project: Alternate System Timers
- Anthy Ported to Haiku, Binary Available on Bebits
- Premonitions of a rising sun
- GSoc Swap File Project
- Google Summer of Code Project : Writing a CIFS client
- Google Summer of Code: Zeroconf!
- Git for Haiku (#1)
- A weekend in SF, for LugRadio Live USA 2008
- Haiku Websites Stats and Other Trivia
emitrax's blog
Impression about my GSoC with HAIKU and USB isochronous support status
During this summer I had the chance to improve myself, and work on the USB isochronous support of HAIKU. I wrote some code for every layer of the HAIKU USB stack: USBKit library, usb_raw driver, usb bus manager and most of all the uhci driver. I also spent/waisted some weeks with the usb_webcam media addon, but sadly with not success. Anyway here is what I did.
UHCI driver: Basically I added all the necessary code to handle isochronous transfer in both direction (in and out).
Adding isochronous support to USBKit and usb_raw
Just to keep those of you interested updated, after discussing it with both my mentor and Michael Lotz, and after a very quick chat with Francois Revol, I am going to add isochronous support to both the USBKit and usb_raw driver. Meanwhile Francois, if time is on his side, should add isochronous support to his user space quickcam driver (see src/add-ons/media/media-add-ons/usb_webcam/). This way I can test my previous patches and perhaps everyone can start using his logitech quickcam with Haiku by using codycam. I don't know though for sure, what product id are supported.
UHCI isochronous support added
For those of you who are not following the haiku-commit mailing list, I've added the isochronous support to the UHCI driver. I'm working on a quickcam driver to test the code, but if someone of you out there, already have some very simply driver, that needs isochronous support, please contact me and help me with the testing.
The sooner I'm done with the testing, the sooner I'll move on to the OHCI driver. ;-)
UHCI isochronous support half done
Actually is more than half. This quick post is just to inform you that I wrote the part that schedule an isochronous request in the UHCI driver. I've already sent the patch to Michael for his review. The only part that is missing is the code that remove the request once it has been processed or canceled, which is not as trivial as I thought.
Coding Style
As many of you know, I've started working even before the SoC started officially. I've already sent two patches to both my mentor (Oliver R. Dorantes) and Michael Lotz for review. One of them has already been commited by mmu_man (thanks). The second one is under review. With this latest one, the usb stack manager should be complete, as the QueueIsochronous method has been implemented, along with the CalculateBandwidth. My next move is to implement the UHCI isochronous method. Once I've done that, testing can be made. As for now, there seem to be a lack of drivers with which I can test the code. Oliver has offered himself to write some simple bluetooth driver just to test the code. Isochronous UHCI Tester are obviously welcome.
UHCI Driver
After reading the main part of the USB specs, I moved on to the UHCI driver specs this week-end. I can now say, that implementing the isochronous part to the UHCI driver is a lot easier than I thought, and I guess Micheal can confirm. While reading the UHCI specs I followed Micheal's code, and I have some questions about it, but I'll write him an email for that. By the way, is R1 intended only for x86?
Keep browsing
I've been reading some more code and I'm getting more confident with it.
Basically data transfer is done with memcpy.
In the ehci controller, registers are mapped every time a controller is found. This is done in the controller constructor.
As the ehci specs says:
Register Space. Implementation-specific parameters and capabilities, plus operational control and
status registers. This space, normally referred to as I/O space, must be implemented as memory-mapped
I/O space.
So...
EHCI::EHCI(pci_info *info, Stack *stack)
...
// map the registers
fRegisterArea = map_physical_memory("EHCI memory mapped registers",
(void *)physicalAddress, mapSize, B_ANY_KERNEL_BLOCK_ADDRESS, 




