| /* |
| * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. |
| * |
| * This program is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| * more details. |
| * |
| * You should have received a copy of the GNU General Public License along with |
| * this program; if not, write to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA |
| * |
| * The full GNU General Public License is included in this distribution in the |
| * file called LICENSE. |
| * |
| * Contact Information: |
| * wlanfae <wlanfae@realtek.com> |
| */ |
| |
| #include "r8192U.h" |
| #include "r8192S_hw.h" |
| #include "r8192SU_led.h" |
| |
| #define LED_BLINK_NORMAL_INTERVAL 100 |
| #define LED_BLINK_SLOWLY_INTERVAL 200 |
| #define LED_BLINK_LONG_INTERVAL 400 |
| |
| #define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000 |
| #define LED_BLINK_LINK_INTERVAL_ALPHA 500 |
| #define LED_BLINK_SCAN_INTERVAL_ALPHA 180 |
| #define LED_BLINK_FASTER_INTERVAL_ALPHA 50 |
| #define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000 |
| |
| |
| |
| static void BlinkTimerCallback (unsigned long data); |
| |
| static void BlinkWorkItemCallback (struct work_struct *work); |
| |
| void InitLed819xUsb (struct net_device *dev, PLED_819xUsb pLed, |
| LED_PIN_819xUsb LedPin) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| |
| pLed->dev = dev; |
| pLed->LedPin = LedPin; |
| pLed->CurrLedState = LED_OFF; |
| pLed->bLedOn = FALSE; |
| |
| pLed->bLedBlinkInProgress = FALSE; |
| pLed->BlinkTimes = 0; |
| pLed->BlinkingLedState = LED_OFF; |
| |
| init_timer(&pLed->BlinkTimer); |
| pLed->BlinkTimer.data = (unsigned long)dev; |
| pLed->BlinkTimer.function = BlinkTimerCallback; |
| |
| INIT_WORK(&priv->BlinkWorkItem, (void*)BlinkWorkItemCallback); |
| priv->pLed = pLed; |
| } |
| |
| |
| void DeInitLed819xUsb (PLED_819xUsb pLed) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| |
| void SwLedOn (struct net_device *dev, PLED_819xUsb pLed) |
| { |
| u8 LedCfg; |
| |
| LedCfg = read_nic_byte(dev, LEDCFG); |
| switch (pLed->LedPin) { |
| case LED_PIN_GPIO0: |
| break; |
| case LED_PIN_LED0: |
| write_nic_byte(dev, LEDCFG, LedCfg&0xf0); |
| break; |
| case LED_PIN_LED1: |
| write_nic_byte(dev, LEDCFG, LedCfg&0x0f); |
| break; |
| default: |
| break; |
| } |
| pLed->bLedOn = TRUE; |
| } |
| |
| void SwLedOff (struct net_device *dev, PLED_819xUsb pLed) |
| { |
| u8 LedCfg; |
| |
| LedCfg = read_nic_byte(dev, LEDCFG); |
| switch (pLed->LedPin) { |
| case LED_PIN_GPIO0: |
| break; |
| case LED_PIN_LED0: |
| LedCfg &= 0xf0; |
| write_nic_byte(dev, LEDCFG, (LedCfg|BIT3)); |
| break; |
| case LED_PIN_LED1: |
| LedCfg &= 0x0f; |
| write_nic_byte(dev, LEDCFG, (LedCfg|BIT7)); |
| break; |
| default: |
| break; |
| } |
| pLed->bLedOn = FALSE; |
| } |
| |
| |
| void |
| InitSwLeds( |
| struct net_device *dev |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| |
| InitLed819xUsb(dev, &(priv->SwLed0), LED_PIN_LED0); |
| |
| InitLed819xUsb(dev,&(priv->SwLed1), LED_PIN_LED1); |
| } |
| |
| |
| void |
| DeInitSwLeds( |
| struct net_device *dev |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| |
| DeInitLed819xUsb( &(priv->SwLed0) ); |
| DeInitLed819xUsb( &(priv->SwLed1) ); |
| } |
| |
| |
| void |
| SwLedBlink( |
| PLED_819xUsb pLed |
| ) |
| { |
| struct net_device *dev = (struct net_device *)(pLed->dev); |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| bool bStopBlinking = FALSE; |
| |
| if( pLed->BlinkingLedState == LED_ON ) |
| { |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); |
| } |
| else |
| { |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); |
| } |
| |
| pLed->BlinkTimes--; |
| switch(pLed->CurrLedState) |
| { |
| |
| case LED_BLINK_NORMAL: |
| if(pLed->BlinkTimes == 0) |
| { |
| bStopBlinking = TRUE; |
| } |
| break; |
| |
| case LED_BLINK_StartToBlink: |
| if( (priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_INFRA)) |
| { |
| bStopBlinking = TRUE; |
| } |
| else if((priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_ADHOC)) |
| { |
| bStopBlinking = TRUE; |
| } |
| else if(pLed->BlinkTimes == 0) |
| { |
| bStopBlinking = TRUE; |
| } |
| break; |
| |
| case LED_BLINK_WPS: |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| break; |
| |
| |
| default: |
| bStopBlinking = TRUE; |
| break; |
| |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else if( (priv->ieee80211->state == IEEE80211_LINKED) && (pLed->bLedOn == false)) |
| { |
| SwLedOn(dev, pLed); |
| } |
| else if( (priv->ieee80211->state != IEEE80211_LINKED) && pLed->bLedOn == true) |
| { |
| SwLedOff(dev, pLed); |
| } |
| |
| pLed->BlinkTimes = 0; |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( pLed->BlinkingLedState == LED_ON ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| |
| switch( pLed->CurrLedState ) |
| { |
| case LED_BLINK_NORMAL: |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| break; |
| |
| case LED_BLINK_SLOWLY: |
| case LED_BLINK_StartToBlink: |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); |
| break; |
| |
| case LED_BLINK_WPS: |
| { |
| if( pLed->BlinkingLedState == LED_ON ) |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); |
| else |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); |
| } |
| break; |
| |
| default: |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); |
| break; |
| } |
| } |
| } |
| |
| |
| void |
| SwLedBlink1( |
| PLED_819xUsb pLed |
| ) |
| { |
| struct net_device *dev = (struct net_device *)(pLed->dev); |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed1 = &(priv->SwLed1); |
| bool bStopBlinking = FALSE; |
| |
| if(priv->CustomerID == RT_CID_819x_CAMEO) |
| pLed = &(priv->SwLed1); |
| |
| if( pLed->BlinkingLedState == LED_ON ) |
| { |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); |
| } |
| else |
| { |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); |
| } |
| |
| |
| if(priv->CustomerID == RT_CID_DEFAULT) |
| { |
| if(priv->ieee80211->state == IEEE80211_LINKED) |
| { |
| if(!pLed1->bSWLedCtrl) |
| { |
| SwLedOn(dev, pLed1); |
| pLed1->bSWLedCtrl = TRUE; |
| } |
| else if(!pLed1->bLedOn) |
| SwLedOn(dev, pLed1); |
| RT_TRACE(COMP_LED, "Blinktimes (): turn on pLed1\n"); |
| } |
| else |
| { |
| if(!pLed1->bSWLedCtrl) |
| { |
| SwLedOff(dev, pLed1); |
| pLed1->bSWLedCtrl = TRUE; |
| } |
| else if(pLed1->bLedOn) |
| SwLedOff(dev, pLed1); |
| RT_TRACE(COMP_LED, "Blinktimes (): turn off pLed1\n"); |
| } |
| } |
| |
| switch(pLed->CurrLedState) |
| { |
| case LED_BLINK_SLOWLY: |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| break; |
| |
| case LED_BLINK_NORMAL: |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); |
| break; |
| |
| case LED_SCAN_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else if(priv->ieee80211->state == IEEE80211_LINKED) |
| { |
| pLed->bLedLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_NORMAL; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| |
| } |
| else if(priv->ieee80211->state != IEEE80211_LINKED) |
| { |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| case LED_TXRX_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else if(priv->ieee80211->state == IEEE80211_LINKED) |
| { |
| pLed->bLedLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_NORMAL; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| else if(priv->ieee80211->state != IEEE80211_LINKED) |
| { |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->BlinkTimes = 0; |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| case LED_BLINK_WPS: |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| break; |
| |
| case LED_BLINK_WPS_STOP: |
| if(pLed->BlinkingLedState == LED_ON) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); |
| bStopBlinking = FALSE; |
| } |
| else |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| pLed->bLedLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_NORMAL; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| break; |
| |
| default: |
| break; |
| } |
| |
| } |
| |
| void |
| SwLedBlink2( |
| PLED_819xUsb pLed |
| ) |
| { |
| struct net_device *dev = (struct net_device *)(pLed->dev); |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| bool bStopBlinking = FALSE; |
| |
| if( pLed->BlinkingLedState == LED_ON) |
| { |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); |
| } |
| else |
| { |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); |
| } |
| |
| switch(pLed->CurrLedState) |
| { |
| case LED_SCAN_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "eRFPowerState %d\n", priv->ieee80211->eRFPowerState); |
| } |
| else if(priv->ieee80211->state == IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "stop scan blink CurrLedState %d\n", pLed->CurrLedState); |
| |
| } |
| else if(priv->ieee80211->state != IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "stop scan blink CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| case LED_TXRX_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else if(priv->ieee80211->state == IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "stop CurrLedState %d\n", pLed->CurrLedState); |
| |
| } |
| else if(priv->ieee80211->state != IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "stop CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| default: |
| break; |
| } |
| |
| } |
| |
| void |
| SwLedBlink3( |
| PLED_819xUsb pLed |
| ) |
| { |
| struct net_device *dev = (struct net_device *)(pLed->dev); |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| bool bStopBlinking = FALSE; |
| |
| if( pLed->BlinkingLedState == LED_ON ) |
| { |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); |
| } |
| else |
| { |
| if(pLed->CurrLedState != LED_BLINK_WPS_STOP) |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); |
| } |
| |
| switch(pLed->CurrLedState) |
| { |
| case LED_SCAN_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else if(priv->ieee80211->state == IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| if( !pLed->bLedOn ) |
| SwLedOn(dev, pLed); |
| |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| else if(priv->ieee80211->state != IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| if( pLed->bLedOn ) |
| SwLedOff(dev, pLed); |
| |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| case LED_TXRX_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else if(priv->ieee80211->state == IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| |
| if( !pLed->bLedOn ) |
| SwLedOn(dev, pLed); |
| |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| else if(priv->ieee80211->state != IEEE80211_LINKED) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| |
| if( pLed->bLedOn ) |
| SwLedOff(dev, pLed); |
| |
| |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| case LED_BLINK_WPS: |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| break; |
| |
| case LED_BLINK_WPS_STOP: |
| if(pLed->BlinkingLedState == LED_ON) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); |
| bStopBlinking = FALSE; |
| } |
| else |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| break; |
| |
| |
| default: |
| break; |
| } |
| |
| } |
| |
| |
| void |
| SwLedBlink4( |
| PLED_819xUsb pLed |
| ) |
| { |
| struct net_device *dev = (struct net_device *)(pLed->dev); |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed1 = &(priv->SwLed1); |
| bool bStopBlinking = FALSE; |
| |
| if( pLed->BlinkingLedState == LED_ON ) |
| { |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); |
| } |
| else |
| { |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); |
| } |
| |
| if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN) |
| { |
| pLed1->BlinkingLedState = LED_OFF; |
| pLed1->CurrLedState = LED_OFF; |
| SwLedOff(dev, pLed1); |
| } |
| |
| switch(pLed->CurrLedState) |
| { |
| case LED_BLINK_SLOWLY: |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| break; |
| |
| case LED_BLINK_StartToBlink: |
| if( pLed->bLedOn ) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); |
| } |
| else |
| { |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| } |
| break; |
| |
| case LED_SCAN_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| } |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| case LED_TXRX_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| } |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| case LED_BLINK_WPS: |
| if( pLed->bLedOn ) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); |
| } |
| else |
| { |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| } |
| break; |
| |
| case LED_BLINK_WPS_STOP: |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| break; |
| |
| case LED_BLINK_WPS_STOP_OVERLAP: |
| pLed->BlinkTimes--; |
| if(pLed->BlinkTimes == 0) |
| { |
| if(pLed->bLedOn) |
| { |
| pLed->BlinkTimes = 1; |
| } |
| else |
| { |
| bStopBlinking = TRUE; |
| } |
| } |
| |
| if(bStopBlinking) |
| { |
| pLed->BlinkTimes = 10; |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| } |
| break; |
| |
| |
| default: |
| break; |
| } |
| |
| RT_TRACE(COMP_LED, "SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState); |
| |
| |
| } |
| |
| void |
| SwLedBlink5( |
| PLED_819xUsb pLed |
| ) |
| { |
| struct net_device *dev = (struct net_device *)(pLed->dev); |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| bool bStopBlinking = FALSE; |
| |
| if( pLed->BlinkingLedState == LED_ON ) |
| { |
| SwLedOn(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); |
| } |
| else |
| { |
| SwLedOff(dev, pLed); |
| RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); |
| } |
| |
| switch(pLed->CurrLedState) |
| { |
| case LED_SCAN_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| if(pLed->bLedOn) |
| SwLedOff(dev, pLed); |
| } |
| else |
| { pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| if(!pLed->bLedOn) |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| |
| case LED_TXRX_BLINK: |
| pLed->BlinkTimes--; |
| if( pLed->BlinkTimes == 0 ) |
| { |
| bStopBlinking = TRUE; |
| } |
| |
| if(bStopBlinking) |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| if(pLed->bLedOn) |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| if(!pLed->bLedOn) |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| else |
| { |
| if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| } |
| break; |
| |
| default: |
| break; |
| } |
| |
| RT_TRACE(COMP_LED, "SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState); |
| |
| |
| } |
| |
| |
| void |
| BlinkTimerCallback( |
| unsigned long data |
| ) |
| { |
| struct net_device *dev = (struct net_device *)data; |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| |
| #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) |
| schedule_work(&(priv->BlinkWorkItem)); |
| #endif |
| } |
| |
| |
| #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) |
| void BlinkWorkItemCallback(struct work_struct *work) |
| { |
| struct r8192_priv *priv = container_of(work, struct r8192_priv, BlinkWorkItem); |
| #else |
| void BlinkWorkItemCallback(void * Context) |
| { |
| struct net_device *dev = (struct net_device *)Context; |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| #endif |
| |
| PLED_819xUsb pLed = priv->pLed; |
| |
| switch(priv->LedStrategy) |
| { |
| case SW_LED_MODE0: |
| SwLedBlink(pLed); |
| break; |
| |
| case SW_LED_MODE1: |
| SwLedBlink1(pLed); |
| break; |
| |
| case SW_LED_MODE2: |
| SwLedBlink2(pLed); |
| break; |
| |
| case SW_LED_MODE3: |
| SwLedBlink3(pLed); |
| break; |
| |
| case SW_LED_MODE4: |
| SwLedBlink4(pLed); |
| break; |
| |
| case SW_LED_MODE5: |
| SwLedBlink5(pLed); |
| break; |
| |
| default: |
| SwLedBlink(pLed); |
| break; |
| } |
| } |
| |
| |
| |
| |
| void |
| SwLedControlMode0( |
| struct net_device *dev, |
| LED_CTL_MODE LedAction |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed = &(priv->SwLed1); |
| |
| switch(LedAction) |
| { |
| case LED_CTL_TX: |
| case LED_CTL_RX: |
| if( pLed->bLedBlinkInProgress == FALSE ) |
| { |
| pLed->bLedBlinkInProgress = TRUE; |
| |
| pLed->CurrLedState = LED_BLINK_NORMAL; |
| pLed->BlinkTimes = 2; |
| |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| } |
| break; |
| |
| case LED_CTL_START_TO_LINK: |
| if( pLed->bLedBlinkInProgress == FALSE ) |
| { |
| pLed->bLedBlinkInProgress = TRUE; |
| |
| pLed->CurrLedState = LED_BLINK_StartToBlink; |
| pLed->BlinkTimes = 24; |
| |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); |
| } |
| else |
| { |
| pLed->CurrLedState = LED_BLINK_StartToBlink; |
| } |
| break; |
| |
| case LED_CTL_LINK: |
| pLed->CurrLedState = LED_ON; |
| if( pLed->bLedBlinkInProgress == FALSE ) |
| { |
| SwLedOn(dev, pLed); |
| } |
| break; |
| |
| case LED_CTL_NO_LINK: |
| pLed->CurrLedState = LED_OFF; |
| if( pLed->bLedBlinkInProgress == FALSE ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| break; |
| |
| case LED_CTL_POWER_OFF: |
| pLed->CurrLedState = LED_OFF; |
| if(pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| SwLedOff(dev, pLed); |
| break; |
| |
| case LED_CTL_START_WPS: |
| if( pLed->bLedBlinkInProgress == FALSE || pLed->CurrLedState == LED_ON) |
| { |
| pLed->bLedBlinkInProgress = TRUE; |
| |
| pLed->CurrLedState = LED_BLINK_WPS; |
| pLed->BlinkTimes = 20; |
| |
| if( pLed->bLedOn ) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); |
| } |
| else |
| { |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); |
| } |
| } |
| break; |
| |
| case LED_CTL_STOP_WPS: |
| if(pLed->bLedBlinkInProgress) |
| { |
| pLed->CurrLedState = LED_OFF; |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| break; |
| |
| |
| default: |
| break; |
| } |
| |
| RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); |
| |
| } |
| |
| void |
| SwLedControlMode1( |
| struct net_device *dev, |
| LED_CTL_MODE LedAction |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed = &(priv->SwLed0); |
| |
| if(priv->CustomerID == RT_CID_819x_CAMEO) |
| pLed = &(priv->SwLed1); |
| |
| switch(LedAction) |
| { |
| case LED_CTL_START_TO_LINK: |
| case LED_CTL_NO_LINK: |
| if( pLed->bLedNoLinkBlinkInProgress == FALSE ) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| return; |
| } |
| if( pLed->bLedLinkBlinkInProgress == TRUE ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedLinkBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| } |
| break; |
| |
| case LED_CTL_LINK: |
| if( pLed->bLedLinkBlinkInProgress == FALSE ) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| return; |
| } |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| pLed->bLedLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_NORMAL; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); |
| } |
| break; |
| |
| case LED_CTL_SITE_SURVEY: |
| if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED)) |
| ; |
| else if(pLed->bLedScanBlinkInProgress ==FALSE) |
| { |
| if(IS_LED_WPS_BLINKING(pLed)) |
| return; |
| |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedLinkBlinkInProgress == TRUE ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedLinkBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| pLed->bLedScanBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_SCAN_BLINK; |
| pLed->BlinkTimes = 24; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| |
| } |
| break; |
| |
| case LED_CTL_TX: |
| case LED_CTL_RX: |
| if(pLed->bLedBlinkInProgress ==FALSE) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| } |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedLinkBlinkInProgress == TRUE ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedLinkBlinkInProgress = FALSE; |
| } |
| pLed->bLedBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_TXRX_BLINK; |
| pLed->BlinkTimes = 2; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| break; |
| |
| case LED_CTL_START_WPS: |
| case LED_CTL_START_WPS_BOTTON: |
| if(pLed->bLedWPSBlinkInProgress ==FALSE) |
| { |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedLinkBlinkInProgress == TRUE ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedLinkBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedScanBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| pLed->bLedWPSBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_WPS; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| |
| } |
| break; |
| |
| |
| case LED_CTL_STOP_WPS: |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedLinkBlinkInProgress == TRUE ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedLinkBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedScanBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedWPSBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| } |
| else |
| { |
| pLed->bLedWPSBlinkInProgress = TRUE; |
| } |
| |
| pLed->CurrLedState = LED_BLINK_WPS_STOP; |
| if(pLed->bLedOn) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); |
| } |
| else |
| { |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| } |
| break; |
| |
| case LED_CTL_STOP_WPS_FAIL: |
| if(pLed->bLedWPSBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| break; |
| |
| case LED_CTL_POWER_OFF: |
| pLed->CurrLedState = LED_OFF; |
| if( pLed->bLedNoLinkBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedLinkBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedWPSBlinkInProgress ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedScanBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| |
| SwLedOff(dev, pLed); |
| break; |
| |
| default: |
| break; |
| |
| } |
| |
| RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); |
| } |
| |
| void |
| SwLedControlMode2( |
| struct net_device *dev, |
| LED_CTL_MODE LedAction |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed = &(priv->SwLed0); |
| |
| switch(LedAction) |
| { |
| case LED_CTL_SITE_SURVEY: |
| if(priv->ieee80211->LinkDetectInfo.bBusyTraffic) |
| ; |
| else if(pLed->bLedScanBlinkInProgress ==FALSE) |
| { |
| if(IS_LED_WPS_BLINKING(pLed)) |
| return; |
| |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| pLed->bLedScanBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_SCAN_BLINK; |
| pLed->BlinkTimes = 24; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| |
| } |
| break; |
| |
| case LED_CTL_TX: |
| case LED_CTL_RX: |
| if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED)) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| return; |
| } |
| |
| pLed->bLedBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_TXRX_BLINK; |
| pLed->BlinkTimes = 2; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| break; |
| |
| case LED_CTL_LINK: |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| if( pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedScanBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| |
| mod_timer(&(pLed->BlinkTimer), 0); |
| break; |
| |
| case LED_CTL_START_WPS: |
| case LED_CTL_START_WPS_BOTTON: |
| if(pLed->bLedWPSBlinkInProgress ==FALSE) |
| { |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedScanBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| pLed->bLedWPSBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| } |
| break; |
| |
| case LED_CTL_STOP_WPS: |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| break; |
| |
| case LED_CTL_STOP_WPS_FAIL: |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| if( priv->ieee80211->eRFPowerState != eRfOn ) |
| { |
| SwLedOff(dev, pLed); |
| } |
| else |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| break; |
| |
| case LED_CTL_START_TO_LINK: |
| case LED_CTL_NO_LINK: |
| if(!IS_LED_BLINKING(pLed)) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| } |
| break; |
| |
| case LED_CTL_POWER_OFF: |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| if( pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedScanBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedWPSBlinkInProgress ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| mod_timer(&(pLed->BlinkTimer), 0); |
| break; |
| |
| default: |
| break; |
| |
| } |
| |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| |
| void |
| SwLedControlMode3( |
| struct net_device *dev, |
| LED_CTL_MODE LedAction |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed = &(priv->SwLed0); |
| |
| switch(LedAction) |
| { |
| case LED_CTL_SITE_SURVEY: |
| if(priv->ieee80211->LinkDetectInfo.bBusyTraffic) |
| ; |
| else if(pLed->bLedScanBlinkInProgress ==FALSE) |
| { |
| if(IS_LED_WPS_BLINKING(pLed)) |
| return; |
| |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| pLed->bLedScanBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_SCAN_BLINK; |
| pLed->BlinkTimes = 24; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| |
| } |
| break; |
| |
| case LED_CTL_TX: |
| case LED_CTL_RX: |
| if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED)) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| return; |
| } |
| |
| pLed->bLedBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_TXRX_BLINK; |
| pLed->BlinkTimes = 2; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| break; |
| |
| case LED_CTL_LINK: |
| if(IS_LED_WPS_BLINKING(pLed)) |
| return; |
| |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| if( pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedScanBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| |
| mod_timer(&(pLed->BlinkTimer), 0); |
| break; |
| |
| case LED_CTL_START_WPS: |
| case LED_CTL_START_WPS_BOTTON: |
| if(pLed->bLedWPSBlinkInProgress ==FALSE) |
| { |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedScanBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| pLed->bLedWPSBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_WPS; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| |
| } |
| break; |
| |
| case LED_CTL_STOP_WPS: |
| if(pLed->bLedWPSBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| else |
| { |
| pLed->bLedWPSBlinkInProgress = TRUE; |
| } |
| |
| pLed->CurrLedState = LED_BLINK_WPS_STOP; |
| if(pLed->bLedOn) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); |
| } |
| else |
| { |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| } |
| |
| break; |
| |
| |
| case LED_CTL_STOP_WPS_FAIL: |
| if(pLed->bLedWPSBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| break; |
| |
| case LED_CTL_START_TO_LINK: |
| case LED_CTL_NO_LINK: |
| if(!IS_LED_BLINKING(pLed)) |
| { |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| } |
| break; |
| |
| case LED_CTL_POWER_OFF: |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| if( pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedScanBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedWPSBlinkInProgress ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| mod_timer(&(pLed->BlinkTimer), 0); |
| break; |
| |
| default: |
| break; |
| |
| } |
| |
| RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); |
| } |
| |
| |
| void |
| SwLedControlMode4( |
| struct net_device *dev, |
| LED_CTL_MODE LedAction |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed = &(priv->SwLed0); |
| PLED_819xUsb pLed1 = &(priv->SwLed1); |
| |
| switch(LedAction) |
| { |
| case LED_CTL_START_TO_LINK: |
| if(pLed1->bLedWPSBlinkInProgress) |
| { |
| pLed1->bLedWPSBlinkInProgress = FALSE; |
| del_timer_sync(&(pLed1->BlinkTimer)); |
| |
| pLed1->BlinkingLedState = LED_OFF; |
| pLed1->CurrLedState = LED_OFF; |
| |
| if(pLed1->bLedOn) |
| mod_timer(&(pLed1->BlinkTimer), 0); |
| } |
| |
| if( pLed->bLedStartToLinkBlinkInProgress == FALSE ) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| return; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedNoLinkBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| |
| pLed->bLedStartToLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_StartToBlink; |
| if( pLed->bLedOn ) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); |
| } |
| else |
| { |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| } |
| } |
| break; |
| |
| case LED_CTL_LINK: |
| case LED_CTL_NO_LINK: |
| if(LedAction == LED_CTL_LINK) |
| { |
| if(pLed1->bLedWPSBlinkInProgress) |
| { |
| pLed1->bLedWPSBlinkInProgress = FALSE; |
| del_timer_sync(&(pLed1->BlinkTimer)); |
| |
| pLed1->BlinkingLedState = LED_OFF; |
| pLed1->CurrLedState = LED_OFF; |
| |
| if(pLed1->bLedOn) |
| mod_timer(&(pLed1->BlinkTimer), 0); |
| } |
| } |
| |
| if( pLed->bLedNoLinkBlinkInProgress == FALSE ) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| return; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| } |
| |
| break; |
| |
| case LED_CTL_SITE_SURVEY: |
| if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED)) |
| ; |
| else if(pLed->bLedScanBlinkInProgress ==FALSE) |
| { |
| if(IS_LED_WPS_BLINKING(pLed)) |
| return; |
| |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| pLed->bLedScanBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_SCAN_BLINK; |
| pLed->BlinkTimes = 24; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| |
| } |
| break; |
| |
| case LED_CTL_TX: |
| case LED_CTL_RX: |
| if(pLed->bLedBlinkInProgress ==FALSE) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) |
| { |
| return; |
| } |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| pLed->bLedBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_TXRX_BLINK; |
| pLed->BlinkTimes = 2; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| break; |
| |
| case LED_CTL_START_WPS: |
| case LED_CTL_START_WPS_BOTTON: |
| if(pLed1->bLedWPSBlinkInProgress) |
| { |
| pLed1->bLedWPSBlinkInProgress = FALSE; |
| del_timer_sync(&(pLed1->BlinkTimer)); |
| |
| pLed1->BlinkingLedState = LED_OFF; |
| pLed1->CurrLedState = LED_OFF; |
| |
| if(pLed1->bLedOn) |
| mod_timer(&(pLed1->BlinkTimer), 0); |
| } |
| |
| if(pLed->bLedWPSBlinkInProgress ==FALSE) |
| { |
| if(pLed->bLedNoLinkBlinkInProgress == TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if(pLed->bLedScanBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| pLed->bLedWPSBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_WPS; |
| if( pLed->bLedOn ) |
| { |
| pLed->BlinkingLedState = LED_OFF; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); |
| } |
| else |
| { |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| } |
| |
| } |
| break; |
| |
| case LED_CTL_STOP_WPS: |
| if(pLed->bLedWPSBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| |
| break; |
| |
| case LED_CTL_STOP_WPS_FAIL: |
| if(pLed->bLedWPSBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| |
| if(pLed1->bLedWPSBlinkInProgress) |
| del_timer_sync(&(pLed1->BlinkTimer)); |
| else |
| pLed1->bLedWPSBlinkInProgress = TRUE; |
| |
| pLed1->CurrLedState = LED_BLINK_WPS_STOP; |
| if( pLed1->bLedOn ) |
| pLed1->BlinkingLedState = LED_OFF; |
| else |
| pLed1->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| |
| break; |
| |
| case LED_CTL_STOP_WPS_FAIL_OVERLAP: |
| if(pLed->bLedWPSBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| pLed->bLedNoLinkBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_BLINK_SLOWLY; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); |
| |
| if(pLed1->bLedWPSBlinkInProgress) |
| del_timer_sync(&(pLed1->BlinkTimer)); |
| else |
| pLed1->bLedWPSBlinkInProgress = TRUE; |
| |
| pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP; |
| pLed1->BlinkTimes = 10; |
| if( pLed1->bLedOn ) |
| pLed1->BlinkingLedState = LED_OFF; |
| else |
| pLed1->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); |
| |
| break; |
| |
| case LED_CTL_POWER_OFF: |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| |
| if( pLed->bLedNoLinkBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedNoLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedLinkBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedLinkBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedWPSBlinkInProgress ) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedWPSBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedScanBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedScanBlinkInProgress = FALSE; |
| } |
| if( pLed->bLedStartToLinkBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedStartToLinkBlinkInProgress = FALSE; |
| } |
| |
| if( pLed1->bLedWPSBlinkInProgress ) |
| { |
| del_timer_sync(&(pLed1->BlinkTimer)); |
| pLed1->bLedWPSBlinkInProgress = FALSE; |
| } |
| |
| |
| pLed1->BlinkingLedState = LED_UNKNOWN; |
| SwLedOff(dev, pLed); |
| SwLedOff(dev, pLed1); |
| break; |
| |
| default: |
| break; |
| |
| } |
| |
| RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); |
| } |
| |
| |
| |
| void |
| SwLedControlMode5( |
| struct net_device *dev, |
| LED_CTL_MODE LedAction |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| PLED_819xUsb pLed = &(priv->SwLed0); |
| |
| if(priv->CustomerID == RT_CID_819x_CAMEO) |
| pLed = &(priv->SwLed1); |
| |
| switch(LedAction) |
| { |
| case LED_CTL_POWER_ON: |
| case LED_CTL_NO_LINK: |
| case LED_CTL_LINK: |
| if(pLed->CurrLedState == LED_SCAN_BLINK) |
| { |
| return; |
| } |
| pLed->CurrLedState = LED_ON; |
| pLed->BlinkingLedState = LED_ON; |
| pLed->bLedBlinkInProgress = FALSE; |
| mod_timer(&(pLed->BlinkTimer), 0); |
| break; |
| |
| case LED_CTL_SITE_SURVEY: |
| if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED)) |
| ; |
| else if(pLed->bLedScanBlinkInProgress ==FALSE) |
| { |
| if(pLed->bLedBlinkInProgress ==TRUE) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| pLed->bLedScanBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_SCAN_BLINK; |
| pLed->BlinkTimes = 24; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); |
| |
| } |
| break; |
| |
| case LED_CTL_TX: |
| case LED_CTL_RX: |
| if(pLed->bLedBlinkInProgress ==FALSE) |
| { |
| if(pLed->CurrLedState == LED_SCAN_BLINK) |
| { |
| return; |
| } |
| pLed->bLedBlinkInProgress = TRUE; |
| pLed->CurrLedState = LED_TXRX_BLINK; |
| pLed->BlinkTimes = 2; |
| if( pLed->bLedOn ) |
| pLed->BlinkingLedState = LED_OFF; |
| else |
| pLed->BlinkingLedState = LED_ON; |
| mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); |
| } |
| break; |
| |
| case LED_CTL_POWER_OFF: |
| pLed->CurrLedState = LED_OFF; |
| pLed->BlinkingLedState = LED_OFF; |
| |
| if( pLed->bLedBlinkInProgress) |
| { |
| del_timer_sync(&(pLed->BlinkTimer)); |
| pLed->bLedBlinkInProgress = FALSE; |
| } |
| |
| SwLedOff(dev, pLed); |
| break; |
| |
| default: |
| break; |
| |
| } |
| |
| RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); |
| } |
| |
| |
| void |
| LedControl8192SUsb( |
| struct net_device *dev, |
| LED_CTL_MODE LedAction |
| ) |
| { |
| struct r8192_priv *priv = ieee80211_priv(dev); |
| |
| if( priv->bRegUseLed == FALSE) |
| return; |
| |
| if (!priv->up) |
| return; |
| |
| if(priv->bInHctTest) |
| return; |
| |
| if( priv->ieee80211->eRFPowerState != eRfOn && |
| (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX || |
| LedAction == LED_CTL_SITE_SURVEY || |
| LedAction == LED_CTL_LINK || |
| LedAction == LED_CTL_NO_LINK || |
| LedAction == LED_CTL_POWER_ON) ) |
| { |
| return; |
| } |
| |
| switch(priv->LedStrategy) |
| { |
| case SW_LED_MODE0: |
| break; |
| |
| case SW_LED_MODE1: |
| SwLedControlMode1(dev, LedAction); |
| break; |
| case SW_LED_MODE2: |
| SwLedControlMode2(dev, LedAction); |
| break; |
| |
| case SW_LED_MODE3: |
| SwLedControlMode3(dev, LedAction); |
| break; |
| |
| case SW_LED_MODE4: |
| SwLedControlMode4(dev, LedAction); |
| break; |
| |
| case SW_LED_MODE5: |
| SwLedControlMode5(dev, LedAction); |
| break; |
| |
| default: |
| break; |
| } |
| |
| RT_TRACE(COMP_LED, "LedStrategy:%d, LedAction %d\n", priv->LedStrategy,LedAction); |
| } |
| |
| |