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

📄 message.c

📁 Freescale ARM11系列CPU MX31的WINCE 5.0下的BSP
💻 C
📖 第 1 页 / 共 5 页
字号:
VOID
vHALsendClearKeyReq( IN PHAL_CONTEXT psHAL, IN UMI_CLEAR_KEY * psClearKey )
{
    UMI_MSG  *psMsg;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        OS_MEMCPY( psMsg->abData, psClearKey, sizeof( UMI_CLEAR_KEY ) );

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


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleClearKeyCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Clear Key confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleClearKeyCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_CLEAR_KEY  *psClearKey;

    psClearKey = (UMI_CLEAR_KEY *)psMsg->abData;

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


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

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        psMsg->u16MsgId = UM_MAN_POWER_OFF_REQ;
        boHALsendMessage( psHAL, psMsg );
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALhandlePowerOffCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//
// DESCRIPTION This function handles Power Off confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandlePowerOffCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_POWER_OFF  *pPowerOff;

    pPowerOff = (UMI_POWER_OFF *)psMsg->abData;

    if ( pPowerOff->u16Status == UMI_OK )
    {
        DBG_LEV1(("Successfully sent Power Off request.\n"));
    }
    else
    {
        // Set radio off failed, back to radio on state.
        psHAL->psAdapter->sWlan.boDesiredRadio = TRUE;

        DBG_LEV0(("ERROR: Power Off request failed, error %d.\n", pPowerOff->u16Status));
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALsendGetMibReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          u16MibId MIB Id.
//
// DESCRIPTION This function sends a Get MIB request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendGetMibReq( IN PHAL_CONTEXT psHAL, IN MIB_ID u16MibId )
{
    UMI_MSG     *psMsg;
    UMI_MIB     *psGetMib;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        psGetMib = (UMI_MIB *)psMsg->abData;
        psGetMib->u16ObjectID = u16MibId;
        psGetMib->u16Status = UMI_OK;

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

//-----------------------------------------------------------------------------
//
// NAME        vHALHandleGetMibAttrReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Get MIB Attribute message, return the MIB information to upper layer.
//
//-----------------------------------------------------------------------------
VOID
vHALHandleGetMibAttrReq( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
	PEND_CONTEXT   psAdapter = psHAL->psAdapter;
	PPENDING_OID   psPendingOID = &psAdapter->sPendingOID;
	DBG_LEV3(("vHALHandleGetMibAttrReq  \n"));
	if( psPendingOID->ulOid == OID_COMMASIC_GET_MIB_ATTR){

		UMI_MIB	*psGetMib = (UMI_MIB *)psMsg->abData;
		PUCHAR	pucValue = &psGetMib->uValue.u8Uint8;
		
		if ( psGetMib->u16Status == UMI_OK ){
			NdisMQueryInformationComplete( psAdapter->hMiniportAdapterHandle, NDIS_STATUS_SUCCESS );
			DBG_LEV2(("PENDING Query Completed for OID OID_COMMASIC_GET_MIB_ATTR\n"));			
			
			if (psGetMib->u16ObjectID == u16MibID_GetMIBAttr) {
				ULONG       i = 0, dataLen =0;
				MIB_ID_LOOKUP_TABLE_S * pMibTableItem;

				
				// If the MIB attribute is a special data type it will be in the 
				// sMibIdLookupTable array, otherwise the default attribute is a
				// byte which is the last element of the array.
				for (i = 0; (i < (SIZEOF_MIB_ID_LOOKUP_TABLE - 1)) &&
				     (psGetMib->u16ObjectID != sMibIdLookupTable[i].ulMibId); i++) ;
				
				pMibTableItem = sMibIdLookupTable+i;
				*psPendingOID->pulBytesWritten =    *psPendingOID->pulBytesNeeded = pMibTableItem->ulSize;

				OS_MEMCPY((PUCHAR)psPendingOID->pvBuffer, pucValue,  *psPendingOID->pulBytesNeeded);
				
				iCurOIDStatus = NDIS_STATUS_SUCCESS;				
			}
			else{
				return;
			}

		}
		
	}
			
}


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleGetMibCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Get MIB confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleGetMibCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_MIB        *psGetMib;
    PUCHAR         pucValue;
    PEND_CONTEXT   psAdapter = psHAL->psAdapter;
    PWLAN_CONTEXT  psWlan = &psAdapter->sWlan;

    PPENDING_OID   psPendingOID = &psAdapter->sPendingOID;
    NDIS_STATUS    iStatus = NDIS_STATUS_NOT_ACCEPTED;
    ULONG       tmpOid; // CS

    ULONG       i = 0;
    USHORT         u16Val;

    psGetMib = (UMI_MIB *)psMsg->abData;

    if ( psGetMib->u16Status == UMI_OK )
    {
        pucValue = &psGetMib->uValue.u8Uint8;
        DBG_LEV2(("Successfully Get MIB, item 0x%x.\n"
                  "\tvalue = %02x %02x %02x %02x %02x %02x %02x %02x\n", 
                  psGetMib->u16ObjectID, 
                  *pucValue, *(pucValue+1), *(pucValue+2), *(pucValue+3), 
                  *(pucValue+4), *(pucValue+5), *(pucValue+6), *(pucValue+7)));

        switch ( psGetMib->u16ObjectID )
        {
            case MIB_IEEE_ADDRESS:
            OS_MEMCPY( psAdapter->ucPermanentAddress, pucValue, IEEE_ADDR_LEN );
            psAdapter->boGetPermanentAddress = TRUE;
            if ( psAdapter->boMACAddressOverride == FALSE )
            {
                OS_MEMCPY( psAdapter->ucCurrentAddress, pucValue, IEEE_ADDR_LEN );
                OS_MEMCPY( psWlan->ucMacAddr, pucValue, IEEE_ADDR_LEN);

            }
            break;

            case MIB_SW_VERSION:
            psHAL->sCardStatus.usMACFirmwareVersion = psGetMib->uValue.u16Uint16;
            DBG_LEV1(("Mac running CA_SW_VERSION = %d\n", psGetMib->uValue.u16Uint16));
            break;

            case MIB_UWA_PROGRAM_VER:
            u16Val = psGetMib->uValue.u16Uint16;
            psHAL->sCardStatus.aucUWAFirmwareVersion[0] = u16Val & 0xFF;
            psHAL->sCardStatus.aucUWAFirmwareVersion[1] = u16Val >> 8;
            DBG_LEV1(("UWA version is 0x%x\n", u16Val));
            break;

            case MIB_OPERATIONAL_RATE_SET:
            if ( psGetMib->uValue.u32Uint32 )
            {
                vENDgetRatesBitmapArray( psWlan->ulNetworkTypeInUse, &i, 
                                         &psGetMib->uValue.u32Uint32, psWlan->ucDesiredRates );
            }
            break;

            case MIB_RX_BUF_OVERFLOW_COUNT:
            psWlan->ulRxOverflows = psGetMib->uValue.u32Uint32;
            break;

            case MIB_UWA_RX_STATS:
            // copy the stats into the psWlan struct
            OS_MEMCPY(&psWlan->ulUwaRxStats[0], &psGetMib->uValue, 4*MIB_UWA_RX_STATS_SEGM_LENGTH);
            // need to send out the req for the 2nd segment
            vHALsendGetMibReq( psHAL, MIB_UWA_RX_STATS_SEGM2 );
            DBG_LEV2(("Got MIB UWA RX STATS \n"));
            break;

            case MIB_UWA_RX_STATS_SEGM2:
            // copy the stats into the psWlan struct
            OS_MEMCPY(&psWlan->ulUwaRxStats[MIB_UWA_RX_STATS_SEGM_LENGTH],
                      &psGetMib->uValue, 
                      4*MIB_UWA_RX_STATS_SEGM_LENGTH);
            // need to send out the req for the last segment
            vHALsendGetMibReq( psHAL, MIB_UWA_RX_STATS_SEGM3 );
            DBG_LEV2(("Got MIB UWA RX STATS Segm 2\n"));
            break;

            case MIB_UWA_RX_STATS_SEGM3:
            // copy the stats into the psWlan struct
            OS_MEMCPY(&psWlan->ulUwaRxStats[2*MIB_UWA_RX_STATS_SEGM_LENGTH], 
                      &psGetMib->uValue, 
                      4*MIB_UWA_RX_STATS_SEGM_LENGTH);
            DBG_LEV2(("Got MIB UWA RX STATS Segm 3 - %d\n", psGetMib->uValue.u32Uint32));
            break;

            case MIB_SNR:
            psWlan->lSnr = psGetMib->uValue.u32Uint32 - UMI_SNR_VALUE_OFFSET;
            break;

            case MIB_CA_DEVICE_CAPS:
            psWlan->ulCardCapabilities = psGetMib->uValue.u32Uint32;

            // Adjust protocol type to 802.11g mode if adapter doesn't support 802.11a mode.
            if ( !(psWlan->ulCardCapabilities & MIB_CA_DEVICE_CAPS_MASK_A_MODE) &&
                 (psWlan->ulNetworkTypeInUse == Ndis802_11OFDM5) )
            {
                DBG_LEV1(("A mode not supported, switching to B/G mode\n"));
                psWlan->ulNetworkTypeInUse = Ndis802_11OFDM24;
                vENDsetDefaultRateSet( psWlan->ulNetworkTypeInUse, psWlan->ucSupportedRates, psWlan->ucDesiredRates );
            }
            break;
        }
    }
    else
    {
        DBG_LEV0(("ERROR: Get MIB request failed, item 0x%x, error %d.\n",
                  psGetMib->u16ObjectID, psGetMib->u16Status));
    }

    // Handle the pending OID request if necessary.
    if ( (psPendingOID->ulOid == OID_COMMASIC_RX_BUF_OVERFLOW_CT && 
          psGetMib->u16ObjectID == MIB_RX_BUF_OVERFLOW_COUNT) ||
         (psPendingOID->ulOid == OID_COMMASIC_RX_STATS && 
          psGetMib->u16ObjectID == MIB_UWA_RX_STATS_SEGM3) ||
         (psPendingOID->ulOid == OID_COMMASIC_SNR && 
          psGetMib->u16ObjectID == MIB_SNR))/*||
          psPendingOID->ulOid == OID_COMMASIC_GET_MIB_ATTR )*/
    {
        // Clear the pending OID flag.
        tmpOid = psPendingOID->ulOid; // save for debug print
        psPendingOID->ulOid = 0;

        if ( psGetMib->u16Status == UMI_OK )
        {
            switch ( psGetMib->u16ObjectID )
            {
                case MIB_SNR:
                *(PULONG)psPendingOID->pvBuffer = psWlan->lSnr;
                *psPendingOID->pulBytesWritten = sizeof( LONG );
                break;

                case MIB_RX_BUF_OVERFLOW_COUNT:
                *(PULONG)psPendingOID->pvBuffer = psWlan->ulRxOverflows;
                *psPendingOID->pulBytesWritten = sizeof( ULONG );
                break;

                case MIB_UWA_RX_STATS_SEGM3:
                OS_MEMCPY(psPendingOID->pvBuffer, &psWlan->ulUwaRxStats, 4*MIB_UWA_RX_STATS_LENGTH);
                *psPendingOID->pulBytesWritten = 4*MIB_UWA_RX_STATS_LENGTH;
                break;
            }

            iStatus = NDIS_STATUS_SUCCESS;
	    
            iCurOIDStatus = iStatus;

        }

        // Complete the prior pending OID request.
        NdisMQueryInformationComplete( psAdapter->hMiniportAdapterHandle, iStatus );
        DBG_LEV2(("PENDING Query Completed for OID 0x%x\n", tmpOid));
    }
   
    if ( psAdapter->eNetState == NET_SETUP )
    {
        if ( psGetMib->u16ObjectID == MIB_IEEE_ADDRESS )
        {
            vHALsendGetMibReq( psHAL, MIB_CA_DEVICE_CAPS );
        }
        else if ( psGetMib->u16ObjectID == MIB_CA_DEVICE_CAPS )
        {
            // Start to set MIB.
            vHALstartMACconfiguration( psHAL );
        }
    }
 
    vHALHandleGetMibAttrReq(psHAL, psMsg);
  
}


//-----------------------------------------------------------------------------
//
// NAME        vHALsendSetMibReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          u16MibId MIB Id.
//          puValue     Pointer to MIB data.
//
// DESCRIPTION This function sends a Set MIB request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendSetMibReq( IN PHAL_CONTEXT psHAL, IN MIB_ID u16MibId, IN MIB_VALUE * puValue )

⌨️ 快捷键说明

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