After a long break, I’m back to provide updates on the current status and future of this project. We have hit some more roadblocks. In December, planned development was abruptly stopped because the laptop on which I was relying for 3945 testing went dead. It has since been resurrected by capable hands (just tonight), but it’s no longer with me. Anyhow, we’ll go back to the old model of alpha-releases followed by community testing.
Current status of 3945 HAL
I have much less time to spare this year than last, so I must prioritize. In the coming few days, I’ll work on fixing bugs in the 3945 driver (slow speed, heating issues, connection failures). There will be no work on WEP or WPA. The API for writing ciphers was released some months ago as part of VoodooWireless, so if anyone wants to start writing WEP, TKIP or CCMP ciphers meanwhile, it’ll be much appreciated. I’m always available via e-mail if any help is needed. The FreeBSD net80211 architecture already implements these software ciphers. I have mostly based the cipher API on net80211, so it should be a simple port with minor changes. I will only start with WEP/WPA once the majority of bugs in 3945 HAL are fixed so that most people can use unsecured connections stably.
Snow Leopard compatibility
While I was away I got to fiddle with a Macbook with Snow Leopard and Xcode installed. Airport compatibility on Snow Leopard seems to be a distant dream. The SDK no longer includes the crucial apple80211 headers against which VoodooWireless is linked. If it is made available by Apple in the future, all is well and dandy. If not, then the community will have to develop our own GUI for managing the wireless driver. I have no experience with userland graphical tools on OS X, so I will not attempt this myself, but I’m sure there are tons of talented programmers among us who will be able to do it.
About donations
First of all, a big thank you to everyone who has donated in the past and to those who plan to donate in the future. I have updated the current donation figures (around ~€550 in total). Given that donations have dried up (likely due to lack of progress since December), a majority of the effort has been put in, and that I am less likely to have as much time to spend on Project:Camphor this year as I did in 2009, I would like to announce that the release of any drivers or source code will be independent of how much donation I receive from now on. In other words, the bounty system is no more, and we’ll move to regular open-source Voodoo-kernel-like development model. As soon as I have updated drivers, they will be offered for download/testing.
With that said, I would still like to encourage everyone to donate if/when they can. It keeps me motivated and I highly appreciate it.
Source code release
I have decided to gradually release all the source code I have written for this project so far. I began by releasing 2200BG HAL and VoodooWireless SDK. Next, 3945 HAL will be released. If compiling VoodooWireless for Snow Leopard proves difficult for me, its source code will be released so the community can pick up on it.
About 4965/5-series/6-series/1-series Intel WiFi cards
Yes, there will be drivers for all of those. I will begin writing a unified 4965/5xxx driver in the next few days. How long it takes to get it usable remains to be seen. I expect around a month at least.
Those are all the updates for now. Please keep an eye on the Facebook page for shorter blurbs.
I have released the current version of the VoodooWireless SDK (headers) and the complete source code of the Intel 2200 driver’s HAL.
Click the title of this post to access the Mercurial repository, which can be found at -
http://opensource.mercurysquad.com/
voodoo-wireless-sdkcontains the framework you will need to compile and link all HALs based on VoodooWireless. You must put the folderVoodooWireless.frameworkin your/Library/Frameworksfolder. Go through the header files to get an idea of what the API looks like. Your wireless driver will subclassVoodooWirelessDeviceclass. Also included are headers for writing WEP/WPA ciphers.voodoo-wireless-hal-intel2200is the source code for the Intel® 2200BG driver beta 7 (newer than the ones released in kext form on this website). It provides an example driver which you can use to study how VoodooWireless HALs can be written. Feel free to send me improvements as Mercurial changeset bundles.To develop or use any driver made using VoodooWireless, you need to install the binary kexts
VoodooWireless.kextandVoodooWirelessCipher.kext. Currently these can be found in the zip file for the Intel 3945 driver. Source code for these is not released at the moment.
Licensing
This is important.
The Intel 2200BG source code is currently released under Creative Commons BY-NC-SA license. Which means you can use or modify it for personal projects, and distribute it, provided that you attribute the original work to the author (i.e. me), and do not use it for any commercial purposes.
The VoodooWireless SDK is released with all rights reserved, with some relaxation. It will be relicensed under a more specific license soon, as there will be some major changes to the API in the near future. Currently you are allowed to download the SDK and use it to develop drivers for private use. You may distribute your drivers in binary or source forms. You may not use the SDK for any commercial purpose and you may not modify or redistribute the SDK.
Hope this helps with Intel 2200BG and other wireless driver development. More detailed documentation will be made available in the future.
Click the title of this post to download a fixed version of the kext.
Remove the old kext, install this kext (along with VoodooWireless.kext and VoodooWirelessCipher.kext from the previous package). Then try again.
If it doesn’t work, send me the log via email or pastebin - get the command from the previous blog post.
If Airport turns off while trying to connect, turn it back on a few times until it stays connected.
If you cannot connect at all, try to change your router’s setting
.11b-onlymode (max 11mbps).Do not email me asking for help on how to install or load the kext, or for troubleshooting dependency problems. Use Google or other forums.
If the log file is too large, cut out the part from today’s log entries - I am getting 100+ MB log files from people, and find that it contains log entries starting from 1 week ago. I don’t need to see your 7 day old log entries, I need the log entries from the time you tried the new kext.
Since people are eager to test anything that’s available, I’m uploading a pre-alpha version for the Intel 3945 driver. Click this post’s title to download.
You need to install all three kexts for it to work. Rebooting is generally not necessary.
- Leopard only (no Snow Leopard yet)
- Open networks only (no WEP, no WPA, no shared authentication)
- .11b/g networks only (no .11a)
- Transmit rate is fixed at 11Mbps
- Transmit power is not temperature calibrated
Note that I got this working only a few hours ago, and I am not the one who tested it - so there is absolutely no support. I cannot help if it doesn’t work for you. I need more time to test it better before I claim it as beta-level.
If you want to send me your logs, type this in Terminal:
cat /var/log/system.log | grep Voodoo > ~/Desktop/Intel3945Log.txt
Then right click, Compress, and send it to me by email.
If you get a kernel panic, reboot using bootflags:
keepsyms=1 debug=0x146
then try again and send me a photo of the kernel panic screen. Keep the file size under 500 KB please (no need for ultra high resolution, it should just be readable).
Hints
Those who cannot see any new Airport device after installing, make sure you are using 10.5.8 or have the latest IO80211Family kext from 10.5.8. You can get it from here.
Those who are getting kernel panics - it’s a bug in the kext during scan, which I will fix soon.
If your wireless card is not turning on, try flicking the WiFi on-off switch (it might have been off)
Stephen H worked with me to test a couple versions of the driver today and we are reporting success.

Association works. Data transfer works. Surfing works, chatting works. Almost a year’s work seems to have paid off. You can follow the development on the Facebook page as usual, there are a couple more screenshots there.
What exactly works
To be more specific about what works so far (and keep in mind we need more data points soon):
The 3945 driver can scan for all .11b/g networks, connect to open (unsecured) wireless networks, receive data from the access point at any speed and transmit data to the access point at a fixed 11Mbps rate, allowing normal internet access.
As you can see the current “held-together-by-duct-tape” version of the driver is somewhat limited. The reasons are as follows:
- I don’t have a .11a router and have never used it, so the support for .11a mode is sketchy at best, and the 3945 HAL ignores it.
- The WEP cipher is implemented but has some bugs preventing it from working properly.
- The WPA cipher does not yet exist.
- The rate is fixed at 11mbps because I have not yet implemented the dynamic rate scaling algorithm based on transmission characteristics
What’s left to do
- WEP and WPA
- Dynamic rate scaler to allow use of all transmission speeds from 1Mbps to 54Mbps (packets can be received at any rate)
- Dynamic transmit power scaling based on hardware temperature
- Bug fixing, Ad-hoc mode etc.
Out of these, I will implement the 2nd and 3rd features before uploading a beta version. WEP is next, and then WPA will probably be a whole project of its own.
Bounty pot
Since the driver finally works, it’s time to start filling the bounty pot. The time spent so far including everything is 434 hours. That comes to around €8680. I’m thinking of releasing the beta as soon as donations reach €2500, and then working through the remaining features/bug fixes until it reaches whatever the total for that time is. I hope this is a reasonable condition.
Feel free to voice your concerns in the comments.
Source code release
I am planning to release the VoodooWireless SDK, the Intel 2200BG driver HAL source code, and an empty template project for developing HALs. This will probably be some time in the next 10 days (I need to write some documentation and clean up the code a bit). The 3945 HAL will also be released in due time.
By popular request, I’ve put the Donate link back! I will appreciate your generous monetary contributions to this effort.
(Please note that although 90-95% of the driver is finished, it is still not usable because it cannot - yet - connect to networks. I’m working on it, but I think we have achieved enough progress to warrant putting the link back).
Some stats are mentioned below. Thanks everyone :)
Time logs
Time spent on each subproject so far, rounded up to the hour, are as follows -
- Intel 2200BG original driver (beta5) : 290 hr
- VoodooWireless : 67 hr
- Intel 2200BG HAL port: 11 hr
- Intel 3945 HAL: 57 hr
Total time spent: 425 hr
Time for a status update!
If you’ve been following the newsfeed, yesterday I managed to finish a majority of the driver for 3945. We’ve got scanning for networks, reception and transmission of packets working.

The biggest difficulty was to get the card to actually connect to an existing network. Unlike the 2200, for the 3945, it appears that the driver needs to send authentication and association requests via raw 802.11 management frames. Since transmission seems to be working, I played around with this idea and came up with an ad-hoc (no pun intended!) “plan” to get this working quickly. I finished implementing all the 6-7 steps, completing the goal I had in mind. Eventually this whole process is going to be moved out into VoodooWireless (similar to BSDs’ net80211), because the entire Intel wireless range from 3945 onwards seems to need this.
Now the not-so-good news: Steps up to 3rd (authentication response) are working well. The card shows up as ‘authenticated’ on my WiFi router’s information page. However, from here on, the actual association doesn’t work yet. Most of the work now is to debug steps 4 to 7 (specifically step 4 - sending the association request), so that a successful connection can be established. Everything else is in place already, so once this crucial step works, our work is mostly done.
I didn’t have enough time or energy to debug this further as I was going out of town that evening. I suspect that given the time, 2-3 days is the maximum this will take. But note that apparently iwidarwin is also stuck at this same stage. So we could well be in for a blocker. Again, I can’t say if this actually is the case as I’ve not had enough time to investigate this properly.
I don’t have easy access to the 3945 laptop anymore, but I suppose I can still procure it if needed since I’m in the same town for next 2 weeks. We’ll see how that goes; if it doesn’t work out, I still have the long list of interested beta testers, some of whom might receive test versions in the near future.
That said, next few are busy days for me so expect few, if any, updates. Have a good weekend, everyone.
Quick note to say that I have the 3945 laptop for 1 week now, and marathon coding for next 6 days has started. By next Sunday 18 Oct, the driver will either work, or it will not work.
Please use this page for up-to-minute information.
Update 18 Oct 2009:
From the facebook page I hope people are aware that 65-70% of the driver is finished. However, there are issues with system freeze on repeated power on/off, and scanning for networks currently has some bugs according to the firmware. In other words, the driver is not functional by the deadline we had.
Thankfully though, I still have access to the laptop for 4-5 days further. So I shall continue working on the driver and see how far we get. I’m hoping at least unsecured connection is working by then! As usual, more up-to-the-minute updates are posted on the FB page linked above. Cheers!
It’s about time I consolidated the previous status updates into a blog entry of its own for those not following the facebook page.
Around 20% of the HAL is coded by now. Lots of support functions were first written, followed by code for uploading firmware and microcode to the card. A particularly nasty bug with VoodooWireless was also tracked down and fixed which was causing kernel panics on scans yielding no results.
What’s left now for completion of Stage 1 (i.e. firmware stage) is to finish implementing the allocation and initialization of Rx, Tx and command rings. Once this is done, the driver will be able to turn the card on or off, load the firmware and make it ready or action. Those following the project for 2200BG driver will remember that this was a major part of the work for that driver — once this was completed and working, the rest was simply a matter of time.
Comparison between 3945 and 2200
It’s interesting to compare the two cards to see what will be different for 3945 HAL compared to the experience of writing driver for 2200.
The 3945 is actually a 100% Intel-designed wireless card (partly to avoid licensing issues), so it differs in many ways from the 2200BG. Incidentally, although the Stage 1 code for 3945 is simpler than 2200, most of the things following that are more complicated. They moved a lot of work out of the hardware and put it into software - for example, to scan for networks, in 2200 you just prepared the scan parameters and channel list and sent the scan command to the hardware. In 3945 from what I can see so far, you have to manually create the actual probe request that is sent, then switch the channels manually to scan for each.
There are also some other changes - in 2200, the firmware automatically chose the best transmit rate so the driver didn’t have to do anything other than send the packet out. In 3945, the firmware doesn’t do this and the driver has to actually configure the tx data rates itself, mostly based on the adapter’s temperature checked every minute.
So all in all, the amount of code reduced in Stage 1 (firmware stage) is basically balanced (actually exceeded by a small amount) by the increase in code in Stage 2.
ETA
Currently we have clocked about 11 hours for the 3945 HAL. My expectation is that it will take around 40 to 50 hours to finish, which leaves at least around 30 more hours of work before it can go into beta.
Testing
In other news, fassl from Voodoo Labs, who worked on much of the Chameleon GUI, has offered to help his expertise in alpha-and-beta testing of the 3945 HAL. Since I am well aware of his expertise and prefer to keep things in-house, at least until stage 1 is done, I plan to work with him exclusively for testing. Afterwards we’ll use the loooong beta testers list I’ve compiled from your emails.
That’s all the updates for now. It is likely that Stage 1 will be completed in the next couple of days. News will be provided as and when it happens. Thanks for staying with me patiently.
Misc
The donation link is gone until 3945 HAL is finished. What would you guys’ opinion be on putting Google Ads on the blog?
Many people asked me to create twitter account so they could follow up-to-the-minute progress. So I created a facebook page instead because my twitter account is for personal use :P
The FB page offers more features like photo albums and discussion in addition to twitter-like short updates. Feel free to subscribe to it. This blog will contain only more major updates.
As for progress: firmware upload is still being worked upon, should be done today.