[Shield Tablet Android Development] Steel01:
Current info is going here since I can't truly edit the OP or reserved posts.

Several apps work out of the box on any ROM with correct vendor blobs. The only blobs I've seen have issues are the OMX libs. The ones from Nvidias AOSP work correctly. The easy apps are:

Shield Hub (this includes gamestream and Grid)

Dabbler (full stylus support with palm detection and all that fancy stuff)

No support (yet):

Controller Mapper (I don't personally care to work on this)

Game cast (or whatever the stream to Twitch and such thing is called)

Partial Support:

Wireless Controller Pairing (see explanation below)

Console Mode (see explanation below)

Wireless Controller Pairing:

As of this last edit, all ROMs based on my CM-Shield repo have this functionality. That's virtually all custom ROMs now. Though support may be too strong a term. It kind of works, but with a few caveats.

1. Pairing can now be started from the SHIELD Controller app icon. After pairing, the app will not close, so just hit home or back to get out of it. If the light stops blinking on the controller, it's connected.

2. In Development Settings, the disable usb audio routing option needs to be enabled otherwise the tablets internal speakers will be disabled due to a lib misreading something. I have yet to find a workaround for this. Headphones plugged into the tablet work fine and headphones on the controller work, but is crackly. I expect HDMI audio will work as well, but that is not tested.

3. If the wireless band changes (connecting to a 5 GHZ band from a 2.4 GHZ one or vice versa), the controller will drop and you'll have to reboot to get it back. Not certain what can be done about that yet.

4. Occasionally, I have seen the controller fail to reconnect after both the shield device and the controller have gone to sleep. It didn't happen every time, though, and rebooting will cause an auto reconnect.

Console Mode:

The official app works as expected with one small caveat. If the hdmi cable is disconnected while in console mode, the display will rotate to landscape, but the touch orientation will still be portrait. This should be able to be fixed with another small patch once I know what the app is expecting.

Previously, I made a script that toggles console mode that might still be useful. Touch goes to portrait mode while in console mode and I haven't figured out how to rotate that yet. Other than that, it seems to work pretty well. It just isn't terribly useful until wireless controller pairing works unless you have a bluetooth controller or a keyboard/mouse combo plugged in. I'm also restarting all services and that probably isn't necessary, but I don't know how to track down which ones really need restarted. For general use, this should be put into the control app with a section watching hdmi. And when hdmi is disconnected (and isn't reconnected within 5 seconds or so), switch back to the internal display.

#!/system/bin/sh

# Toggle console mode
DEVICE=$(getprop ro.product.device);
CONSOLE_RES="1920x1080";
WM_RES="1200x1920";
if [ "${DEVICE}" == "roth" ]; then
WM_RES="1280x720";
fi;

if [ "$(getprop persist.tegra.stb.mode)" == "1" ]; then
# Switching console mode off. Window Manager uses default resolution.
setprop persist.sys.display.resolution "";
setprop persist.tegra.hdmi.primary 0;
setprop persist.tegra.hdmi.resolution Max_60;
setprop persist.tegra.stb.mode 0;
if [ "${DEVICE}" == "roth" ]; then
setprop persist.tegra.panel.rotation 90;
fi;
else
# Switching console mode on. Window Manager uses console resolution.
WM_RES=${CONSOLE_RES}
setprop persist.sys.display.resolution ${CONSOLE_RES}
setprop persist.tegra.hdmi.primary 1
setprop persist.tegra.hdmi.resolution Max;
setprop persist.tegra.stb.mode 1;
if [ "${DEVICE}" == "roth" ]; then
setprop persist.tegra.panel.rotation "";
fi;
fi;

wm size ${WM_RES};
restart;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------​

OLD POST:

Alright, info dump.

@OP: you should link or copy over the patches I made to cm to allow controller pairing. And more may be needed to make it stable.

Grid should work out of the box on any ROM that has the vendor blobs set up properly. More or less, just needs the OMX libs from nvidias aosp. Just download from the play store and go, don't bother with anything here. Same for Dabbler.

Controller mapping is pretty much entirely framework and internal ROM changes. To me, this seems pointless to replicate since Tincore does the same thing and is free. But if someone else want to implement it, go right ahead.

Console mode. I have posts for the tablet and the portable in my cm threads about this. I can set some props and reboot a couple times to make it work. It just isn't clean yet. I'm wanting to make this part of an open source control app. I'll add the info here when I have a fewxminutes at my desktop (which might be a few days...)

Controller, the one most people (and me) really care about. Yeah, I kinda made it work, but it's flaky. What really needs to happen is for someone to decompile the official pairing app and figure out the pairing sequence. Then it can be implemented in an open source app and for Linux. I haven't had time to get to that yet. Side note: I've had issues with the controller on stock when booting through multirom. If you have problems, try with a bare metal install, no kexec, nothing extra.