[MOD/HOW-TO] (UPD: 0.4.1) USB 3G modem and RNDIS tethering for urukdroid 0.7/0.6

Search This thread

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
After experimenting for a while, I've managed to successfully use USB 3G dongle, and to connect my Archos 101IT, running uruk-droid 0.4.1, to the Internet over 3G data network. Test was made with two different 3G USB dongles - Huawei E1552 and ZTE MF190.

First of all a big thanks to $aur0n for uruk-droid, because without uruk-droid kernel with adequate configuration, this 3G support would not be possible.

Second, a big thanks to all guys behind usb_modeswitch project (http://www.draisberghof.de/usb_modeswitch/), for providing us with Linux support needed to switch our 3G USB dongles from default cd-rom/mass-storage mode to usb-serial mode needed for 3G operation.

Process of initial setup of 3G USB dongle to a 3G provider under Linux (and Android/Archos) is fairly complex, and requires a little Linux knowledge, but once it is configured right, usage is simple.

Unfortunately I don't see a way to make it simpler, because lot of parameters in various files are greatly dependant on model of 3G USB dongle you are using, and on settings of your 3G data provider.

DISCLAMER:
This is a proof-of-concept modification. Don't expect that everything will work from a first try.

Please note that I don't take responsibility for anything that might happen with your Archos device and/or your data on it.
I didn't had any problems with my A101IT using this mod with Huawei E1552 3G dongle and ZTE MF190 3G dongle, but that doesn't mean that someone else won't have them.

Also, if you make your 3G USB dongle work as modem using steps described here, I don't take any responsibility for possible large bills form you 3G data service provider.
Be sure that you have good and cheap 3G data plan with your 3G data service provider, if you are planning to use 3G data network for Internet connection on a daily basis.
Also, try to avoid using 3G data service while in roaming, because it is very expensive.

Technical explanation:

Basically USB tethering system on Archos is designed to work over PPP connection, provided by /system/bin/pppd via "Serial-over-USB link", provided by cdc-acm.ko kernel module, when supported cdc-acm class device is connected to USB host port of Archos.

Here is a brief description of USB tethering on Archos 101, modified to work with 3G USB dongles, since you probably going to need to edit some of this files in order to adjust them for your 3G USB dongle and your 3G provider:

1. Kernel support for 3G USB dongles.
This is provided by uruk-droid kernel.
One part you'll use from this support is usbserial.ko kernel module that will be loaded by /system/xbin/3Gmodem_init.sh with adequate parameters, when you start tethering.​

2. usb_modeswitch program and support files
usb_modeswitch is responsible for switching of 3G USB dongles from default cd-rom/mass-storage mode to usb-serial mode ready for 3G operation.
You'll use it via /system/xbin/3Gmodem_init.sh, when you start tethering.​

3. Archos USB tethering support which is partially in Android framework, and partially in Linux scripts called by framework.
This part of tethering support is most complex one, and in order for Android framework to be aware of data connection, we must disguise 3G data connection as a USB tethering:

  • Android framework calls modified /system/bin/tether_start_usb.sh, which calls /usr/bin/pppd binary, responsible for data connection to your 3G data provider.
  • Android framework calls modified /system/bin/tether_stop.sh, for stopping data connection to your 3G data provider.

pppd uses couple of configuration files (and additional binary /usr/xbin/chat):

  • from '/system/etc/ppp/peers' directory, pppd uses configuration file 'tether' (with definition of pppd options for peer it connects to - this may need editing for your 3G provider)
  • from '/data/' directory, pppd (via /system/xbin/chat) uses 'tether_start' file as definition of <SEND> <EXPECT> pairs of commands sent to configure modem and responses received from modem, when it connects to a peer (this may need editing for your 3G provider).
  • from '/system/etc/chatscripts/' directory, pppd (via /system/xbin/chat) uses 'tether_stop' file as definition of <SEND> <EXPECT> pairs with commands sent to modem and responses received from modem, when it disconnects from a peer.

This modification relies on modified '/system/bin/tether_start_usb.sh' and '/system/bin/tether_stop.sh', to be able to correctly initialize RNDIS connection or 3G modem, load adequate kernel modules and start connection, while trying to keep compatibility with original "Archos designed" way of USB tethering.

Configured adequatly ('enable' parameter to 'off' in '/etc/uruk.conf/3Gsupport' file), this modified '/system/bin/terher_start_usb.sh' WILL behave as original one. - not needed anymore - scripts auto-detect connection type and behave adequatly.

For a list of changes in recent versions please se post #2 of this thread.


Tutorial how to use RNDIS USB Tethering:

No configuration needed - if your phone is indeed of USB-RNDIS type - everything will be auto-detected.
Just plug your Archos to a RNDIS capable phone in tethering mode via USB cable, wait for at least 5 seconds (or more - depending on phone), and start tethering on Archos.

Expample of RNDIS tethering device is HTC Desire phone with built-in USB Tethering support enabled. Android based phones from "same generation as HTC Desire" are quite probably of same USB-RDNIS type.

NOTE: due to a technical reasons (bad driver), RNDIS tethering support works only if usb host mode driver (musb_hdrc.ko) is loaded in PIO (as opposed to default DMA) mode. When tethering is started, USB host mode driver is reloaded in PIO mode, so this might be indicated on the phone like USB disconnection and re-connection. This is "normal" behaviour, and for now there is nothing I can do about it. When tethering is stopped USB host mode driver is re-loaded again to DMA mode.


Tutorial how to initially configure 3G USB dongle for USB tethering:

NOTE: Everything written here, should be done in Terminal Emulator or ConnectBot (connected as local) under root shell (after 'su' command)!

  1. Install Terminal Emulator, or ConnectBot from Market.


  2. This step is no longer needed if you are running Uruk-Droid 0.7 or later since 3G modem/RNDIS support is integrated in it

    Get 3Gsupport-0.4.zip from attachment in this post. Extract 3Gsupport-0.4.tar.gz file from .zip file and copy it to your Archos to /sdcard. Archive contains everything needed (usb_modeswitch binary and support files, replacement tether_start_usb.sh, replacement tether_stop.sh, 3Gmodem_init.sh script, 3Gmodem_detect.sh).
    NOTE: Since /system/bin/tether_start_usb.sh and /system/bin/tether_stop.sh from 3Gsupport-0.4.tar.gz will replace original ones, please backup originals.

    The 3Gsupport-0.4.tar.gz file contains absolute paths for all files, and should be extracted to a root ('/' path in RootExplorer).

    To backup original tether_start_usb.sh and tether_stop.sh:
    Code:
    # su
    # cp /system/bin/tether_start_usb.sh /system/bin/tether_start_usb.sh.ORIGINAL
    # cp /system/bin/tether_stop.sh /system/bin/tether_stop.sh.ORIGINAL
    Assuming you have 3GSupport-0.4.tar.gz in /sdcard you should do following in Terminal Emulator or ConnectBot to extract 3Gsupport-0.4.tar.gz:
    Code:
    # su
    # cp /sdcard/3Gsupport-0.4.tar.gz /
    # cd /
    # tar -zvxf 3Gsupport-0.4.tar.gz

  3. Start the Terminal Emulator, or ConnectBot (to localhost).
    • Issue 'su' command in terminal window to gain root access.
    • Plug dongle in usb host port (full size USB on A101IT).
      NOTE: For A70IT you'll need something called "mini USB Type-A to USB female host cable adapter", and maybe manually loading of host-mode USB driver (musb_hdrc.ko) – I don’t have A70IT so I can’t test.
    • Wait couple of seconds (at least 5) and then start 3G modem detection script with '/system/xbin/3Gmodem_detect.sh' command.
    The output of the detect scripts should be pretty self-explanatory, and if your modem is supported by usb_modeswitch (in both switching and non-switching mode) you should be able to see that usb serial module is loaded and configuration file is written and support for 3G modems is started.
    Output should look like this:
    Code:
    # /system/xbin/3Gmodem_detect.sh
    Supported USB device found !!!! VendorID: 12d1 - ProductID: 1446
    New VendorID: 12d1
    New ProductID not detected in usb-modeswitch config file. Try to detect it later !
    Switching device to usbserial mode !
    
    Looking for target devices ...
     No devices in target mode or class found
    Looking for default devices ...
     Found devices in default mode, class or configuration (1)
    Accessing device 004 on bus 002 ...
    Getting the current device configuration ...
     OK, got current device configuration (1)
    Using endpoints 0x01 (out) and 0x81 (in)
    Using endpoints 0x01 (out) and 0x81 (in)
    Inquiring device details; driver will be detached ...
    Looking for active driver ...
     OK, driver found ("usb-storage")
     OK, driver "usb-storage" detached
    
    SCSI inquiry data (for identification)
    -------------------------
      Vendor String: HUAWEI
       Model String: Mass Storage
    Revision String: 2.31
    -------------------------
    
    USB description data (for identification)
    -------------------------
    Manufacturer: HUAWEI Technology
         Product: HUAWEI Mobile
      Serial No.: not provided
    -------------------------
    Setting up communication with interface 0 ...
    Using endpoint 0x01 for message sending ...
    Trying to send message 1 to endpoint 0x01 ...
     OK, message successfully sent
    Resetting response endpoint 0x81
     Error resetting endpoint: -110
    Resetting message endpoint 0x01
     Error resetting endpoint: -19
     Device is gone, skipping any further commands
    
    Checking for mode switch (max. 20 times, once per second) ...
     Searching for target devices ...
     Searching for target devices ...
    
    Found target device, now opening
     Found correct target device
    
    Mode switch succeeded. Bye.
    
    Detected ProductID of a switched device: 140c
    USB device VendorID: 12d1 ProdID: 140c. Probing serial mode
    usbserial.ko module registered and /dev/ttyUSB{X} device nodes created sucessfully.
    Writing default configuration to '/data/local.prop' file .....Done.

    !!! REBOOT your A101IT now in order for your configuration to become active !!!

    After reboot:
  4. Disconnect your 3G USB dongle, do not connect anything to USB host port and go to Settings->Wireless & Networks->Cellphone tethering.
    • If there is tethering profile already defined, delete it - Archos handles only one tethering profile definition at a time.
    • Create new USB tethering profile.
    • Your APN, username and password won't be detected automatically, so fill them manually - find adequate info from your 3G service provider (for me on Telekom Srbija: APN is ‘gprsinternet’, username is ‘mts’, and password is ‘064’ (some 3G operators don't need username and password)).
    This will create file '/data/tether_start' with adequate commands for ppp daemon to initialize 3G modem and make a connection to your 3G provider.

    NOTE for uruk-0.6: It '/data/tether_start' file is not created after wizard finishes try following in terminal emulator:
    Code:
    su
    chown 1000:1000 /data
    chmod ug+rwx /data
    then delete the tethering profile just created and re-create it again !!! Now everything should be OK.

    File should look like this:
    Code:
    TIMEOUT 5
    ECHO ON
    ABORT BUSY
    ABORT ERROR
    ABORT 'NO CARRIER'
    ABORT VOICE
    ABORT 'NO DIALTONE'
    ABORT 'NO DIAL TONE'
    ABORT 'NO ANSWER'
    ABORT DELAYED
    TIMEOUT 12
    '' ATZ
    OK AT+CGDCONT=1,"IP","[COLOR="DarkRed"]<your APN configured in tethering wizard>[/COLOR]"
    OK ATD*99#
    TIMEOUT 120
    CONNECT ''
  5. If steps 3 and 4 were OK, then you should be able to test pppd connection to the Internet.
    NOTE: This test assumes following:
    • a) that SIM/USIM card in your 3G modem doesn't require PIN code.
    • b) that your 3G modem automatically register SIM/USIM to a network in Automatic mode (auto-band, 3G preferred mode (EDGE service if no 3G available))
    If this is not a case please take a look in section "Modifying tether_start script" later, for reference how to modify '/data/tether_start' script with adequate AT commands that should be sent to modem.
    • Re-plug your 3G USB dongle.
    • Wait at least 5 sec.
    • Start the Terminal Emulator, or ConnectBot (to localhost).
    • Issue 'su' command in terminal window to gain root access.
    • Issue '/system/xbin/3Gmodem_init.sh' command
    • Issue '/system/bin/pppd /dev/ttyUSB0 460800 debug mtu 1280 mru 1280 name <username> password <password> call tether'

    If you get CONNECTED message then your dongle and /dev/ttyUSBx port is set right and everything is configured well.
    Output should look like this:
    Code:
    ATZ
    OK
    AT+CGDCONT=1,"IP","[COLOR="DarkRed"]<your APN configured in tethering wizard>[/COLOR]"
    OK
    ATD*99#
    CONNECT

    You can interrupt pppd with Ctrl+C.

    If you don't see CONNECT (or any) response from modem try with one of other ttyUSB[0-5] ports first, or refer to following section on modifying /data/tether_start script.
  6. Assuming the step 5 was success, edit '3Gmod.usbPort' option to match the number you have used in test in step 5, in '/data/local.prop' file, and REBOOT your Archos.

From now you can use 3G USB tethering just by plugging 3G USB dongle, and starting 'Setup->Wireless & Network->Cellphone Tethering->Tether'.

Modifying '/data/tether_start' script for your particular 3G modem and 3G operator:

File '/data/tether_start' is standard chatscript for unix chat program ('man chat' on Google for more info and syntax reference) used by pppd when making connection.

In default tether_start file most important line is one for setting APN: ' OK AT+CGDCONT=1,"IP","<your APN configured in tethering wizard>" ' in example above.
Second important line is one that connects your modem to your 3G data provider: 'OK ATDT*99#' - for some providers it needs to be modified to 'OK ATDT*99***1#'.

If your SIM/USIM card needs PIN in order for you to be able to use your 3G USB dongle, try to disable PIN on your card before using it in 3G USB dongle.

If you can't disable PIN for your SIM/USIM card (for example, as far as I know Tele2 cards must have PIN), you'll probably need to modify 'tether_start' script and to add adequate AT commands and expected responses, before setting APN.

A solid reference of 3G modem AT commands and manufacturer/model specific AT commands can be found these pages:

http://3g-modem.wetpaint.com/page/common+AT-commands
http://3g-modem.wetpaint.com/page/Huawei+AT-commands
http://3g-modem.wetpaint.com/page/ZTE+AT-commands and
http://3g-modem.wetpaint.com/page/Sierra+Wireless+AT-commands

Example /data/tether_start script that sends PIN 1234 and sets "auto 3G/GPRS mode" (for Huawei 3G USB dongles only !!!) looks something like this:
Code:
ABORT 'BUSY'
ABORT 'NO CARRIER'
ABORT 'VOICE'
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
ABORT 'NO ANSWER'
ABORT 'DELAYED'
REPORT CONNECT
TIMEOUT 6
'' ATQ0
OK-AT-OK ATZ
TIMEOUT 3
OK AT+CPIN=1234
OK-AT-OK ATI
OK ATZ
OK ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK AT\^SYSCFG=14,2,3fffffff,0,1
OK-AT-OK AT+CGDCONT=1,"IP","<your APN configured in tethering wizard>"
OK ATDT*99***1#
TIMEOUT 30
CONNECT ''

There is a plenty of information on the Internet on how to configure Linux ppp chatscripts for particular models of 3G USB dongles and 3G operators, so please SEARCH, READ & TRY before asking, since you'll have to try it anyway at the end :).

ISSUES:

  • First start of tethering after plugging, re-plugging 3G USB dongle or stopping tethering can (and probably will) end in "unable to connect by tethering" message.
    This happens since dongle needs to be switched to usb-serial mode, kernel modules must be loaded, and most important 3G dongle must register to 3G data network to be able to connect, and Android framework timeout before connection is established.

    Solution is to just start tethering again, and since there is no need to do a usb_modeswitch again, and kernel modules are already loaded, and dongle is registered to 3G network provider, it will connect before timeout.​
  • When Archos wakes-up after sleep, some dongles (ZTE-MF190 is one of them), wake-up in default mode (non usb-serial mode), so tethering needs to be stopped and started manually.

    One possible workaround is to enable "Prevent device from going to sleep" in 'Setup->Wireless & Network->Cellphone Tethering', but with uruk-droid 0.4.1 based on Archos 2.0.x firmware this option didn't work as expected - device still goes to sleep, even if tethering is connected.
    With 2.1.x based uruk-droid (0.6 is first) it seems that this option works.​

QUESTIONS & ANSWERS:

Q: Can I use my phone and 3G modem whithout reconfiguring tethering every time I switch them ?
A: Please take a look in this post


FUTURE PLANS:

  • Integration of real USB-cable tethering with Android based devices that require Archos to tether using usbnet.ko module via "Ethernet-over-USB" type of link. - DONE
 

Attachments

  • supported_dongles.txt
    1.8 KB · Views: 1,961
  • 3Gsupport-0.1.zip
    240.6 KB · Views: 816
  • 3Gsupport-0.2.zip
    239.9 KB · Views: 513
  • 3Gsupport-0.3.zip
    240.6 KB · Views: 596
  • 3Gsupport-0.4.zip
    242.3 KB · Views: 3,287
Last edited:

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
Change log:

  • 0.4.1 - Integrated in UrukDroid-0.7 with minor script errors corrected, tutorial updated
  • 0.4 - RNDIS (Ethernet-over-USB) tethering merged with 3G modem, and Archos default USB tethering support this version needs UrukDroid-0.6 at least
    • changed scripts, in order to acheive auto-detection of tethering type (RNDIS, 3G modem or Archos default Serial-Over-USB)
    • changed location of saved 3G modem configuration data to /data/local.prop, so the configuration data is avalible upon reboot as Android properties (/data/local.prop file is NOT overwritten by 3Gmodem_detect.sh, so don't worry ;-) )
    • elimninated need for /etc/uruk.d service, because of previous changes
  • 0.3 - lot of changes in scripts, in order to make 3Gdongle detection and module load configuration simplier.
    • /system/xbin/3Gmodem_detect.sh introduced for purpose above
    • tutorial changed to follow 3Gmodem_detect.sh usage
    • compatible with 3G USB dongles that don't need switching (like Huawei E176)
    • wokring on uruk-0.6RC2
  • 0.2 - changes to '/system/etc/uruk.d/3Gsupport' script to conform to urukdriod 0.5 standard
    • '/system/etc/uruk.d/3Gsupport' script now supports (beside start and stop): status, UIstatus and config parameters as well as second parameter force
    • no other functional changes
    • working on urukdroid 0.5 and 0.4.1
  • 0.1 - Initial release tested on urukdroid 0.4.1 and 0.5
 
Last edited:
  • Like
Reactions: phoenixstudio

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
Here is the list of 3G modems and providers confirmed to work and optional notes if '/data/tether_start' needed to be altered:

1. Huawei E1552 on MTS Serbia (APN: gprsinternet, U: mts, P: 064) and VIP Serbia (APN: vipmobile, U: vipmobile, P: vipmobile)
2. Huawei E1550 on MTS Serbia (APN: gprsinternet, U: mts, P: 064) and VIP Serbia (APN: vipmobile, U: vipmobile, P: vipmobile), and on Starhub (Singapore) (APN as shinternet no U: and no P:)
3. ZTE MF190 on MTS Serbia (APN: gprsinternet, U: mts, P: 064) and VIP Serbia (APN: vipmobile, U: vipmobile, P: vipmobile)
4. Huawei E173 on MTS Serbia (APN: gprsinternet, U: mts, P: 064) and VIP Serbia (APN: vipmobile, U: vipmobile, P: vipmobile)
5. Huawei E176 on unknown 3G provider/params
6. Huawei E1691 on Wind Mobile in Canada 3G provider and unknown params, but with configuration file change described in this post
7. Huawei E153 on unknow 3G provider/params

Here is the list of phones with RNDIS USB tethering, confirmed to work:

1. HTC Desire (stock 2.29.405.2 with built-in USB Tethering support enabled)
2. US HTC HD2 running a Desire-based NANDroid ROM on T-mobile (APN: epc.tmobile.com, no U: , no P: )
 
Last edited:

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
Thanks for this very well done explanation ! I'll try on my 70 :)

Note that you'll probably need microUSB-Type A to USB host cable adapter in order to use 3G USB modem dongle.

I really don't know does Archos 70IT automaticaly unload's clinet mode usb driver, and loads host-mode driver when you plug in microUSB host adapter cable (it should do it - that is one of reasons why host cable has one pin more), but if it doesn't you'll have to load musb_hdrc.ko module in manually.

I think that it must be loaded with parameter mode_default set to 1 in order to activate host mode ('insmod /lib/modules/musb_hdrc.ko mode_default=1').
 

solune

Senior Member
Mar 8, 2008
132
19
Note that you'll probably need microUSB-Type A to USB host cable adapter in order to use 3G USB modem dongle.

I really don't know does Archos 70IT automaticaly unload's clinet mode usb driver, and loads host-mode driver when you plug in microUSB host adapter cable (it should do it - that is one of reasons why host cable has one pin more), but if it doesn't you'll have to load musb_hdrc.ko module in manually.

I think that it must be loaded with parameter mode_default set to 1 in order to activate host mode ('insmod /lib/modules/musb_hdrc.ko mode_default=1').

Yes I already have microUSB-Type A to USB Host cable adapter, and it works for my USB drive for example. I've already connected my 3G USB modem dongle just for see what's appen, and light blink on it, so I have hope to do something with your very well explained guide :)

I'll make feed-back here if host-mode driver loads or if I need to mount it manually.
 

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
great it is a good news
but no simply

I know it is not simple but it is try-error only until your connection is succesfull for a first time (while you fine tune params for your 3G modem, and for your 3G operator). After that is just metter of sticking 3G USB dongle, waiting 5 seconds, and clicking Tethering on Power Widget (twice ;) )

how the merge on UrukDroid

I'll hopefully upgrade to uruk 0.5 today, and adapt scripts (mainly uruk-config ones), to 0.5 version of uruk-droid during the weekend, and post those scripts here.

After that my plan is to upgrade to a uruk-0.6RCx and play with USB cable tethering with Android phones that tether via "Ethernet-over-USB" support (usbnet.ko module).

Hopefully, I will know soon enough if that is operational, and after that I'll talk to $aur0n about integration.
 
Last edited:

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
Yes I already have microUSB-Type A to USB Host cable adapter, and it works for my USB drive for example. ......

If it works with USB drive, that should be proof enough that Archos 70IT is switching to USB host mode just by plugging microUSB host adapter. Good news, more devices supported....

I'll make feed-back here if host-mode driver loads or if I need to mount it manually.

Please do, thank you very much.
 
  • Like
Reactions: Kitzz
i'm up to step 6 . it was pretty clear up to then. a) i dont have a 3Gsupport.conf file in there b) i guess the bit in the [code ] box isnt what you need to do to edit it c) presuming you mean just open the 3Gsupport file and edit that, am i just replacing all instances of vendor and product or also the VendorID /ProductID bits too?
 

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
i'm up to step 6 . it was pretty clear up to then. a) i dont have a 3Gsupport.conf file in there b) i guess the bit in the [code ] box isnt what you need to do to edit it c) presuming you mean just open the 3Gsupport file and edit that, am i just replacing all instances of vendor and product or also the VendorID /ProductID bits too?

Yup I've made a mess in that part of tutorial (wrong path/name of config file, not clear enough explanation):

You have to edit file '/system/etc/uruk.conf/3Gsupport' and it should look something like:

service_enabled=1
enable=on
vendor=12d1
product=1446
port=0

I've corrected that part of initial post. Thanks.
 
Last edited:

cajl

Senior Member
May 5, 2008
839
165
near PARIS (94)
jbmm.cajl.info
Pictures of this "exploit"

1.Connecting.jpg

5.Speedtestnet-download.jpg
 

Meen

New member
Aug 25, 2008
4
0
I've good news for Huawei E176 user, The modem doesn't require to switch mode.
So we just only need to edit ther_usb start and stop .sh
and here is the code for E176

/system/bin/tether_start_usb.sh
Code:
#!/bin/sh

# $1 is the user (not a mandatory argument)
# $2 is the password (not a mandatory argument)

setprop "3Gmod.enable" "on"
setprop "3Gmod.defVendorID" "12d1"
setprop "3Gmod.defProductID" "1003"
setprop "3Gmod.usbPort" "0"

rmmod usbserial
sleep 1

insmod /lib/modules/usbserial.ko vendor=0x12d1 product=0x1003
sleep 1

SUPPORT3G=`getprop "3Gmod.enable"`
VENDOR3G=`getprop "3Gmod.defVendorID"`
PRODUCT3G=`getprop "3Gmod.defProductID"`
PORT3G=`getprop "3Gmod.usbPort"`

if [ ${SUPPORT3G} != on ]; then

   insmod /lib/modules/musb_hdrc.ko mode_default=1
   insmod /lib/modules/cdc-acm.ko

   if [ $# -eq 0 ]
   then
       /system/bin/pppd /dev/ttyACM0 460800 call tether
   else
       /system/bin/pppd /dev/ttyACM0 460800 name $1 password $2 debug call tether
   fi
else
   if [ $# -eq 0 ]; then
       /system/bin/pppd /dev/ttyUSB${PORT3G} 921600 call tether
   else
       /system/bin/pppd /dev/ttyUSB${PORT3G} 921600 name $1 password $2 call tether
   fi
fi

/system/bin/tether_stop.sh
Code:
#!/bin/sh

SUPPORT3G=`getprop "3Gmod.enable"`

if [ $1 = "DUN" ]
then
    /system/xbin/dund --killall
elif  [ $1 = "PAN" ]
then
    /system/bin/pand --killall
else
    if [ ${SUPPORT3G} != on ]; then
	kill -9 $(pidof pppd)
	/system/bin/rmmod cdc_acm
	/system/bin/rmmod musb_hdrc
    else
	killall -15 pppd
    fi
fi
 

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
I've good news for Huawei E176 user, The modem doesn't require to switch mode.
So we just only need to edit ther_usb start and stop .sh
and here is the code for E176

Thanks for the info on Huawei E176. I'll make some chaneges in original scripts, for those users that have modems that don't require switching, to be able to use original scripts. It'll be in 0.3 in next day or so.
 
:( I'm getting the following on step 7 . I am using uruk 0.5 I it makes any difference

/system/xbin/3Gmodem_init.sh 12d1 1003
No 3G USB dongle support detected. Will try to initialize modem.
Found USB 3Gmodem dongle in default mode connected to device. Starting modeswitch.
ERROR: Module option does not exist in /proc/modules
ERROR: Module usbserial does not exist in /proc/modules
ERROR: Module usb_storage does not exist in /proc/modules

Looking for target devices ...
No devices in target mode or class found
Looking for default devices ...
No devices in default mode found. Nothing to do. Bye.

sh: 1003: unknown operand
Found new Product ID: 0002
1003
0001
0a19 for Vendor ID: .
Loading 3G modem kernel driver with adeqate configuration
insmod: error inserting '/lib/modules/usbserial.ko': -1 Invalid parameters
Kernel module load failed. Exiting.
#
 
Last edited:
lol. oh yeah. sorry. i didnt know mine was a E176 and as such i skimmed over those posts :( sorry for appearing to be a bit of a idiot. cant wait for the new script.

btw has $auron shown any interest in incorporating this into his rom. would be useful to have all the legwork done automatically and maybe urukconfig could do some of the stuff that isnt able to be done automatically
 

nenadr

Senior Member
Feb 17, 2008
279
40
Belgrade
btw has $auron shown any interest in incorporating this into his rom. would be useful to have all the legwork done automatically and maybe urukconfig could do some of the stuff that isnt able to be done automatically

yes, his shown interest but this code is stll not mature (and tested on) enough devices to be merged with uruk.... meybe for some later urukdroid, who knows ;)

Sent from my A101IT using Tapatalk
 

Top Liked Posts

  • There are no posts matching your filters.
  • 8
    After experimenting for a while, I've managed to successfully use USB 3G dongle, and to connect my Archos 101IT, running uruk-droid 0.4.1, to the Internet over 3G data network. Test was made with two different 3G USB dongles - Huawei E1552 and ZTE MF190.

    First of all a big thanks to $aur0n for uruk-droid, because without uruk-droid kernel with adequate configuration, this 3G support would not be possible.

    Second, a big thanks to all guys behind usb_modeswitch project (http://www.draisberghof.de/usb_modeswitch/), for providing us with Linux support needed to switch our 3G USB dongles from default cd-rom/mass-storage mode to usb-serial mode needed for 3G operation.

    Process of initial setup of 3G USB dongle to a 3G provider under Linux (and Android/Archos) is fairly complex, and requires a little Linux knowledge, but once it is configured right, usage is simple.

    Unfortunately I don't see a way to make it simpler, because lot of parameters in various files are greatly dependant on model of 3G USB dongle you are using, and on settings of your 3G data provider.

    DISCLAMER:
    This is a proof-of-concept modification. Don't expect that everything will work from a first try.

    Please note that I don't take responsibility for anything that might happen with your Archos device and/or your data on it.
    I didn't had any problems with my A101IT using this mod with Huawei E1552 3G dongle and ZTE MF190 3G dongle, but that doesn't mean that someone else won't have them.

    Also, if you make your 3G USB dongle work as modem using steps described here, I don't take any responsibility for possible large bills form you 3G data service provider.
    Be sure that you have good and cheap 3G data plan with your 3G data service provider, if you are planning to use 3G data network for Internet connection on a daily basis.
    Also, try to avoid using 3G data service while in roaming, because it is very expensive.

    Technical explanation:

    Basically USB tethering system on Archos is designed to work over PPP connection, provided by /system/bin/pppd via "Serial-over-USB link", provided by cdc-acm.ko kernel module, when supported cdc-acm class device is connected to USB host port of Archos.

    Here is a brief description of USB tethering on Archos 101, modified to work with 3G USB dongles, since you probably going to need to edit some of this files in order to adjust them for your 3G USB dongle and your 3G provider:

    1. Kernel support for 3G USB dongles.
    This is provided by uruk-droid kernel.
    One part you'll use from this support is usbserial.ko kernel module that will be loaded by /system/xbin/3Gmodem_init.sh with adequate parameters, when you start tethering.​

    2. usb_modeswitch program and support files
    usb_modeswitch is responsible for switching of 3G USB dongles from default cd-rom/mass-storage mode to usb-serial mode ready for 3G operation.
    You'll use it via /system/xbin/3Gmodem_init.sh, when you start tethering.​

    3. Archos USB tethering support which is partially in Android framework, and partially in Linux scripts called by framework.
    This part of tethering support is most complex one, and in order for Android framework to be aware of data connection, we must disguise 3G data connection as a USB tethering:

    • Android framework calls modified /system/bin/tether_start_usb.sh, which calls /usr/bin/pppd binary, responsible for data connection to your 3G data provider.
    • Android framework calls modified /system/bin/tether_stop.sh, for stopping data connection to your 3G data provider.

    pppd uses couple of configuration files (and additional binary /usr/xbin/chat):

    • from '/system/etc/ppp/peers' directory, pppd uses configuration file 'tether' (with definition of pppd options for peer it connects to - this may need editing for your 3G provider)
    • from '/data/' directory, pppd (via /system/xbin/chat) uses 'tether_start' file as definition of <SEND> <EXPECT> pairs of commands sent to configure modem and responses received from modem, when it connects to a peer (this may need editing for your 3G provider).
    • from '/system/etc/chatscripts/' directory, pppd (via /system/xbin/chat) uses 'tether_stop' file as definition of <SEND> <EXPECT> pairs with commands sent to modem and responses received from modem, when it disconnects from a peer.

    This modification relies on modified '/system/bin/tether_start_usb.sh' and '/system/bin/tether_stop.sh', to be able to correctly initialize RNDIS connection or 3G modem, load adequate kernel modules and start connection, while trying to keep compatibility with original "Archos designed" way of USB tethering.

    Configured adequatly ('enable' parameter to 'off' in '/etc/uruk.conf/3Gsupport' file), this modified '/system/bin/terher_start_usb.sh' WILL behave as original one. - not needed anymore - scripts auto-detect connection type and behave adequatly.

    For a list of changes in recent versions please se post #2 of this thread.


    Tutorial how to use RNDIS USB Tethering:

    No configuration needed - if your phone is indeed of USB-RNDIS type - everything will be auto-detected.
    Just plug your Archos to a RNDIS capable phone in tethering mode via USB cable, wait for at least 5 seconds (or more - depending on phone), and start tethering on Archos.

    Expample of RNDIS tethering device is HTC Desire phone with built-in USB Tethering support enabled. Android based phones from "same generation as HTC Desire" are quite probably of same USB-RDNIS type.

    NOTE: due to a technical reasons (bad driver), RNDIS tethering support works only if usb host mode driver (musb_hdrc.ko) is loaded in PIO (as opposed to default DMA) mode. When tethering is started, USB host mode driver is reloaded in PIO mode, so this might be indicated on the phone like USB disconnection and re-connection. This is "normal" behaviour, and for now there is nothing I can do about it. When tethering is stopped USB host mode driver is re-loaded again to DMA mode.


    Tutorial how to initially configure 3G USB dongle for USB tethering:

    NOTE: Everything written here, should be done in Terminal Emulator or ConnectBot (connected as local) under root shell (after 'su' command)!

    1. Install Terminal Emulator, or ConnectBot from Market.


    2. This step is no longer needed if you are running Uruk-Droid 0.7 or later since 3G modem/RNDIS support is integrated in it

      Get 3Gsupport-0.4.zip from attachment in this post. Extract 3Gsupport-0.4.tar.gz file from .zip file and copy it to your Archos to /sdcard. Archive contains everything needed (usb_modeswitch binary and support files, replacement tether_start_usb.sh, replacement tether_stop.sh, 3Gmodem_init.sh script, 3Gmodem_detect.sh).
      NOTE: Since /system/bin/tether_start_usb.sh and /system/bin/tether_stop.sh from 3Gsupport-0.4.tar.gz will replace original ones, please backup originals.

      The 3Gsupport-0.4.tar.gz file contains absolute paths for all files, and should be extracted to a root ('/' path in RootExplorer).

      To backup original tether_start_usb.sh and tether_stop.sh:
      Code:
      # su
      # cp /system/bin/tether_start_usb.sh /system/bin/tether_start_usb.sh.ORIGINAL
      # cp /system/bin/tether_stop.sh /system/bin/tether_stop.sh.ORIGINAL
      Assuming you have 3GSupport-0.4.tar.gz in /sdcard you should do following in Terminal Emulator or ConnectBot to extract 3Gsupport-0.4.tar.gz:
      Code:
      # su
      # cp /sdcard/3Gsupport-0.4.tar.gz /
      # cd /
      # tar -zvxf 3Gsupport-0.4.tar.gz

    3. Start the Terminal Emulator, or ConnectBot (to localhost).
      • Issue 'su' command in terminal window to gain root access.
      • Plug dongle in usb host port (full size USB on A101IT).
        NOTE: For A70IT you'll need something called "mini USB Type-A to USB female host cable adapter", and maybe manually loading of host-mode USB driver (musb_hdrc.ko) – I don’t have A70IT so I can’t test.
      • Wait couple of seconds (at least 5) and then start 3G modem detection script with '/system/xbin/3Gmodem_detect.sh' command.
      The output of the detect scripts should be pretty self-explanatory, and if your modem is supported by usb_modeswitch (in both switching and non-switching mode) you should be able to see that usb serial module is loaded and configuration file is written and support for 3G modems is started.
      Output should look like this:
      Code:
      # /system/xbin/3Gmodem_detect.sh
      Supported USB device found !!!! VendorID: 12d1 - ProductID: 1446
      New VendorID: 12d1
      New ProductID not detected in usb-modeswitch config file. Try to detect it later !
      Switching device to usbserial mode !
      
      Looking for target devices ...
       No devices in target mode or class found
      Looking for default devices ...
       Found devices in default mode, class or configuration (1)
      Accessing device 004 on bus 002 ...
      Getting the current device configuration ...
       OK, got current device configuration (1)
      Using endpoints 0x01 (out) and 0x81 (in)
      Using endpoints 0x01 (out) and 0x81 (in)
      Inquiring device details; driver will be detached ...
      Looking for active driver ...
       OK, driver found ("usb-storage")
       OK, driver "usb-storage" detached
      
      SCSI inquiry data (for identification)
      -------------------------
        Vendor String: HUAWEI
         Model String: Mass Storage
      Revision String: 2.31
      -------------------------
      
      USB description data (for identification)
      -------------------------
      Manufacturer: HUAWEI Technology
           Product: HUAWEI Mobile
        Serial No.: not provided
      -------------------------
      Setting up communication with interface 0 ...
      Using endpoint 0x01 for message sending ...
      Trying to send message 1 to endpoint 0x01 ...
       OK, message successfully sent
      Resetting response endpoint 0x81
       Error resetting endpoint: -110
      Resetting message endpoint 0x01
       Error resetting endpoint: -19
       Device is gone, skipping any further commands
      
      Checking for mode switch (max. 20 times, once per second) ...
       Searching for target devices ...
       Searching for target devices ...
      
      Found target device, now opening
       Found correct target device
      
      Mode switch succeeded. Bye.
      
      Detected ProductID of a switched device: 140c
      USB device VendorID: 12d1 ProdID: 140c. Probing serial mode
      usbserial.ko module registered and /dev/ttyUSB{X} device nodes created sucessfully.
      Writing default configuration to '/data/local.prop' file .....Done.

      !!! REBOOT your A101IT now in order for your configuration to become active !!!

      After reboot:
    4. Disconnect your 3G USB dongle, do not connect anything to USB host port and go to Settings->Wireless & Networks->Cellphone tethering.
      • If there is tethering profile already defined, delete it - Archos handles only one tethering profile definition at a time.
      • Create new USB tethering profile.
      • Your APN, username and password won't be detected automatically, so fill them manually - find adequate info from your 3G service provider (for me on Telekom Srbija: APN is ‘gprsinternet’, username is ‘mts’, and password is ‘064’ (some 3G operators don't need username and password)).
      This will create file '/data/tether_start' with adequate commands for ppp daemon to initialize 3G modem and make a connection to your 3G provider.

      NOTE for uruk-0.6: It '/data/tether_start' file is not created after wizard finishes try following in terminal emulator:
      Code:
      su
      chown 1000:1000 /data
      chmod ug+rwx /data
      then delete the tethering profile just created and re-create it again !!! Now everything should be OK.

      File should look like this:
      Code:
      TIMEOUT 5
      ECHO ON
      ABORT BUSY
      ABORT ERROR
      ABORT 'NO CARRIER'
      ABORT VOICE
      ABORT 'NO DIALTONE'
      ABORT 'NO DIAL TONE'
      ABORT 'NO ANSWER'
      ABORT DELAYED
      TIMEOUT 12
      '' ATZ
      OK AT+CGDCONT=1,"IP","[COLOR="DarkRed"]<your APN configured in tethering wizard>[/COLOR]"
      OK ATD*99#
      TIMEOUT 120
      CONNECT ''
    5. If steps 3 and 4 were OK, then you should be able to test pppd connection to the Internet.
      NOTE: This test assumes following:
      • a) that SIM/USIM card in your 3G modem doesn't require PIN code.
      • b) that your 3G modem automatically register SIM/USIM to a network in Automatic mode (auto-band, 3G preferred mode (EDGE service if no 3G available))
      If this is not a case please take a look in section "Modifying tether_start script" later, for reference how to modify '/data/tether_start' script with adequate AT commands that should be sent to modem.
      • Re-plug your 3G USB dongle.
      • Wait at least 5 sec.
      • Start the Terminal Emulator, or ConnectBot (to localhost).
      • Issue 'su' command in terminal window to gain root access.
      • Issue '/system/xbin/3Gmodem_init.sh' command
      • Issue '/system/bin/pppd /dev/ttyUSB0 460800 debug mtu 1280 mru 1280 name <username> password <password> call tether'

      If you get CONNECTED message then your dongle and /dev/ttyUSBx port is set right and everything is configured well.
      Output should look like this:
      Code:
      ATZ
      OK
      AT+CGDCONT=1,"IP","[COLOR="DarkRed"]<your APN configured in tethering wizard>[/COLOR]"
      OK
      ATD*99#
      CONNECT

      You can interrupt pppd with Ctrl+C.

      If you don't see CONNECT (or any) response from modem try with one of other ttyUSB[0-5] ports first, or refer to following section on modifying /data/tether_start script.
    6. Assuming the step 5 was success, edit '3Gmod.usbPort' option to match the number you have used in test in step 5, in '/data/local.prop' file, and REBOOT your Archos.

    From now you can use 3G USB tethering just by plugging 3G USB dongle, and starting 'Setup->Wireless & Network->Cellphone Tethering->Tether'.

    Modifying '/data/tether_start' script for your particular 3G modem and 3G operator:

    File '/data/tether_start' is standard chatscript for unix chat program ('man chat' on Google for more info and syntax reference) used by pppd when making connection.

    In default tether_start file most important line is one for setting APN: ' OK AT+CGDCONT=1,"IP","<your APN configured in tethering wizard>" ' in example above.
    Second important line is one that connects your modem to your 3G data provider: 'OK ATDT*99#' - for some providers it needs to be modified to 'OK ATDT*99***1#'.

    If your SIM/USIM card needs PIN in order for you to be able to use your 3G USB dongle, try to disable PIN on your card before using it in 3G USB dongle.

    If you can't disable PIN for your SIM/USIM card (for example, as far as I know Tele2 cards must have PIN), you'll probably need to modify 'tether_start' script and to add adequate AT commands and expected responses, before setting APN.

    A solid reference of 3G modem AT commands and manufacturer/model specific AT commands can be found these pages:

    http://3g-modem.wetpaint.com/page/common+AT-commands
    http://3g-modem.wetpaint.com/page/Huawei+AT-commands
    http://3g-modem.wetpaint.com/page/ZTE+AT-commands and
    http://3g-modem.wetpaint.com/page/Sierra+Wireless+AT-commands

    Example /data/tether_start script that sends PIN 1234 and sets "auto 3G/GPRS mode" (for Huawei 3G USB dongles only !!!) looks something like this:
    Code:
    ABORT 'BUSY'
    ABORT 'NO CARRIER'
    ABORT 'VOICE'
    ABORT 'NO DIALTONE'
    ABORT 'NO DIAL TONE'
    ABORT 'NO ANSWER'
    ABORT 'DELAYED'
    REPORT CONNECT
    TIMEOUT 6
    '' ATQ0
    OK-AT-OK ATZ
    TIMEOUT 3
    OK AT+CPIN=1234
    OK-AT-OK ATI
    OK ATZ
    OK ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
    OK AT\^SYSCFG=14,2,3fffffff,0,1
    OK-AT-OK AT+CGDCONT=1,"IP","<your APN configured in tethering wizard>"
    OK ATDT*99***1#
    TIMEOUT 30
    CONNECT ''

    There is a plenty of information on the Internet on how to configure Linux ppp chatscripts for particular models of 3G USB dongles and 3G operators, so please SEARCH, READ & TRY before asking, since you'll have to try it anyway at the end :).

    ISSUES:

    • First start of tethering after plugging, re-plugging 3G USB dongle or stopping tethering can (and probably will) end in "unable to connect by tethering" message.
      This happens since dongle needs to be switched to usb-serial mode, kernel modules must be loaded, and most important 3G dongle must register to 3G data network to be able to connect, and Android framework timeout before connection is established.

      Solution is to just start tethering again, and since there is no need to do a usb_modeswitch again, and kernel modules are already loaded, and dongle is registered to 3G network provider, it will connect before timeout.​
    • When Archos wakes-up after sleep, some dongles (ZTE-MF190 is one of them), wake-up in default mode (non usb-serial mode), so tethering needs to be stopped and started manually.

      One possible workaround is to enable "Prevent device from going to sleep" in 'Setup->Wireless & Network->Cellphone Tethering', but with uruk-droid 0.4.1 based on Archos 2.0.x firmware this option didn't work as expected - device still goes to sleep, even if tethering is connected.
      With 2.1.x based uruk-droid (0.6 is first) it seems that this option works.​

    QUESTIONS & ANSWERS:

    Q: Can I use my phone and 3G modem whithout reconfiguring tethering every time I switch them ?
    A: Please take a look in this post


    FUTURE PLANS:

    • Integration of real USB-cable tethering with Android based devices that require Archos to tether using usbnet.ko module via "Ethernet-over-USB" type of link. - DONE
    1
    Change log:

    • 0.4.1 - Integrated in UrukDroid-0.7 with minor script errors corrected, tutorial updated
    • 0.4 - RNDIS (Ethernet-over-USB) tethering merged with 3G modem, and Archos default USB tethering support this version needs UrukDroid-0.6 at least
      • changed scripts, in order to acheive auto-detection of tethering type (RNDIS, 3G modem or Archos default Serial-Over-USB)
      • changed location of saved 3G modem configuration data to /data/local.prop, so the configuration data is avalible upon reboot as Android properties (/data/local.prop file is NOT overwritten by 3Gmodem_detect.sh, so don't worry ;-) )
      • elimninated need for /etc/uruk.d service, because of previous changes
    • 0.3 - lot of changes in scripts, in order to make 3Gdongle detection and module load configuration simplier.
      • /system/xbin/3Gmodem_detect.sh introduced for purpose above
      • tutorial changed to follow 3Gmodem_detect.sh usage
      • compatible with 3G USB dongles that don't need switching (like Huawei E176)
      • wokring on uruk-0.6RC2
    • 0.2 - changes to '/system/etc/uruk.d/3Gsupport' script to conform to urukdriod 0.5 standard
      • '/system/etc/uruk.d/3Gsupport' script now supports (beside start and stop): status, UIstatus and config parameters as well as second parameter force
      • no other functional changes
      • working on urukdroid 0.5 and 0.4.1
    • 0.1 - Initial release tested on urukdroid 0.4.1 and 0.5
    1
    Yes I already have microUSB-Type A to USB Host cable adapter, and it works for my USB drive for example. ......

    If it works with USB drive, that should be proof enough that Archos 70IT is switching to USB host mode just by plugging microUSB host adapter. Good news, more devices supported....

    I'll make feed-back here if host-mode driver loads or if I need to mount it manually.

    Please do, thank you very much.
    1
    I did not finally have time to try on my 70it for now, but I would make it.

    If I can add a part to UrukConfig I would be happy to make it when that will be the moment.
    1
    nice one nenadr!

    would like to use my desire as a tether but from past experiance with mounting my desire as storage the battery life of my 101 took a nose dive since the Desire automatically wants to suck up power and charge itself. I think it must have sucked up 40% in less than an hour! is there any way around that?

    That's a bit unbelievable since Archos should "give" no more then 100mA on UBS - theoretically on Uruk it can give more, but I had not report it's working. Anyway - 100mAh (witch should be drawn from Archos in 1H) - is much much less then 40% of it's capacity.