Browse Source

Declare some missing local variables in madwifi.sh Signed-off-by: Vasilis Tsiligiannis <[email protected]>

SVN-Revision: 15954
Jo-Philipp Wich 17 years ago
parent
commit
89127a67f2
1 changed files with 58 additions and 17 deletions
  1. 58 17
      package/madwifi/files/lib/wifi/madwifi.sh

+ 58 - 17
package/madwifi/files/lib/wifi/madwifi.sh

@@ -4,7 +4,7 @@ append DRIVERS "atheros"
 scan_atheros() {
 	local device="$1"
 	local wds
-	local adhoc sta ap
+	local adhoc ahdemo sta ap monitor
 	
 	config_get vifs "$device" vifs
 	for vif in $vifs; do
@@ -84,6 +84,48 @@ enable_atheros() {
 
 	[ auto = "$channel" ] && channel=0
 
+	config_get_bool antdiv "$device" diversity
+	config_get antrx "$device" rxantenna
+	config_get anttx "$device" txantenna
+	config_get_bool softled "$device" softled 1
+
+	devname="$(cat /proc/sys/dev/$device/dev_name)"
+	antgpio=
+	case "$devname" in
+		NanoStation2) antgpio=7;;
+		NanoStation5) antgpio=1;;
+	esac
+	if [ -n "$antgpio" ]; then
+		softled=0
+		config_get antenna "$device" antenna
+		case "$antenna" in
+			external) antdiv=0; antrx=1; anttx=1 ;;
+			horizontal) antdiv=0; antrx=1; anttx=1 ;;
+			vertical) antdiv=0; antrx=2; anttx=2 ;;
+			auto) antdiv=1; antrx=0; anttx=0 ;;
+		esac
+			
+		[ -x "$(which gpioctl 2>/dev/null)" ] || antenna=
+		case "$antenna" in
+			horizontal|vertical|auto)
+				gpioctl "dirout" "$antgpio" >/dev/null 2>&1
+				gpioctl "set" "$antgpio" >/dev/null 2>&1
+			;;
+			external)
+				gpioctl "dirout" "$antgpio" >/dev/null 2>&1
+				gpioctl "clear" "$antgpio" >/dev/null 2>&1
+			;;
+		esac
+	fi
+
+	[ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&-
+	[ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&-
+	[ -n "$anttx" ] && sysctl -w dev."$device".txantenna="$anttx" >&-
+	[ -n "$softled" ] && sysctl -w dev."$device".softled="$softled" >&-
+
+	config_get distance "$device" distance
+	[ -n "$distance" ] && sysctl -w dev."$device".distance="$distance" >&-
+
 	local first=1
 	for vif in $vifs; do
 		local start_hostapd vif_txpower
@@ -98,7 +140,6 @@ enable_atheros() {
 			adhoc) config_get nosbeacon "$vif" sw_merge;;
 		esac
 		
-		config_get ifname "$vif" ifname
 		ifname=$(wlanconfig "$ifname" create wlandev "$device" wlanmode "$mode" ${nosbeacon:+nosbeacon})
 		[ $? -ne 0 ] && {
 			echo "enable_atheros($device): Failed to set up $mode vif $ifname" >&2
@@ -107,25 +148,25 @@ enable_atheros() {
 		config_set "$vif" ifname "$ifname"
 
 		# only need to change freq band and channel on the first vif
+		[ "$first" = 1 ] && {
 		config_get hwmode "$device" hwmode
 		[ -z "$hwmode" ] && config_get hwmode "$device" mode
 
-		pureg=0
-		case "$hwmode" in
-			*b) hwmode=11b;;
-			*bg) hwmode=11g;;
-			*g) hwmode=11g; pureg=1;;
-			*gdt) hwmode=11gdt;;
-			*a) hwmode=11a;;
-			*adt) hwmode=11adt;;
-			*ast) hwmode=11ast;;
-			*fh) hwmode=fh;;
-			*) hwmode=auto;;
-		esac
-		iwpriv "$ifname" pureg "$pureg"
-
-		[ "$first" = 1 ] && {
+			pureg=0
+			case "$hwmode" in
+				*b) hwmode=11b;;
+				*bg) hwmode=11g;;
+				*g) hwmode=11g; pureg=1;;
+				*gdt) hwmode=11gdt;;
+				*a) hwmode=11a;;
+				*adt) hwmode=11adt;;
+				*ast) hwmode=11ast;;
+				*fh) hwmode=fh;;
+				*) hwmode=auto;;
+			esac
 			iwpriv "$ifname" mode "$hwmode"
+			iwpriv "$ifname" pureg "$pureg"
+
 			iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null 
 		}