A status update!
I now have the release candidate of the Desire ROM!
The new ROM, which is MUCH newer than the build I have been using to date is faster and smoother, the Camera app is better synchronised with the flash, the Live Wallpapers selector is in the right place, the base is ERE27 rather than ERD79 and there are numerous little fixes all over the place! Of course, it will take a bit of time for me to do a full quality port over for the next MCR, but i've done a quick hack to flash it on and see what works.
That's the good news - the bad news is BlueTooth, Camera, USB connect popup and FM Radio still don't work correctly out of the box. BUT - I have discovered why.
Basically, it all comes down to the kernel.
I have confirmed that all of the above (i'm not 100% sure on BT, i'm still investigating that one) use specific features in the Desire kernel that aren't available in the generic kernel. HTC enhancements if you will. The Desire ships with a .29 kernel which, based on what i've seen in the apps and the setup of the config file, is pretty heavily customised. Unfortunately the Desire kernel doesn't boot on the Nexus One, so we're in a bit of a sticky situation until the Desire kernel source gets released, and it's unclear when that will be (HTC's track record in that regard isn't fantastic)!
All is not lost however, as I have started looking at a new approach to fixing the problems, as seen in the camera fix for Alpha 16. I'm basically hunting down the kernel specific hooks and - where possible - i'm rerouting those to an alternate location that I can control. Taking the camera app as an example, the libcamera.so file was checking kernel specific points before deciding whether the flash should fire or not. It was doing things like checking for a phone call, checking for a wimax connection (!), and when these checks didn't work properly, it was preventing the flash firing. By editing this library and rerouting those locations, I was able to make the flash fire - much better than just dropping in the 'wrong' library which was the previous solution. Similarly, the camera application itself was dropping back to 3 Megapixels by default because it was looking for a 'sensor resolution' file produced by the kernel, which didn't exist. By determining this as the cause and reverse engineering the Camera application, I was able to make 5 Megapixels the fallback resolution instead. Problem solved.
Hopefully a similar approach can be used for the other problems (FM radio, USB connection and Bluetooth) and we'll get everything 100% - believe me i'm working on it.
If we CAN get this working fully, the work i'm doing here - if I can get it 100% - will also enable Desire users to have newer kernels and custom kernels with all the goodness that brings, without being dependent on a HTC Kernel source release.
There's lots to do - starting with the RC port to use as a base - but it's been a fun ride and it's gonna get funner. Thanks for all your support!
P