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

📄 message.c

📁 Freescale ARM11系列CPU MX31的WINCE 5.0下的BSP
💻 C
📖 第 1 页 / 共 5 页
字号:


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleGetGenStatsCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Get Generic Stats confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleGetGenStatsCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_GET_GEN_STATS       *psGetStats;
    PWLAN_CONTEXT           psWlan = &psHAL->psAdapter->sWlan;
    PNDIS_COMMASIC_GEN_STATS   psStats = &psWlan->sGenStatistics;

    PPENDING_OID            psPendingOID = &psHAL->psAdapter->sPendingOID;
    NDIS_STATUS             iStatus = NDIS_STATUS_NOT_ACCEPTED;

   
    psGetStats = (UMI_GET_GEN_STATS *)psMsg->abData;

    if ( psGetStats->u16Status == UMI_OK )
    {
        psStats->TxTotalDataFrames = psGetStats->u32TxTotalDataFrames;
        psStats->TxTotalMgmtFrames = psGetStats->u32TxTotalMgmtFrames;
        psStats->RxDroppedFrames = psGetStats->u32RxDroppedFrames;
        psStats->RxTotalDataFrames = psGetStats->u32RxTotalDataFrames;
        psStats->RxTotalMgmtFrames = psGetStats->u32RxTotalMgmtFrames;
        psStats->DataBytesTxed = psGetStats->u64TxBytes;
        psStats->DataBytesRxed = psGetStats->u64RxBytes;
        psStats->Length = sizeof(NDIS_COMMASIC_GEN_STATS);

        DBG_LEV2(("Successfully Got Generic Stats.\n"));
    }
    else
    {
        DBG_LEV0(("ERROR: Get Generic Stats failed, %d.\n", psGetStats->u16Status));
    }


    if ( psPendingOID->ulOid == OID_COMMASIC_GEN_STATS )
    {
        // Clear the pending OID flag.
        psPendingOID->ulOid = 0;

        if ( psGetStats->u16Status == UMI_OK )
        {
            OS_MEMCPY( psPendingOID->pvBuffer, psStats, psStats->Length );
            *psPendingOID->pulBytesWritten = psStats->Length;

            iStatus = NDIS_STATUS_SUCCESS;
        }

        // Complete the prior pending OID request.
        NdisMQueryInformationComplete( psHAL->psAdapter->hMiniportAdapterHandle, iStatus );
	iCurOIDStatus = iStatus;
        DBG_LEV2(("PENDING Query Completed for OID 0x%x\n", psPendingOID->ulOid));
    }

}

//-----------------------------------------------------------------------------
//
// NAME        vHALsendClearGenStatsReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//
// DESCRIPTION This function sends a Clear Gen Stats request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendClearGenStatsReq( IN PHAL_CONTEXT psHAL )
{
    UMI_MSG     *psMsg;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        DBG_LEV1(("Sent clear generic stats\n"));
        psMsg->u16MsgId = UM_MAN_CLEAR_GEN_STATS_REQ;
        boHALsendMessage( psHAL, psMsg );
    }
}

//-----------------------------------------------------------------------------
//
// NAME        vHALhandleClearGenStatsCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Clear Gen Stats confirm messages received 
//          from the device.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleClearGenStatsCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    DBG_LEV1(("Successfully cleared generic stats\n"));
}

//-----------------------------------------------------------------------------
//
// NAME        vHALsendDisconnectReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//
// DESCRIPTION This function sends a Disconnect request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendDisconnectReq( IN PHAL_CONTEXT psHAL, IN USHORT usReason )
{
    UMI_MSG        *psMsg;
    UMI_DISCONNECT *psDisconnect;

#ifdef CA_CE5
    // ERI: Need to reject the disconnect request during Setup state.
    if ( psHAL->psAdapter->eNetState == NET_SETUP )
        return;
#endif

    psHAL->psAdapter->sWlan.sChangeNetwork.boRecoverLostAPConnection = FALSE; 
    DBG_LEV3(("Manual Disconnect - clearing flag 'boRecoverLostAPConnection' \n"));

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        psHAL->psAdapter->eNetState = NET_DISCONNECTING;

        psDisconnect = (UMI_DISCONNECT *)psMsg->abData;
        psDisconnect->u16Status = UMI_OK;
        psDisconnect->u16ReasonCode = usReason;

        psMsg->u16MsgId = UM_MAN_DISCONNECT_REQ;
        boHALsendMessage( psHAL, psMsg );
        DBG_LEV1(("Sent Disconnect request to device, reason code %i\n",
                  usReason));
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleDisconnectCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Disconnect confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleDisconnectCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_DISCONNECT *psDisconnect;
    PEND_CONTEXT   psAdapter = psHAL->psAdapter;
    PWLAN_CONTEXT  psWlan = &psAdapter->sWlan;
    MIB_VALUE      uValue;

    PPENDING_OID   psPendingOID = &psAdapter->sPendingOID;
   
    psDisconnect = (UMI_DISCONNECT *)psMsg->abData;

    if ( psDisconnect->u16Status == UMI_OK )
    {
        DBG_LEV1(("Successfully send Disconnect request.\n"));
    }
    else
    {
        DBG_LEV0(("ERROR: Disconnect request failed, %d.\n",
                  psDisconnect->u16Status));
    }

    psAdapter->eNetState = NET_DISCONNECTED;

    // Indicate media state disconnected to upper if necessary.
    if ( psAdapter->eMediaState == NdisMediaStateConnected )
    {
        vENDindicateConnectionStatus( psAdapter, NdisMediaStateDisconnected );
    }

    if ( psPendingOID->ulOid == OID_802_11_INFRASTRUCTURE_MODE )
    {
        DBG_LEV1(("Confirm Pending Oid = OID_802_11_INFRASTRUCTURE_MODE.\n"));
        psPendingOID->ulOid = 0;

        NdisMSetInformationComplete(psAdapter->hMiniportAdapterHandle, NDIS_STATUS_SUCCESS);
    }
    else
    {
        DBG_LEV1(("No Pending Oid to confirm.\n"));
    }
   
    // Set protocol type if flag set.
    if ( psWlan->boSetProtocolType == TRUE )
    {
        psWlan->boSetProtocolType = FALSE;

        uValue.u8Uint8 = (psWlan->ulNetworkTypeInUse == Ndis802_11DS) ? MIB_PROTOCOL_802_11B : MIB_PROTOCOL_802_11G;
        // Send Set MIB request (MIB_PROTOCOL_TYPE) to Target.
        vHALsendSetMibReq( psHAL, MIB_PROTOCOL_TYPE, &uValue );
    }

    // Set reg domain if flag set.
    if ( psWlan->boSetRegDomain == TRUE )
    {
        psWlan->boSetRegDomain = FALSE;

        uValue.u8Uint8 = (uint8)psWlan->ulRegDomain;
        // Send Set MIB request (MIB_CURRENT_REG_DOMAIN) to Target.
        vHALsendSetMibReq( psHAL, MIB_CURRENT_REG_DOMAIN, &uValue );
    }

    // Continue the connection process.
    if ( psWlan->sChangeNetwork.ulOid )
    {
        vENDconnectNetwork( psAdapter ,
                            ( psWlan->sChangeNetwork.ulOid == OID_802_11_SSID ), FALSE) ;
    }

   
    // Send Power Off request if radio off required.
    if ( psWlan->boDesiredRadio == FALSE )
    {
        vHALsendPowerOffReq( psHAL );
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALsendGetRssiReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMacAddr   Pointer to a specific MAC address.
//
// DESCRIPTION This function sends a Get RSSI request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendGetRssiReq( IN PHAL_CONTEXT psHAL, IN IEEE_ADDR * psMacAddr )
{
    UMI_MSG        *psMsg;
    UMI_GET_RSSI   *psGetRssi;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        psGetRssi = (UMI_GET_RSSI *)psMsg->abData;
        OS_MEMCPY( &psGetRssi->sStationID, psMacAddr, IEEE_ADDR_LEN );
        psGetRssi->u16Status = UMI_OK;

        psMsg->u16MsgId = UM_MAN_GET_RSSI_REQ;
        boHALsendMessage( psHAL, psMsg );
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleGetRssiCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Get RSSI confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleGetRssiCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_GET_RSSI   *psGetRssi;
    LONG        lRssi;
    PWLAN_CONTEXT  psWlan = &psHAL->psAdapter->sWlan;

    psGetRssi = (UMI_GET_RSSI *)psMsg->abData;

    if ( psGetRssi->u16Status == UMI_OK )
    {
        DBG_LEV3(("Successfully Get RSSI, 0x%x.\n", psGetRssi->i16RSSIvalue));
        // Store the dBm value.
        lRssi = psGetRssi->i16RSSIvalue;

        if ( ((psWlan->lRssi > psWlan->lRssiTrigger) && (lRssi <= psWlan->lRssiTrigger)) || 
             ((psWlan->lRssi < psWlan->lRssiTrigger) && (lRssi >= psWlan->lRssiTrigger)) ||
             (lRssi == psWlan->lRssiTrigger) )
        {
            // Trigger the status indication. 
            NdisMIndicateStatus(
                psHAL->psAdapter->hMiniportAdapterHandle,
                NDIS_STATUS_MEDIA_SPECIFIC_INDICATION,
                &lRssi,
                sizeof(LONG));

            NdisMIndicateStatusComplete( psHAL->psAdapter->hMiniportAdapterHandle );
        }

      
        psWlan->lRssi = lRssi;
    }
    else
    {
        DBG_LEV0(("ERROR: Get RSSI request failed, error %d.\n", psGetRssi->u16Status));
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALsendSetKeyReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psSetKey Pointer to Set Key structure.
//
// DESCRIPTION This function sends a Set Key request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendSetKeyReq( IN PHAL_CONTEXT psHAL, IN UMI_SET_KEY * psSetKey )
{
    UMI_MSG  *psMsg;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        OS_MEMCPY( psMsg->abData, psSetKey, sizeof( UMI_SET_KEY ) );

        psMsg->u16MsgId = UM_MAN_SET_KEY_REQ;
        boHALsendMessage( psHAL, psMsg );
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleSetKeyCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Set Key confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleSetKeyCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_SET_KEY *psSetKey;

    psSetKey = (UMI_SET_KEY *)psMsg->abData;

    if ( psSetKey->u16Status == UMI_OK )
    {
        DBG_LEV1(("Successfully set key.\n"));
    }
    else
    {
        DBG_LEV0(("ERROR: Set key request failed, error %d.\n", psSetKey->u16Status));
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALsendClearKeyReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psClearKey  Pointer to Clear Key structure.
//
// DESCRIPTION This function sends a Clear Key request message to Target.
//
//-----------------------------------------------------------------------------

⌨️ 快捷键说明

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