From ed91f81665a0f37f01cd94d9f9568e3a17a3a1f2 Mon Sep 17 00:00:00 2001
From: yann.lopez <yann.lopez@gmail.com>
Date: Thu, 6 May 2010 15:25:30 +0200
Subject: [PATCH] add the mode selection for huawei dongle

---
 package/comgt/files/3g.sh |   36 +++++++++++++++++++++++++++++++++---
 1 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/package/comgt/files/3g.sh b/package/comgt/files/3g.sh
index 8fcac09..58405d5 100644
--- a/package/comgt/files/3g.sh
+++ b/package/comgt/files/3g.sh
@@ -7,6 +7,30 @@ set_3g_led() {
 	echo "$3" > /proc/diag/led/3g_blink
 }
 
+is_huawei_card() {
+	local CARDINFO="$1"
+	case "$CARDINFO" in
+		*huawei*) return 0 ;;
+		*) return 1 ;;
+	esac
+}
+
+is_novatel_card() {
+	local CARDINFO="$1"
+	case "$CARDINFO" in
+		*Novatel*) return 0 ;;
+		*) return 1 ;;
+	esac
+}
+
+is_option_card() {
+	local CARDINFO="$1"
+	case "$CARDINFO" in
+		*Option*) return 0 ;;
+		*) return 1 ;;
+	esac
+}
+
 scan_3g() {
 	local device
 
@@ -64,22 +88,28 @@ setup_interface_3g() {
 		cdma|evdo) chat="/etc/chatscripts/evdo.chat";;
 	*)
 		cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
-		if echo "$cardinfo" | grep Novatel; then
+		if is_novatel_card "$cardinfo"; then
 			case "$service" in
 				umts_only) CODE=2;;
 				gprs_only) CODE=1;;
 				*) CODE=0;;
 			esac
 			mode="AT\$NWRAT=${CODE},2"
-		elif echo "$cardinfo" | grep Option; then
+		elif is_option_card "$cardinfo"; then
 			case "$service" in
 				umts_only) CODE=1;;
 				gprs_only) CODE=0;;
 				*) CODE=3;;
 			esac
 			mode="AT_OPSYS=${CODE}"
+		elif is_huawei_card "$cardinfo"; then
+			case "$service" in
+				umts_only) mode="AT^SYSCFG=14,1,3FFFFFFF,2,4";;
+				gprs_only) mode="AT^SYSCFG=13,2,3FFFFFFF,2,4";;
+				# 3g prefered gprs prefered is not accessible FYI AT^SYSCFG=2,1,3FFFFFFF,2,4
+				*) mode="AT^SYSCFG=2,2,3FFFFFFF,2,4";; 
+			esac
 		fi
-		# Don't assume Option to be default as it breaks with Huawei Cards/Sticks
 		
 		PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
 			echo "$config(3g): Failed to set the PIN code."
-- 
1.6.3.3

