📄 message.c
字号:
//-----------------------------------------------------------------------------
//
// 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 + -