[Nexus 7 Android Development] trevd:
Hi Folks

[UPDATE]This is not the only way of getting Dongle's working on the N7, If widgets are your thing and you don't feel confident working with system files etc then you may be better served using the ppp widget form draisberghof.de, these are the folks who piratically wrote the book on getting dongles working on linux and by extension android and members have reported success using it. See this thread [Nexus7 UMTS-Stick extern working] in the general section for the initial find.

[UPDATE]This mod has seen success on ZTE Dongles ( Thanks To NexusPhreak ) See the supported devices list in the second post for a list of the latest tested devices

[UPDATE]It turns out this mod is good for CDMA Dongles as well as GSM - It needs a slight tweak. See this post [ Post #76 ] for details ( Thanks to mailbinoy )[UPDATE]

IMPORTANT: THIS IS A WIP AND NOT READY FOR PRIME TIME - IF YOU HAVE NEVER USED FASTBOOT, ADB, DON'T UNDERSTAND THE FIRST THING ABOUT NETWORKING OR HAVE NEVER SEEN A BASH PROMPT THEN THIS IS PROBABLY NOT FOR YOU

TROUBLESHOOTING: IF YOU ARE HAVING PROBLEMS PLEASE READ THE TROUBLESHOOTING SECTION IN THE SECOND POST - THE MORE INFORMATION YOU CAN PROVIDE THE BETTER AS THIS HELPS GET TO THE ROOT OF THE PROBLEM - THIS INCLUDES MODEL NUMBER OF THE DONGLE, LOGCAT LOGS AND DMESG OUTPUT.

DOUBLY IMPORTANT: PLEASE READ THE FIRST AND SECOND POST TO GET AN UNDERSTANDING OF WHAT WORK HAS BEEN DONE AND HOW THIS FUNCTIONALITY IS IMPLEMENTED

Okay I've seen a lot a thread asking whether using 3G Dongles ( Huawei in particular ) is possible with the nexus 7........ The Answer........ "Of course it is!!!11!! it's Android/Linux Kernel, If we can dream it we can code it! " :D

I've been working on getting the full connectivity going but so far I've managed to bring up a raw ppp connection which is good for all things google (play, web browsing, gmail ) as the google apps still aren't playing fair with the connectivity manager and they just scoot around that and use web sockets instead!

Normally to enable this functionality we need to compile the usb_wwan.ko and option.ko as kernel module, much to my surprise google/asus have built these in already so we can just usb_modeswitch into modem mode and init our ppp connection. Winner! :good:

STAGE 1 PPP Connections

My test modems where Huawei E173s-1 and E1752Cu and the build I used is my own AOSP 4.1.1 with a kernel version of 3.1.10-g52027f9

Steps to 3G Fun

1. Do a full back up

2. Flash this boot.img through fastboot

3. Download This file ( nexus7-3g.7z ) See post 2 for link

4. unzip the file and adb push to correct directories

5. Turn off Wifi

6. Plug in Dongle

7. Restart

8. In Terminal Emulator of similar run

su
/system/etc/init_pppd_gprs

If all has worked then your dongle should now be connected!

Detailed Explanation ( Or Why The Hell Am I Doing This? ):

Why The New Boot.img?

The boot image adds service called hotplugd and service called switch_ms_to_3g which handles the usb_modeswitching

The code for hotplugd is here ( github ). if you don't want to flash the new boot image you can always run usb_modeswitch manually pointing to the config file and specifying your vendor id and product id if you do not wish to run hotplugd

Why turn Wifi Off?

We turn wifi off first because otherwise the ppp connection doesn't get assigned properly if wifi is turned off after the event.

Why The Restart?

On My USB OTG cable at least it doesn't seem to get power if I plug it in after power up YMMV.

STAGE 2 - FULL CONNECTIVITY

Obviously the Stage 1 is good. But It's not Great and we can do better. Using a similiar Wifi Only Device as my frame of reference, ( the Motorola Xoom Wifi ) to bring full connectivity ( i.e Mobile Networks Option in the settings and The Signal Icon in the Menu Bar) to the device required modification of the framework-res to allow mobile networks, you can either modify the existing one on the device or if building from source you can modify the config.xml found in the device overlay in the aosp ( device/asus/grouper/overlay/frameworks/base/core/res/res/values/config.xml )

something along the lines of

<resources>
<string-array translatable="false" name="networkAttributes">
<item>"wifi,1,1,0,-1,true"</item>
<item>"mobile,0,0,1,-1,true"</item>
<item>"mobile_mms,2,0,2,60000,true"</item>
<item>"mobile_supl,3,0,2,60000,true"</item>
<item>"mobile_dun,4,0,5,60000,true"</item>
<item>"mobile_hipri,5,0,3,60000,true"</item>
<item>"bluetooth,7,7,0,-1,true"</item>
<item>"ethernet,9,9,9,-1,true"</item>
<item>"mobile_fota,10,0,2,60000,true"</item>
<item>"mobile_ims,11,0,2,-1,true"</item>
<item>"mobile_cbs,12,0,2,60000,true"</item>
<item>"wifi_p2p,13,1,0,-1,true"</item>
</string-array>
<string-array translatable="false" name="radioAttributes">
<item>"9,1"</item>
<item>"1,1"</item>
<item>"0,1"</item>
<item>"7,1"</item>
</string-array>
</resources>

NOTE: I've not really took the time to fully understand these settings and I've basically Kang'd them from another overlay.

As such they maybe suboptimal. Any further tweaks Improvements or general insight is more than welcome.

This seems to build okay and gives me the above mentioned features,I also set the build.prop default network to

GSM:

ro.telephony.default_network=3

CDMA:

ro.telephony.default_network=4

NOTE: Full CDMA Support require more than just this. There are a number of other build properties which affected and I'm currently working out which are the best ones to use.

and added the following files

/system/bin/rild
/system/lib/libhuaweigeneric-ril.so
/system/etc/permissions/android.hardware.telephony.gsm.xml
/system/etc/permissions/android.hardware.telephony.cdma.xml

I would expect this work and give me full connectivity on the device however it seems to "bork" when trying to load the vendor specific ril :confused:, I suspect I may be missing a permission or something similar

PROBLEMS - TROUBLE SHOOTING

If you're having problems, first I would Install busybox which will give you lsusb, this will tell you if your modem is actually recognized.

You can also run netcfg which will tell you if the network interface name ppp1 has been created and is up, then grab dmesg and a logcat, so something like this on adb will give you a good idea of what's going on.

adb shell netcfg
adb shell lsusb
adb shell dmesg
adb logcat -b main -b system -b events -b radio

* Note if you are running logcat through terminal emulator please run it with superuser permissions

su -c "logcat -b main -b system -b events -b radio"

Happy Hacking People and Good Luck!

References:

DerArtem Original Work with Huawei Dongles on the Toshiba Folio 100

usb_modeswitch official website

3g-modem.wetpaint.com A great source of information regarding 3G Dongles

Android Device Porting Walkthrough - Android Builder Summit 2012 ( An excellent presentation on device porting )