remove LED api abuse from r13032 per request fom nbd, gpioctl is now built by defualt
[openwrt.git] / package / madwifi / files / lib / wifi / madwifi.sh
index 0b24886..6ee6435 100755 (executable)
@@ -85,7 +85,10 @@ enable_atheros() {
                config_get eap_type "$vif" eap_type
                config_get mode "$vif" mode
                
-               [ "$mode" = sta ] && config_get nosbeacon "$device" nosbeacon
+               case "$mode" in
+                       sta) config_get nosbeacon "$device" nosbeacon;;
+                       adhoc) config_get nosbeacon "$vif" sw_merge;;
+               esac
                
                config_get ifname "$vif" ifname
                ifname=$(wlanconfig "$ifname" create wlandev "$device" wlanmode "$mode" ${nosbeacon:+nosbeacon})
@@ -151,7 +154,7 @@ enable_atheros() {
                                        *) iwconfig "$ifname" enc "$key";;
                                esac
                        ;;
-                       PSK|psk|PSK2|psk2)
+                       psk*|wpa*)
                                start_hostapd=1
                                config_get key "$vif" key
                        ;;
@@ -171,13 +174,43 @@ enable_atheros() {
                [ -n "$bgscan" ] && iwpriv "$ifname" bgscan "$bgscan"
 
                config_get_bool antdiv "$device" diversity
-               [ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&-
-
                config_get antrx "$device" rxantenna
-               [ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&-
-
                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" ] && athctrl -i "$device" -d "$distance" >&-
@@ -255,6 +288,7 @@ enable_atheros() {
                        config_set "$vif" bridge "$bridge"
                        start_net "$ifname" "$net_cfg"
                }
+               [ -n "$ssid" ] && iwconfig "$ifname" essid on
                iwconfig "$ifname" essid "$ssid"
                set_wifi_up "$vif" "$ifname"
                case "$mode" in
@@ -293,12 +327,21 @@ detect_atheros() {
        [ -d ath ] || return
        for dev in $(ls -d wifi* 2>&-); do
                config_get type "$dev" type
+               devname="$(cat /proc/sys/dev/$dev/dev_name)"
+               case "$devname" in
+                       NanoStation*)
+                               EXTRA_DEV="
+# Ubiquiti NanoStation features
+       option antenna  auto # (auto|horizontal|vertical|external)
+"
+                       ;;
+               esac
                [ "$type" = atheros ] && return
                cat <<EOF
 config wifi-device  $dev
        option type     atheros
        option channel  auto
-
+$EXTRA_DEV
        # REMOVE THIS LINE TO ENABLE WIFI:
        option disabled 1
 
This page took 0.023962 seconds and 4 git commands to generate.