[Nexus 7 Q&A, Help & Troubleshooting] bftb0:
OK, this isn't meant to be a prescription - more like a recounting of experiences to see if perhaps you get some further ideas.

When I first got my N7 in early January, I already had on my Win7 Pro x64 box the Google SDK, and (iirc) I had a variety of ADB/fastboot drivers installed for a different Android devices. (HTC and Samsung)

Fired it up, and of course no communication to the N7 with either adb or fastboot. So I updated the entire SDK and the Google driver, and now ADB & fastboot worked (with the N7's regular OS).

Rooted the device, installed a custom recovery, and - no communication with the custom recovery via ADB. WTF?

Well, it turns out that my prior Android experience had been with a custom recovery where the developer took pains to make sure that the VID/PID pair used by the custom recovery was the same as that used by the OS for ADB - so only a single "adb" driver was needed for both situations.

But that's not the case for either TWRP or CWM for the N7 - the PID is different than any values appearing in the .INF file for the Google SDK USB driver or the Asus USB drivers. That means that without modification the Google or Asus drivers simply will not work with ADB from the custom recovery.

I didn't know that at the time, so I punted and installed the XDA "Universal Naked" (and unsigned) driver - origin unknown. Ugh.

After seeing all the troubles that other people seemed to be having, and not being too happy about installing random unsigned drivers off of the internet, I decided I wanted to clean up this mess of a situation - even though it was working perfectly fine for me!

So I went and downloaded the Asus drivers (R06 2012-06-24).

Next, I hacked the .INF file "android_winusb.inf" in the Asus driver bundle.

$ diff android_winusb.inf.distro android_winusb.inf
30,41[b]d[/b]29
[color=red]< ;Google Nexus One
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
<
< ;Google Nexus S
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
<[/color]
47[b]a[/b]36
[color=green]> %CustomRecoveryAdbInterface% = USB_Install, USB\VID_18D1&PID_D001[/color]
51,62[b]d[/b]39
[color=red]< ;Google Nexus One
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
< ;Google Nexus S
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
< %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
< %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
<[/color]
68[b]a[/b]46
[color=green]> %CustomRecoveryAdbInterface% = USB_Install, USB\VID_18D1&PID_D001[/color]
130[b]a[/b]109
[color=green]> CustomRecoveryAdbInterface = "Custom Recovery ADB Interface"[/color]

The above might be a little hard to read, but basically I deleted all the lines pertaining to Nexus One (PIDs 0D02, 4E11, & 4E12) and Nexus S (PIDs 4E21, 4E22, 4E23, 4E24), and added to the Nexus 7 sections the line

%CustomRecoveryAdbInterface% = USB_Install, USB\VID_18D1&PID_D001

to both the [Google.NTx86] and [Google.NTamd64] sections of the .INF file

The deletions of the Nexus One and Nexus S were not necessary - if you want, they could be left in there. I wanted to be sure that this driver would ONLY be used with the Nexus 7 though.

Also - note the string "CustomRecoveryAdbInterface" - this needs to be defined in the [Strings] section at the end of the .INF file. It was shown above, but I'll show it again here:

CustomRecoveryAdbInterface = "Custom Recovery ADB Interface"

The reason I did it this way is because this is the string which will be displayed in the Windows device manager when this particular driver loads! If you want, you can customize this behavior - including putting your own name or other string in there - so that when the driver loads in Windows you will be 100% sure Windows is using the driver you intend!

For instance, I could have used

%MyFearsomeHackedDriver% = USB_Install, USB\VID_18D1&PID_D001

in the [Google.NTx86] and [Google.NTamd64] sections of the .INF file, and

MyFearsomeHackedDriver = "TWRP/CWM Recovery Using Asus Driver R06"

in the [Strings] section of the .INF file. Anyway, you get the idea. Change those strings to say whatever you want (but avoid using any special characters).

Important Note: I would avoid using Wordpad or any other editor which is likely to fool with line termination characters in the .INF file. - edit the .INF file using Notepad

OK, onward.

What I did next was to:

1) Disconnect my PC from the internet.

2) Disconnected N7 from the PC

3) Put "devmgr_show_nonpresent_devices=1" into the Windows Environment - system variables (search for devmgr_show_nonpresent_devices=1 if you don't know what it means. Computer->Properties->Advanced System Settings->Environment Variables)

4) Start up the device Manager, and then View->show hidden devices

#3 and #4 together will display every driver ever installed on your computer, even for devices which are not attached. (Devices which actually are attached will show up in bold, rather than washed-out colors)

Then what I did was - looking in all the usual places in the Device Manager - e.g.

"ADB Interface", or "Android Phone" or "Other Devices"

I laboriously inspected every driver's VID/PID pair one by one. For any that matched

VID_18D1&PID_4E40 - N7 bootloader

VID_18D1&PID_4E41 - ADB off + MTP on

VID_18D1&PID_4E42 - ADB on + MTP off (&REV_9999&MI_01) or MTP on (&REV_9999&MI_00)

VID_18D1&PID_4E43 - ADB off + PTP on

VID_18D1&PID_4E44 - ADB on + PTP on

VID_18D1&PID_D001 - Custom Recovery (either CWM or TWRP)

I not only removed them as the driver, but when presented with the option "do you want to also delete this driver", I clicked YES.

NOTE: You can skip over the section in the device manager labeled as "Portable Devices", as these pertain to MTP/PTP drivers. OR, depending on how you feel about them, you could also uninstall them - just don't say yes to the "do you want to also delete this driver" query. The idea is that we are trying to rid the machine of prior Asus/Google or other drivers matching the N7 - but not delete Microsoft drivers for MTP/PTP. If you uninstall them, they will get re-installed the next time the device starts up.

The reason for this is that Windows maintains a hidden database of every driver that has ever been installed on the machine, and includes with them the matching conditions that cause them to be loaded once they are installed - in particular, VID/PID USB hardware IDs. This is how Windows can re-instate an old driver as soon as you plug the hardware into the machine - even without asking you first!

After walking through all drivers that look like they might match (Note for instance you might have drivers for other Android Devices that you want to leave alone - they will show up with different VID/PID pairs however), and deleting ALL of them that match the above-listed Nexus 7 (and "Universal Naked Google VID/PID of VID_18D1&PID_D001), your machine should be expunged of old drivers.

The disconnection from the internet was to also make sure that Windows wouldn't automatically go out onto the internet and start downloading stuff. I wanted to be SURE that it only was capable of a manual driver install of my choosing.

So, I booted the N7 into the OS, made sure that ADB debugging was enabled, and plugged the N7 into my PC. I suppose it might have been even better to boot into the custom recovery and attach - if Windows installed a driver before it offered me a chance to manually install one, that would mean that I hadn't properly expunged matching drivers from the machine.

When given the option to install a driver, I pointed it at the folder with my (modded) Asus driver, and asked it to install.

Now the Asus driver is signed - and modifying the .INF file breaks the signing. So, in my case Windows 7 complained about the broken signature - but at least it let me over-ride it's complaints and install it anyway. Windows 8 is more fussy about this sort of thing I suppose - at a minimum you would need to be in Win 8 test mode when you do this; perhaps even worse.

Anyway - long story short is that it worked. No Google USB driver, no "Universal Naked Driver" - only a single hacked Asus driver for everything: fastboot and ADB (from both the OS and the custom recoveries - I've used it with both TWRP and CWM).

If you go through this procedure correctly, you should not need to re-connect to the Internet in order to install any drivers - everything you need should already be on the machine. If you want, before you re-attache to the internet, you can toggle on and off MTP/PTP, boot into the the OS and enable/disable ADB, boot into the custom recovery - and verify that all connections are satisfied with your "hacked" Asus driver plus any drivers previously on the machine (hopefully only for the MTP and PTP modes).

I don't know if this will work for you - it sounds like youve tried similar stuff (although perhaps were fuzzy about the .INF mangling). I hope this post provides you with some things to attempt.

As I said before - if you really can transmit lots of data at high speed (via MTP), that suggests that problem is not hardware, and this entire nightmare revolves around Windows drivers issues. TBH though, I would feel a whole lot better about saying this if you were using rooted stock instead of a dev ROM. In either event, you can certainly use TWRP or CWM - that would remove any question about "is it the ROM?".

Another way to validate that it is not hardware is to attempt the whole thing using Linux: boot a Linux "live" CD/DVD Distro on the PC, and cobble together a fastboot/adb executable (plus any required shared libs not present in the Linux distro) and speak to the N7 device using exactly the same PC hardware and cabling, but eliminating Windows temporarily. If it works, the problem has to be Windows.

Jeebus. To think that neither the Mac nor any Linux box need any driver at all for this crap - it really is amazing that "easy to use Windows" is the hardest platform to get this stupid sh!t working. The ADB and fastboot protocols used "on the wire" are incredibly, incredibly bare and simplistic.

anyway, I hope this helps somebody, even if the OP's troubles can't be resolved.

cheers