⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwacproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
 *
 *  Purpose:    This module has implmentation of station command 
 *              processing functions
 *
 *  $Author: schiu $
 *
 *  $Date: 2004/12/15 $
 *
 *  $Revision: #16 $
 *
 *****************************************************************************/

/*
===============================================================================
                                 INCLUDE FILES
===============================================================================
*/

#include "precomp.h"

/*
===============================================================================
                                 CLOBAL CONSTANT
===============================================================================
*/

extern ULONG DSFeqList[];
extern USHORT RegionCodeToIndex[MRVDRV_MAX_REGION_CODE];
extern UCHAR IEEERegionChannel[MRVDRV_MAX_REGION_CODE][MRVDRV_MAX_CHANNEL_NUMBER];

static NDIS_STATUS Deactivate_Host_Sleep_Cfg(PMRVDRV_ADAPTER Adapter);


/*
===============================================================================
                           CODED PUBLIC PROCEDURES
===============================================================================
*/

UCHAR EAPOLStartPacket[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // dest
                             0x0, 0x0, 0x0, 0x0, 0x0, 0x0, // src
                             0x88, 0x8e, 0x01, 0x01, 0x0, 0x0, 0x0 }; 



#ifdef AUTO_REASSOCIATION
/*
    return: 1 - Reassociation has been started OK.
               0 - Reassociation has not been started.
*/
UINT StartReassociation( IN PMRVDRV_ADAPTER pAdapter, IN UINT uIntCode )
{
    UINT    nRetCode = 0;
    
    DBGPRINT( DBG_MACEVENT, ("+ StartReassociation\n") );

    if ( pAdapter->ReAssociationInProgress )
    {
        DBGPRINT( DBG_MACEVENT, ("  Still in reassociating\n") );
        nRetCode = 1;
    }
    else if ( pAdapter->MediaConnectStatus == NdisMediaStateConnected )
    {       
        if ( pAdapter->WPAEnabled == FALSE )
        {
            DBGPRINT( DBG_MACEVENT, ("    Invoked reassociation\n") );
            DBGPRINT( DBG_MACEVENT, ("    tick=%d\n", GetTickCount()) );
            pAdapter->ReAssociationInProgress = TRUE;
            pAdapter->bIsSendCmdImterSet = TRUE;
            pAdapter->uCurrentRetryForReassociation = 0;
            NdisMSetTimer( &pAdapter->MrvDrvSendCmdTimer, pAdapter->uDelayForReAssociation );
            nRetCode = 1;
        }
        else
        {
            DBGPRINT( DBG_MACEVENT, ("    WPA is enabled, driver doesn't support reassociation currently\n") );
            nRetCode = 0;
        }
    }
    else if ( pAdapter->MediaConnectStatus == NdisMediaStateDisconnected )
    {
        DBGPRINT( DBG_MACEVENT, ("  Media state is disconnected\n") );
        nRetCode = 0;
    }else
        nRetCode = 0;

    DBGPRINT( DBG_MACEVENT, ("- StartReassociation [%d]\n", nRetCode) );

    return nRetCode;
}

/*
    return: 1 - Send out (Re)Assoc(Ext) command successfully.
               0 - Others.
*/
UINT DoReAssociation( IN PMRVDRV_ADAPTER pAdapter )
{
    UINT            nRetCode = 0;
    UCHAR           nIndex;
    NDIS_STATUS     nStatus;
    NDIS_WLAN_BSSID_EX      *pCurrentBssid;
    UCHAR           ucScanCmdEnd, ucScanCmdStart;
    
    DBGPRINT( DBG_MACEVENT, ("+ DoReAssociation\n") );

    ucScanCmdEnd = ( (pAdapter->CurCmd->Pad[2] & MRVDRV_SCAN_CMD_END) ? 1 : 0 );
    ucScanCmdStart = ( (pAdapter->CurCmd->Pad[2] & MRVDRV_SCAN_CMD_START) ? 1 : 0 );
    
    if ( ucScanCmdStart || ((ucScanCmdEnd==0 && pAdapter->ulNumOfBSSIDs==0)) )
    {
        DBGPRINT( DBG_MACEVENT, ("    SCAN is still in progress, skip this\n") );
        DBGPRINT( DBG_MACEVENT, ("- DoReAssociation\n") );
        return 0;
    }

    pCurrentBssid = &(pAdapter->BSSIDList[pAdapter->ulCurrentBSSIDIndex]);

//  nIndex = FindBSSIDInList( pAdapter, pAdapter->CurrentBSSID );
    nIndex = FindSSIDInList( pAdapter, &(pAdapter->CurrentSSID) );
    DBGPRINT( DBG_MACEVENT, ("    tick=%d\n", GetTickCount()) );

    if ( nIndex == 0xff )
    {
        DBGPRINT( DBG_MACEVENT, ("    Total number of BSSIDs is %d\n", pAdapter->ulNumOfBSSIDs) );
        DBGPRINT( DBG_MACEVENT, 
            ("    Could NOT find the current BSSID, reassociation is failed [BSSID: %x:%x:%x:%x:%x:%x]\n",
               pAdapter->CurrentBSSID[0], 
               pAdapter->CurrentBSSID[1], 
               pAdapter->CurrentBSSID[2], 
               pAdapter->CurrentBSSID[3],
               pAdapter->CurrentBSSID[4],
               pAdapter->CurrentBSSID[5] ) );

        if ( ucScanCmdEnd )
        {
            pAdapter->uCurrentRetryForReassociation ++;
            if ( pAdapter->uCurrentRetryForReassociation < pAdapter->uRetryForReassociation )
            {
                DBGPRINT( DBG_MACEVENT, ("    Retry reassociation [%d/%d]\n", pAdapter->uCurrentRetryForReassociation, pAdapter->uRetryForReassociation) );
                NdisMSetTimer( &pAdapter->MrvDrvSendCmdTimer, pAdapter->uDelayForReAssociation );
            }
            else
            {
                DBGPRINT( DBG_MACEVENT, ("   Reassociation is failed, stop it and indicate disconnection\n") );
                pAdapter->ReAssociationInProgress = FALSE;
                MacEventDisconnected( pAdapter, pAdapter->TimerInterval, FALSE);
            }
        }
    }
    else
    {
        DBGPRINT( DBG_MACEVENT, ("    Found the current BSSID\n") );

        if ( pAdapter->InfrastructureMode == Ndis802_11Infrastructure )
        {
            DBGPRINT( DBG_MACEVENT, ("    Send out AssociateExt for ReAssociation\n") );

            nStatus = PrepareAndSendCommand(
                        pAdapter,
                        HostCmd_CMD_802_11_ASSOCIATE_EXT,
                        0,
                        HostCmd_OPTION_USE_INT,
                        (NDIS_OID)0,
                        HostCmd_PENDING_ON_NONE,
                        0,
                        FALSE,
                        NULL,
                        NULL,
                        NULL,
                        &(pAdapter->CurrentSSID));
        }
        else if ( pAdapter->InfrastructureMode == Ndis802_11IBSS )
        {
            DBGPRINT( DBG_MACEVENT, ("    Send out AdHocJoin\n") );
            
            nStatus = PrepareAndSendCommand(
                        pAdapter,
                        HostCmd_CMD_802_11_AD_HOC_JOIN,
                        0, 
                        HostCmd_OPTION_USE_INT,
                        (NDIS_OID) 0,
                        HostCmd_PENDING_ON_CMD,
                        0, FALSE,
                        NULL, NULL, NULL,
                        &(pAdapter->CurrentSSID));
        }
        else
        {
            DBGPRINT( DBG_MACEVENT, ("    WRONG InfrastructureMode!!!\n") );
            nStatus = NDIS_STATUS_SUCCESS + 1; //Set to a NON-success
        }

        if ( NDIS_SUCCESS( nStatus ) )
        {
            DBGPRINT( DBG_MACEVENT, ("    -> OK\n") );
            nRetCode = 1;
        }
        else
        {
            DBGPRINT( DBG_MACEVENT, ("    -> Failed\n") );
            nRetCode = 0;
        }

        if ( pAdapter->WEPStatus == Ndis802_11WEPEnabled
            || pAdapter->AuthenticationMode == Ndis802_11AuthModeShared ) 
        {
            DBGPRINT( DBG_MACEVENT, ("    Set wep key\n") );

            // TODO: Need to do more tests for this block. Do we need OID_802_11_ADD_WEP (pendding OID)?
            
            nStatus = PrepareAndSendCommand(
                        pAdapter, 
                        HostCmd_CMD_802_11_SET_WEP,
                        0, 
                        HostCmd_OPTION_USE_INT,
                        OID_802_11_ADD_WEP,
                        HostCmd_PENDING_ON_CMD,
                        0, FALSE,
                        NULL, NULL, NULL,
                        &pAdapter->CurrentWEPKey);

            if ( NDIS_SUCCESS( nStatus ) )
            {
                DBGPRINT( DBG_MACEVENT, ("    -> OK\n") );
                nRetCode = 1;
            }
            else
            {
                DBGPRINT( DBG_MACEVENT, ("    -> Failed\n") );
                nRetCode = 0;
            }

        }
    } // if ( nIndex == 0xff )

    if ( nRetCode )
        pAdapter->ReAssociationInProgress = FALSE;

    DBGPRINT( DBG_MACEVENT, ("- DoReAssociation\n") );

    return nRetCode;
}

#endif // AUTO_REASSOCIATION



#ifdef ADHOCAES
VOID
HandleAdhocAES( IN PMRVDRV_ADAPTER Adapter,
          IN PHostCmd_DS_802_11_KEY_MATERIAL pKeyReturn,
          IN PVOID info,
          IN PULONG BytesWritten
          )

{   
  PMRVL_ADHOC_AES_KEY pKey;
  UCHAR key_ascii[32];
  UCHAR key_hex[16];
  UCHAR *tmp;
  int i;
  
  pKey = (PMRVL_ADHOC_AES_KEY)info;
 
  NdisZeroMemory(key_hex, sizeof(key_hex));
  NdisMoveMemory(key_hex, Adapter->aeskey.KeyParamSet.Key, sizeof(key_hex));
  pKey->Length = sizeof(key_ascii) + 1;  
  NdisZeroMemory(key_ascii, sizeof(key_ascii)); 
  tmp = key_ascii;
  for (i = 0; i < sizeof(key_hex); i++) 
        tmp += sprintf(tmp, "%02x", key_hex[i]);

  //Transfer Ascii[ex: char 0(Char)=0x31(hex)=48(dec)] to hex: 0
  for (i = 0; i < sizeof(key_ascii); i++)
  {
     
        if ((key_ascii[i] >= 48) && (key_ascii[i] <= 57))
            key_ascii[i]-=48;
        else if ((key_ascii[i] >= 65) && (key_ascii[i] <= 70))
            key_ascii[i]-=55;
        else if ((key_ascii[i] >= 97) && (key_ascii[i] <= 102))
            key_ascii[i]-=87;
        else
            break;
  }  
  
  NdisMoveMemory(pKey->KeyBody, key_ascii, sizeof(key_ascii));
  *BytesWritten = 32 + 4;
  return ;
}
#endif

#ifdef BG_SCAN
/******************************************************************************
 *
 *  Name: HandleBgScanResponse()
 *
 *  Description: Handle background scan results
 *
 *  Notes:
 *              The background scan results are added to PSBssidList.
 *
 *****************************************************************************/
VOID
HandleBgScanResponse(
        PHostCmd_DS_802_11_BG_SCAN_QUERY_RSP pBgScanResponse,
        PMRVDRV_ADAPTER Adapter
            )
{
    ULONG i,j;
    USHORT Flag = 0;
    ULONG TempV = 0,k;
    NDIS_STATUS ndStat;

      RETAILMSG(1, (TEXT("HandleBgScanResponse() \r\n")));          

      RETAILMSG(1 ,(TEXT("-----------------------   Got background scan results ------------------------\r\n")));
      RETAILMSG(1,(TEXT("Command %x\r\n"),(ULONG)pBgScanResponse->Command));
      RETAILMSG(1,(TEXT("Size %d  SeqNum %d  Result %d\r\n"),
                                (ULONG)pBgScanResponse->Size, 
                                (ULONG)pBgScanResponse->SeqNum,
                                (ULONG)pBgScanResponse->Result
                                )); 
      RETAILMSG(1,(TEXT("BSSDescriptSize %d\r\n"),(ULONG)pBgScanResponse->BSSDescriptSize));
      RETAILMSG(1,(TEXT("NumberOfSets    %d\r\n"),(ULONG)pBgScanResponse->NumberOfSets));
      RETAILMSG(1,(TEXT("*** Scan returned %d AP before parsing ***\r\n"), pBgScanResponse->NumberOfSets));


    DBGPRINT(DBG_SCAN | DBG_CRLF ,("-----------------------   Got background scan results ------------------------\n" ));
    DBGPRINT(DBG_SCAN,("Command %x\n",(ULONG)pBgScanResponse -> Command));
    DBGPRINT(DBG_SCAN,("Size %d  SeqNum %d  Result %d \n",
                                (ULONG)pBgScanResponse -> Size, 
                                (ULONG)pBgScanResponse -> SeqNum,
                                (ULONG)pBgScanResponse -> Result
                                ));
  
    DBGPRINT(DBG_SCAN,("BSSDescriptSize %d\n",(ULONG)pBgScanResponse ->BSSDescriptSize));
    DBGPRINT(DBG_SCAN,("NumberOfSets    %d\n",(ULONG)pBgScanResponse ->NumberOfSets));
    DBGPRINT(DBG_CMDRESP,("*** Scan returned %d AP before parsing ***\n", pBgScanResponse->NumberOfSets));
      
    // Get number of BSS Descriptors
    Adapter->ulNumOfBSSIDs = pBgScanResponse->NumberOfSets;

        // Parse the return SCAN result
    ndStat = InterpretBSSDescription(
                        Adapter, 
                            (PVOID)(Adapter->CurCmd->BufVirtualAddr),
                            pBgScanResponse->BSSDescriptSize,
                            HostCmd_RET_802_11_BG_SCAN_QUERY );

    if ( ndStat != NDIS_STATUS_SUCCESS )
    {
            DBGPRINT(DBG_SCAN | DBG_ERROR,("ERROR: InterpretBSSDescription returned ERROR\n"));
    }

#ifdef DBG
    DBGPRINT(DBG_SCAN,("*** Background scan Results: number of BSSID: %d\n", Adapter->ulNumOfBSSIDs));
    for ( i=0; i < Adapter->ulNumOfBSSIDs; i++ )
    {
            DBGPRINT(DBG_SCAN,("\t\t%2d:\t%32s - %2x-%2x-%2x-%2x-%2x-%2x RSSI=%d\n", 
                                    i, Adapter->BSSIDList[i].Ssid.Ssid,
            Adapter->BSSIDList[i].MacAddress[0],

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -