--- /dev/null
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.\r
+ * \r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+\r
+#include <drv_types.h>\r
+#include <hal_data.h>\r
+\r
+//\r
+// Description:\r
+// Implementation of LED blinking behavior.\r
+// It toggle off LED and schedule corresponding timer if necessary.\r
+//\r
+void\r
+SwLedBlink(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ u8 bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ // Determine if we shall change LED state again.\r
+ pLed->BlinkTimes--;\r
+ switch(pLed->CurrLedState)\r
+ {\r
+\r
+ case LED_BLINK_NORMAL:\r
+ if(pLed->BlinkTimes == 0)\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_StartToBlink:\r
+ if( check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE) )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if( check_fwstate(pmlmepriv, _FW_LINKED) &&\r
+ (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ else if(pLed->BlinkTimes == 0)\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ break;\r
+\r
+\r
+ default:\r
+ bStopBlinking = _TRUE;\r
+ break;\r
+\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && (pLed->bLedOn == _FALSE))\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ }\r
+ else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE) && pLed->bLedOn == _TRUE)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+\r
+ pLed->BlinkTimes = 0;\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ // Assign LED state to toggle.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ // Schedule a timer to toggle LED state.\r
+ switch( pLed->CurrLedState )\r
+ {\r
+ case LED_BLINK_NORMAL:\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ break;\r
+\r
+ case LED_BLINK_SLOWLY:\r
+ case LED_BLINK_StartToBlink:\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ {\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);\r
+ else\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ default:\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
+void\r
+SwLedBlink1(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ PLED_USB pLed1 = &(ledpriv->SwLed1);\r
+ u8 bStopBlinking = _FALSE;\r
+\r
+ u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; //add by ylb 20121012 for customer led for alpha\r
+ if(pHalData->CustomerID == RT_CID_819x_ALPHA_Dlink)\r
+ uLedBlinkNoLinkInterval= LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS;\r
+ \r
+ if(pHalData->CustomerID == RT_CID_819x_CAMEO)\r
+ pLed = &(ledpriv->SwLed1);\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+\r
+ if(pHalData->CustomerID == RT_CID_DEFAULT)\r
+ {\r
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ if(!pLed1->bSWLedCtrl)\r
+ {\r
+ SwLedOn(padapter, pLed1);\r
+ pLed1->bSWLedCtrl = _TRUE;\r
+ }\r
+ else if(!pLed1->bLedOn)\r
+ SwLedOn(padapter, pLed1);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn on pLed1\n"));\r
+ }\r
+ else\r
+ {\r
+ if(!pLed1->bSWLedCtrl)\r
+ {\r
+ SwLedOff(padapter, pLed1);\r
+ pLed1->bSWLedCtrl = _TRUE;\r
+ }\r
+ else if(pLed1->bLedOn)\r
+ SwLedOff(padapter, pLed1);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn off pLed1\n"));\r
+ }\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_SLOWLY:\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);//change by ylb 20121012 for customer led for alpha\r
+ break;\r
+\r
+ case LED_BLINK_NORMAL:\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->bLedLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_NORMAL;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->bLedLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_NORMAL;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->BlinkTimes = 0;\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS success\r
+ if(pLed->BlinkingLedState == RTW_LED_ON)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);\r
+ bStopBlinking = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_NORMAL;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+}\r
+\r
+void\r
+SwLedBlink2(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ u8 bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON)\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));\r
+\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));\r
+\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+}\r
+\r
+void\r
+SwLedBlink3(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ u8 bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ if(pLed->CurrLedState != LED_BLINK_WPS_STOP)\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if( !pLed->bLedOn )\r
+ SwLedOn(padapter, pLed);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedOn )\r
+ SwLedOff(padapter, pLed);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ if( !pLed->bLedOn )\r
+ SwLedOn(padapter, pLed);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+\r
+ if( pLed->bLedOn )\r
+ SwLedOff(padapter, pLed);\r
+\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS success\r
+ if(pLed->BlinkingLedState == RTW_LED_ON)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);\r
+ bStopBlinking = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ break;\r
+\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+}\r
+\r
+\r
+void\r
+SwLedBlink4(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ PLED_USB pLed1 = &(ledpriv->SwLed1);\r
+ u8 bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN)\r
+ {\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ SwLedOff(padapter, pLed1);\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_SLOWLY:\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_BLINK_StartToBlink:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _FALSE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ \r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS authentication fail\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP_OVERLAP: //WPS session overlap\r
+ pLed->BlinkTimes--;\r
+ if(pLed->BlinkTimes == 0)\r
+ {\r
+ if(pLed->bLedOn)\r
+ {\r
+ pLed->BlinkTimes = 1;\r
+ }\r
+ else\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ pLed->BlinkTimes = 10;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_ALWAYS_ON:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("RFOff Status \n"));\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState));\r
+\r
+\r
+}\r
+\r
+void\r
+SwLedBlink5(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ u8 bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if(pLed->bLedOn)\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ { pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if(!pLed->bLedOn)\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if(pLed->bLedOn)\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if(!pLed->bLedOn)\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState));\r
+\r
+\r
+}\r
+\r
+void\r
+SwLedBlink6(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ u8 bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(padapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink6\n"));\r
+}\r
+\r
+void\r
+SwLedBlink7(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ if(pLed->CurrLedState != LED_BLINK_WPS_STOP)\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if( !pLed->bLedOn )\r
+ SwLedOn(Adapter, pLed);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedOn )\r
+ SwLedOff(Adapter, pLed);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); \r
+ }\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS success\r
+ if(pLed->BlinkingLedState == RTW_LED_ON)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ bStopBlinking = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ break;\r
+\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink7\n"));\r
+\r
+}\r
+\r
+void\r
+SwLedBlink8(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes blink8(%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes blink8(%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink8\n"));\r
+\r
+}\r
+\r
+//page added for Belkin AC950. 20120813\r
+void\r
+SwLedBlink9(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter; \r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON ) \r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else \r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ } \r
+ //DBG_871X("%s, pLed->CurrLedState=%d, pLed->BlinkingLedState=%d \n", __FUNCTION__, pLed->CurrLedState, pLed->BlinkingLedState);\r
+\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case RTW_LED_ON:\r
+ SwLedOn(Adapter, pLed);\r
+ break;\r
+ \r
+ case RTW_LED_OFF:\r
+ SwLedOff(Adapter, pLed);\r
+ break;\r
+ \r
+ case LED_BLINK_SLOWLY: \r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_BLINK_StartToBlink:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); \r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ break; \r
+ \r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ \r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)\r
+ {\r
+ pLed->bLedLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); \r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); \r
+ }\r
+ pLed->BlinkTimes = 0;\r
+ pLed->bLedBlinkInProgress = _FALSE; \r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else \r
+ {\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE; \r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS authentication fail\r
+ if( pLed->bLedOn ) \r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else \r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP_OVERLAP: //WPS session overlap \r
+ pLed->BlinkTimes--;\r
+ pLed->BlinkCounter --;\r
+ if(pLed->BlinkCounter == 0)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ if(pLed->BlinkTimes == 0)\r
+ {\r
+ if(pLed->bLedOn)\r
+ {\r
+ pLed->BlinkTimes = 1; \r
+ }\r
+ else\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ { \r
+ pLed->BlinkTimes = 10; \r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA); \r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn ) \r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else \r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); \r
+ }\r
+ }\r
+ break;\r
+ \r
+ case LED_BLINK_ALWAYS_ON:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else \r
+ {\r
+ if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ }\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE; \r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("RFOff Status \n"));\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ }\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_LINK_IN_PROCESS:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ON_BELKIN);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_OFF_BELKIN);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_AUTH_ERROR:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking == _FALSE)\r
+ {\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink9 CurrLedState %d\n", pLed->CurrLedState)); \r
+}\r
+\r
+//page added for Netgear A6200V2. 20120827\r
+void\r
+SwLedBlink10(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case RTW_LED_ON:\r
+ SwLedOn(Adapter, pLed);\r
+ break;\r
+\r
+ case RTW_LED_OFF:\r
+ SwLedOff(Adapter, pLed);\r
+ break;\r
+\r
+ case LED_BLINK_SLOWLY: \r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_BLINK_StartToBlink:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_SCAN:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on )\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ pLed->BlinkTimes = 0;\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_SLOWLY_INTERVAL_NETGEAR+LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL+LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS authentication fail\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else \r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP_OVERLAP: //WPS session overlap\r
+ pLed->BlinkTimes--;\r
+ pLed->BlinkCounter --;\r
+ if(pLed->BlinkCounter == 0)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ if(pLed->BlinkTimes == 0)\r
+ {\r
+ if(pLed->bLedOn)\r
+ {\r
+ pLed->BlinkTimes = 1;\r
+ }\r
+ else\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ pLed->BlinkTimes = 10;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else \r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_ALWAYS_ON:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ }\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("RFOff Status \n"));\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ }\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_LINK_IN_PROCESS:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ON_BELKIN);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_OFF_BELKIN);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_AUTH_ERROR:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking == _FALSE)\r
+ {\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink10 CurrLedState %d\n", pLed->CurrLedState));\r
+\r
+}\r
+\r
+void\r
+SwLedBlink11(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_TXRX:\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if(pLed->BlinkTimes == 5)\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ _set_timer(&(pLed->BlinkTimer), LED_CM11_LINK_ON_INTERVEL);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_CM11_BLINK_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_CM11_BLINK_INTERVAL);\r
+ }\r
+ }\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking == _TRUE)\r
+ pLed->BlinkTimes = 5;\r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS authentication fail\r
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ SwLedOn(Adapter, pLed);\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState));\r
+}\r
+\r
+void\r
+SwLedBlink12(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%ld): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%ld): turn off\n", pLed->BlinkTimes));\r
+ }\r
+\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_SLOWLY:\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if(pLed->bLedOn)\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink8 CurrLedState %d\n", pLed->CurrLedState));\r
+\r
+\r
+}\r
+\r
+VOID\r
+SwLedBlink13(\r
+ IN PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+ static u8 LinkBlinkCnt=0;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON ) \r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else \r
+ {\r
+ if(pLed->CurrLedState != LED_BLINK_WPS_STOP)\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ } \r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("!!! SwLedBlink13 CurrLedState %d, bLedWPSBlinkInProgress %d, bLedBlinkInProgress %d\n", pLed->CurrLedState,pLed->bLedWPSBlinkInProgress,pLed->bLedBlinkInProgress));\r
+ switch(pLed->CurrLedState)\r
+ { \r
+ case LED_BLINK_LINK_IN_PROCESS:\r
+ if(!pLed->bLedWPSBlinkInProgress)\r
+ LinkBlinkCnt++;\r
+ \r
+ if(LinkBlinkCnt>15)\r
+ {\r
+ LinkBlinkCnt=0;\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ break;\r
+ }\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), 500);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), 500);\r
+ }\r
+\r
+ break;\r
+\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_NETGEAR);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_NETGEAR);\r
+ }\r
+ \r
+ break;\r
+\r
+ case LED_BLINK_WPS_STOP: //WPS success\r
+ SwLedOff(Adapter, pLed); \r
+ pLed->bLedWPSBlinkInProgress = _FALSE; \r
+ break;\r
+ \r
+ default:\r
+ LinkBlinkCnt=0;\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink13\n"));\r
+\r
+}\r
+\r
+VOID\r
+SwLedBlink14(\r
+ IN PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+ static u8 LinkBlinkCnt=0;\r
+\r
+ // Change LED according to BlinkingLedState specified.\r
+ if( pLed->BlinkingLedState == RTW_LED_ON )\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else \r
+ {\r
+ if(pLed->CurrLedState != LED_BLINK_WPS_STOP)\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ } \r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("!!! SwLedBlink14 CurrLedState %d, bLedWPSBlinkInProgress %d, bLedBlinkInProgress %d\n", pLed->CurrLedState,pLed->bLedWPSBlinkInProgress,pLed->bLedBlinkInProgress));\r
+ switch(pLed->CurrLedState)\r
+ { \r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else \r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE; \r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if (IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ else\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if (IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ else\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ }\r
+\r
+ break;\r
+ \r
+ default:\r
+ LinkBlinkCnt=0;\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink14\n"));\r
+}\r
+\r
+VOID\r
+SwLedBlink15(\r
+ IN PLED_USB pLed\r
+ )\r
+{\r
+ PADAPTER Adapter = pLed->padapter;\r
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);\r
+ BOOLEAN bStopBlinking = _FALSE;\r
+ static u8 LinkBlinkCnt=0;\r
+ // Change LED according to BlinkingLedState specified.\r
+ \r
+ if( pLed->BlinkingLedState == RTW_LED_ON ) \r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));\r
+ }\r
+ else \r
+ {\r
+ if(pLed->CurrLedState != LED_BLINK_WPS_STOP)\r
+ SwLedOff(Adapter, pLed);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));\r
+ } \r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("!!! SwLedBlink15 CurrLedState %d, bLedWPSBlinkInProgress %d, bLedBlinkInProgress %d\n", pLed->CurrLedState,pLed->bLedWPSBlinkInProgress,pLed->bLedBlinkInProgress));\r
+ switch(pLed->CurrLedState)\r
+ {\r
+ case LED_BLINK_WPS:\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_DLINK);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_DLINK);\r
+ }\r
+ break;\r
+ \r
+ case LED_BLINK_WPS_STOP: //WPS success\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("blink15, LED_BLINK_WPS_STOP BlinkingLedState %d\n",pLed->BlinkingLedState));\r
+ \r
+ if(pLed->BlinkingLedState == RTW_LED_OFF)\r
+ {\r
+ pLed->bLedWPSBlinkInProgress = _FALSE; \r
+ return;\r
+ }\r
+ \r
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+\r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_LINKED_ON_INTERVAL_DLINK); \r
+ break;\r
+\r
+ case LED_BLINK_NO_LINK:\r
+ {\r
+ static BOOLEAN bLedOn=_TRUE;\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("blink15, LED_NO_LINK_BLINK bLedOn %d\n",bLedOn));\r
+ if(bLedOn)\r
+ {\r
+ bLedOn=_FALSE;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ }\r
+ else\r
+ {\r
+ bLedOn=_TRUE;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_LINK_IDEL:\r
+ {\r
+ static BOOLEAN bLedOn=_TRUE;\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("blink15, LED_BLINK_LINK_IDEL bLedOn %d\n",bLedOn));\r
+ if(bLedOn)\r
+ {\r
+ bLedOn=_FALSE;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ }\r
+ else\r
+ {\r
+ bLedOn=_TRUE;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ \r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_IDEL_INTERVAL);\r
+ } \r
+ break;\r
+\r
+ case LED_BLINK_SCAN:\r
+ {\r
+ static u8 BlinkTime=0;\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("blink15, LED_SCAN_BLINK bLedOn %d\n",BlinkTime));\r
+ if(BlinkTime %2==0)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ }\r
+ BlinkTime ++;\r
+\r
+ if(BlinkTime<24)\r
+ {\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ \r
+ if(pLed->BlinkingLedState == RTW_LED_ON)\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_OFF_INTERVAL);\r
+ else\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_ON_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ //if(pLed->OLDLedState ==LED_NO_LINK_BLINK)\r
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)\r
+ {\r
+ pLed->CurrLedState = LED_BLINK_NO_LINK;\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+\r
+ _set_timer(&(pLed->BlinkTimer), 100);\r
+ }\r
+ BlinkTime =0;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_BLINK_TXRX:\r
+ pLed->BlinkTimes--;\r
+ if( pLed->BlinkTimes == 0 )\r
+ {\r
+ bStopBlinking = _TRUE;\r
+ }\r
+ if(bStopBlinking)\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ SwLedOn(Adapter, pLed);\r
+ }\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ if( adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)\r
+ {\r
+ SwLedOff(Adapter, pLed);\r
+ }\r
+ else\r
+ {\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ LinkBlinkCnt=0;\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink15\n"));\r
+}\r
+\r
+//\r
+// Description:\r
+// Handler function of LED Blinking.\r
+// We dispatch acture LED blink action according to LedStrategy.\r
+//\r
+void BlinkHandler(PLED_USB pLed)\r
+{\r
+ _adapter *padapter = pLed->padapter;\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+\r
+ //DBG_871X("%s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);\r
+\r
+ if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter))) {\r
+ /*DBG_871X("%s bDriverStopped:%s, bSurpriseRemoved:%s\n"\r
+ , __func__\r
+ , rtw_is_drv_stopped(padapter)?"True":"False"\r
+ , rtw_is_surprise_removed(padapter)?"True":"False" );*/\r
+ return;\r
+ }\r
+\r
+ switch(ledpriv->LedStrategy)\r
+ {\r
+ case SW_LED_MODE0:\r
+ SwLedBlink(pLed);\r
+ break;\r
+ \r
+ case SW_LED_MODE1:\r
+ SwLedBlink1(pLed);\r
+ break;\r
+ \r
+ case SW_LED_MODE2:\r
+ SwLedBlink2(pLed);\r
+ break;\r
+ \r
+ case SW_LED_MODE3:\r
+ SwLedBlink3(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE4:\r
+ SwLedBlink4(pLed);\r
+ break; \r
+\r
+ case SW_LED_MODE5:\r
+ SwLedBlink5(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE6:\r
+ SwLedBlink6(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE7:\r
+ SwLedBlink7(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE8:\r
+ SwLedBlink8(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE9:\r
+ SwLedBlink9(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE10:\r
+ SwLedBlink10(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE11:\r
+ SwLedBlink11(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE12:\r
+ SwLedBlink12(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE13:\r
+ SwLedBlink13(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE14:\r
+ SwLedBlink14(pLed);\r
+ break;\r
+\r
+ case SW_LED_MODE15:\r
+ SwLedBlink15(pLed);\r
+ break;\r
+\r
+ default:\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("BlinkWorkItemCallback 0x%x \n", ledpriv->LedStrategy));\r
+ //SwLedBlink(pLed);\r
+ break;\r
+ }\r
+}\r
+\r
+//\r
+// Description:\r
+// Callback function of LED BlinkTimer, \r
+// it just schedules to corresponding BlinkWorkItem/led_blink_hdl\r
+//\r
+void BlinkTimerCallback(void *data)\r
+{\r
+ PLED_USB pLed = (PLED_USB)data;\r
+ _adapter *padapter = pLed->padapter;\r
+\r
+ //DBG_871X("%s\n", __FUNCTION__);\r
+\r
+ if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter))) {\r
+ /*DBG_871X("%s bDriverStopped:%s, bSurpriseRemoved:%s\n"\r
+ , __func__\r
+ , rtw_is_drv_stopped(padapter)?"True":"False"\r
+ , rtw_is_surprise_removed(padapter)?"True":"False" );*/\r
+ return;\r
+ }\r
+\r
+ #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD\r
+ rtw_led_blink_cmd(padapter, (PVOID)pLed);\r
+ #else\r
+ _set_workitem(&(pLed->BlinkWorkItem));\r
+ #endif\r
+}\r
+\r
+//\r
+// Description:\r
+// Callback function of LED BlinkWorkItem.\r
+// We dispatch acture LED blink action according to LedStrategy.\r
+//\r
+void BlinkWorkItemCallback(_workitem *work)\r
+{\r
+ PLED_USB pLed = container_of(work, LED_USB, BlinkWorkItem);\r
+ BlinkHandler(pLed);\r
+}\r
+\r
+static void\r
+SwLedControlMode0(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ PLED_USB pLed = &(ledpriv->SwLed1);\r
+\r
+ // Decide led state\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if( pLed->bLedBlinkInProgress == _FALSE )\r
+ {\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+\r
+ pLed->CurrLedState = LED_BLINK_NORMAL;\r
+ pLed->BlinkTimes = 2;\r
+\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_START_TO_LINK:\r
+ if( pLed->bLedBlinkInProgress == _FALSE )\r
+ {\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+\r
+ pLed->CurrLedState = LED_BLINK_StartToBlink;\r
+ pLed->BlinkTimes = 24;\r
+\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = LED_BLINK_StartToBlink;\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ if( pLed->bLedBlinkInProgress == _FALSE )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_NO_LINK:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ if( pLed->bLedBlinkInProgress == _FALSE )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ if(pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ SwLedOff(padapter, pLed);\r
+ break;\r
+\r
+ case LED_CTL_START_WPS:\r
+ if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == RTW_LED_ON)\r
+ {\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ pLed->BlinkTimes = 20;\r
+\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS:\r
+ if(pLed->bLedBlinkInProgress)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ break;\r
+\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));\r
+\r
+}\r
+\r
+ //ALPHA, added by chiyoko, 20090106\r
+static void\r
+SwLedControlMode1(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);\r
+\r
+ u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; //add by ylb 20121012 for customer led for alpha\r
+ if(pHalData->CustomerID == RT_CID_819x_ALPHA_Dlink)\r
+ uLedBlinkNoLinkInterval= LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS; \r
+ \r
+ if(pHalData->CustomerID == RT_CID_819x_CAMEO)\r
+ pLed = &(ledpriv->SwLed1);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_POWER_ON:\r
+ case LED_CTL_START_TO_LINK:\r
+ case LED_CTL_NO_LINK:\r
+ if( pLed->bLedNoLinkBlinkInProgress == _FALSE )\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);//change by ylb 20121012 for customer led for alpha\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ if( pLed->bLedLinkBlinkInProgress == _FALSE )\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_NORMAL;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_SITE_SURVEY:\r
+ if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))\r
+ ;\r
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)\r
+ {\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 24;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason == RF_CHANGE_BY_IPS)\r
+ _set_timer(&(pLed->BlinkTimer), LED_INITIAL_INTERVAL);\r
+ else \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if(pLed->bLedBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+\r
+ case LED_CTL_STOP_WPS:\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ }\r
+\r
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;\r
+ if(pLed->bLedOn)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS_FAIL:\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);//change by ylb 20121012 for customer led for alpha\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedNoLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ SwLedOff(padapter, pLed);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));\r
+}\r
+\r
+ //Arcadyan/Sitecom , added by chiyoko, 20090216\r
+static void\r
+SwLedControlMode2(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_SITE_SURVEY:\r
+ if(pmlmepriv->LinkDetectInfo.bBusyTraffic)\r
+ ;\r
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)\r
+ {\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 24;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS:\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS_FAIL:\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+ break;\r
+\r
+ case LED_CTL_START_TO_LINK:\r
+ case LED_CTL_NO_LINK:\r
+ if(!IS_LED_BLINKING(pLed))\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ SwLedOff(padapter, pLed);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+}\r
+\r
+ //COREGA, added by chiyoko, 20090316\r
+ static void\r
+ SwLedControlMode3(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_SITE_SURVEY:\r
+ if(pmlmepriv->LinkDetectInfo.bBusyTraffic)\r
+ ;\r
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)\r
+ {\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 24;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS:\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ else\r
+ {\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ }\r
+\r
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;\r
+ if(pLed->bLedOn)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS_FAIL:\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_START_TO_LINK:\r
+ case LED_CTL_NO_LINK:\r
+ if(!IS_LED_BLINKING(pLed))\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ SwLedOff(padapter, pLed);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));\r
+}\r
+\r
+\r
+ //Edimax-Belkin, added by chiyoko, 20090413\r
+static void\r
+SwLedControlMode4(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+ PLED_USB pLed1 = &(ledpriv->SwLed1);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_START_TO_LINK:\r
+ if(pLed1->bLedWPSBlinkInProgress)\r
+ {\r
+ pLed1->bLedWPSBlinkInProgress = _FALSE;\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+\r
+ if(pLed1->bLedOn)\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+\r
+ if( pLed->bLedStartToLinkBlinkInProgress == _FALSE )\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedNoLinkBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedStartToLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_StartToBlink;\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ case LED_CTL_NO_LINK:\r
+ //LED1 settings\r
+ if(LedAction == LED_CTL_LINK)\r
+ {\r
+ if(pLed1->bLedWPSBlinkInProgress)\r
+ {\r
+ pLed1->bLedWPSBlinkInProgress = _FALSE;\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+\r
+ if(pLed1->bLedOn)\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ }\r
+\r
+ if( pLed->bLedNoLinkBlinkInProgress == _FALSE )\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_SITE_SURVEY:\r
+ if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))\r
+ ;\r
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)\r
+ {\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 24;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if(pLed->bLedBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ if(pLed1->bLedWPSBlinkInProgress)\r
+ {\r
+ pLed1->bLedWPSBlinkInProgress = _FALSE;\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+\r
+ if(pLed1->bLedOn)\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+\r
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS: //WPS connect success\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS_FAIL: //WPS authentication fail\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+\r
+ //LED1 settings\r
+ if(pLed1->bLedWPSBlinkInProgress)\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ else\r
+ pLed1->bLedWPSBlinkInProgress = _TRUE;\r
+\r
+ pLed1->CurrLedState = LED_BLINK_WPS_STOP;\r
+ if( pLed1->bLedOn )\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed1->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+\r
+ //LED1 settings\r
+ if(pLed1->bLedWPSBlinkInProgress)\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ else\r
+ pLed1->bLedWPSBlinkInProgress = _TRUE;\r
+\r
+ pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;\r
+ pLed1->BlinkTimes = 10;\r
+ if( pLed1->bLedOn )\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed1->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+\r
+ if( pLed->bLedNoLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedStartToLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedStartToLinkBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ if( pLed1->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ pLed1->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed1->BlinkingLedState = LED_UNKNOWN;\r
+ SwLedOff(padapter, pLed);\r
+ SwLedOff(padapter, pLed1);\r
+ break;\r
+\r
+ case LED_CTL_CONNECTION_NO_TRANSFER:\r
+ if(pLed->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+\r
+ pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));\r
+}\r
+\r
+\r
+\r
+ //Sercomm-Belkin, added by chiyoko, 20090415\r
+static void\r
+SwLedControlMode5(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ if(pHalData->CustomerID == RT_CID_819x_CAMEO)\r
+ pLed = &(ledpriv->SwLed1);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_POWER_ON:\r
+ case LED_CTL_NO_LINK:\r
+ case LED_CTL_LINK: //solid blue\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_SITE_SURVEY:\r
+ if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))\r
+ ;\r
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 24;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if(pLed->bLedBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN)\r
+ {\r
+ return;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ SwLedOff(padapter, pLed);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));\r
+}\r
+\r
+ //WNC-Corega, added by chiyoko, 20090902\r
+static void\r
+SwLedControlMode6(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;\r
+ PLED_USB pLed0 = &(ledpriv->SwLed0);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_POWER_ON:\r
+ case LED_CTL_LINK:\r
+ case LED_CTL_NO_LINK:\r
+ _cancel_timer_ex(&(pLed0->BlinkTimer));\r
+ pLed0->CurrLedState = RTW_LED_ON;\r
+ pLed0->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed0->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ SwLedOff(padapter, pLed0);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed0->CurrLedState));\r
+}\r
+\r
+//Netgear, added by sinda, 2011/11/11\r
+ void\r
+ SwLedControlMode7(\r
+ PADAPTER Adapter,\r
+ LED_CTL_MODE LedAction\r
+ )\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+ \r
+ switch(LedAction)\r
+ { \r
+ case LED_CTL_SITE_SURVEY:\r
+ if(pmlmepriv->LinkDetectInfo.bBusyTraffic)\r
+ ;\r
+ else if(pLed->bLedScanBlinkInProgress == _FALSE)\r
+ {\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 6;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ } \r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS:\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE; \r
+ } \r
+ else\r
+ {\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ }\r
+\r
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;\r
+ if(pLed->bLedOn)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ } \r
+\r
+ break;\r
+\r
+\r
+ case LED_CTL_STOP_WPS_FAIL: \r
+ case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap \r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_START_TO_LINK:\r
+ case LED_CTL_NO_LINK:\r
+ if(!IS_LED_BLINKING(pLed))\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ case LED_CTL_POWER_ON:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("LEd control mode 7 CurrLedState %d\n", pLed->CurrLedState));\r
+}\r
+\r
+void\r
+SwLedControlMode8(\r
+ PADAPTER Adapter,\r
+ LED_CTL_MODE LedAction\r
+ )\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed0 = &(ledpriv->SwLed0);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_LINK:\r
+ _cancel_timer_ex(&(pLed0->BlinkTimer)); \r
+ pLed0->CurrLedState = RTW_LED_ON;\r
+ pLed0->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed0->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_NO_LINK:\r
+ _cancel_timer_ex(&(pLed0->BlinkTimer));\r
+ pLed0->CurrLedState = RTW_LED_OFF;\r
+ pLed0->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed0->BlinkTimer), 0); \r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ SwLedOff(Adapter, pLed0);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 8 %d\n", pLed0->CurrLedState));\r
+\r
+}\r
+\r
+//page added for Belkin AC950, 20120813\r
+void\r
+SwLedControlMode9(\r
+ IN PADAPTER Adapter,\r
+ IN LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+ PLED_USB pLed1 = &(ledpriv->SwLed1);\r
+ PLED_USB pLed2 = &(ledpriv->SwLed2);\r
+ BOOLEAN bWPSOverLap = _FALSE;\r
+ //DBG_871X("LedAction=%d \n", LedAction);\r
+ switch(LedAction)\r
+ { \r
+ case LED_CTL_START_TO_LINK: \r
+ if(pLed2->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ pLed2->bLedBlinkInProgress = _TRUE;\r
+ pLed2->BlinkingLedState = RTW_LED_ON;\r
+ pLed2->CurrLedState = LED_BLINK_LINK_IN_PROCESS;\r
+\r
+ _set_timer(&(pLed2->BlinkTimer), 0); \r
+ }\r
+ break; \r
+\r
+ case LED_CTL_LINK: \r
+ case LED_CTL_NO_LINK:\r
+ //LED1 settings\r
+ if(LedAction == LED_CTL_NO_LINK)\r
+ {\r
+ //if(pMgntInfo->AuthStatus == AUTH_STATUS_FAILED)\r
+ if(0)\r
+ {\r
+ pLed1->CurrLedState = LED_BLINK_AUTH_ERROR;\r
+ if( pLed1->bLedOn )\r
+ pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed1->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+ } \r
+ else\r
+ {\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ if( pLed1->bLedOn )\r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ if( pLed1->bLedOn )\r
+ _set_timer(&(pLed1->BlinkTimer), 0); \r
+ }\r
+ \r
+ //LED2 settings\r
+ if(LedAction == LED_CTL_LINK)\r
+ {\r
+ if(Adapter->securitypriv.dot11PrivacyAlgrthm != _NO_PRIVACY_)\r
+ {\r
+ if(pLed2->bLedBlinkInProgress ==_TRUE)\r
+ { \r
+ _cancel_timer_ex(&(pLed2->BlinkTimer));\r
+ pLed2->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed2->CurrLedState = RTW_LED_ON;\r
+ pLed2->bLedNoLinkBlinkInProgress = _TRUE;\r
+ if(!pLed2->bLedOn)\r
+ _set_timer(&(pLed2->BlinkTimer), 0); \r
+ }\r
+ else\r
+ {\r
+ if(pLed2->bLedWPSBlinkInProgress != _TRUE)\r
+ {\r
+ pLed2->CurrLedState = RTW_LED_OFF;\r
+ pLed2->BlinkingLedState = RTW_LED_OFF;\r
+ if(pLed2->bLedOn)\r
+ _set_timer(&(pLed2->BlinkTimer), 0);\r
+ }\r
+ }\r
+ }\r
+ else //NO_LINK\r
+ {\r
+ if(pLed2->bLedWPSBlinkInProgress == _FALSE)\r
+ {\r
+ pLed2->CurrLedState = RTW_LED_OFF;\r
+ pLed2->BlinkingLedState = RTW_LED_OFF;\r
+ if(pLed2->bLedOn)\r
+ _set_timer(&(pLed2->BlinkTimer), 0); \r
+ }\r
+ }\r
+\r
+ //LED0 settings \r
+ if( pLed->bLedNoLinkBlinkInProgress == _FALSE )\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ { \r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ \r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ if(IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ {\r
+ if(LedAction == LED_CTL_LINK)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ }\r
+ }\r
+ else\r
+ {\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ }\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ \r
+ break; \r
+\r
+ case LED_CTL_SITE_SURVEY:\r
+ if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))\r
+ ;\r
+ else //if(pLed->bLedScanBlinkInProgress ==FALSE)\r
+ {\r
+ if(IS_LED_WPS_BLINKING(pLed))\r
+ return;\r
+ \r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 24;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+\r
+ }\r
+ break;\r
+ \r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if(pLed->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))\r
+ {\r
+ return;\r
+ }\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ pLed2->bLedBlinkInProgress = _TRUE;\r
+ pLed2->BlinkingLedState = RTW_LED_ON;\r
+ pLed2->CurrLedState = LED_BLINK_LINK_IN_PROCESS;\r
+ pLed2->bLedWPSBlinkInProgress = _TRUE;\r
+\r
+ _set_timer(&(pLed2->BlinkTimer), 500);\r
+ \r
+ break;\r
+ \r
+ case LED_CTL_STOP_WPS: //WPS connect success \r
+ //LED2 settings\r
+ if(pLed2->bLedWPSBlinkInProgress == _TRUE)\r
+ { \r
+ _cancel_timer_ex(&(pLed2->BlinkTimer));\r
+ pLed2->bLedBlinkInProgress = _FALSE;\r
+ pLed2->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ pLed2->CurrLedState = RTW_LED_ON;\r
+ pLed2->bLedNoLinkBlinkInProgress = _TRUE;\r
+ if(!pLed2->bLedOn)\r
+ _set_timer(&(pLed2->BlinkTimer), 0); \r
+\r
+ //LED1 settings\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ if( pLed1->bLedOn )\r
+ _set_timer(&(pLed1->BlinkTimer), 0); \r
+ \r
+ \r
+ break; \r
+\r
+ case LED_CTL_STOP_WPS_FAIL: //WPS authentication fail \r
+ //LED1 settings\r
+ //if(bWPSOverLap == _FALSE)\r
+ {\r
+ pLed1->CurrLedState = LED_BLINK_AUTH_ERROR;\r
+ pLed1->BlinkTimes = 50;\r
+ if( pLed1->bLedOn )\r
+ pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed1->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+ }\r
+ //else\r
+ //{\r
+ // bWPSOverLap = _FALSE;\r
+ // pLed1->CurrLedState = RTW_LED_OFF;\r
+ // pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ // _set_timer(&(pLed1->BlinkTimer), 0);\r
+ //}\r
+\r
+ //LED2 settings\r
+ pLed2->CurrLedState = RTW_LED_OFF;\r
+ pLed2->BlinkingLedState = RTW_LED_OFF; \r
+ pLed2->bLedWPSBlinkInProgress = _FALSE;\r
+ if( pLed2->bLedOn )\r
+ _set_timer(&(pLed2->BlinkTimer), 0);\r
+ \r
+ break; \r
+\r
+ case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap\r
+ //LED1 settings\r
+ bWPSOverLap = _TRUE;\r
+ pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;\r
+ pLed1->BlinkTimes = 10;\r
+ pLed1->BlinkCounter = 50;\r
+ if( pLed1->bLedOn )\r
+ pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed1->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+\r
+ //LED2 settings\r
+ pLed2->CurrLedState = RTW_LED_OFF;\r
+ pLed2->BlinkingLedState = RTW_LED_OFF;\r
+ pLed2->bLedWPSBlinkInProgress = _FALSE;\r
+ if( pLed2->bLedOn )\r
+ _set_timer(&(pLed2->BlinkTimer), 0);\r
+ \r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ \r
+ if( pLed->bLedNoLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+ if( pLed->bLedStartToLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedStartToLinkBlinkInProgress = _FALSE;\r
+ } \r
+\r
+ if( pLed1->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ pLed1->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+\r
+ pLed1->BlinkingLedState = LED_UNKNOWN; \r
+ SwLedOff(Adapter, pLed);\r
+ SwLedOff(Adapter, pLed1); \r
+ break;\r
+\r
+ case LED_CTL_CONNECTION_NO_TRANSFER:\r
+ if(pLed->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+\r
+ pLed->CurrLedState = LED_BLINK_ALWAYS_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+ \r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 9 Led %d\n", pLed->CurrLedState));\r
+}\r
+\r
+//page added for Netgear A6200V2, 20120827\r
+void\r
+SwLedControlMode10(\r
+ PADAPTER Adapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+ PLED_USB pLed1 = &(ledpriv->SwLed1);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_START_TO_LINK:\r
+ if(pLed1->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ pLed1->bLedBlinkInProgress = _TRUE;\r
+ pLed1->BlinkingLedState = RTW_LED_ON;\r
+ pLed1->CurrLedState = LED_BLINK_LINK_IN_PROCESS;\r
+\r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK: \r
+ case LED_CTL_NO_LINK:\r
+ if(LedAction == LED_CTL_LINK)\r
+ {\r
+ if(pLed->bLedWPSBlinkInProgress == _TRUE || pLed1->bLedWPSBlinkInProgress == _TRUE)\r
+ ;\r
+ else\r
+ {\r
+ if(pHalData->CurrentBandType == BAND_ON_2_4G)\r
+ //LED0 settings\r
+ {\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ { \r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+ }\r
+ else if(pHalData->CurrentBandType == BAND_ON_5G)\r
+ //LED1 settings\r
+ {\r
+ pLed1->CurrLedState = RTW_LED_ON;\r
+ pLed1->BlinkingLedState = RTW_LED_ON;\r
+ if(pLed1->bLedBlinkInProgress == _TRUE)\r
+ { \r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ pLed1->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ }\r
+ }\r
+ else if(LedAction == LED_CTL_NO_LINK) //TODO by page\r
+ {\r
+ if(pLed->bLedWPSBlinkInProgress == _TRUE || pLed1->bLedWPSBlinkInProgress == _TRUE)\r
+ ;\r
+ else\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedOn )\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed1->bLedOn )\r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+ }\r
+ }\r
+\r
+ break; \r
+\r
+ case LED_CTL_SITE_SURVEY:\r
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ ; //don't blink when media connect\r
+ else //if(pLed->bLedScanBlinkInProgress ==FALSE)\r
+ {\r
+ if(IS_LED_WPS_BLINKING(pLed) || IS_LED_WPS_BLINKING(pLed1))\r
+ return;\r
+\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedScanBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkTimes = 12;\r
+ pLed->BlinkingLedState = LED_BLINK_SCAN;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+\r
+ if(pLed1->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ pLed1->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed1->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ pLed1->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed1->bLedScanBlinkInProgress = _TRUE;\r
+ pLed1->CurrLedState = LED_BLINK_SCAN;\r
+ pLed1->BlinkTimes = 12;\r
+ pLed1->BlinkingLedState = LED_BLINK_SCAN;\r
+ _set_timer(&(pLed1->BlinkTimer), LED_BLINK_LINK_SLOWLY_INTERVAL_NETGEAR);\r
+\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ //LED0 settings\r
+ if(pLed->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->BlinkingLedState = LED_BLINK_WPS;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+\r
+ //LED1 settings\r
+ if(pLed1->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ pLed1->bLedBlinkInProgress = _TRUE;\r
+ pLed1->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed1->BlinkingLedState = LED_BLINK_WPS;\r
+ pLed1->CurrLedState = LED_BLINK_WPS;\r
+ _set_timer(&(pLed1->BlinkTimer), LED_BLINK_NORMAL_INTERVAL+LED_BLINK_LINK_INTERVAL_NETGEAR);\r
+ }\r
+\r
+\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS: //WPS connect success\r
+ if(pHalData->CurrentBandType == BAND_ON_2_4G)\r
+ //LED0 settings\r
+ {\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ pLed1->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+ }\r
+ else if(pHalData->CurrentBandType == BAND_ON_5G)\r
+ //LED1 settings\r
+ {\r
+ pLed1->bLedWPSBlinkInProgress = _FALSE;\r
+ pLed1->CurrLedState = RTW_LED_ON;\r
+ pLed1->BlinkingLedState = RTW_LED_ON;\r
+ if(pLed1->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed1->BlinkTimer));\r
+ pLed1->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS_FAIL: //WPS authentication fail \r
+ //LED1 settings\r
+ pLed1->bLedWPSBlinkInProgress = _FALSE;\r
+ pLed1->CurrLedState = RTW_LED_OFF;\r
+ pLed1->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed1->BlinkTimer), 0);\r
+\r
+ //LED0 settings\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedOn )\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+\r
+ break;\r
+\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 10 Led %d\n", pLed->CurrLedState));\r
+}\r
+\r
+ //Edimax-ASUS, added by Page, 20121221\r
+void\r
+SwLedControlMode11(\r
+ PADAPTER Adapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ switch(LedAction)\r
+ { \r
+ case LED_CTL_POWER_ON:\r
+ case LED_CTL_START_TO_LINK: \r
+ case LED_CTL_NO_LINK:\r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ if( pLed->bLedBlinkInProgress == _TRUE )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);\r
+ break;\r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON:\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ pLed->BlinkTimes = 5;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+\r
+ break;\r
+\r
+\r
+ case LED_CTL_STOP_WPS:\r
+ case LED_CTL_STOP_WPS_FAIL:\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+\r
+ if( pLed->bLedNoLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedLinkBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ SwLedOff(Adapter, pLed);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led mode 1 CurrLedState %d\n", pLed->CurrLedState));\r
+}\r
+\r
+// page added for NEC\r
+\r
+VOID\r
+SwLedControlMode12(\r
+ PADAPTER Adapter,\r
+ LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ switch(LedAction)\r
+ {\r
+ case LED_CTL_POWER_ON:\r
+ case LED_CTL_NO_LINK:\r
+ case LED_CTL_LINK:\r
+ case LED_CTL_SITE_SURVEY:\r
+\r
+ if( pLed->bLedNoLinkBlinkInProgress == _FALSE )\r
+ {\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_SLOWLY;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if(pLed->bLedBlinkInProgress == _FALSE)\r
+ {\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_POWER_OFF:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ SwLedOff(Adapter, pLed);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SWLed12 %d\n", pLed->CurrLedState));\r
+}\r
+\r
+// Maddest add for NETGEAR R6100\r
+\r
+VOID\r
+SwLedControlMode13(\r
+ IN PADAPTER Adapter,\r
+ IN LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 13 CurrLedState %d, LedAction %d\n", pLed->CurrLedState,LedAction));\r
+ switch(LedAction)\r
+ { \r
+ case LED_CTL_LINK:\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ return; \r
+ }\r
+\r
+ \r
+ pLed->CurrLedState = RTW_LED_ON;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break; \r
+\r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON: \r
+ if(pLed->bLedWPSBlinkInProgress == _FALSE)\r
+ {\r
+ if(pLed->bLedBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress == _TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_NETGEAR);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_NETGEAR);\r
+ }\r
+ } \r
+ break;\r
+ \r
+ case LED_CTL_STOP_WPS: \r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer)); \r
+ pLed->bLedWPSBlinkInProgress = _FALSE; \r
+ } \r
+ else\r
+ {\r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ }\r
+ \r
+ pLed->bLedWPSBlinkInProgress = _FALSE; \r
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;\r
+ if(pLed->bLedOn)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ \r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ } \r
+\r
+ break; \r
+\r
+ \r
+ case LED_CTL_STOP_WPS_FAIL: \r
+ case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer)); \r
+ pLed->bLedWPSBlinkInProgress = _FALSE; \r
+ } \r
+\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), 0); \r
+ break; \r
+\r
+ case LED_CTL_START_TO_LINK: \r
+ if((pLed->bLedBlinkInProgress == _FALSE) && (pLed->bLedWPSBlinkInProgress == _FALSE)) \r
+ {\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ pLed->CurrLedState = LED_BLINK_LINK_IN_PROCESS;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ }\r
+ break; \r
+\r
+ case LED_CTL_NO_LINK:\r
+\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ return; \r
+ }\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+ //if(!IS_LED_BLINKING(pLed))\r
+ {\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ _set_timer(&(pLed->BlinkTimer), 0); \r
+ }\r
+ break;\r
+ \r
+ case LED_CTL_POWER_OFF:\r
+ case LED_CTL_POWER_ON:\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+ if( pLed->bLedWPSBlinkInProgress )\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ if (LedAction == LED_CTL_POWER_ON)\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ else\r
+ SwLedOff(Adapter, pLed);\r
+ break;\r
+ \r
+ default:\r
+ break;\r
+\r
+ }\r
+\r
+ \r
+}\r
+\r
+// Maddest add for DNI Buffalo\r
+\r
+VOID\r
+SwLedControlMode14(\r
+ IN PADAPTER Adapter,\r
+ IN LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 14 CurrLedState %d, LedAction %d\n", pLed->CurrLedState,LedAction));\r
+ switch(LedAction)\r
+ { \r
+ case LED_CTL_POWER_OFF:\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 14 LED_CTL_POWER_OFF\n"));\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ } \r
+ SwLedOff(Adapter, pLed); \r
+ break;\r
+\r
+ case LED_CTL_POWER_ON:\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 14 LED_CTL_POWER_ON\n"));\r
+ SwLedOn(Adapter, pLed);\r
+ break;\r
+\r
+ case LED_CTL_LINK:\r
+ case LED_CTL_NO_LINK:\r
+ if (IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ SwLedOn(Adapter, pLed);\r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if(pLed->bLedBlinkInProgress ==_FALSE)\r
+ {\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ if (IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);\r
+ else\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ if (IS_HARDWARE_TYPE_8812AU(Adapter))\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);\r
+ else\r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+}\r
+\r
+// Maddest add for Dlink\r
+\r
+VOID\r
+SwLedControlMode15(\r
+ IN PADAPTER Adapter,\r
+ IN LED_CTL_MODE LedAction\r
+)\r
+{\r
+ struct led_priv *ledpriv = &(Adapter->ledpriv);\r
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;\r
+ PLED_USB pLed = &(ledpriv->SwLed0);\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 15 CurrLedState %d, LedAction %d\n", pLed->CurrLedState,LedAction));\r
+ switch(LedAction)\r
+ { \r
+ case LED_CTL_START_WPS: //wait until xinpin finish\r
+ case LED_CTL_START_WPS_BOTTON: \r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 15 LED_CTL_START_WPS\n"));\r
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)\r
+ {\r
+ if(pLed->bLedBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+ pLed->bLedWPSBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_WPS;\r
+ if( pLed->bLedOn )\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_NETGEAR);\r
+ }\r
+ else\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_NETGEAR);\r
+ }\r
+ } \r
+ break;\r
+ \r
+ case LED_CTL_STOP_WPS: \r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 15 LED_CTL_STOP_WPS\n"));\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer)); \r
+ } \r
+ \r
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;\r
+ //if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ {\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ \r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ } \r
+\r
+ break;\r
+\r
+ case LED_CTL_STOP_WPS_FAIL: \r
+ case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 15 LED_CTL_STOP_WPS_FAIL\n"));\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ } \r
+\r
+ pLed->CurrLedState = RTW_LED_OFF;\r
+ pLed->BlinkingLedState = RTW_LED_OFF;\r
+ _set_timer(&(pLed->BlinkTimer), 0);\r
+ break;\r
+\r
+ case LED_CTL_NO_LINK:\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 15 LED_CTL_NO_LINK\n"));\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ return; \r
+ }\r
+\r
+ /*if(Adapter->securitypriv.dot11PrivacyAlgrthm > _NO_PRIVACY_)\r
+ {\r
+ if(SecIsTxKeyInstalled(Adapter, pMgntInfo->Bssid))\r
+ {\r
+ }\r
+ else\r
+ {\r
+ if(pMgntInfo->LEDAssocState ==LED_ASSOC_SECURITY_BEGIN)\r
+ return; \r
+ }\r
+ }*/\r
+\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ if( pLed->bLedScanBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+ } \r
+ //if(!IS_LED_BLINKING(pLed))\r
+ {\r
+ pLed->CurrLedState = LED_BLINK_NO_LINK;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+ _set_timer(&(pLed->BlinkTimer), 30);\r
+ }\r
+ break;\r
+\r
+ case LED_CTL_LINK: \r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led control mode 15 LED_CTL_LINK\n"));\r
+\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ return; \r
+ }\r
+\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+\r
+ pLed->CurrLedState = LED_BLINK_LINK_IDEL;\r
+ pLed->BlinkingLedState = RTW_LED_ON;\r
+\r
+ _set_timer(&(pLed->BlinkTimer), 30);\r
+ break; \r
+\r
+ case LED_CTL_SITE_SURVEY :\r
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)\r
+ return;\r
+\r
+ if(pLed->bLedWPSBlinkInProgress ==_TRUE)\r
+ return;\r
+ \r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ }\r
+ pLed->CurrLedState = LED_BLINK_SCAN;\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), 0); \r
+ break;\r
+\r
+ case LED_CTL_TX:\r
+ case LED_CTL_RX:\r
+ if(pLed->bLedWPSBlinkInProgress)\r
+ {\r
+ return; \r
+ }\r
+\r
+ if( pLed->bLedBlinkInProgress)\r
+ {\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ pLed->bLedBlinkInProgress = _FALSE;\r
+ } \r
+\r
+ pLed->bLedBlinkInProgress = _TRUE;\r
+ pLed->CurrLedState = LED_BLINK_TXRX;\r
+ pLed->BlinkTimes = 2;\r
+ if( pLed->bLedOn )\r
+ pLed->BlinkingLedState = RTW_LED_OFF; \r
+ else\r
+ pLed->BlinkingLedState = RTW_LED_ON; \r
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);\r
+ break; \r
+\r
+ default:\r
+ break;\r
+ }\r
+}\r
+\r
+void\r
+LedControlUSB(\r
+ _adapter *padapter,\r
+ LED_CTL_MODE LedAction\r
+ )\r
+{\r
+ struct led_priv *ledpriv = &(padapter->ledpriv);\r
+\r
+#if(MP_DRIVER == 1)\r
+ if (padapter->registrypriv.mp_mode == 1)\r
+ return;\r
+#endif\r
+\r
+ if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter))) {\r
+ /*DBG_871X("%s bDriverStopped:%s, bSurpriseRemoved:%s\n"\r
+ , __func__\r
+ , rtw_is_drv_stopped(padapter)?"True":"False"\r
+ , rtw_is_surprise_removed(padapter)?"True":"False" );*/\r
+ return;\r
+ }\r
+\r
+ if( ledpriv->bRegUseLed == _FALSE)\r
+ return;\r
+\r
+ //if(priv->bInHctTest)\r
+ // return;\r
+\r
+#ifdef CONFIG_CONCURRENT_MODE\r
+ // Only do led action for PRIMARY_ADAPTER\r
+ if (padapter->adapter_type != PRIMARY_ADAPTER)\r
+ return;\r
+#endif\r
+\r
+ if( (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on &&\r
+ adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS) &&\r
+ (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||\r
+ LedAction == LED_CTL_SITE_SURVEY ||\r
+ LedAction == LED_CTL_LINK ||\r
+ LedAction == LED_CTL_NO_LINK ||\r
+ LedAction == LED_CTL_POWER_ON) )\r
+ {\r
+ return;\r
+ }\r
+\r
+ switch(ledpriv->LedStrategy)\r
+ {\r
+ case SW_LED_MODE0:\r
+ SwLedControlMode0(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE1:\r
+ SwLedControlMode1(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE2:\r
+ SwLedControlMode2(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE3:\r
+ SwLedControlMode3(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE4:\r
+ SwLedControlMode4(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE5:\r
+ SwLedControlMode5(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE6:\r
+ SwLedControlMode6(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE7:\r
+ SwLedControlMode7(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE8:\r
+ SwLedControlMode8(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE9:\r
+ SwLedControlMode9(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE10:\r
+ SwLedControlMode10(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE11:\r
+ SwLedControlMode11(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE12:\r
+ SwLedControlMode12(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE13:\r
+ SwLedControlMode13(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE14:\r
+ SwLedControlMode14(padapter, LedAction);\r
+ break;\r
+\r
+ case SW_LED_MODE15:\r
+ SwLedControlMode15(padapter, LedAction);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("LedStrategy:%d, LedAction %d\n", ledpriv->LedStrategy,LedAction));\r
+}\r
+\r
+//\r
+// Description:\r
+// Reset status of LED_871x object.\r
+//\r
+void ResetLedStatus(PLED_USB pLed) {\r
+\r
+ pLed->CurrLedState = RTW_LED_OFF; // Current LED state.\r
+ pLed->bLedOn = _FALSE; // true if LED is ON, false if LED is OFF.\r
+\r
+ pLed->bLedBlinkInProgress = _FALSE; // true if it is blinking, false o.w..\r
+ pLed->bLedWPSBlinkInProgress = _FALSE;\r
+ \r
+ pLed->BlinkTimes = 0; // Number of times to toggle led state for blinking.\r
+ pLed->BlinkCounter = 0;\r
+ pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.\r
+\r
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;\r
+ pLed->bLedLinkBlinkInProgress = _FALSE;\r
+ pLed->bLedStartToLinkBlinkInProgress = _FALSE;\r
+ pLed->bLedScanBlinkInProgress = _FALSE;\r
+}\r
+\r
+ //\r
+// Description:\r
+// Initialize an LED_871x object.\r
+//\r
+void\r
+InitLed(\r
+ _adapter *padapter,\r
+ PLED_USB pLed,\r
+ LED_PIN LedPin\r
+ )\r
+{\r
+ pLed->padapter = padapter;\r
+ pLed->LedPin = LedPin;\r
+\r
+ ResetLedStatus(pLed);\r
+ _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);\r
+ _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);\r
+}\r
+\r
+\r
+//\r
+// Description:\r
+// DeInitialize an LED_871x object.\r
+//\r
+void\r
+DeInitLed(\r
+ PLED_USB pLed\r
+ )\r
+{\r
+ _cancel_workitem_sync(&(pLed->BlinkWorkItem));\r
+ _cancel_timer_ex(&(pLed->BlinkTimer));\r
+ ResetLedStatus(pLed);\r
+}\r
+\r
+\r