Path: blob/master/ALFA-W1F1/RTL8814AU/hal/led/hal_usb_led.c
1307 views
/******************************************************************************1*2* Copyright(c) 2007 - 2017 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13*****************************************************************************/1415#include <drv_types.h>16#include <hal_data.h>17#ifdef CONFIG_RTW_SW_LED1819/*20* Description:21* Implementation of LED blinking behavior.22* It toggle off LED and schedule corresponding timer if necessary.23* */24void25SwLedBlink(26PLED_USB pLed27)28{29_adapter *padapter = pLed->padapter;30struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);31u8 bStopBlinking = _FALSE;3233/* Change LED according to BlinkingLedState specified. */34if (pLed->BlinkingLedState == RTW_LED_ON) {35SwLedOn(padapter, pLed);36} else {37SwLedOff(padapter, pLed);38}3940/* Determine if we shall change LED state again. */41pLed->BlinkTimes--;42switch (pLed->CurrLedState) {4344case LED_BLINK_NORMAL:45if (pLed->BlinkTimes == 0)46bStopBlinking = _TRUE;47break;4849case LED_BLINK_StartToBlink:50if (check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE))51bStopBlinking = _TRUE;52if (check_fwstate(pmlmepriv, _FW_LINKED) &&53(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))54bStopBlinking = _TRUE;55else if (pLed->BlinkTimes == 0)56bStopBlinking = _TRUE;57break;5859case LED_BLINK_WPS:60if (pLed->BlinkTimes == 0)61bStopBlinking = _TRUE;62break;636465default:66bStopBlinking = _TRUE;67break;6869}7071if (bStopBlinking) {72if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)73SwLedOff(padapter, pLed);74else if ((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) && (pLed->bLedOn == _FALSE))75SwLedOn(padapter, pLed);76else if ((check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) && pLed->bLedOn == _TRUE)77SwLedOff(padapter, pLed);7879pLed->BlinkTimes = 0;80pLed->bLedBlinkInProgress = _FALSE;81} else {82/* Assign LED state to toggle. */83if (pLed->BlinkingLedState == RTW_LED_ON)84pLed->BlinkingLedState = RTW_LED_OFF;85else86pLed->BlinkingLedState = RTW_LED_ON;8788/* Schedule a timer to toggle LED state. */89switch (pLed->CurrLedState) {90case LED_BLINK_NORMAL:91_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);92break;9394case LED_BLINK_SLOWLY:95case LED_BLINK_StartToBlink:96_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);97break;9899case LED_BLINK_WPS:100_set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);101break;102103default:104_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);105break;106}107}108}109110void111SwLedBlink1(112PLED_USB pLed113)114{115_adapter *padapter = pLed->padapter;116PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);117struct led_priv *ledpriv = adapter_to_led(padapter);118struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);119PLED_USB pLed1 = &(ledpriv->SwLed1);120u8 bStopBlinking = _FALSE;121122u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; /* add by ylb 20121012 for customer led for alpha */123if (pHalData->CustomerID == RT_CID_819x_ALPHA_Dlink)124uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS;125126if (pHalData->CustomerID == RT_CID_819x_CAMEO)127pLed = &(ledpriv->SwLed1);128129/* Change LED according to BlinkingLedState specified. */130if (pLed->BlinkingLedState == RTW_LED_ON) {131SwLedOn(padapter, pLed);132} else {133SwLedOff(padapter, pLed);134}135136137if (pHalData->CustomerID == RT_CID_DEFAULT) {138if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {139if (!pLed1->bSWLedCtrl) {140SwLedOn(padapter, pLed1);141pLed1->bSWLedCtrl = _TRUE;142} else if (!pLed1->bLedOn)143SwLedOn(padapter, pLed1);144} else {145if (!pLed1->bSWLedCtrl) {146SwLedOff(padapter, pLed1);147pLed1->bSWLedCtrl = _TRUE;148} else if (pLed1->bLedOn)149SwLedOff(padapter, pLed1);150}151}152153switch (pLed->CurrLedState) {154case LED_BLINK_SLOWLY:155if (pLed->bLedOn)156pLed->BlinkingLedState = RTW_LED_OFF;157else158pLed->BlinkingLedState = RTW_LED_ON;159_set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);/* change by ylb 20121012 for customer led for alpha */160break;161162case LED_BLINK_NORMAL:163if (pLed->bLedOn)164pLed->BlinkingLedState = RTW_LED_OFF;165else166pLed->BlinkingLedState = RTW_LED_ON;167_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);168break;169170case LED_BLINK_SCAN:171pLed->BlinkTimes--;172if (pLed->BlinkTimes == 0)173bStopBlinking = _TRUE;174175if (bStopBlinking) {176if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)177SwLedOff(padapter, pLed);178else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {179pLed->bLedLinkBlinkInProgress = _TRUE;180pLed->CurrLedState = LED_BLINK_NORMAL;181if (pLed->bLedOn)182pLed->BlinkingLedState = RTW_LED_OFF;183else184pLed->BlinkingLedState = RTW_LED_ON;185_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);186187} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {188pLed->bLedNoLinkBlinkInProgress = _TRUE;189pLed->CurrLedState = LED_BLINK_SLOWLY;190if (pLed->bLedOn)191pLed->BlinkingLedState = RTW_LED_OFF;192else193pLed->BlinkingLedState = RTW_LED_ON;194_set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);195}196pLed->bLedScanBlinkInProgress = _FALSE;197} else {198if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)199SwLedOff(padapter, pLed);200else {201if (pLed->bLedOn)202pLed->BlinkingLedState = RTW_LED_OFF;203else204pLed->BlinkingLedState = RTW_LED_ON;205_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);206}207}208break;209210case LED_BLINK_TXRX:211pLed->BlinkTimes--;212if (pLed->BlinkTimes == 0)213bStopBlinking = _TRUE;214if (bStopBlinking) {215if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)216SwLedOff(padapter, pLed);217else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {218pLed->bLedLinkBlinkInProgress = _TRUE;219pLed->CurrLedState = LED_BLINK_NORMAL;220if (pLed->bLedOn)221pLed->BlinkingLedState = RTW_LED_OFF;222else223pLed->BlinkingLedState = RTW_LED_ON;224_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);225} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {226pLed->bLedNoLinkBlinkInProgress = _TRUE;227pLed->CurrLedState = LED_BLINK_SLOWLY;228if (pLed->bLedOn)229pLed->BlinkingLedState = RTW_LED_OFF;230else231pLed->BlinkingLedState = RTW_LED_ON;232_set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);233}234pLed->BlinkTimes = 0;235pLed->bLedBlinkInProgress = _FALSE;236} else {237if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)238SwLedOff(padapter, pLed);239else {240if (pLed->bLedOn)241pLed->BlinkingLedState = RTW_LED_OFF;242else243pLed->BlinkingLedState = RTW_LED_ON;244_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);245}246}247break;248249case LED_BLINK_WPS:250if (pLed->bLedOn)251pLed->BlinkingLedState = RTW_LED_OFF;252else253pLed->BlinkingLedState = RTW_LED_ON;254_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);255break;256257case LED_BLINK_WPS_STOP: /* WPS success */258if (pLed->BlinkingLedState == RTW_LED_ON) {259pLed->BlinkingLedState = RTW_LED_OFF;260_set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);261bStopBlinking = _FALSE;262} else263bStopBlinking = _TRUE;264265if (bStopBlinking) {266if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)267SwLedOff(padapter, pLed);268else {269pLed->bLedLinkBlinkInProgress = _TRUE;270pLed->CurrLedState = LED_BLINK_NORMAL;271if (pLed->bLedOn)272pLed->BlinkingLedState = RTW_LED_OFF;273else274pLed->BlinkingLedState = RTW_LED_ON;275_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);276}277pLed->bLedWPSBlinkInProgress = _FALSE;278}279break;280281default:282break;283}284285}286287void288SwLedBlink2(289PLED_USB pLed290)291{292_adapter *padapter = pLed->padapter;293struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);294u8 bStopBlinking = _FALSE;295296/* Change LED according to BlinkingLedState specified. */297if (pLed->BlinkingLedState == RTW_LED_ON) {298SwLedOn(padapter, pLed);299} else {300SwLedOff(padapter, pLed);301}302303switch (pLed->CurrLedState) {304case LED_BLINK_SCAN:305pLed->BlinkTimes--;306if (pLed->BlinkTimes == 0)307bStopBlinking = _TRUE;308309if (bStopBlinking) {310if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)311SwLedOff(padapter, pLed);312else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {313pLed->CurrLedState = RTW_LED_ON;314pLed->BlinkingLedState = RTW_LED_ON;315SwLedOn(padapter, pLed);316317} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {318pLed->CurrLedState = RTW_LED_OFF;319pLed->BlinkingLedState = RTW_LED_OFF;320SwLedOff(padapter, pLed);321}322pLed->bLedScanBlinkInProgress = _FALSE;323} else {324if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)325SwLedOff(padapter, pLed);326else {327if (pLed->bLedOn)328pLed->BlinkingLedState = RTW_LED_OFF;329else330pLed->BlinkingLedState = RTW_LED_ON;331_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);332}333}334break;335336case LED_BLINK_TXRX:337pLed->BlinkTimes--;338if (pLed->BlinkTimes == 0)339bStopBlinking = _TRUE;340if (bStopBlinking) {341if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)342SwLedOff(padapter, pLed);343else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {344pLed->CurrLedState = RTW_LED_ON;345pLed->BlinkingLedState = RTW_LED_ON;346SwLedOn(padapter, pLed);347348} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {349pLed->CurrLedState = RTW_LED_OFF;350pLed->BlinkingLedState = RTW_LED_OFF;351SwLedOff(padapter, pLed);352}353pLed->bLedBlinkInProgress = _FALSE;354} else {355if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)356SwLedOff(padapter, pLed);357else {358if (pLed->bLedOn)359pLed->BlinkingLedState = RTW_LED_OFF;360else361pLed->BlinkingLedState = RTW_LED_ON;362_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);363}364}365break;366367default:368break;369}370371}372373void374SwLedBlink3(375PLED_USB pLed376)377{378_adapter *padapter = pLed->padapter;379struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);380u8 bStopBlinking = _FALSE;381382/* Change LED according to BlinkingLedState specified. */383if (pLed->BlinkingLedState == RTW_LED_ON) {384SwLedOn(padapter, pLed);385} else {386if (pLed->CurrLedState != LED_BLINK_WPS_STOP)387SwLedOff(padapter, pLed);388}389390switch (pLed->CurrLedState) {391case LED_BLINK_SCAN:392pLed->BlinkTimes--;393if (pLed->BlinkTimes == 0)394bStopBlinking = _TRUE;395396if (bStopBlinking) {397if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)398SwLedOff(padapter, pLed);399else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {400pLed->CurrLedState = RTW_LED_ON;401pLed->BlinkingLedState = RTW_LED_ON;402if (!pLed->bLedOn)403SwLedOn(padapter, pLed);404405} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {406pLed->CurrLedState = RTW_LED_OFF;407pLed->BlinkingLedState = RTW_LED_OFF;408if (pLed->bLedOn)409SwLedOff(padapter, pLed);410411}412pLed->bLedScanBlinkInProgress = _FALSE;413} else {414if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)415SwLedOff(padapter, pLed);416else {417if (pLed->bLedOn)418pLed->BlinkingLedState = RTW_LED_OFF;419else420pLed->BlinkingLedState = RTW_LED_ON;421_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);422}423}424break;425426case LED_BLINK_TXRX:427pLed->BlinkTimes--;428if (pLed->BlinkTimes == 0)429bStopBlinking = _TRUE;430if (bStopBlinking) {431if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)432SwLedOff(padapter, pLed);433else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {434pLed->CurrLedState = RTW_LED_ON;435pLed->BlinkingLedState = RTW_LED_ON;436437if (!pLed->bLedOn)438SwLedOn(padapter, pLed);439440} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {441pLed->CurrLedState = RTW_LED_OFF;442pLed->BlinkingLedState = RTW_LED_OFF;443444if (pLed->bLedOn)445SwLedOff(padapter, pLed);446447448}449pLed->bLedBlinkInProgress = _FALSE;450} else {451if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)452SwLedOff(padapter, pLed);453else {454if (pLed->bLedOn)455pLed->BlinkingLedState = RTW_LED_OFF;456else457pLed->BlinkingLedState = RTW_LED_ON;458_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);459}460}461break;462463case LED_BLINK_WPS:464if (pLed->bLedOn)465pLed->BlinkingLedState = RTW_LED_OFF;466else467pLed->BlinkingLedState = RTW_LED_ON;468_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);469break;470471case LED_BLINK_WPS_STOP: /* WPS success */472if (pLed->BlinkingLedState == RTW_LED_ON) {473pLed->BlinkingLedState = RTW_LED_OFF;474_set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);475bStopBlinking = _FALSE;476} else477bStopBlinking = _TRUE;478479if (bStopBlinking) {480if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)481SwLedOff(padapter, pLed);482else {483pLed->CurrLedState = RTW_LED_ON;484pLed->BlinkingLedState = RTW_LED_ON;485SwLedOn(padapter, pLed);486}487pLed->bLedWPSBlinkInProgress = _FALSE;488}489break;490491492default:493break;494}495496}497498499void500SwLedBlink4(501PLED_USB pLed502)503{504_adapter *padapter = pLed->padapter;505struct led_priv *ledpriv = adapter_to_led(padapter);506struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);507PLED_USB pLed1 = &(ledpriv->SwLed1);508u8 bStopBlinking = _FALSE;509510/* Change LED according to BlinkingLedState specified. */511if (pLed->BlinkingLedState == RTW_LED_ON) {512SwLedOn(padapter, pLed);513} else {514SwLedOff(padapter, pLed);515}516517if (!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN) {518pLed1->BlinkingLedState = RTW_LED_OFF;519pLed1->CurrLedState = RTW_LED_OFF;520SwLedOff(padapter, pLed1);521}522523switch (pLed->CurrLedState) {524case LED_BLINK_SLOWLY:525if (pLed->bLedOn)526pLed->BlinkingLedState = RTW_LED_OFF;527else528pLed->BlinkingLedState = RTW_LED_ON;529_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);530break;531532case LED_BLINK_StartToBlink:533if (pLed->bLedOn) {534pLed->BlinkingLedState = RTW_LED_OFF;535_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);536} else {537pLed->BlinkingLedState = RTW_LED_ON;538_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);539}540break;541542case LED_BLINK_SCAN:543pLed->BlinkTimes--;544if (pLed->BlinkTimes == 0)545bStopBlinking = _FALSE;546#if 0547548if (bStopBlinking) {549if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)550SwLedOff(padapter, pLed);551else {552pLed->bLedNoLinkBlinkInProgress = _FALSE;553pLed->CurrLedState = LED_BLINK_SLOWLY;554if (pLed->bLedOn)555pLed->BlinkingLedState = RTW_LED_OFF;556else557pLed->BlinkingLedState = RTW_LED_ON;558_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);559}560pLed->bLedScanBlinkInProgress = _FALSE;561} else562#endif563{564if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)565SwLedOff(padapter, pLed);566else {567if (pLed->bLedOn)568pLed->BlinkingLedState = RTW_LED_OFF;569else570pLed->BlinkingLedState = RTW_LED_ON;571_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);572}573}574575break;576577case LED_BLINK_TXRX:578pLed->BlinkTimes--;579if (pLed->BlinkTimes == 0)580bStopBlinking = _TRUE;581if (bStopBlinking) {582if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)583SwLedOff(padapter, pLed);584else {585pLed->bLedNoLinkBlinkInProgress = _TRUE;586pLed->CurrLedState = LED_BLINK_SLOWLY;587if (pLed->bLedOn)588pLed->BlinkingLedState = RTW_LED_OFF;589else590pLed->BlinkingLedState = RTW_LED_ON;591_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);592}593pLed->bLedBlinkInProgress = _FALSE;594} else {595if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)596SwLedOff(padapter, pLed);597else {598599if (pLed->bLedOn)600pLed->BlinkingLedState = RTW_LED_OFF;601else602pLed->BlinkingLedState = RTW_LED_ON;603604_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);605}606}607break;608609case LED_BLINK_WPS:610if (pLed->bLedOn) {611pLed->BlinkingLedState = RTW_LED_OFF;612_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);613} else {614pLed->BlinkingLedState = RTW_LED_ON;615_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);616}617break;618619case LED_BLINK_WPS_STOP: /* WPS authentication fail */620if (pLed->bLedOn)621pLed->BlinkingLedState = RTW_LED_OFF;622else623pLed->BlinkingLedState = RTW_LED_ON;624625_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);626break;627628case LED_BLINK_WPS_STOP_OVERLAP: /* WPS session overlap */629pLed->BlinkTimes--;630if (pLed->BlinkTimes == 0) {631if (pLed->bLedOn)632pLed->BlinkTimes = 1;633else634bStopBlinking = _TRUE;635}636637if (bStopBlinking) {638pLed->BlinkTimes = 10;639pLed->BlinkingLedState = RTW_LED_ON;640_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);641} else {642if (pLed->bLedOn)643pLed->BlinkingLedState = RTW_LED_OFF;644else645pLed->BlinkingLedState = RTW_LED_ON;646647_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);648}649break;650651case LED_BLINK_ALWAYS_ON:652pLed->BlinkTimes--;653if (pLed->BlinkTimes == 0)654bStopBlinking = _TRUE;655if (bStopBlinking) {656if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)657SwLedOff(padapter, pLed);658else {659pLed->bLedNoLinkBlinkInProgress = _TRUE;660pLed->CurrLedState = LED_BLINK_SLOWLY;661if (pLed->bLedOn)662pLed->BlinkingLedState = RTW_LED_OFF;663else664pLed->BlinkingLedState = RTW_LED_ON;665666_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);667}668pLed->bLedBlinkInProgress = _FALSE;669} else {670if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS) {671SwLedOff(padapter, pLed);672} else {673if (pLed->bLedOn)674pLed->BlinkingLedState = RTW_LED_OFF;675else676pLed->BlinkingLedState = RTW_LED_ON;677678_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);679}680}681break;682683default:684break;685}686687688689}690691void692SwLedBlink5(693PLED_USB pLed694)695{696_adapter *padapter = pLed->padapter;697struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);698u8 bStopBlinking = _FALSE;699700/* Change LED according to BlinkingLedState specified. */701if (pLed->BlinkingLedState == RTW_LED_ON) {702SwLedOn(padapter, pLed);703} else {704SwLedOff(padapter, pLed);705}706707switch (pLed->CurrLedState) {708case LED_BLINK_SCAN:709pLed->BlinkTimes--;710if (pLed->BlinkTimes == 0)711bStopBlinking = _TRUE;712713if (bStopBlinking) {714if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS) {715pLed->CurrLedState = RTW_LED_OFF;716pLed->BlinkingLedState = RTW_LED_OFF;717if (pLed->bLedOn)718SwLedOff(padapter, pLed);719} else {720pLed->CurrLedState = RTW_LED_ON;721pLed->BlinkingLedState = RTW_LED_ON;722if (!pLed->bLedOn)723_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);724}725726pLed->bLedScanBlinkInProgress = _FALSE;727} else {728if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)729SwLedOff(padapter, pLed);730else {731if (pLed->bLedOn)732pLed->BlinkingLedState = RTW_LED_OFF;733else734pLed->BlinkingLedState = RTW_LED_ON;735_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);736}737}738break;739740741case LED_BLINK_TXRX:742pLed->BlinkTimes--;743if (pLed->BlinkTimes == 0)744bStopBlinking = _TRUE;745746if (bStopBlinking) {747if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS) {748pLed->CurrLedState = RTW_LED_OFF;749pLed->BlinkingLedState = RTW_LED_OFF;750if (pLed->bLedOn)751SwLedOff(padapter, pLed);752} else {753pLed->CurrLedState = RTW_LED_ON;754pLed->BlinkingLedState = RTW_LED_ON;755if (!pLed->bLedOn)756_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);757}758759pLed->bLedBlinkInProgress = _FALSE;760} else {761if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)762SwLedOff(padapter, pLed);763else {764if (pLed->bLedOn)765pLed->BlinkingLedState = RTW_LED_OFF;766else767pLed->BlinkingLedState = RTW_LED_ON;768_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);769}770}771break;772773default:774break;775}776777778779}780781void782SwLedBlink6(783PLED_USB pLed784)785{786_adapter *padapter = pLed->padapter;787struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);788u8 bStopBlinking = _FALSE;789790/* Change LED according to BlinkingLedState specified. */791if (pLed->BlinkingLedState == RTW_LED_ON) {792SwLedOn(padapter, pLed);793} else {794SwLedOff(padapter, pLed);795}796797}798799void800SwLedBlink7(801PLED_USB pLed802)803{804PADAPTER Adapter = pLed->padapter;805struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);806BOOLEAN bStopBlinking = _FALSE;807808/* Change LED according to BlinkingLedState specified. */809if (pLed->BlinkingLedState == RTW_LED_ON) {810SwLedOn(Adapter, pLed);811} else {812if (pLed->CurrLedState != LED_BLINK_WPS_STOP)813SwLedOff(Adapter, pLed);814}815816switch (pLed->CurrLedState) {817case LED_BLINK_SCAN:818pLed->BlinkTimes--;819if (pLed->BlinkTimes == 0)820bStopBlinking = _TRUE;821822if (bStopBlinking) {823if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)824SwLedOff(Adapter, pLed);825else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {826pLed->CurrLedState = RTW_LED_ON;827pLed->BlinkingLedState = RTW_LED_ON;828if (!pLed->bLedOn)829SwLedOn(Adapter, pLed);830831} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {832pLed->CurrLedState = RTW_LED_OFF;833pLed->BlinkingLedState = RTW_LED_OFF;834if (pLed->bLedOn)835SwLedOff(Adapter, pLed);836837}838pLed->bLedScanBlinkInProgress = _FALSE;839} else {840if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)841SwLedOff(Adapter, pLed);842else {843if (pLed->bLedOn)844pLed->BlinkingLedState = RTW_LED_OFF;845else846pLed->BlinkingLedState = RTW_LED_ON;847_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);848}849}850break;851852case LED_BLINK_WPS:853if (pLed->bLedOn)854pLed->BlinkingLedState = RTW_LED_OFF;855else856pLed->BlinkingLedState = RTW_LED_ON;857_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);858break;859860case LED_BLINK_WPS_STOP: /* WPS success */861if (pLed->BlinkingLedState == RTW_LED_ON) {862pLed->BlinkingLedState = RTW_LED_OFF;863_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);864bStopBlinking = _FALSE;865} else866bStopBlinking = _TRUE;867868if (bStopBlinking) {869if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)870SwLedOff(Adapter, pLed);871else {872pLed->CurrLedState = RTW_LED_ON;873pLed->BlinkingLedState = RTW_LED_ON;874SwLedOn(Adapter, pLed);875}876pLed->bLedWPSBlinkInProgress = _FALSE;877}878break;879880881default:882break;883}884885886}887888void889SwLedBlink8(890PLED_USB pLed891)892{893PADAPTER Adapter = pLed->padapter;894895/* Change LED according to BlinkingLedState specified. */896if (pLed->BlinkingLedState == RTW_LED_ON) {897SwLedOn(Adapter, pLed);898} else {899SwLedOff(Adapter, pLed);900}901902903}904905/* page added for Belkin AC950. 20120813 */906void907SwLedBlink9(908PLED_USB pLed909)910{911PADAPTER Adapter = pLed->padapter;912struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);913BOOLEAN bStopBlinking = _FALSE;914915/* Change LED according to BlinkingLedState specified. */916if (pLed->BlinkingLedState == RTW_LED_ON) {917SwLedOn(Adapter, pLed);918} else {919SwLedOff(Adapter, pLed);920}921/* RTW_INFO("%s, pLed->CurrLedState=%d, pLed->BlinkingLedState=%d\n", __FUNCTION__, pLed->CurrLedState, pLed->BlinkingLedState); */922923924switch (pLed->CurrLedState) {925case RTW_LED_ON:926SwLedOn(Adapter, pLed);927break;928929case RTW_LED_OFF:930SwLedOff(Adapter, pLed);931break;932933case LED_BLINK_SLOWLY:934if (pLed->bLedOn)935pLed->BlinkingLedState = RTW_LED_OFF;936else937pLed->BlinkingLedState = RTW_LED_ON;938_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);939break;940941case LED_BLINK_StartToBlink:942if (pLed->bLedOn) {943pLed->BlinkingLedState = RTW_LED_OFF;944_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);945} else {946pLed->BlinkingLedState = RTW_LED_ON;947_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);948}949break;950951case LED_BLINK_SCAN:952pLed->BlinkTimes--;953if (pLed->BlinkTimes == 0)954bStopBlinking = _TRUE;955956if (bStopBlinking) {957if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)958SwLedOff(Adapter, pLed);959else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {960pLed->bLedLinkBlinkInProgress = _TRUE;961pLed->CurrLedState = LED_BLINK_SLOWLY;962963_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);964} else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {965pLed->bLedNoLinkBlinkInProgress = _TRUE;966pLed->CurrLedState = LED_BLINK_SLOWLY;967if (pLed->bLedOn)968pLed->BlinkingLedState = RTW_LED_OFF;969else970pLed->BlinkingLedState = RTW_LED_ON;971_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);972}973pLed->BlinkTimes = 0;974pLed->bLedBlinkInProgress = _FALSE;975} else {976if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)977SwLedOff(Adapter, pLed);978else {979if (pLed->bLedOn)980pLed->BlinkingLedState = RTW_LED_OFF;981else982pLed->BlinkingLedState = RTW_LED_ON;983_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);984}985}986break;987988case LED_BLINK_TXRX:989pLed->BlinkTimes--;990if (pLed->BlinkTimes == 0)991bStopBlinking = _TRUE;992if (bStopBlinking) {993if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)994SwLedOff(Adapter, pLed);995else {996pLed->CurrLedState = LED_BLINK_SLOWLY;997if (pLed->bLedOn)998pLed->BlinkingLedState = RTW_LED_OFF;999else1000pLed->BlinkingLedState = RTW_LED_ON;1001_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1002}1003pLed->bLedBlinkInProgress = _FALSE;1004} else {1005if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1006SwLedOff(Adapter, pLed);1007else {1008if (pLed->bLedOn)1009pLed->BlinkingLedState = RTW_LED_OFF;1010else1011pLed->BlinkingLedState = RTW_LED_ON;10121013_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1014}1015}1016break;10171018case LED_BLINK_WPS:1019if (pLed->bLedOn) {1020pLed->BlinkingLedState = RTW_LED_OFF;1021_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);1022} else {1023pLed->BlinkingLedState = RTW_LED_ON;1024_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1025}1026break;10271028case LED_BLINK_WPS_STOP: /* WPS authentication fail */1029if (pLed->bLedOn)1030pLed->BlinkingLedState = RTW_LED_OFF;1031else1032pLed->BlinkingLedState = RTW_LED_ON;10331034_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1035break;10361037case LED_BLINK_WPS_STOP_OVERLAP: /* WPS session overlap */1038pLed->BlinkTimes--;1039pLed->BlinkCounter--;1040if (pLed->BlinkCounter == 0) {1041pLed->BlinkingLedState = RTW_LED_OFF;1042pLed->CurrLedState = RTW_LED_OFF;1043_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1044} else {1045if (pLed->BlinkTimes == 0) {1046if (pLed->bLedOn)1047pLed->BlinkTimes = 1;1048else1049bStopBlinking = _TRUE;1050}10511052if (bStopBlinking) {1053pLed->BlinkTimes = 10;1054pLed->BlinkingLedState = RTW_LED_ON;1055_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);1056} else {1057if (pLed->bLedOn)1058pLed->BlinkingLedState = RTW_LED_OFF;1059else1060pLed->BlinkingLedState = RTW_LED_ON;10611062_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1063}1064}1065break;10661067case LED_BLINK_ALWAYS_ON:1068pLed->BlinkTimes--;1069if (pLed->BlinkTimes == 0)1070bStopBlinking = _TRUE;1071if (bStopBlinking) {1072if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1073SwLedOff(Adapter, pLed);1074else {1075if (IS_HARDWARE_TYPE_8812AU(Adapter)) {1076pLed->BlinkingLedState = RTW_LED_ON;1077pLed->CurrLedState = LED_BLINK_ALWAYS_ON;1078} else {1079pLed->bLedNoLinkBlinkInProgress = _TRUE;1080pLed->CurrLedState = LED_BLINK_SLOWLY;1081if (pLed->bLedOn)1082pLed->BlinkingLedState = RTW_LED_OFF;1083else1084pLed->BlinkingLedState = RTW_LED_ON;1085}1086_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);1087}1088pLed->bLedBlinkInProgress = _FALSE;1089} else {1090if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS) {1091SwLedOff(Adapter, pLed);1092} else {1093if (IS_HARDWARE_TYPE_8812AU(Adapter))1094pLed->BlinkingLedState = RTW_LED_ON;1095else {1096if (pLed->bLedOn)1097pLed->BlinkingLedState = RTW_LED_OFF;1098else1099pLed->BlinkingLedState = RTW_LED_ON;1100}1101_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1102}1103}1104break;11051106case LED_BLINK_LINK_IN_PROCESS:1107if (pLed->bLedOn) {1108pLed->BlinkingLedState = RTW_LED_OFF;1109_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ON_BELKIN);1110} else {1111pLed->BlinkingLedState = RTW_LED_ON;1112_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_OFF_BELKIN);1113}1114break;11151116case LED_BLINK_AUTH_ERROR:1117pLed->BlinkTimes--;1118if (pLed->BlinkTimes == 0)1119bStopBlinking = _TRUE;1120if (bStopBlinking == _FALSE) {1121if (pLed->bLedOn) {1122pLed->BlinkingLedState = RTW_LED_OFF;1123_set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);1124} else {1125pLed->BlinkingLedState = RTW_LED_ON;1126_set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);1127}1128} else {1129pLed->CurrLedState = RTW_LED_OFF;1130pLed->BlinkingLedState = RTW_LED_OFF;1131_set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);1132}1133break;11341135default:1136break;1137}11381139}11401141/* page added for Netgear A6200V2. 20120827 */1142void1143SwLedBlink10(1144PLED_USB pLed1145)1146{1147PADAPTER Adapter = pLed->padapter;1148struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);1149BOOLEAN bStopBlinking = _FALSE;11501151/* Change LED according to BlinkingLedState specified. */1152if (pLed->BlinkingLedState == RTW_LED_ON) {1153SwLedOn(Adapter, pLed);1154} else {1155SwLedOff(Adapter, pLed);1156}115711581159switch (pLed->CurrLedState) {1160case RTW_LED_ON:1161SwLedOn(Adapter, pLed);1162break;11631164case RTW_LED_OFF:1165SwLedOff(Adapter, pLed);1166break;11671168case LED_BLINK_SLOWLY:1169if (pLed->bLedOn)1170pLed->BlinkingLedState = RTW_LED_OFF;1171else1172pLed->BlinkingLedState = RTW_LED_ON;1173_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);1174break;11751176case LED_BLINK_StartToBlink:1177if (pLed->bLedOn) {1178pLed->BlinkingLedState = RTW_LED_OFF;1179_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);1180} else {1181pLed->BlinkingLedState = RTW_LED_ON;1182_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1183}1184break;11851186case LED_BLINK_SCAN:1187pLed->BlinkTimes--;1188if (pLed->BlinkTimes == 0)1189bStopBlinking = _TRUE;11901191if (bStopBlinking) {1192if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)1193SwLedOff(Adapter, pLed);1194else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {1195pLed->bLedNoLinkBlinkInProgress = _FALSE;1196pLed->CurrLedState = RTW_LED_OFF;1197pLed->BlinkingLedState = RTW_LED_OFF;11981199_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);1200}1201pLed->BlinkTimes = 0;1202pLed->bLedBlinkInProgress = _FALSE;1203} else {1204if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1205SwLedOff(Adapter, pLed);1206else {1207if (pLed->bLedOn) {1208pLed->BlinkingLedState = RTW_LED_OFF;1209_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);1210} else {1211pLed->BlinkingLedState = RTW_LED_ON;1212_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_SLOWLY_INTERVAL_NETGEAR + LED_BLINK_LINK_INTERVAL_NETGEAR);1213}1214}1215}1216break;12171218case LED_BLINK_WPS:1219if (pLed->bLedOn) {1220pLed->BlinkingLedState = RTW_LED_OFF;1221_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);1222} else {1223pLed->BlinkingLedState = RTW_LED_ON;1224_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL + LED_BLINK_LINK_INTERVAL_NETGEAR);1225}1226break;12271228case LED_BLINK_WPS_STOP: /* WPS authentication fail */1229if (pLed->bLedOn)1230pLed->BlinkingLedState = RTW_LED_OFF;1231else1232pLed->BlinkingLedState = RTW_LED_ON;12331234_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1235break;12361237case LED_BLINK_WPS_STOP_OVERLAP: /* WPS session overlap */1238pLed->BlinkTimes--;1239pLed->BlinkCounter--;1240if (pLed->BlinkCounter == 0) {1241pLed->BlinkingLedState = RTW_LED_OFF;1242pLed->CurrLedState = RTW_LED_OFF;1243_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1244} else {1245if (pLed->BlinkTimes == 0) {1246if (pLed->bLedOn)1247pLed->BlinkTimes = 1;1248else1249bStopBlinking = _TRUE;1250}12511252if (bStopBlinking) {1253pLed->BlinkTimes = 10;1254pLed->BlinkingLedState = RTW_LED_ON;1255_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);1256} else {1257if (pLed->bLedOn)1258pLed->BlinkingLedState = RTW_LED_OFF;1259else1260pLed->BlinkingLedState = RTW_LED_ON;12611262_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1263}1264}1265break;12661267case LED_BLINK_ALWAYS_ON:1268pLed->BlinkTimes--;1269if (pLed->BlinkTimes == 0)1270bStopBlinking = _TRUE;1271if (bStopBlinking) {1272if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1273SwLedOff(Adapter, pLed);1274else {1275if (IS_HARDWARE_TYPE_8812AU(Adapter)) {1276pLed->BlinkingLedState = RTW_LED_ON;1277pLed->CurrLedState = LED_BLINK_ALWAYS_ON;1278} else {1279pLed->bLedNoLinkBlinkInProgress = _TRUE;1280pLed->CurrLedState = LED_BLINK_SLOWLY;1281if (pLed->bLedOn)1282pLed->BlinkingLedState = RTW_LED_OFF;1283else1284pLed->BlinkingLedState = RTW_LED_ON;1285}1286_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);1287}1288pLed->bLedBlinkInProgress = _FALSE;1289} else {1290if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS) {1291SwLedOff(Adapter, pLed);1292} else {1293if (IS_HARDWARE_TYPE_8812AU(Adapter))1294pLed->BlinkingLedState = RTW_LED_ON;1295else {1296if (pLed->bLedOn)1297pLed->BlinkingLedState = RTW_LED_OFF;1298else1299pLed->BlinkingLedState = RTW_LED_ON;1300}1301_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1302}1303}1304break;13051306case LED_BLINK_LINK_IN_PROCESS:1307if (pLed->bLedOn) {1308pLed->BlinkingLedState = RTW_LED_OFF;1309_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ON_BELKIN);1310} else {1311pLed->BlinkingLedState = RTW_LED_ON;1312_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_OFF_BELKIN);1313}1314break;13151316case LED_BLINK_AUTH_ERROR:1317pLed->BlinkTimes--;1318if (pLed->BlinkTimes == 0)1319bStopBlinking = _TRUE;1320if (bStopBlinking == _FALSE) {1321if (pLed->bLedOn) {1322pLed->BlinkingLedState = RTW_LED_OFF;1323_set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);1324} else {1325pLed->BlinkingLedState = RTW_LED_ON;1326_set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);1327}1328} else {1329pLed->CurrLedState = RTW_LED_OFF;1330pLed->BlinkingLedState = RTW_LED_OFF;1331_set_timer(&(pLed->BlinkTimer), LED_BLINK_ERROR_INTERVAL_BELKIN);1332}1333break;13341335default:1336break;1337}133813391340}13411342void1343SwLedBlink11(1344PLED_USB pLed1345)1346{1347PADAPTER Adapter = pLed->padapter;1348struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);1349BOOLEAN bStopBlinking = _FALSE;13501351/* Change LED according to BlinkingLedState specified. */1352if (pLed->BlinkingLedState == RTW_LED_ON) {1353SwLedOn(Adapter, pLed);1354} else {1355SwLedOff(Adapter, pLed);1356}13571358switch (pLed->CurrLedState) {1359case LED_BLINK_TXRX:1360if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1361SwLedOff(Adapter, pLed);1362else {1363if (pLed->bLedOn)1364pLed->BlinkingLedState = RTW_LED_OFF;1365else1366pLed->BlinkingLedState = RTW_LED_ON;1367_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);1368}13691370break;13711372case LED_BLINK_WPS:1373if (pLed->BlinkTimes == 5) {1374SwLedOn(Adapter, pLed);1375_set_timer(&(pLed->BlinkTimer), LED_CM11_LINK_ON_INTERVEL);1376} else {1377if (pLed->bLedOn) {1378pLed->BlinkingLedState = RTW_LED_OFF;1379_set_timer(&(pLed->BlinkTimer), LED_CM11_BLINK_INTERVAL);1380} else {1381pLed->BlinkingLedState = RTW_LED_ON;1382_set_timer(&(pLed->BlinkTimer), LED_CM11_BLINK_INTERVAL);1383}1384}1385pLed->BlinkTimes--;1386if (pLed->BlinkTimes == 0)1387bStopBlinking = _TRUE;1388if (bStopBlinking == _TRUE)1389pLed->BlinkTimes = 5;1390break;13911392case LED_BLINK_WPS_STOP: /* WPS authentication fail */1393if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {1394if (pLed->bLedOn)1395pLed->BlinkingLedState = RTW_LED_OFF;1396else1397pLed->BlinkingLedState = RTW_LED_ON;1398_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);1399} else {1400pLed->CurrLedState = RTW_LED_ON;1401pLed->BlinkingLedState = RTW_LED_ON;1402SwLedOn(Adapter, pLed);1403_set_timer(&(pLed->BlinkTimer), 0);1404}1405break;14061407default:1408break;1409}14101411}14121413void1414SwLedBlink12(1415PLED_USB pLed1416)1417{1418PADAPTER Adapter = pLed->padapter;1419struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);1420BOOLEAN bStopBlinking = _FALSE;14211422/* Change LED according to BlinkingLedState specified. */1423if (pLed->BlinkingLedState == RTW_LED_ON) {1424SwLedOn(Adapter, pLed);1425} else {1426SwLedOff(Adapter, pLed);1427}14281429switch (pLed->CurrLedState) {1430case LED_BLINK_SLOWLY:1431if (pLed->bLedOn)1432pLed->BlinkingLedState = RTW_LED_OFF;1433else1434pLed->BlinkingLedState = RTW_LED_ON;1435_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);1436break;14371438case LED_BLINK_TXRX:1439pLed->BlinkTimes--;1440if (pLed->BlinkTimes == 0)1441bStopBlinking = _TRUE;14421443if (bStopBlinking) {1444if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS) {1445pLed->CurrLedState = RTW_LED_OFF;1446pLed->BlinkingLedState = RTW_LED_OFF;1447if (pLed->bLedOn)1448SwLedOff(Adapter, pLed);1449} else {1450pLed->bLedNoLinkBlinkInProgress = _TRUE;1451pLed->CurrLedState = LED_BLINK_SLOWLY;1452if (pLed->bLedOn)1453pLed->BlinkingLedState = RTW_LED_OFF;1454else1455pLed->BlinkingLedState = RTW_LED_ON;1456_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);1457}14581459pLed->bLedBlinkInProgress = _FALSE;1460} else {1461if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1462SwLedOff(Adapter, pLed);1463else {1464if (pLed->bLedOn)1465pLed->BlinkingLedState = RTW_LED_OFF;1466else1467pLed->BlinkingLedState = RTW_LED_ON;1468_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1469}1470}1471break;14721473default:1474break;1475}1476147714781479}14801481void1482SwLedBlink13(1483PLED_USB pLed1484)1485{1486PADAPTER Adapter = pLed->padapter;1487struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);1488BOOLEAN bStopBlinking = _FALSE;1489static u8 LinkBlinkCnt = 0;14901491/* Change LED according to BlinkingLedState specified. */1492if (pLed->BlinkingLedState == RTW_LED_ON) {1493SwLedOn(Adapter, pLed);1494} else {1495if (pLed->CurrLedState != LED_BLINK_WPS_STOP)1496SwLedOff(Adapter, pLed);1497}1498switch (pLed->CurrLedState) {1499case LED_BLINK_LINK_IN_PROCESS:1500if (!pLed->bLedWPSBlinkInProgress)1501LinkBlinkCnt++;15021503if (LinkBlinkCnt > 15) {1504LinkBlinkCnt = 0;1505pLed->bLedBlinkInProgress = _FALSE;1506break;1507}1508if (pLed->bLedOn) {1509pLed->BlinkingLedState = RTW_LED_OFF;1510_set_timer(&(pLed->BlinkTimer), 500);1511} else {1512pLed->BlinkingLedState = RTW_LED_ON;1513_set_timer(&(pLed->BlinkTimer), 500);1514}15151516break;15171518case LED_BLINK_WPS:1519if (pLed->bLedOn) {1520pLed->BlinkingLedState = RTW_LED_OFF;1521_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_NETGEAR);1522} else {1523pLed->BlinkingLedState = RTW_LED_ON;1524_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_NETGEAR);1525}15261527break;15281529case LED_BLINK_WPS_STOP: /* WPS success */1530SwLedOff(Adapter, pLed);1531pLed->bLedWPSBlinkInProgress = _FALSE;1532break;15331534default:1535LinkBlinkCnt = 0;1536break;1537}153815391540}15411542void1543SwLedBlink14(1544PLED_USB pLed1545)1546{1547PADAPTER Adapter = pLed->padapter;1548struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);1549BOOLEAN bStopBlinking = _FALSE;1550static u8 LinkBlinkCnt = 0;15511552/* Change LED according to BlinkingLedState specified. */1553if (pLed->BlinkingLedState == RTW_LED_ON) {1554SwLedOn(Adapter, pLed);1555} else {1556if (pLed->CurrLedState != LED_BLINK_WPS_STOP)1557SwLedOff(Adapter, pLed);1558}1559switch (pLed->CurrLedState) {1560case LED_BLINK_TXRX:1561pLed->BlinkTimes--;1562if (pLed->BlinkTimes == 0)1563bStopBlinking = _TRUE;1564if (bStopBlinking) {1565if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1566SwLedOff(Adapter, pLed);1567else1568SwLedOn(Adapter, pLed);1569pLed->bLedBlinkInProgress = _FALSE;1570} else {1571if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1572SwLedOff(Adapter, pLed);1573else {1574if (pLed->bLedOn) {1575pLed->BlinkingLedState = RTW_LED_OFF;1576if (IS_HARDWARE_TYPE_8812AU(Adapter))1577_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);1578else1579_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1580} else {1581pLed->BlinkingLedState = RTW_LED_ON;1582if (IS_HARDWARE_TYPE_8812AU(Adapter))1583_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1584else1585_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1586}1587}1588}15891590break;15911592default:1593LinkBlinkCnt = 0;1594break;1595}15961597}15981599void1600SwLedBlink15(1601PLED_USB pLed1602)1603{1604PADAPTER Adapter = pLed->padapter;1605struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);1606BOOLEAN bStopBlinking = _FALSE;1607static u8 LinkBlinkCnt = 0;1608/* Change LED according to BlinkingLedState specified. */16091610if (pLed->BlinkingLedState == RTW_LED_ON) {1611SwLedOn(Adapter, pLed);1612} else {1613if (pLed->CurrLedState != LED_BLINK_WPS_STOP)1614SwLedOff(Adapter, pLed);1615}1616switch (pLed->CurrLedState) {1617case LED_BLINK_WPS:1618if (pLed->bLedOn) {1619pLed->BlinkingLedState = RTW_LED_OFF;1620_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_DLINK);1621} else {1622pLed->BlinkingLedState = RTW_LED_ON;1623_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_DLINK);1624}1625break;16261627case LED_BLINK_WPS_STOP: /* WPS success */16281629if (pLed->BlinkingLedState == RTW_LED_OFF) {1630pLed->bLedWPSBlinkInProgress = _FALSE;1631return;1632}16331634pLed->CurrLedState = LED_BLINK_WPS_STOP;1635pLed->BlinkingLedState = RTW_LED_OFF;16361637_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_LINKED_ON_INTERVAL_DLINK);1638break;16391640case LED_BLINK_NO_LINK: {1641static BOOLEAN bLedOn = _TRUE;1642if (bLedOn) {1643bLedOn = _FALSE;1644pLed->BlinkingLedState = RTW_LED_OFF;1645} else {1646bLedOn = _TRUE;1647pLed->BlinkingLedState = RTW_LED_ON;1648}1649pLed->bLedBlinkInProgress = _TRUE;1650_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL);1651}1652break;16531654case LED_BLINK_LINK_IDEL: {1655static BOOLEAN bLedOn = _TRUE;1656if (bLedOn) {1657bLedOn = _FALSE;1658pLed->BlinkingLedState = RTW_LED_OFF;1659} else {1660bLedOn = _TRUE;1661pLed->BlinkingLedState = RTW_LED_ON;16621663}1664pLed->bLedBlinkInProgress = _TRUE;1665_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_IDEL_INTERVAL);1666}1667break;16681669case LED_BLINK_SCAN: {1670static u8 BlinkTime = 0;1671if (BlinkTime % 2 == 0)1672pLed->BlinkingLedState = RTW_LED_ON;1673else1674pLed->BlinkingLedState = RTW_LED_OFF;1675BlinkTime++;16761677if (BlinkTime < 24) {1678pLed->bLedBlinkInProgress = _TRUE;16791680if (pLed->BlinkingLedState == RTW_LED_ON)1681_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_OFF_INTERVAL);1682else1683_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_ON_INTERVAL);1684} else {1685/* if(pLed->OLDLedState ==LED_NO_LINK_BLINK) */1686if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {1687pLed->CurrLedState = LED_BLINK_NO_LINK;1688pLed->BlinkingLedState = RTW_LED_ON;16891690_set_timer(&(pLed->BlinkTimer), 100);1691}1692BlinkTime = 0;1693}1694}1695break;16961697case LED_BLINK_TXRX:1698pLed->BlinkTimes--;1699if (pLed->BlinkTimes == 0)1700bStopBlinking = _TRUE;1701if (bStopBlinking) {1702if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1703SwLedOff(Adapter, pLed);1704else1705SwLedOn(Adapter, pLed);1706pLed->bLedBlinkInProgress = _FALSE;1707} else {1708if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS)1709SwLedOff(Adapter, pLed);1710else {1711if (pLed->bLedOn)1712pLed->BlinkingLedState = RTW_LED_OFF;1713else1714pLed->BlinkingLedState = RTW_LED_ON;1715_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);1716}1717}1718break;17191720default:1721LinkBlinkCnt = 0;1722break;1723}17241725}17261727/*1728* Description:1729* Handler function of LED Blinking.1730* We dispatch acture LED blink action according to LedStrategy.1731* */1732void BlinkHandler(PLED_USB pLed)1733{1734_adapter *padapter = pLed->padapter;1735struct led_priv *ledpriv = adapter_to_led(padapter);17361737/* RTW_INFO("%s (%s:%d)\n",__FUNCTION__, current->comm, current->pid); */17381739if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter))) {1740/*RTW_INFO("%s bDriverStopped:%s, bSurpriseRemoved:%s\n"1741, __func__1742, rtw_is_drv_stopped(padapter)?"True":"False"1743, rtw_is_surprise_removed(padapter)?"True":"False" );*/1744return;1745}17461747#ifdef CONFIG_SW_LED1748if (padapter->registrypriv.led_ctrl != 1) {1749if (padapter->registrypriv.led_ctrl == 0)1750{1751// Cause LED to be always off1752pLed->BlinkingLedState = RTW_LED_OFF;1753} else {1754// Cause LED to be always on for led_ctrl 2 or greater1755pLed->BlinkingLedState = RTW_LED_ON;1756}1757// Skip various switch cases where SwLedBlink*() called below1758pLed->CurrLedState = LED_UNKNOWN;1759}1760#endif17611762switch (ledpriv->LedStrategy) {1763#if CONFIG_RTW_SW_LED_TRX_DA_CLASSIFY1764case SW_LED_MODE_UC_TRX_ONLY:1765rtw_sw_led_blink_uc_trx_only(pLed);1766break;1767#endif17681769case SW_LED_MODE0:1770SwLedBlink(pLed);1771break;17721773case SW_LED_MODE1:1774SwLedBlink1(pLed);1775break;17761777case SW_LED_MODE2:1778SwLedBlink2(pLed);1779break;17801781case SW_LED_MODE3:1782SwLedBlink3(pLed);1783break;17841785case SW_LED_MODE4:1786SwLedBlink4(pLed);1787break;17881789case SW_LED_MODE5:1790SwLedBlink5(pLed);1791break;17921793case SW_LED_MODE6:1794SwLedBlink6(pLed);1795break;17961797case SW_LED_MODE7:1798SwLedBlink7(pLed);1799break;18001801case SW_LED_MODE8:1802SwLedBlink8(pLed);1803break;18041805case SW_LED_MODE9:1806SwLedBlink9(pLed);1807break;18081809case SW_LED_MODE10:1810SwLedBlink10(pLed);1811break;18121813case SW_LED_MODE11:1814SwLedBlink11(pLed);1815break;18161817case SW_LED_MODE12:1818SwLedBlink12(pLed);1819break;18201821case SW_LED_MODE13:1822SwLedBlink13(pLed);1823break;18241825case SW_LED_MODE14:1826SwLedBlink14(pLed);1827break;18281829case SW_LED_MODE15:1830SwLedBlink15(pLed);1831break;18321833default:1834/* SwLedBlink(pLed); */1835break;1836}1837}18381839/*1840* Description:1841* Callback function of LED BlinkTimer,1842* it just schedules to corresponding BlinkWorkItem/led_blink_hdl1843* */1844void BlinkTimerCallback(void *data)1845{1846PLED_USB pLed = (PLED_USB)data;1847_adapter *padapter = pLed->padapter;18481849/* RTW_INFO("%s\n", __FUNCTION__); */18501851if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter))) {1852/*RTW_INFO("%s bDriverStopped:%s, bSurpriseRemoved:%s\n"1853, __func__1854, rtw_is_drv_stopped(padapter)?"True":"False"1855, rtw_is_surprise_removed(padapter)?"True":"False" );*/1856return;1857}18581859#ifdef CONFIG_RTW_LED_HANDLED_BY_CMD_THREAD1860rtw_led_blink_cmd(padapter, (void *)pLed);1861#else1862_set_workitem(&(pLed->BlinkWorkItem));1863#endif1864}18651866/*1867* Description:1868* Callback function of LED BlinkWorkItem.1869* We dispatch acture LED blink action according to LedStrategy.1870* */1871void BlinkWorkItemCallback(_workitem *work)1872{1873PLED_USB pLed = container_of(work, LED_USB, BlinkWorkItem);1874BlinkHandler(pLed);1875}18761877static void1878SwLedControlMode0(1879_adapter *padapter,1880LED_CTL_MODE LedAction1881)1882{1883struct led_priv *ledpriv = adapter_to_led(padapter);1884PLED_USB pLed = &(ledpriv->SwLed1);18851886/* Decide led state */1887switch (LedAction) {1888case LED_CTL_TX:1889case LED_CTL_RX:1890if (pLed->bLedBlinkInProgress == _FALSE) {1891pLed->bLedBlinkInProgress = _TRUE;18921893pLed->CurrLedState = LED_BLINK_NORMAL;1894pLed->BlinkTimes = 2;18951896if (pLed->bLedOn)1897pLed->BlinkingLedState = RTW_LED_OFF;1898else1899pLed->BlinkingLedState = RTW_LED_ON;1900_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);1901}1902break;19031904case LED_CTL_START_TO_LINK:1905if (pLed->bLedBlinkInProgress == _FALSE) {1906pLed->bLedBlinkInProgress = _TRUE;19071908pLed->CurrLedState = LED_BLINK_StartToBlink;1909pLed->BlinkTimes = 24;19101911if (pLed->bLedOn)1912pLed->BlinkingLedState = RTW_LED_OFF;1913else1914pLed->BlinkingLedState = RTW_LED_ON;1915_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);1916} else1917pLed->CurrLedState = LED_BLINK_StartToBlink;1918break;19191920case LED_CTL_LINK:1921pLed->CurrLedState = RTW_LED_ON;1922if (pLed->bLedBlinkInProgress == _FALSE) {1923pLed->BlinkingLedState = RTW_LED_ON;1924_set_timer(&(pLed->BlinkTimer), 0);1925}1926break;19271928case LED_CTL_NO_LINK:1929pLed->CurrLedState = RTW_LED_OFF;1930if (pLed->bLedBlinkInProgress == _FALSE) {1931pLed->BlinkingLedState = RTW_LED_OFF;1932_set_timer(&(pLed->BlinkTimer), 0);1933}1934break;19351936case LED_CTL_POWER_OFF:1937pLed->CurrLedState = RTW_LED_OFF;1938if (pLed->bLedBlinkInProgress) {1939_cancel_timer_ex(&(pLed->BlinkTimer));1940pLed->bLedBlinkInProgress = _FALSE;1941}1942SwLedOff(padapter, pLed);1943break;19441945case LED_CTL_START_WPS:1946if (pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == RTW_LED_ON) {1947pLed->bLedBlinkInProgress = _TRUE;19481949pLed->CurrLedState = LED_BLINK_WPS;1950pLed->BlinkTimes = 20;19511952if (pLed->bLedOn) {1953pLed->BlinkingLedState = RTW_LED_OFF;1954_set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);1955} else {1956pLed->BlinkingLedState = RTW_LED_ON;1957_set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);1958}1959}1960break;19611962case LED_CTL_STOP_WPS:1963if (pLed->bLedBlinkInProgress) {1964pLed->CurrLedState = RTW_LED_OFF;1965_cancel_timer_ex(&(pLed->BlinkTimer));1966pLed->bLedBlinkInProgress = _FALSE;1967}1968break;196919701971default:1972break;1973}197419751976}19771978/* ALPHA, added by chiyoko, 20090106 */1979static void1980SwLedControlMode1(1981_adapter *padapter,1982LED_CTL_MODE LedAction1983)1984{1985struct led_priv *ledpriv = adapter_to_led(padapter);1986PLED_USB pLed = &(ledpriv->SwLed0);1987struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);1988PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);19891990u32 uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA; /* add by ylb 20121012 for customer led for alpha */1991if (pHalData->CustomerID == RT_CID_819x_ALPHA_Dlink)1992uLedBlinkNoLinkInterval = LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS;19931994if (pHalData->CustomerID == RT_CID_819x_CAMEO)1995pLed = &(ledpriv->SwLed1);19961997switch (LedAction) {1998case LED_CTL_POWER_ON:1999case LED_CTL_START_TO_LINK:2000case LED_CTL_NO_LINK:2001if (pLed->bLedNoLinkBlinkInProgress == _FALSE) {2002if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2003return;2004if (pLed->bLedLinkBlinkInProgress == _TRUE) {2005_cancel_timer_ex(&(pLed->BlinkTimer));2006pLed->bLedLinkBlinkInProgress = _FALSE;2007}2008if (pLed->bLedBlinkInProgress == _TRUE) {2009_cancel_timer_ex(&(pLed->BlinkTimer));2010pLed->bLedBlinkInProgress = _FALSE;2011}20122013pLed->bLedNoLinkBlinkInProgress = _TRUE;2014pLed->CurrLedState = LED_BLINK_SLOWLY;2015if (pLed->bLedOn)2016pLed->BlinkingLedState = RTW_LED_OFF;2017else2018pLed->BlinkingLedState = RTW_LED_ON;2019_set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);/* change by ylb 20121012 for customer led for alpha */2020}2021break;20222023case LED_CTL_LINK:2024if (pLed->bLedLinkBlinkInProgress == _FALSE) {2025if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2026return;2027if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2028_cancel_timer_ex(&(pLed->BlinkTimer));2029pLed->bLedNoLinkBlinkInProgress = _FALSE;2030}2031if (pLed->bLedBlinkInProgress == _TRUE) {2032_cancel_timer_ex(&(pLed->BlinkTimer));2033pLed->bLedBlinkInProgress = _FALSE;2034}2035pLed->bLedLinkBlinkInProgress = _TRUE;2036pLed->CurrLedState = LED_BLINK_NORMAL;2037if (pLed->bLedOn)2038pLed->BlinkingLedState = RTW_LED_OFF;2039else2040pLed->BlinkingLedState = RTW_LED_ON;2041_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);2042}2043break;20442045case LED_CTL_SITE_SURVEY:2046if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE))2047;2048else if (pLed->bLedScanBlinkInProgress == _FALSE) {2049if (IS_LED_WPS_BLINKING(pLed))2050return;20512052if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2053_cancel_timer_ex(&(pLed->BlinkTimer));2054pLed->bLedNoLinkBlinkInProgress = _FALSE;2055}2056if (pLed->bLedLinkBlinkInProgress == _TRUE) {2057_cancel_timer_ex(&(pLed->BlinkTimer));2058pLed->bLedLinkBlinkInProgress = _FALSE;2059}2060if (pLed->bLedBlinkInProgress == _TRUE) {2061_cancel_timer_ex(&(pLed->BlinkTimer));2062pLed->bLedBlinkInProgress = _FALSE;2063}2064pLed->bLedScanBlinkInProgress = _TRUE;2065pLed->CurrLedState = LED_BLINK_SCAN;2066pLed->BlinkTimes = 24;2067if (pLed->bLedOn)2068pLed->BlinkingLedState = RTW_LED_OFF;2069else2070pLed->BlinkingLedState = RTW_LED_ON;20712072if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason == RF_CHANGE_BY_IPS)2073_set_timer(&(pLed->BlinkTimer), LED_INITIAL_INTERVAL);2074else2075_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);20762077}2078break;20792080case LED_CTL_TX:2081case LED_CTL_RX:2082if (pLed->bLedBlinkInProgress == _FALSE) {2083if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2084return;2085if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2086_cancel_timer_ex(&(pLed->BlinkTimer));2087pLed->bLedNoLinkBlinkInProgress = _FALSE;2088}2089if (pLed->bLedLinkBlinkInProgress == _TRUE) {2090_cancel_timer_ex(&(pLed->BlinkTimer));2091pLed->bLedLinkBlinkInProgress = _FALSE;2092}2093pLed->bLedBlinkInProgress = _TRUE;2094pLed->CurrLedState = LED_BLINK_TXRX;2095pLed->BlinkTimes = 2;2096if (pLed->bLedOn)2097pLed->BlinkingLedState = RTW_LED_OFF;2098else2099pLed->BlinkingLedState = RTW_LED_ON;2100_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);2101}2102break;21032104case LED_CTL_START_WPS: /* wait until xinpin finish */2105case LED_CTL_START_WPS_BOTTON:2106if (pLed->bLedWPSBlinkInProgress == _FALSE) {2107if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2108_cancel_timer_ex(&(pLed->BlinkTimer));2109pLed->bLedNoLinkBlinkInProgress = _FALSE;2110}2111if (pLed->bLedLinkBlinkInProgress == _TRUE) {2112_cancel_timer_ex(&(pLed->BlinkTimer));2113pLed->bLedLinkBlinkInProgress = _FALSE;2114}2115if (pLed->bLedBlinkInProgress == _TRUE) {2116_cancel_timer_ex(&(pLed->BlinkTimer));2117pLed->bLedBlinkInProgress = _FALSE;2118}2119if (pLed->bLedScanBlinkInProgress == _TRUE) {2120_cancel_timer_ex(&(pLed->BlinkTimer));2121pLed->bLedScanBlinkInProgress = _FALSE;2122}2123pLed->bLedWPSBlinkInProgress = _TRUE;2124pLed->CurrLedState = LED_BLINK_WPS;2125if (pLed->bLedOn)2126pLed->BlinkingLedState = RTW_LED_OFF;2127else2128pLed->BlinkingLedState = RTW_LED_ON;2129_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);2130}2131break;213221332134case LED_CTL_STOP_WPS:2135if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2136_cancel_timer_ex(&(pLed->BlinkTimer));2137pLed->bLedNoLinkBlinkInProgress = _FALSE;2138}2139if (pLed->bLedLinkBlinkInProgress == _TRUE) {2140_cancel_timer_ex(&(pLed->BlinkTimer));2141pLed->bLedLinkBlinkInProgress = _FALSE;2142}2143if (pLed->bLedBlinkInProgress == _TRUE) {2144_cancel_timer_ex(&(pLed->BlinkTimer));2145pLed->bLedBlinkInProgress = _FALSE;2146}2147if (pLed->bLedScanBlinkInProgress == _TRUE) {2148_cancel_timer_ex(&(pLed->BlinkTimer));2149pLed->bLedScanBlinkInProgress = _FALSE;2150}2151if (pLed->bLedWPSBlinkInProgress)2152_cancel_timer_ex(&(pLed->BlinkTimer));2153else2154pLed->bLedWPSBlinkInProgress = _TRUE;21552156pLed->CurrLedState = LED_BLINK_WPS_STOP;2157if (pLed->bLedOn) {2158pLed->BlinkingLedState = RTW_LED_OFF;2159_set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);2160} else {2161pLed->BlinkingLedState = RTW_LED_ON;2162_set_timer(&(pLed->BlinkTimer), 0);2163}2164break;21652166case LED_CTL_STOP_WPS_FAIL:2167if (pLed->bLedWPSBlinkInProgress) {2168_cancel_timer_ex(&(pLed->BlinkTimer));2169pLed->bLedWPSBlinkInProgress = _FALSE;2170}21712172pLed->bLedNoLinkBlinkInProgress = _TRUE;2173pLed->CurrLedState = LED_BLINK_SLOWLY;2174if (pLed->bLedOn)2175pLed->BlinkingLedState = RTW_LED_OFF;2176else2177pLed->BlinkingLedState = RTW_LED_ON;2178_set_timer(&(pLed->BlinkTimer), uLedBlinkNoLinkInterval);/* change by ylb 20121012 for customer led for alpha */2179break;21802181case LED_CTL_POWER_OFF:2182pLed->CurrLedState = RTW_LED_OFF;2183pLed->BlinkingLedState = RTW_LED_OFF;2184if (pLed->bLedNoLinkBlinkInProgress) {2185_cancel_timer_ex(&(pLed->BlinkTimer));2186pLed->bLedNoLinkBlinkInProgress = _FALSE;2187}2188if (pLed->bLedLinkBlinkInProgress) {2189_cancel_timer_ex(&(pLed->BlinkTimer));2190pLed->bLedLinkBlinkInProgress = _FALSE;2191}2192if (pLed->bLedBlinkInProgress) {2193_cancel_timer_ex(&(pLed->BlinkTimer));2194pLed->bLedBlinkInProgress = _FALSE;2195}2196if (pLed->bLedWPSBlinkInProgress) {2197_cancel_timer_ex(&(pLed->BlinkTimer));2198pLed->bLedWPSBlinkInProgress = _FALSE;2199}2200if (pLed->bLedScanBlinkInProgress) {2201_cancel_timer_ex(&(pLed->BlinkTimer));2202pLed->bLedScanBlinkInProgress = _FALSE;2203}22042205SwLedOff(padapter, pLed);2206break;22072208default:2209break;22102211}22122213}22142215/* Arcadyan/Sitecom , added by chiyoko, 20090216 */2216static void2217SwLedControlMode2(2218_adapter *padapter,2219LED_CTL_MODE LedAction2220)2221{2222struct led_priv *ledpriv = adapter_to_led(padapter);2223struct mlme_priv *pmlmepriv = &padapter->mlmepriv;2224PLED_USB pLed = &(ledpriv->SwLed0);22252226switch (LedAction) {2227case LED_CTL_SITE_SURVEY:2228if (pmlmepriv->LinkDetectInfo.bBusyTraffic)2229;2230else if (pLed->bLedScanBlinkInProgress == _FALSE) {2231if (IS_LED_WPS_BLINKING(pLed))2232return;22332234if (pLed->bLedBlinkInProgress == _TRUE) {2235_cancel_timer_ex(&(pLed->BlinkTimer));2236pLed->bLedBlinkInProgress = _FALSE;2237}2238pLed->bLedScanBlinkInProgress = _TRUE;2239pLed->CurrLedState = LED_BLINK_SCAN;2240pLed->BlinkTimes = 24;2241if (pLed->bLedOn)2242pLed->BlinkingLedState = RTW_LED_OFF;2243else2244pLed->BlinkingLedState = RTW_LED_ON;2245_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);2246}2247break;22482249case LED_CTL_TX:2250case LED_CTL_RX:2251if ((pLed->bLedBlinkInProgress == _FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)) {2252if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2253return;22542255pLed->bLedBlinkInProgress = _TRUE;2256pLed->CurrLedState = LED_BLINK_TXRX;2257pLed->BlinkTimes = 2;2258if (pLed->bLedOn)2259pLed->BlinkingLedState = RTW_LED_OFF;2260else2261pLed->BlinkingLedState = RTW_LED_ON;2262_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);2263}2264break;22652266case LED_CTL_LINK:2267pLed->CurrLedState = RTW_LED_ON;2268pLed->BlinkingLedState = RTW_LED_ON;2269if (pLed->bLedBlinkInProgress) {2270_cancel_timer_ex(&(pLed->BlinkTimer));2271pLed->bLedBlinkInProgress = _FALSE;2272}2273if (pLed->bLedScanBlinkInProgress) {2274_cancel_timer_ex(&(pLed->BlinkTimer));2275pLed->bLedScanBlinkInProgress = _FALSE;2276}22772278_set_timer(&(pLed->BlinkTimer), 0);2279break;22802281case LED_CTL_START_WPS: /* wait until xinpin finish */2282case LED_CTL_START_WPS_BOTTON:2283if (pLed->bLedWPSBlinkInProgress == _FALSE) {2284if (pLed->bLedBlinkInProgress == _TRUE) {2285_cancel_timer_ex(&(pLed->BlinkTimer));2286pLed->bLedBlinkInProgress = _FALSE;2287}2288if (pLed->bLedScanBlinkInProgress == _TRUE) {2289_cancel_timer_ex(&(pLed->BlinkTimer));2290pLed->bLedScanBlinkInProgress = _FALSE;2291}2292pLed->bLedWPSBlinkInProgress = _TRUE;2293pLed->CurrLedState = RTW_LED_ON;2294pLed->BlinkingLedState = RTW_LED_ON;2295_set_timer(&(pLed->BlinkTimer), 0);2296}2297break;22982299case LED_CTL_STOP_WPS:2300pLed->bLedWPSBlinkInProgress = _FALSE;2301if (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on) {2302pLed->CurrLedState = RTW_LED_OFF;2303pLed->BlinkingLedState = RTW_LED_OFF;2304_set_timer(&(pLed->BlinkTimer), 0);2305} else {2306pLed->CurrLedState = RTW_LED_ON;2307pLed->BlinkingLedState = RTW_LED_ON;2308_set_timer(&(pLed->BlinkTimer), 0);2309}2310break;23112312case LED_CTL_STOP_WPS_FAIL:2313pLed->bLedWPSBlinkInProgress = _FALSE;2314pLed->CurrLedState = RTW_LED_OFF;2315pLed->BlinkingLedState = RTW_LED_OFF;2316_set_timer(&(pLed->BlinkTimer), 0);2317break;23182319case LED_CTL_START_TO_LINK:2320case LED_CTL_NO_LINK:2321if (!IS_LED_BLINKING(pLed)) {2322pLed->CurrLedState = RTW_LED_OFF;2323pLed->BlinkingLedState = RTW_LED_OFF;2324_set_timer(&(pLed->BlinkTimer), 0);2325}2326break;23272328case LED_CTL_POWER_OFF:2329pLed->CurrLedState = RTW_LED_OFF;2330pLed->BlinkingLedState = RTW_LED_OFF;2331if (pLed->bLedBlinkInProgress) {2332_cancel_timer_ex(&(pLed->BlinkTimer));2333pLed->bLedBlinkInProgress = _FALSE;2334}2335if (pLed->bLedScanBlinkInProgress) {2336_cancel_timer_ex(&(pLed->BlinkTimer));2337pLed->bLedScanBlinkInProgress = _FALSE;2338}2339if (pLed->bLedWPSBlinkInProgress) {2340_cancel_timer_ex(&(pLed->BlinkTimer));2341pLed->bLedWPSBlinkInProgress = _FALSE;2342}23432344SwLedOff(padapter, pLed);2345break;23462347default:2348break;23492350}23512352}23532354/* COREGA, added by chiyoko, 20090316 */2355static void2356SwLedControlMode3(2357_adapter *padapter,2358LED_CTL_MODE LedAction2359)2360{2361struct led_priv *ledpriv = adapter_to_led(padapter);2362struct mlme_priv *pmlmepriv = &padapter->mlmepriv;2363PLED_USB pLed = &(ledpriv->SwLed0);23642365switch (LedAction) {2366case LED_CTL_SITE_SURVEY:2367if (pmlmepriv->LinkDetectInfo.bBusyTraffic)2368;2369else if (pLed->bLedScanBlinkInProgress == _FALSE) {2370if (IS_LED_WPS_BLINKING(pLed))2371return;23722373if (pLed->bLedBlinkInProgress == _TRUE) {2374_cancel_timer_ex(&(pLed->BlinkTimer));2375pLed->bLedBlinkInProgress = _FALSE;2376}2377pLed->bLedScanBlinkInProgress = _TRUE;2378pLed->CurrLedState = LED_BLINK_SCAN;2379pLed->BlinkTimes = 24;2380if (pLed->bLedOn)2381pLed->BlinkingLedState = RTW_LED_OFF;2382else2383pLed->BlinkingLedState = RTW_LED_ON;2384_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);2385}2386break;23872388case LED_CTL_TX:2389case LED_CTL_RX:2390if ((pLed->bLedBlinkInProgress == _FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)) {2391if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2392return;23932394pLed->bLedBlinkInProgress = _TRUE;2395pLed->CurrLedState = LED_BLINK_TXRX;2396pLed->BlinkTimes = 2;2397if (pLed->bLedOn)2398pLed->BlinkingLedState = RTW_LED_OFF;2399else2400pLed->BlinkingLedState = RTW_LED_ON;2401_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);2402}2403break;24042405case LED_CTL_LINK:2406if (IS_LED_WPS_BLINKING(pLed))2407return;24082409pLed->CurrLedState = RTW_LED_ON;2410pLed->BlinkingLedState = RTW_LED_ON;2411if (pLed->bLedBlinkInProgress) {2412_cancel_timer_ex(&(pLed->BlinkTimer));2413pLed->bLedBlinkInProgress = _FALSE;2414}2415if (pLed->bLedScanBlinkInProgress) {2416_cancel_timer_ex(&(pLed->BlinkTimer));2417pLed->bLedScanBlinkInProgress = _FALSE;2418}24192420_set_timer(&(pLed->BlinkTimer), 0);2421break;24222423case LED_CTL_START_WPS: /* wait until xinpin finish */2424case LED_CTL_START_WPS_BOTTON:2425if (pLed->bLedWPSBlinkInProgress == _FALSE) {2426if (pLed->bLedBlinkInProgress == _TRUE) {2427_cancel_timer_ex(&(pLed->BlinkTimer));2428pLed->bLedBlinkInProgress = _FALSE;2429}2430if (pLed->bLedScanBlinkInProgress == _TRUE) {2431_cancel_timer_ex(&(pLed->BlinkTimer));2432pLed->bLedScanBlinkInProgress = _FALSE;2433}2434pLed->bLedWPSBlinkInProgress = _TRUE;2435pLed->CurrLedState = LED_BLINK_WPS;2436if (pLed->bLedOn)2437pLed->BlinkingLedState = RTW_LED_OFF;2438else2439pLed->BlinkingLedState = RTW_LED_ON;2440_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);2441}2442break;24432444case LED_CTL_STOP_WPS:2445if (pLed->bLedWPSBlinkInProgress) {2446_cancel_timer_ex(&(pLed->BlinkTimer));2447pLed->bLedWPSBlinkInProgress = _FALSE;2448} else2449pLed->bLedWPSBlinkInProgress = _TRUE;24502451pLed->CurrLedState = LED_BLINK_WPS_STOP;2452if (pLed->bLedOn) {2453pLed->BlinkingLedState = RTW_LED_OFF;2454_set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);2455} else {2456pLed->BlinkingLedState = RTW_LED_ON;2457_set_timer(&(pLed->BlinkTimer), 0);2458}24592460break;24612462case LED_CTL_STOP_WPS_FAIL:2463if (pLed->bLedWPSBlinkInProgress) {2464_cancel_timer_ex(&(pLed->BlinkTimer));2465pLed->bLedWPSBlinkInProgress = _FALSE;2466}24672468pLed->CurrLedState = RTW_LED_OFF;2469pLed->BlinkingLedState = RTW_LED_OFF;2470_set_timer(&(pLed->BlinkTimer), 0);2471break;24722473case LED_CTL_START_TO_LINK:2474case LED_CTL_NO_LINK:2475if (!IS_LED_BLINKING(pLed)) {2476pLed->CurrLedState = RTW_LED_OFF;2477pLed->BlinkingLedState = RTW_LED_OFF;2478_set_timer(&(pLed->BlinkTimer), 0);2479}2480break;24812482case LED_CTL_POWER_OFF:2483pLed->CurrLedState = RTW_LED_OFF;2484pLed->BlinkingLedState = RTW_LED_OFF;2485if (pLed->bLedBlinkInProgress) {2486_cancel_timer_ex(&(pLed->BlinkTimer));2487pLed->bLedBlinkInProgress = _FALSE;2488}2489if (pLed->bLedScanBlinkInProgress) {2490_cancel_timer_ex(&(pLed->BlinkTimer));2491pLed->bLedScanBlinkInProgress = _FALSE;2492}2493if (pLed->bLedWPSBlinkInProgress) {2494_cancel_timer_ex(&(pLed->BlinkTimer));2495pLed->bLedWPSBlinkInProgress = _FALSE;2496}24972498SwLedOff(padapter, pLed);2499break;25002501default:2502break;25032504}25052506}250725082509/* Edimax-Belkin, added by chiyoko, 20090413 */2510static void2511SwLedControlMode4(2512_adapter *padapter,2513LED_CTL_MODE LedAction2514)2515{2516struct led_priv *ledpriv = adapter_to_led(padapter);2517struct mlme_priv *pmlmepriv = &padapter->mlmepriv;2518PLED_USB pLed = &(ledpriv->SwLed0);2519PLED_USB pLed1 = &(ledpriv->SwLed1);25202521switch (LedAction) {2522case LED_CTL_START_TO_LINK:2523if (pLed1->bLedWPSBlinkInProgress) {2524pLed1->bLedWPSBlinkInProgress = _FALSE;2525_cancel_timer_ex(&(pLed1->BlinkTimer));25262527pLed1->BlinkingLedState = RTW_LED_OFF;2528pLed1->CurrLedState = RTW_LED_OFF;25292530if (pLed1->bLedOn)2531_set_timer(&(pLed->BlinkTimer), 0);2532}25332534if (pLed->bLedStartToLinkBlinkInProgress == _FALSE) {2535if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2536return;2537if (pLed->bLedBlinkInProgress == _TRUE) {2538_cancel_timer_ex(&(pLed->BlinkTimer));2539pLed->bLedBlinkInProgress = _FALSE;2540}2541if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2542_cancel_timer_ex(&(pLed->BlinkTimer));2543pLed->bLedNoLinkBlinkInProgress = _FALSE;2544}25452546pLed->bLedStartToLinkBlinkInProgress = _TRUE;2547pLed->CurrLedState = LED_BLINK_StartToBlink;2548if (pLed->bLedOn) {2549pLed->BlinkingLedState = RTW_LED_OFF;2550_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);2551} else {2552pLed->BlinkingLedState = RTW_LED_ON;2553_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);2554}2555}2556break;25572558case LED_CTL_LINK:2559case LED_CTL_NO_LINK:2560/* LED1 settings */2561if (LedAction == LED_CTL_LINK) {2562if (pLed1->bLedWPSBlinkInProgress) {2563pLed1->bLedWPSBlinkInProgress = _FALSE;2564_cancel_timer_ex(&(pLed1->BlinkTimer));25652566pLed1->BlinkingLedState = RTW_LED_OFF;2567pLed1->CurrLedState = RTW_LED_OFF;25682569if (pLed1->bLedOn)2570_set_timer(&(pLed->BlinkTimer), 0);2571}2572}25732574if (pLed->bLedNoLinkBlinkInProgress == _FALSE) {2575if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2576return;2577if (pLed->bLedBlinkInProgress == _TRUE) {2578_cancel_timer_ex(&(pLed->BlinkTimer));2579pLed->bLedBlinkInProgress = _FALSE;2580}25812582pLed->bLedNoLinkBlinkInProgress = _TRUE;2583pLed->CurrLedState = LED_BLINK_SLOWLY;2584if (pLed->bLedOn)2585pLed->BlinkingLedState = RTW_LED_OFF;2586else2587pLed->BlinkingLedState = RTW_LED_ON;25882589_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);2590}2591break;25922593case LED_CTL_SITE_SURVEY:2594if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE))2595;2596else if (pLed->bLedScanBlinkInProgress == _FALSE) {2597if (IS_LED_WPS_BLINKING(pLed))2598return;25992600if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2601_cancel_timer_ex(&(pLed->BlinkTimer));2602pLed->bLedNoLinkBlinkInProgress = _FALSE;2603}2604if (pLed->bLedBlinkInProgress == _TRUE) {2605_cancel_timer_ex(&(pLed->BlinkTimer));2606pLed->bLedBlinkInProgress = _FALSE;2607}2608pLed->bLedScanBlinkInProgress = _TRUE;2609pLed->CurrLedState = LED_BLINK_SCAN;2610pLed->BlinkTimes = 24;2611if (pLed->bLedOn)2612pLed->BlinkingLedState = RTW_LED_OFF;2613else2614pLed->BlinkingLedState = RTW_LED_ON;2615_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);2616}2617break;26182619case LED_CTL_TX:2620case LED_CTL_RX:2621if (pLed->bLedBlinkInProgress == _FALSE) {2622if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))2623return;2624if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2625_cancel_timer_ex(&(pLed->BlinkTimer));2626pLed->bLedNoLinkBlinkInProgress = _FALSE;2627}2628pLed->bLedBlinkInProgress = _TRUE;2629pLed->CurrLedState = LED_BLINK_TXRX;2630pLed->BlinkTimes = 2;2631if (pLed->bLedOn)2632pLed->BlinkingLedState = RTW_LED_OFF;2633else2634pLed->BlinkingLedState = RTW_LED_ON;2635_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);2636}2637break;26382639case LED_CTL_START_WPS: /* wait until xinpin finish */2640case LED_CTL_START_WPS_BOTTON:2641if (pLed1->bLedWPSBlinkInProgress) {2642pLed1->bLedWPSBlinkInProgress = _FALSE;2643_cancel_timer_ex(&(pLed1->BlinkTimer));26442645pLed1->BlinkingLedState = RTW_LED_OFF;2646pLed1->CurrLedState = RTW_LED_OFF;26472648if (pLed1->bLedOn)2649_set_timer(&(pLed->BlinkTimer), 0);2650}26512652if (pLed->bLedWPSBlinkInProgress == _FALSE) {2653if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2654_cancel_timer_ex(&(pLed->BlinkTimer));2655pLed->bLedNoLinkBlinkInProgress = _FALSE;2656}2657if (pLed->bLedBlinkInProgress == _TRUE) {2658_cancel_timer_ex(&(pLed->BlinkTimer));2659pLed->bLedBlinkInProgress = _FALSE;2660}2661if (pLed->bLedScanBlinkInProgress == _TRUE) {2662_cancel_timer_ex(&(pLed->BlinkTimer));2663pLed->bLedScanBlinkInProgress = _FALSE;2664}2665pLed->bLedWPSBlinkInProgress = _TRUE;2666pLed->CurrLedState = LED_BLINK_WPS;2667if (pLed->bLedOn) {2668pLed->BlinkingLedState = RTW_LED_OFF;2669_set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);2670} else {2671pLed->BlinkingLedState = RTW_LED_ON;2672_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);2673}2674}2675break;26762677case LED_CTL_STOP_WPS: /* WPS connect success */2678if (pLed->bLedWPSBlinkInProgress) {2679_cancel_timer_ex(&(pLed->BlinkTimer));2680pLed->bLedWPSBlinkInProgress = _FALSE;2681}26822683pLed->bLedNoLinkBlinkInProgress = _TRUE;2684pLed->CurrLedState = LED_BLINK_SLOWLY;2685if (pLed->bLedOn)2686pLed->BlinkingLedState = RTW_LED_OFF;2687else2688pLed->BlinkingLedState = RTW_LED_ON;2689_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);26902691break;26922693case LED_CTL_STOP_WPS_FAIL: /* WPS authentication fail */2694if (pLed->bLedWPSBlinkInProgress) {2695_cancel_timer_ex(&(pLed->BlinkTimer));2696pLed->bLedWPSBlinkInProgress = _FALSE;2697}26982699pLed->bLedNoLinkBlinkInProgress = _TRUE;2700pLed->CurrLedState = LED_BLINK_SLOWLY;2701if (pLed->bLedOn)2702pLed->BlinkingLedState = RTW_LED_OFF;2703else2704pLed->BlinkingLedState = RTW_LED_ON;2705_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);27062707/* LED1 settings */2708if (pLed1->bLedWPSBlinkInProgress)2709_cancel_timer_ex(&(pLed1->BlinkTimer));2710else2711pLed1->bLedWPSBlinkInProgress = _TRUE;27122713pLed1->CurrLedState = LED_BLINK_WPS_STOP;2714if (pLed1->bLedOn)2715pLed1->BlinkingLedState = RTW_LED_OFF;2716else2717pLed1->BlinkingLedState = RTW_LED_ON;2718_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);27192720break;27212722case LED_CTL_STOP_WPS_FAIL_OVERLAP: /* WPS session overlap */2723if (pLed->bLedWPSBlinkInProgress) {2724_cancel_timer_ex(&(pLed->BlinkTimer));2725pLed->bLedWPSBlinkInProgress = _FALSE;2726}27272728pLed->bLedNoLinkBlinkInProgress = _TRUE;2729pLed->CurrLedState = LED_BLINK_SLOWLY;2730if (pLed->bLedOn)2731pLed->BlinkingLedState = RTW_LED_OFF;2732else2733pLed->BlinkingLedState = RTW_LED_ON;2734_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);27352736/* LED1 settings */2737if (pLed1->bLedWPSBlinkInProgress)2738_cancel_timer_ex(&(pLed1->BlinkTimer));2739else2740pLed1->bLedWPSBlinkInProgress = _TRUE;27412742pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;2743pLed1->BlinkTimes = 10;2744if (pLed1->bLedOn)2745pLed1->BlinkingLedState = RTW_LED_OFF;2746else2747pLed1->BlinkingLedState = RTW_LED_ON;2748_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);27492750break;27512752case LED_CTL_POWER_OFF:2753pLed->CurrLedState = RTW_LED_OFF;2754pLed->BlinkingLedState = RTW_LED_OFF;27552756if (pLed->bLedNoLinkBlinkInProgress) {2757_cancel_timer_ex(&(pLed->BlinkTimer));2758pLed->bLedNoLinkBlinkInProgress = _FALSE;2759}2760if (pLed->bLedLinkBlinkInProgress) {2761_cancel_timer_ex(&(pLed->BlinkTimer));2762pLed->bLedLinkBlinkInProgress = _FALSE;2763}2764if (pLed->bLedBlinkInProgress) {2765_cancel_timer_ex(&(pLed->BlinkTimer));2766pLed->bLedBlinkInProgress = _FALSE;2767}2768if (pLed->bLedWPSBlinkInProgress) {2769_cancel_timer_ex(&(pLed->BlinkTimer));2770pLed->bLedWPSBlinkInProgress = _FALSE;2771}2772if (pLed->bLedScanBlinkInProgress) {2773_cancel_timer_ex(&(pLed->BlinkTimer));2774pLed->bLedScanBlinkInProgress = _FALSE;2775}2776if (pLed->bLedStartToLinkBlinkInProgress) {2777_cancel_timer_ex(&(pLed->BlinkTimer));2778pLed->bLedStartToLinkBlinkInProgress = _FALSE;2779}27802781if (pLed1->bLedWPSBlinkInProgress) {2782_cancel_timer_ex(&(pLed1->BlinkTimer));2783pLed1->bLedWPSBlinkInProgress = _FALSE;2784}27852786pLed1->BlinkingLedState = LED_UNKNOWN;2787SwLedOff(padapter, pLed);2788SwLedOff(padapter, pLed1);2789break;27902791case LED_CTL_CONNECTION_NO_TRANSFER:2792if (pLed->bLedBlinkInProgress == _FALSE) {2793if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {2794_cancel_timer_ex(&(pLed->BlinkTimer));2795pLed->bLedNoLinkBlinkInProgress = _FALSE;2796}2797pLed->bLedBlinkInProgress = _TRUE;27982799pLed->CurrLedState = LED_BLINK_ALWAYS_ON;2800pLed->BlinkingLedState = RTW_LED_ON;2801_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);2802}2803break;28042805default:2806break;28072808}28092810}2811281228132814/* Sercomm-Belkin, added by chiyoko, 20090415 */2815static void2816SwLedControlMode5(2817_adapter *padapter,2818LED_CTL_MODE LedAction2819)2820{2821struct led_priv *ledpriv = adapter_to_led(padapter);2822struct mlme_priv *pmlmepriv = &padapter->mlmepriv;2823PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);2824PLED_USB pLed = &(ledpriv->SwLed0);28252826if (pHalData->CustomerID == RT_CID_819x_CAMEO)2827pLed = &(ledpriv->SwLed1);28282829switch (LedAction) {2830case LED_CTL_POWER_ON:2831case LED_CTL_NO_LINK:2832case LED_CTL_LINK: /* solid blue */2833pLed->CurrLedState = RTW_LED_ON;2834pLed->BlinkingLedState = RTW_LED_ON;28352836_set_timer(&(pLed->BlinkTimer), 0);2837break;28382839case LED_CTL_SITE_SURVEY:2840if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE))2841;2842else if (pLed->bLedScanBlinkInProgress == _FALSE) {2843if (pLed->bLedBlinkInProgress == _TRUE) {2844_cancel_timer_ex(&(pLed->BlinkTimer));2845pLed->bLedBlinkInProgress = _FALSE;2846}2847pLed->bLedScanBlinkInProgress = _TRUE;2848pLed->CurrLedState = LED_BLINK_SCAN;2849pLed->BlinkTimes = 24;2850if (pLed->bLedOn)2851pLed->BlinkingLedState = RTW_LED_OFF;2852else2853pLed->BlinkingLedState = RTW_LED_ON;2854_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);2855}2856break;28572858case LED_CTL_TX:2859case LED_CTL_RX:2860if (pLed->bLedBlinkInProgress == _FALSE) {2861if (pLed->CurrLedState == LED_BLINK_SCAN)2862return;2863pLed->bLedBlinkInProgress = _TRUE;2864pLed->CurrLedState = LED_BLINK_TXRX;2865pLed->BlinkTimes = 2;2866if (pLed->bLedOn)2867pLed->BlinkingLedState = RTW_LED_OFF;2868else2869pLed->BlinkingLedState = RTW_LED_ON;2870_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);2871}2872break;28732874case LED_CTL_POWER_OFF:2875pLed->CurrLedState = RTW_LED_OFF;2876pLed->BlinkingLedState = RTW_LED_OFF;28772878if (pLed->bLedBlinkInProgress) {2879_cancel_timer_ex(&(pLed->BlinkTimer));2880pLed->bLedBlinkInProgress = _FALSE;2881}28822883SwLedOff(padapter, pLed);2884break;28852886default:2887break;28882889}28902891}28922893/* WNC-Corega, added by chiyoko, 20090902 */2894static void2895SwLedControlMode6(2896_adapter *padapter,2897LED_CTL_MODE LedAction2898)2899{2900struct led_priv *ledpriv = adapter_to_led(padapter);2901struct mlme_priv *pmlmepriv = &padapter->mlmepriv;2902PLED_USB pLed0 = &(ledpriv->SwLed0);29032904switch (LedAction) {2905case LED_CTL_POWER_ON:2906case LED_CTL_LINK:2907case LED_CTL_NO_LINK:2908_cancel_timer_ex(&(pLed0->BlinkTimer));2909pLed0->CurrLedState = RTW_LED_ON;2910pLed0->BlinkingLedState = RTW_LED_ON;2911_set_timer(&(pLed0->BlinkTimer), 0);2912break;29132914case LED_CTL_POWER_OFF:2915SwLedOff(padapter, pLed0);2916break;29172918default:2919break;2920}29212922}29232924/* Netgear, added by sinda, 2011/11/11 */2925void2926SwLedControlMode7(2927PADAPTER Adapter,2928LED_CTL_MODE LedAction2929)2930{2931struct led_priv *ledpriv = adapter_to_led(Adapter);2932struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;2933PLED_USB pLed = &(ledpriv->SwLed0);29342935switch (LedAction) {2936case LED_CTL_SITE_SURVEY:2937if (pmlmepriv->LinkDetectInfo.bBusyTraffic)2938;2939else if (pLed->bLedScanBlinkInProgress == _FALSE) {2940if (IS_LED_WPS_BLINKING(pLed))2941return;29422943if (pLed->bLedBlinkInProgress == _TRUE) {2944_cancel_timer_ex(&(pLed->BlinkTimer));2945pLed->bLedBlinkInProgress = _FALSE;2946}2947pLed->bLedScanBlinkInProgress = _TRUE;2948pLed->CurrLedState = LED_BLINK_SCAN;2949pLed->BlinkTimes = 6;2950if (pLed->bLedOn)2951pLed->BlinkingLedState = RTW_LED_OFF;2952else2953pLed->BlinkingLedState = RTW_LED_ON;2954_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);2955}2956break;29572958case LED_CTL_LINK:2959if (IS_LED_WPS_BLINKING(pLed))2960return;29612962pLed->CurrLedState = RTW_LED_ON;2963pLed->BlinkingLedState = RTW_LED_ON;2964if (pLed->bLedBlinkInProgress) {2965_cancel_timer_ex(&(pLed->BlinkTimer));2966pLed->bLedBlinkInProgress = _FALSE;2967}2968if (pLed->bLedScanBlinkInProgress) {2969_cancel_timer_ex(&(pLed->BlinkTimer));2970pLed->bLedScanBlinkInProgress = _FALSE;2971}29722973_set_timer(&(pLed->BlinkTimer), 0);2974break;29752976case LED_CTL_START_WPS: /* wait until xinpin finish */2977case LED_CTL_START_WPS_BOTTON:2978if (pLed->bLedWPSBlinkInProgress == _FALSE) {2979if (pLed->bLedBlinkInProgress == _TRUE) {2980_cancel_timer_ex(&(pLed->BlinkTimer));2981pLed->bLedBlinkInProgress = _FALSE;2982}2983if (pLed->bLedScanBlinkInProgress == _TRUE) {2984_cancel_timer_ex(&(pLed->BlinkTimer));2985pLed->bLedScanBlinkInProgress = _FALSE;2986}2987pLed->bLedWPSBlinkInProgress = _TRUE;2988pLed->CurrLedState = LED_BLINK_WPS;2989if (pLed->bLedOn)2990pLed->BlinkingLedState = RTW_LED_OFF;2991else2992pLed->BlinkingLedState = RTW_LED_ON;2993_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);2994}2995break;29962997case LED_CTL_STOP_WPS:2998if (pLed->bLedWPSBlinkInProgress) {2999_cancel_timer_ex(&(pLed->BlinkTimer));3000pLed->bLedWPSBlinkInProgress = _FALSE;3001} else3002pLed->bLedWPSBlinkInProgress = _TRUE;30033004pLed->CurrLedState = LED_BLINK_WPS_STOP;3005if (pLed->bLedOn) {3006pLed->BlinkingLedState = RTW_LED_OFF;3007_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_NETGEAR);3008} else {3009pLed->BlinkingLedState = RTW_LED_ON;3010_set_timer(&(pLed->BlinkTimer), 0);3011}30123013break;301430153016case LED_CTL_STOP_WPS_FAIL:3017case LED_CTL_STOP_WPS_FAIL_OVERLAP: /* WPS session overlap */3018if (pLed->bLedWPSBlinkInProgress) {3019_cancel_timer_ex(&(pLed->BlinkTimer));3020pLed->bLedWPSBlinkInProgress = _FALSE;3021}30223023pLed->CurrLedState = RTW_LED_OFF;3024pLed->BlinkingLedState = RTW_LED_OFF;3025_set_timer(&(pLed->BlinkTimer), 0);3026break;30273028case LED_CTL_START_TO_LINK:3029case LED_CTL_NO_LINK:3030if (!IS_LED_BLINKING(pLed)) {3031pLed->CurrLedState = RTW_LED_OFF;3032pLed->BlinkingLedState = RTW_LED_OFF;3033_set_timer(&(pLed->BlinkTimer), 0);3034}3035break;30363037case LED_CTL_POWER_OFF:3038case LED_CTL_POWER_ON:3039pLed->CurrLedState = RTW_LED_OFF;3040pLed->BlinkingLedState = RTW_LED_OFF;3041if (pLed->bLedBlinkInProgress) {3042_cancel_timer_ex(&(pLed->BlinkTimer));3043pLed->bLedBlinkInProgress = _FALSE;3044}3045if (pLed->bLedScanBlinkInProgress) {3046_cancel_timer_ex(&(pLed->BlinkTimer));3047pLed->bLedScanBlinkInProgress = _FALSE;3048}3049if (pLed->bLedWPSBlinkInProgress) {3050_cancel_timer_ex(&(pLed->BlinkTimer));3051pLed->bLedWPSBlinkInProgress = _FALSE;3052}30533054_set_timer(&(pLed->BlinkTimer), 0);3055break;30563057default:3058break;30593060}30613062}30633064void3065SwLedControlMode8(3066PADAPTER Adapter,3067LED_CTL_MODE LedAction3068)3069{3070struct led_priv *ledpriv = adapter_to_led(Adapter);3071struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;3072PLED_USB pLed0 = &(ledpriv->SwLed0);30733074switch (LedAction) {3075case LED_CTL_LINK:3076_cancel_timer_ex(&(pLed0->BlinkTimer));3077pLed0->CurrLedState = RTW_LED_ON;3078pLed0->BlinkingLedState = RTW_LED_ON;3079_set_timer(&(pLed0->BlinkTimer), 0);3080break;30813082case LED_CTL_NO_LINK:3083_cancel_timer_ex(&(pLed0->BlinkTimer));3084pLed0->CurrLedState = RTW_LED_OFF;3085pLed0->BlinkingLedState = RTW_LED_OFF;3086_set_timer(&(pLed0->BlinkTimer), 0);3087break;30883089case LED_CTL_POWER_OFF:3090SwLedOff(Adapter, pLed0);3091break;30923093default:3094break;3095}309630973098}30993100/* page added for Belkin AC950, 20120813 */3101void3102SwLedControlMode9(3103PADAPTER Adapter,3104LED_CTL_MODE LedAction3105)3106{3107struct led_priv *ledpriv = adapter_to_led(Adapter);3108struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;3109PLED_USB pLed = &(ledpriv->SwLed0);3110PLED_USB pLed1 = &(ledpriv->SwLed1);3111PLED_USB pLed2 = &(ledpriv->SwLed2);3112BOOLEAN bWPSOverLap = _FALSE;3113/* RTW_INFO("LedAction=%d\n", LedAction); */3114switch (LedAction) {3115case LED_CTL_START_TO_LINK:3116if (pLed2->bLedBlinkInProgress == _FALSE) {3117pLed2->bLedBlinkInProgress = _TRUE;3118pLed2->BlinkingLedState = RTW_LED_ON;3119pLed2->CurrLedState = LED_BLINK_LINK_IN_PROCESS;31203121_set_timer(&(pLed2->BlinkTimer), 0);3122}3123break;31243125case LED_CTL_LINK:3126case LED_CTL_NO_LINK:3127/* LED1 settings */3128if (LedAction == LED_CTL_NO_LINK) {3129/* if(pMgntInfo->AuthStatus == AUTH_STATUS_FAILED) */3130if (0) {3131pLed1->CurrLedState = LED_BLINK_AUTH_ERROR;3132if (pLed1->bLedOn)3133pLed1->BlinkingLedState = RTW_LED_OFF;3134else3135pLed1->BlinkingLedState = RTW_LED_ON;3136_set_timer(&(pLed1->BlinkTimer), 0);3137} else {3138pLed1->CurrLedState = RTW_LED_OFF;3139pLed1->BlinkingLedState = RTW_LED_OFF;3140if (pLed1->bLedOn)3141_set_timer(&(pLed1->BlinkTimer), 0);3142}3143} else {3144pLed1->CurrLedState = RTW_LED_OFF;3145pLed1->BlinkingLedState = RTW_LED_OFF;3146if (pLed1->bLedOn)3147_set_timer(&(pLed1->BlinkTimer), 0);3148}31493150/* LED2 settings */3151if (LedAction == LED_CTL_LINK) {3152if (Adapter->securitypriv.dot11PrivacyAlgrthm != _NO_PRIVACY_) {3153if (pLed2->bLedBlinkInProgress == _TRUE) {3154_cancel_timer_ex(&(pLed2->BlinkTimer));3155pLed2->bLedBlinkInProgress = _FALSE;3156}3157pLed2->CurrLedState = RTW_LED_ON;3158pLed2->bLedNoLinkBlinkInProgress = _TRUE;3159if (!pLed2->bLedOn)3160_set_timer(&(pLed2->BlinkTimer), 0);3161} else {3162if (pLed2->bLedWPSBlinkInProgress != _TRUE) {3163pLed2->CurrLedState = RTW_LED_OFF;3164pLed2->BlinkingLedState = RTW_LED_OFF;3165if (pLed2->bLedOn)3166_set_timer(&(pLed2->BlinkTimer), 0);3167}3168}3169} else { /* NO_LINK */3170if (pLed2->bLedWPSBlinkInProgress == _FALSE) {3171pLed2->CurrLedState = RTW_LED_OFF;3172pLed2->BlinkingLedState = RTW_LED_OFF;3173if (pLed2->bLedOn)3174_set_timer(&(pLed2->BlinkTimer), 0);3175}3176}31773178/* LED0 settings */3179if (pLed->bLedNoLinkBlinkInProgress == _FALSE) {3180if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))3181return;3182if (pLed->bLedBlinkInProgress == _TRUE) {3183_cancel_timer_ex(&(pLed->BlinkTimer));3184pLed->bLedBlinkInProgress = _FALSE;3185}31863187pLed->bLedNoLinkBlinkInProgress = _TRUE;3188if (IS_HARDWARE_TYPE_8812AU(Adapter)) {3189if (LedAction == LED_CTL_LINK) {3190pLed->BlinkingLedState = RTW_LED_ON;3191pLed->CurrLedState = LED_BLINK_SLOWLY;3192} else {3193pLed->CurrLedState = LED_BLINK_SLOWLY;3194if (pLed->bLedOn)3195pLed->BlinkingLedState = RTW_LED_OFF;3196else3197pLed->BlinkingLedState = RTW_LED_ON;3198}3199} else {3200pLed->CurrLedState = LED_BLINK_SLOWLY;3201if (pLed->bLedOn)3202pLed->BlinkingLedState = RTW_LED_OFF;3203else3204pLed->BlinkingLedState = RTW_LED_ON;3205}3206_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);3207}32083209break;32103211case LED_CTL_SITE_SURVEY:3212if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE))3213;3214else { /* if(pLed->bLedScanBlinkInProgress ==FALSE) */3215if (IS_LED_WPS_BLINKING(pLed))3216return;32173218if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {3219_cancel_timer_ex(&(pLed->BlinkTimer));3220pLed->bLedNoLinkBlinkInProgress = _FALSE;3221}3222if (pLed->bLedBlinkInProgress == _TRUE) {3223_cancel_timer_ex(&(pLed->BlinkTimer));3224pLed->bLedBlinkInProgress = _FALSE;3225}3226pLed->bLedScanBlinkInProgress = _TRUE;3227pLed->CurrLedState = LED_BLINK_SCAN;3228pLed->BlinkTimes = 24;3229if (pLed->bLedOn)3230pLed->BlinkingLedState = RTW_LED_OFF;3231else3232pLed->BlinkingLedState = RTW_LED_ON;3233_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);32343235}3236break;32373238case LED_CTL_TX:3239case LED_CTL_RX:3240if (pLed->bLedBlinkInProgress == _FALSE) {3241if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))3242return;3243if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {3244_cancel_timer_ex(&(pLed->BlinkTimer));3245pLed->bLedNoLinkBlinkInProgress = _FALSE;3246}3247pLed->bLedBlinkInProgress = _TRUE;3248pLed->CurrLedState = LED_BLINK_TXRX;3249pLed->BlinkTimes = 2;3250if (pLed->bLedOn)3251pLed->BlinkingLedState = RTW_LED_OFF;3252else3253pLed->BlinkingLedState = RTW_LED_ON;3254_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);3255}3256break;32573258case LED_CTL_START_WPS: /* wait until xinpin finish */3259case LED_CTL_START_WPS_BOTTON:3260pLed2->bLedBlinkInProgress = _TRUE;3261pLed2->BlinkingLedState = RTW_LED_ON;3262pLed2->CurrLedState = LED_BLINK_LINK_IN_PROCESS;3263pLed2->bLedWPSBlinkInProgress = _TRUE;32643265_set_timer(&(pLed2->BlinkTimer), 500);32663267break;32683269case LED_CTL_STOP_WPS: /* WPS connect success */3270/* LED2 settings */3271if (pLed2->bLedWPSBlinkInProgress == _TRUE) {3272_cancel_timer_ex(&(pLed2->BlinkTimer));3273pLed2->bLedBlinkInProgress = _FALSE;3274pLed2->bLedWPSBlinkInProgress = _FALSE;3275}3276pLed2->CurrLedState = RTW_LED_ON;3277pLed2->bLedNoLinkBlinkInProgress = _TRUE;3278if (!pLed2->bLedOn)3279_set_timer(&(pLed2->BlinkTimer), 0);32803281/* LED1 settings */3282_cancel_timer_ex(&(pLed1->BlinkTimer));3283pLed1->CurrLedState = RTW_LED_OFF;3284pLed1->BlinkingLedState = RTW_LED_OFF;3285if (pLed1->bLedOn)3286_set_timer(&(pLed1->BlinkTimer), 0);328732883289break;32903291case LED_CTL_STOP_WPS_FAIL: /* WPS authentication fail */3292/* LED1 settings */3293/* if(bWPSOverLap == _FALSE) */3294{3295pLed1->CurrLedState = LED_BLINK_AUTH_ERROR;3296pLed1->BlinkTimes = 50;3297if (pLed1->bLedOn)3298pLed1->BlinkingLedState = RTW_LED_OFF;3299else3300pLed1->BlinkingLedState = RTW_LED_ON;3301_set_timer(&(pLed1->BlinkTimer), 0);3302}3303/* else */3304/* { */3305/* bWPSOverLap = _FALSE; */3306/* pLed1->CurrLedState = RTW_LED_OFF; */3307/* pLed1->BlinkingLedState = RTW_LED_OFF; */3308/* _set_timer(&(pLed1->BlinkTimer), 0); */3309/* } */33103311/* LED2 settings */3312pLed2->CurrLedState = RTW_LED_OFF;3313pLed2->BlinkingLedState = RTW_LED_OFF;3314pLed2->bLedWPSBlinkInProgress = _FALSE;3315if (pLed2->bLedOn)3316_set_timer(&(pLed2->BlinkTimer), 0);33173318break;33193320case LED_CTL_STOP_WPS_FAIL_OVERLAP: /* WPS session overlap */3321/* LED1 settings */3322bWPSOverLap = _TRUE;3323pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;3324pLed1->BlinkTimes = 10;3325pLed1->BlinkCounter = 50;3326if (pLed1->bLedOn)3327pLed1->BlinkingLedState = RTW_LED_OFF;3328else3329pLed1->BlinkingLedState = RTW_LED_ON;3330_set_timer(&(pLed1->BlinkTimer), 0);33313332/* LED2 settings */3333pLed2->CurrLedState = RTW_LED_OFF;3334pLed2->BlinkingLedState = RTW_LED_OFF;3335pLed2->bLedWPSBlinkInProgress = _FALSE;3336if (pLed2->bLedOn)3337_set_timer(&(pLed2->BlinkTimer), 0);33383339break;33403341case LED_CTL_POWER_OFF:3342pLed->CurrLedState = RTW_LED_OFF;3343pLed->BlinkingLedState = RTW_LED_OFF;33443345if (pLed->bLedNoLinkBlinkInProgress) {3346_cancel_timer_ex(&(pLed->BlinkTimer));3347pLed->bLedNoLinkBlinkInProgress = _FALSE;3348}3349if (pLed->bLedLinkBlinkInProgress) {3350_cancel_timer_ex(&(pLed->BlinkTimer));3351pLed->bLedLinkBlinkInProgress = _FALSE;3352}3353if (pLed->bLedBlinkInProgress) {3354_cancel_timer_ex(&(pLed->BlinkTimer));3355pLed->bLedBlinkInProgress = _FALSE;3356}3357if (pLed->bLedWPSBlinkInProgress) {3358_cancel_timer_ex(&(pLed->BlinkTimer));3359pLed->bLedWPSBlinkInProgress = _FALSE;3360}3361if (pLed->bLedScanBlinkInProgress) {3362_cancel_timer_ex(&(pLed->BlinkTimer));3363pLed->bLedScanBlinkInProgress = _FALSE;3364}3365if (pLed->bLedStartToLinkBlinkInProgress) {3366_cancel_timer_ex(&(pLed->BlinkTimer));3367pLed->bLedStartToLinkBlinkInProgress = _FALSE;3368}33693370if (pLed1->bLedWPSBlinkInProgress) {3371_cancel_timer_ex(&(pLed1->BlinkTimer));3372pLed1->bLedWPSBlinkInProgress = _FALSE;3373}337433753376pLed1->BlinkingLedState = LED_UNKNOWN;3377SwLedOff(Adapter, pLed);3378SwLedOff(Adapter, pLed1);3379break;33803381case LED_CTL_CONNECTION_NO_TRANSFER:3382if (pLed->bLedBlinkInProgress == _FALSE) {3383if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {3384_cancel_timer_ex(&(pLed->BlinkTimer));3385pLed->bLedNoLinkBlinkInProgress = _FALSE;3386}3387pLed->bLedBlinkInProgress = _TRUE;33883389pLed->CurrLedState = LED_BLINK_ALWAYS_ON;3390pLed->BlinkingLedState = RTW_LED_ON;3391_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);3392}3393break;33943395default:3396break;33973398}33993400}34013402/* page added for Netgear A6200V2, 20120827 */3403void3404SwLedControlMode10(3405PADAPTER Adapter,3406LED_CTL_MODE LedAction3407)3408{3409HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);3410struct led_priv *ledpriv = adapter_to_led(Adapter);3411struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;3412PLED_USB pLed = &(ledpriv->SwLed0);3413PLED_USB pLed1 = &(ledpriv->SwLed1);34143415switch (LedAction) {3416case LED_CTL_START_TO_LINK:3417if (pLed1->bLedBlinkInProgress == _FALSE) {3418pLed1->bLedBlinkInProgress = _TRUE;3419pLed1->BlinkingLedState = RTW_LED_ON;3420pLed1->CurrLedState = LED_BLINK_LINK_IN_PROCESS;34213422_set_timer(&(pLed1->BlinkTimer), 0);3423}3424break;34253426case LED_CTL_LINK:3427case LED_CTL_NO_LINK:3428if (LedAction == LED_CTL_LINK) {3429if (pLed->bLedWPSBlinkInProgress == _TRUE || pLed1->bLedWPSBlinkInProgress == _TRUE)3430;3431else {3432if (pHalData->current_band_type == BAND_ON_2_4G)3433/* LED0 settings */3434{3435pLed->CurrLedState = RTW_LED_ON;3436pLed->BlinkingLedState = RTW_LED_ON;3437if (pLed->bLedBlinkInProgress == _TRUE) {3438_cancel_timer_ex(&(pLed->BlinkTimer));3439pLed->bLedBlinkInProgress = _FALSE;3440}3441_set_timer(&(pLed->BlinkTimer), 0);34423443pLed1->CurrLedState = RTW_LED_OFF;3444pLed1->BlinkingLedState = RTW_LED_OFF;3445_set_timer(&(pLed1->BlinkTimer), 0);3446} else if (pHalData->current_band_type == BAND_ON_5G)3447/* LED1 settings */3448{3449pLed1->CurrLedState = RTW_LED_ON;3450pLed1->BlinkingLedState = RTW_LED_ON;3451if (pLed1->bLedBlinkInProgress == _TRUE) {3452_cancel_timer_ex(&(pLed1->BlinkTimer));3453pLed1->bLedBlinkInProgress = _FALSE;3454}3455_set_timer(&(pLed1->BlinkTimer), 0);34563457pLed->CurrLedState = RTW_LED_OFF;3458pLed->BlinkingLedState = RTW_LED_OFF;3459_set_timer(&(pLed->BlinkTimer), 0);3460}3461}3462} else if (LedAction == LED_CTL_NO_LINK) { /* TODO by page */3463if (pLed->bLedWPSBlinkInProgress == _TRUE || pLed1->bLedWPSBlinkInProgress == _TRUE)3464;3465else {3466pLed->CurrLedState = RTW_LED_OFF;3467pLed->BlinkingLedState = RTW_LED_OFF;3468if (pLed->bLedOn)3469_set_timer(&(pLed->BlinkTimer), 0);34703471pLed1->CurrLedState = RTW_LED_OFF;3472pLed1->BlinkingLedState = RTW_LED_OFF;3473if (pLed1->bLedOn)3474_set_timer(&(pLed1->BlinkTimer), 0);3475}3476}34773478break;34793480case LED_CTL_SITE_SURVEY:3481if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)3482; /* don't blink when media connect */3483else { /* if(pLed->bLedScanBlinkInProgress ==FALSE) */3484if (IS_LED_WPS_BLINKING(pLed) || IS_LED_WPS_BLINKING(pLed1))3485return;34863487if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {3488_cancel_timer_ex(&(pLed->BlinkTimer));3489pLed->bLedNoLinkBlinkInProgress = _FALSE;3490}3491if (pLed->bLedBlinkInProgress == _TRUE) {3492_cancel_timer_ex(&(pLed->BlinkTimer));3493pLed->bLedBlinkInProgress = _FALSE;3494}3495pLed->bLedScanBlinkInProgress = _TRUE;3496pLed->CurrLedState = LED_BLINK_SCAN;3497pLed->BlinkTimes = 12;3498pLed->BlinkingLedState = LED_BLINK_SCAN;3499_set_timer(&(pLed->BlinkTimer), 0);35003501if (pLed1->bLedNoLinkBlinkInProgress == _TRUE) {3502_cancel_timer_ex(&(pLed1->BlinkTimer));3503pLed1->bLedNoLinkBlinkInProgress = _FALSE;3504}3505if (pLed1->bLedBlinkInProgress == _TRUE) {3506_cancel_timer_ex(&(pLed1->BlinkTimer));3507pLed1->bLedBlinkInProgress = _FALSE;3508}3509pLed1->bLedScanBlinkInProgress = _TRUE;3510pLed1->CurrLedState = LED_BLINK_SCAN;3511pLed1->BlinkTimes = 12;3512pLed1->BlinkingLedState = LED_BLINK_SCAN;3513_set_timer(&(pLed1->BlinkTimer), LED_BLINK_LINK_SLOWLY_INTERVAL_NETGEAR);35143515}3516break;35173518case LED_CTL_START_WPS: /* wait until xinpin finish */3519case LED_CTL_START_WPS_BOTTON:3520/* LED0 settings */3521if (pLed->bLedBlinkInProgress == _FALSE) {3522pLed->bLedBlinkInProgress = _TRUE;3523pLed->bLedWPSBlinkInProgress = _TRUE;3524pLed->BlinkingLedState = LED_BLINK_WPS;3525pLed->CurrLedState = LED_BLINK_WPS;3526_set_timer(&(pLed->BlinkTimer), 0);3527}35283529/* LED1 settings */3530if (pLed1->bLedBlinkInProgress == _FALSE) {3531pLed1->bLedBlinkInProgress = _TRUE;3532pLed1->bLedWPSBlinkInProgress = _TRUE;3533pLed1->BlinkingLedState = LED_BLINK_WPS;3534pLed1->CurrLedState = LED_BLINK_WPS;3535_set_timer(&(pLed1->BlinkTimer), LED_BLINK_NORMAL_INTERVAL + LED_BLINK_LINK_INTERVAL_NETGEAR);3536}353735383539break;35403541case LED_CTL_STOP_WPS: /* WPS connect success */3542if (pHalData->current_band_type == BAND_ON_2_4G)3543/* LED0 settings */3544{3545pLed->bLedWPSBlinkInProgress = _FALSE;3546pLed->CurrLedState = RTW_LED_ON;3547pLed->BlinkingLedState = RTW_LED_ON;3548if (pLed->bLedBlinkInProgress == _TRUE) {3549_cancel_timer_ex(&(pLed->BlinkTimer));3550pLed->bLedBlinkInProgress = _FALSE;3551}3552_set_timer(&(pLed->BlinkTimer), 0);35533554pLed1->CurrLedState = RTW_LED_OFF;3555pLed1->BlinkingLedState = RTW_LED_OFF;3556_set_timer(&(pLed1->BlinkTimer), 0);3557} else if (pHalData->current_band_type == BAND_ON_5G)3558/* LED1 settings */3559{3560pLed1->bLedWPSBlinkInProgress = _FALSE;3561pLed1->CurrLedState = RTW_LED_ON;3562pLed1->BlinkingLedState = RTW_LED_ON;3563if (pLed1->bLedBlinkInProgress == _TRUE) {3564_cancel_timer_ex(&(pLed1->BlinkTimer));3565pLed1->bLedBlinkInProgress = _FALSE;3566}3567_set_timer(&(pLed1->BlinkTimer), 0);35683569pLed->CurrLedState = RTW_LED_OFF;3570pLed->BlinkingLedState = RTW_LED_OFF;3571_set_timer(&(pLed->BlinkTimer), 0);3572}35733574break;35753576case LED_CTL_STOP_WPS_FAIL: /* WPS authentication fail */3577/* LED1 settings */3578pLed1->bLedWPSBlinkInProgress = _FALSE;3579pLed1->CurrLedState = RTW_LED_OFF;3580pLed1->BlinkingLedState = RTW_LED_OFF;3581_set_timer(&(pLed1->BlinkTimer), 0);35823583/* LED0 settings */3584pLed->bLedWPSBlinkInProgress = _FALSE;3585pLed->CurrLedState = RTW_LED_OFF;3586pLed->BlinkingLedState = RTW_LED_OFF;3587if (pLed->bLedOn)3588_set_timer(&(pLed->BlinkTimer), 0);35893590break;359135923593default:3594break;35953596}35973598}35993600/* Edimax-ASUS, added by Page, 20121221 */3601void3602SwLedControlMode11(3603PADAPTER Adapter,3604LED_CTL_MODE LedAction3605)3606{3607struct led_priv *ledpriv = adapter_to_led(Adapter);3608struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;3609PLED_USB pLed = &(ledpriv->SwLed0);36103611switch (LedAction) {3612case LED_CTL_POWER_ON:3613case LED_CTL_START_TO_LINK:3614case LED_CTL_NO_LINK:3615pLed->CurrLedState = RTW_LED_ON;3616pLed->BlinkingLedState = RTW_LED_ON;3617_set_timer(&(pLed->BlinkTimer), 0);3618break;36193620case LED_CTL_LINK:3621if (pLed->bLedBlinkInProgress == _TRUE) {3622_cancel_timer_ex(&(pLed->BlinkTimer));3623pLed->bLedBlinkInProgress = _FALSE;3624}3625pLed->bLedBlinkInProgress = _TRUE;3626pLed->CurrLedState = LED_BLINK_TXRX;3627if (pLed->bLedOn)3628pLed->BlinkingLedState = RTW_LED_OFF;3629else3630pLed->BlinkingLedState = RTW_LED_ON;3631_set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);3632break;36333634case LED_CTL_START_WPS: /* wait until xinpin finish */3635case LED_CTL_START_WPS_BOTTON:3636if (pLed->bLedBlinkInProgress == _TRUE) {3637_cancel_timer_ex(&(pLed->BlinkTimer));3638pLed->bLedBlinkInProgress = _FALSE;3639}3640pLed->bLedWPSBlinkInProgress = _TRUE;3641pLed->bLedBlinkInProgress = _TRUE;3642pLed->CurrLedState = LED_BLINK_WPS;3643if (pLed->bLedOn)3644pLed->BlinkingLedState = RTW_LED_OFF;3645else3646pLed->BlinkingLedState = RTW_LED_ON;3647pLed->BlinkTimes = 5;3648_set_timer(&(pLed->BlinkTimer), 0);36493650break;365136523653case LED_CTL_STOP_WPS:3654case LED_CTL_STOP_WPS_FAIL:3655if (pLed->bLedBlinkInProgress == _TRUE) {3656_cancel_timer_ex(&(pLed->BlinkTimer));3657pLed->bLedBlinkInProgress = _FALSE;3658}3659pLed->CurrLedState = LED_BLINK_WPS_STOP;3660_set_timer(&(pLed->BlinkTimer), 0);3661break;36623663case LED_CTL_POWER_OFF:3664pLed->CurrLedState = RTW_LED_OFF;3665pLed->BlinkingLedState = RTW_LED_OFF;36663667if (pLed->bLedNoLinkBlinkInProgress) {3668_cancel_timer_ex(&(pLed->BlinkTimer));3669pLed->bLedNoLinkBlinkInProgress = _FALSE;3670}3671if (pLed->bLedLinkBlinkInProgress) {3672_cancel_timer_ex(&(pLed->BlinkTimer));3673pLed->bLedLinkBlinkInProgress = _FALSE;3674}3675if (pLed->bLedBlinkInProgress) {3676_cancel_timer_ex(&(pLed->BlinkTimer));3677pLed->bLedBlinkInProgress = _FALSE;3678}3679if (pLed->bLedWPSBlinkInProgress) {3680_cancel_timer_ex(&(pLed->BlinkTimer));3681pLed->bLedWPSBlinkInProgress = _FALSE;3682}3683if (pLed->bLedScanBlinkInProgress) {3684_cancel_timer_ex(&(pLed->BlinkTimer));3685pLed->bLedScanBlinkInProgress = _FALSE;3686}36873688SwLedOff(Adapter, pLed);3689break;36903691default:3692break;36933694}36953696}36973698/* page added for NEC */36993700void3701SwLedControlMode12(3702PADAPTER Adapter,3703LED_CTL_MODE LedAction3704)3705{3706struct led_priv *ledpriv = adapter_to_led(Adapter);3707struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;3708PLED_USB pLed = &(ledpriv->SwLed0);37093710switch (LedAction) {3711case LED_CTL_POWER_ON:3712case LED_CTL_NO_LINK:3713case LED_CTL_LINK:3714case LED_CTL_SITE_SURVEY:37153716if (pLed->bLedNoLinkBlinkInProgress == _FALSE) {3717if (pLed->bLedBlinkInProgress == _TRUE) {3718_cancel_timer_ex(&(pLed->BlinkTimer));3719pLed->bLedBlinkInProgress = _FALSE;3720}37213722pLed->bLedNoLinkBlinkInProgress = _TRUE;3723pLed->CurrLedState = LED_BLINK_SLOWLY;3724if (pLed->bLedOn)3725pLed->BlinkingLedState = RTW_LED_OFF;3726else3727pLed->BlinkingLedState = RTW_LED_ON;3728_set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);3729}3730break;37313732case LED_CTL_TX:3733case LED_CTL_RX:3734if (pLed->bLedBlinkInProgress == _FALSE) {3735if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {3736_cancel_timer_ex(&(pLed->BlinkTimer));3737pLed->bLedNoLinkBlinkInProgress = _FALSE;3738}3739pLed->bLedBlinkInProgress = _TRUE;3740pLed->CurrLedState = LED_BLINK_TXRX;3741pLed->BlinkTimes = 2;3742if (pLed->bLedOn)3743pLed->BlinkingLedState = RTW_LED_OFF;3744else3745pLed->BlinkingLedState = RTW_LED_ON;3746_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);3747}3748break;37493750case LED_CTL_POWER_OFF:3751pLed->CurrLedState = RTW_LED_OFF;3752pLed->BlinkingLedState = RTW_LED_OFF;37533754if (pLed->bLedBlinkInProgress) {3755_cancel_timer_ex(&(pLed->BlinkTimer));3756pLed->bLedBlinkInProgress = _FALSE;3757}37583759if (pLed->bLedScanBlinkInProgress) {3760_cancel_timer_ex(&(pLed->BlinkTimer));3761pLed->bLedScanBlinkInProgress = _FALSE;3762}37633764if (pLed->bLedNoLinkBlinkInProgress == _TRUE) {3765_cancel_timer_ex(&(pLed->BlinkTimer));3766pLed->bLedNoLinkBlinkInProgress = _FALSE;3767}37683769SwLedOff(Adapter, pLed);3770break;37713772default:3773break;37743775}37763777}37783779/* Maddest add for NETGEAR R6100 */37803781void3782SwLedControlMode13(3783PADAPTER Adapter,3784LED_CTL_MODE LedAction3785)3786{3787struct led_priv *ledpriv = adapter_to_led(Adapter);3788struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;3789PLED_USB pLed = &(ledpriv->SwLed0);37903791switch (LedAction) {3792case LED_CTL_LINK:3793if (pLed->bLedWPSBlinkInProgress)3794return;379537963797pLed->CurrLedState = RTW_LED_ON;3798pLed->BlinkingLedState = RTW_LED_ON;3799if (pLed->bLedBlinkInProgress) {3800_cancel_timer_ex(&(pLed->BlinkTimer));3801pLed->bLedBlinkInProgress = _FALSE;3802}3803if (pLed->bLedScanBlinkInProgress) {3804_cancel_timer_ex(&(pLed->BlinkTimer));3805pLed->bLedScanBlinkInProgress = _FALSE;3806}38073808_set_timer(&(pLed->BlinkTimer), 0);3809break;38103811case LED_CTL_START_WPS: /* wait until xinpin finish */3812case LED_CTL_START_WPS_BOTTON:3813if (pLed->bLedWPSBlinkInProgress == _FALSE) {3814if (pLed->bLedBlinkInProgress == _TRUE) {3815_cancel_timer_ex(&(pLed->BlinkTimer));3816pLed->bLedBlinkInProgress = _FALSE;3817}3818if (pLed->bLedScanBlinkInProgress == _TRUE) {3819_cancel_timer_ex(&(pLed->BlinkTimer));3820pLed->bLedScanBlinkInProgress = _FALSE;3821}3822pLed->bLedWPSBlinkInProgress = _TRUE;3823pLed->CurrLedState = LED_BLINK_WPS;3824if (pLed->bLedOn) {3825pLed->BlinkingLedState = RTW_LED_OFF;3826_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_NETGEAR);3827} else {3828pLed->BlinkingLedState = RTW_LED_ON;3829_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_NETGEAR);3830}3831}3832break;38333834case LED_CTL_STOP_WPS:3835if (pLed->bLedWPSBlinkInProgress) {3836_cancel_timer_ex(&(pLed->BlinkTimer));3837pLed->bLedWPSBlinkInProgress = _FALSE;3838} else3839pLed->bLedWPSBlinkInProgress = _TRUE;38403841pLed->bLedWPSBlinkInProgress = _FALSE;3842pLed->CurrLedState = LED_BLINK_WPS_STOP;3843if (pLed->bLedOn) {3844pLed->BlinkingLedState = RTW_LED_OFF;38453846_set_timer(&(pLed->BlinkTimer), 0);3847}38483849break;385038513852case LED_CTL_STOP_WPS_FAIL:3853case LED_CTL_STOP_WPS_FAIL_OVERLAP: /* WPS session overlap */3854if (pLed->bLedWPSBlinkInProgress) {3855_cancel_timer_ex(&(pLed->BlinkTimer));3856pLed->bLedWPSBlinkInProgress = _FALSE;3857}38583859pLed->CurrLedState = RTW_LED_OFF;3860pLed->BlinkingLedState = RTW_LED_OFF;3861_set_timer(&(pLed->BlinkTimer), 0);3862break;38633864case LED_CTL_START_TO_LINK:3865if ((pLed->bLedBlinkInProgress == _FALSE) && (pLed->bLedWPSBlinkInProgress == _FALSE)) {3866pLed->bLedBlinkInProgress = _TRUE;3867pLed->BlinkingLedState = RTW_LED_ON;3868pLed->CurrLedState = LED_BLINK_LINK_IN_PROCESS;38693870_set_timer(&(pLed->BlinkTimer), 0);3871}3872break;38733874case LED_CTL_NO_LINK:38753876if (pLed->bLedWPSBlinkInProgress)3877return;3878if (pLed->bLedBlinkInProgress) {3879_cancel_timer_ex(&(pLed->BlinkTimer));3880pLed->bLedBlinkInProgress = _FALSE;3881}3882if (pLed->bLedScanBlinkInProgress) {3883_cancel_timer_ex(&(pLed->BlinkTimer));3884pLed->bLedScanBlinkInProgress = _FALSE;3885}3886/* if(!IS_LED_BLINKING(pLed)) */3887{3888pLed->CurrLedState = RTW_LED_OFF;3889pLed->BlinkingLedState = RTW_LED_OFF;3890_set_timer(&(pLed->BlinkTimer), 0);3891}3892break;38933894case LED_CTL_POWER_OFF:3895case LED_CTL_POWER_ON:3896pLed->CurrLedState = RTW_LED_OFF;3897pLed->BlinkingLedState = RTW_LED_OFF;3898if (pLed->bLedBlinkInProgress) {3899_cancel_timer_ex(&(pLed->BlinkTimer));3900pLed->bLedBlinkInProgress = _FALSE;3901}3902if (pLed->bLedScanBlinkInProgress) {3903_cancel_timer_ex(&(pLed->BlinkTimer));3904pLed->bLedScanBlinkInProgress = _FALSE;3905}3906if (pLed->bLedWPSBlinkInProgress) {3907_cancel_timer_ex(&(pLed->BlinkTimer));3908pLed->bLedWPSBlinkInProgress = _FALSE;3909}39103911if (LedAction == LED_CTL_POWER_ON)3912_set_timer(&(pLed->BlinkTimer), 0);3913else3914SwLedOff(Adapter, pLed);3915break;39163917default:3918break;39193920}392139223923}39243925/* Maddest add for DNI Buffalo */39263927void3928SwLedControlMode14(3929PADAPTER Adapter,3930LED_CTL_MODE LedAction3931)3932{3933struct led_priv *ledpriv = adapter_to_led(Adapter);3934PLED_USB pLed = &(ledpriv->SwLed0);39353936switch (LedAction) {3937case LED_CTL_POWER_OFF:3938pLed->CurrLedState = RTW_LED_OFF;3939pLed->BlinkingLedState = RTW_LED_OFF;3940if (pLed->bLedBlinkInProgress) {3941_cancel_timer_ex(&(pLed->BlinkTimer));3942pLed->bLedBlinkInProgress = _FALSE;3943}3944SwLedOff(Adapter, pLed);3945break;39463947case LED_CTL_POWER_ON:3948SwLedOn(Adapter, pLed);3949break;39503951case LED_CTL_LINK:3952case LED_CTL_NO_LINK:3953if (IS_HARDWARE_TYPE_8812AU(Adapter))3954SwLedOn(Adapter, pLed);3955break;39563957case LED_CTL_TX:3958case LED_CTL_RX:3959if (pLed->bLedBlinkInProgress == _FALSE) {3960pLed->bLedBlinkInProgress = _TRUE;3961pLed->CurrLedState = LED_BLINK_TXRX;3962pLed->BlinkTimes = 2;3963if (pLed->bLedOn) {3964pLed->BlinkingLedState = RTW_LED_OFF;3965if (IS_HARDWARE_TYPE_8812AU(Adapter))3966_set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);3967else3968_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);3969} else {3970pLed->BlinkingLedState = RTW_LED_ON;3971if (IS_HARDWARE_TYPE_8812AU(Adapter))3972_set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);3973else3974_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);3975}3976}3977break;39783979default:3980break;3981}3982}39833984/* Maddest add for Dlink */39853986void3987SwLedControlMode15(3988PADAPTER Adapter,3989LED_CTL_MODE LedAction3990)3991{3992struct led_priv *ledpriv = adapter_to_led(Adapter);3993struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;3994PLED_USB pLed = &(ledpriv->SwLed0);39953996switch (LedAction) {3997case LED_CTL_START_WPS: /* wait until xinpin finish */3998case LED_CTL_START_WPS_BOTTON:3999if (pLed->bLedWPSBlinkInProgress == _FALSE) {4000if (pLed->bLedBlinkInProgress == _TRUE) {4001_cancel_timer_ex(&(pLed->BlinkTimer));4002pLed->bLedBlinkInProgress = _FALSE;4003}4004if (pLed->bLedScanBlinkInProgress == _TRUE) {4005_cancel_timer_ex(&(pLed->BlinkTimer));4006pLed->bLedScanBlinkInProgress = _FALSE;4007}4008pLed->bLedWPSBlinkInProgress = _TRUE;4009pLed->CurrLedState = LED_BLINK_WPS;4010if (pLed->bLedOn) {4011pLed->BlinkingLedState = RTW_LED_OFF;4012_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_OFF_INTERVAL_NETGEAR);4013} else {4014pLed->BlinkingLedState = RTW_LED_ON;4015_set_timer(&(pLed->BlinkTimer), LED_WPS_BLINK_ON_INTERVAL_NETGEAR);4016}4017}4018break;40194020case LED_CTL_STOP_WPS:4021if (pLed->bLedWPSBlinkInProgress)4022_cancel_timer_ex(&(pLed->BlinkTimer));40234024pLed->CurrLedState = LED_BLINK_WPS_STOP;4025/* if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) */4026{4027pLed->BlinkingLedState = RTW_LED_ON;40284029_set_timer(&(pLed->BlinkTimer), 0);4030}40314032break;40334034case LED_CTL_STOP_WPS_FAIL:4035case LED_CTL_STOP_WPS_FAIL_OVERLAP: /* WPS session overlap */4036if (pLed->bLedWPSBlinkInProgress) {4037_cancel_timer_ex(&(pLed->BlinkTimer));4038pLed->bLedWPSBlinkInProgress = _FALSE;4039}40404041pLed->CurrLedState = RTW_LED_OFF;4042pLed->BlinkingLedState = RTW_LED_OFF;4043_set_timer(&(pLed->BlinkTimer), 0);4044break;40454046case LED_CTL_NO_LINK:4047if (pLed->bLedWPSBlinkInProgress)4048return;40494050/*if(Adapter->securitypriv.dot11PrivacyAlgrthm > _NO_PRIVACY_)4051{4052if(SecIsTxKeyInstalled(Adapter, pMgntInfo->Bssid))4053{4054}4055else4056{4057if(pMgntInfo->LEDAssocState ==LED_ASSOC_SECURITY_BEGIN)4058return;4059}4060}*/40614062if (pLed->bLedBlinkInProgress) {4063_cancel_timer_ex(&(pLed->BlinkTimer));4064pLed->bLedBlinkInProgress = _FALSE;4065}4066if (pLed->bLedScanBlinkInProgress) {4067_cancel_timer_ex(&(pLed->BlinkTimer));4068pLed->bLedScanBlinkInProgress = _FALSE;4069}4070/* if(!IS_LED_BLINKING(pLed)) */4071{4072pLed->CurrLedState = LED_BLINK_NO_LINK;4073pLed->BlinkingLedState = RTW_LED_ON;4074_set_timer(&(pLed->BlinkTimer), 30);4075}4076break;40774078case LED_CTL_LINK:40794080if (pLed->bLedWPSBlinkInProgress)4081return;40824083if (pLed->bLedBlinkInProgress) {4084_cancel_timer_ex(&(pLed->BlinkTimer));4085pLed->bLedBlinkInProgress = _FALSE;4086}40874088pLed->CurrLedState = LED_BLINK_LINK_IDEL;4089pLed->BlinkingLedState = RTW_LED_ON;40904091_set_timer(&(pLed->BlinkTimer), 30);4092break;40934094case LED_CTL_SITE_SURVEY:4095if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)4096return;40974098if (pLed->bLedWPSBlinkInProgress == _TRUE)4099return;41004101if (pLed->bLedBlinkInProgress) {4102_cancel_timer_ex(&(pLed->BlinkTimer));4103pLed->bLedBlinkInProgress = _FALSE;4104}4105pLed->CurrLedState = LED_BLINK_SCAN;4106pLed->BlinkingLedState = RTW_LED_ON;4107_set_timer(&(pLed->BlinkTimer), 0);4108break;41094110case LED_CTL_TX:4111case LED_CTL_RX:4112if (pLed->bLedWPSBlinkInProgress)4113return;41144115if (pLed->bLedBlinkInProgress) {4116_cancel_timer_ex(&(pLed->BlinkTimer));4117pLed->bLedBlinkInProgress = _FALSE;4118}41194120pLed->bLedBlinkInProgress = _TRUE;4121pLed->CurrLedState = LED_BLINK_TXRX;4122pLed->BlinkTimes = 2;4123if (pLed->bLedOn)4124pLed->BlinkingLedState = RTW_LED_OFF;4125else4126pLed->BlinkingLedState = RTW_LED_ON;4127_set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);4128break;41294130default:4131break;4132}4133}41344135void4136LedControlUSB(4137_adapter *padapter,4138LED_CTL_MODE LedAction4139)4140{4141struct led_priv *ledpriv = adapter_to_led(padapter);41424143#if (MP_DRIVER == 1)4144if (padapter->registrypriv.mp_mode == 1)4145return;4146#endif41474148if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter))) {4149/*RTW_INFO("%s bDriverStopped:%s, bSurpriseRemoved:%s\n"4150, __func__4151, rtw_is_drv_stopped(padapter)?"True":"False"4152, rtw_is_surprise_removed(padapter)?"True":"False" );*/4153return;4154}41554156if (ledpriv->bRegUseLed == _FALSE)4157return;41584159/* if(priv->bInHctTest) */4160/* return; */41614162if ((adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on &&4163adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS) &&4164(LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||4165LedAction == LED_CTL_SITE_SURVEY ||4166LedAction == LED_CTL_LINK ||4167LedAction == LED_CTL_NO_LINK ||4168LedAction == LED_CTL_POWER_ON))4169return;41704171switch (ledpriv->LedStrategy) {4172#if CONFIG_RTW_SW_LED_TRX_DA_CLASSIFY4173case SW_LED_MODE_UC_TRX_ONLY:4174rtw_sw_led_ctl_mode_uc_trx_only(padapter, LedAction);4175break;4176#endif41774178case SW_LED_MODE0:4179SwLedControlMode0(padapter, LedAction);4180break;41814182case SW_LED_MODE1:4183SwLedControlMode1(padapter, LedAction);4184break;41854186case SW_LED_MODE2:4187SwLedControlMode2(padapter, LedAction);4188break;41894190case SW_LED_MODE3:4191SwLedControlMode3(padapter, LedAction);4192break;41934194case SW_LED_MODE4:4195SwLedControlMode4(padapter, LedAction);4196break;41974198case SW_LED_MODE5:4199SwLedControlMode5(padapter, LedAction);4200break;42014202case SW_LED_MODE6:4203SwLedControlMode6(padapter, LedAction);4204break;42054206case SW_LED_MODE7:4207SwLedControlMode7(padapter, LedAction);4208break;42094210case SW_LED_MODE8:4211SwLedControlMode8(padapter, LedAction);4212break;42134214case SW_LED_MODE9:4215SwLedControlMode9(padapter, LedAction);4216break;42174218case SW_LED_MODE10:4219SwLedControlMode10(padapter, LedAction);4220break;42214222case SW_LED_MODE11:4223SwLedControlMode11(padapter, LedAction);4224break;42254226case SW_LED_MODE12:4227SwLedControlMode12(padapter, LedAction);4228break;42294230case SW_LED_MODE13:4231SwLedControlMode13(padapter, LedAction);4232break;42334234case SW_LED_MODE14:4235SwLedControlMode14(padapter, LedAction);4236break;42374238case SW_LED_MODE15:4239SwLedControlMode15(padapter, LedAction);4240break;42414242default:4243break;4244}42454246}42474248/*4249* Description:4250* Reset status of LED_871x object.4251* */4252void ResetLedStatus(PLED_USB pLed)4253{42544255pLed->CurrLedState = RTW_LED_OFF; /* Current LED state. */4256pLed->bLedOn = _FALSE; /* true if LED is ON, false if LED is OFF. */42574258pLed->bLedBlinkInProgress = _FALSE; /* true if it is blinking, false o.w.. */4259pLed->bLedWPSBlinkInProgress = _FALSE;42604261pLed->BlinkTimes = 0; /* Number of times to toggle led state for blinking. */4262pLed->BlinkCounter = 0;4263pLed->BlinkingLedState = LED_UNKNOWN; /* Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are. */42644265pLed->bLedNoLinkBlinkInProgress = _FALSE;4266pLed->bLedLinkBlinkInProgress = _FALSE;4267pLed->bLedStartToLinkBlinkInProgress = _FALSE;4268pLed->bLedScanBlinkInProgress = _FALSE;4269}42704271/*4272* Description:4273* Initialize an LED_871x object.4274* */4275void4276InitLed(4277_adapter *padapter,4278PLED_USB pLed,4279LED_PIN LedPin4280)4281{4282pLed->padapter = padapter;4283pLed->LedPin = LedPin;42844285ResetLedStatus(pLed);4286rtw_init_timer(&(pLed->BlinkTimer), padapter, BlinkTimerCallback, pLed);4287_init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);4288}428942904291/*4292* Description:4293* DeInitialize an LED_871x object.4294* */4295void4296DeInitLed(4297PLED_USB pLed4298)4299{4300_cancel_workitem_sync(&(pLed->BlinkWorkItem));4301_cancel_timer_ex(&(pLed->BlinkTimer));4302ResetLedStatus(pLed);4303}4304#endif430543064307