oidproc.c
来自「Windows CE 6.0 BSP for VOIP sample phone」· C语言 代码 · 共 2,127 行 · 第 1/5 页
C
2,127 行
pn11Stat->RTSSuccessCount.LowPart =
Adapter->RTSSuccessCount.LowPart;
pn11Stat->RTSSuccessCount.HighPart =
Adapter->RTSSuccessCount.HighPart;
pn11Stat->RTSFailureCount.LowPart =
Adapter->RTSFailureCount.LowPart;
pn11Stat->RTSFailureCount.HighPart =
Adapter->RTSFailureCount.HighPart;
pn11Stat->ACKFailureCount.LowPart =
Adapter->ACKFailureCount.LowPart;
pn11Stat->ACKFailureCount.HighPart =
Adapter->ACKFailureCount.HighPart;
pn11Stat->FrameDuplicateCount.LowPart =
Adapter->FrameDuplicateCount.LowPart;
pn11Stat->FrameDuplicateCount.HighPart =
Adapter->FrameDuplicateCount.HighPart;
pn11Stat->ReceivedFragmentCount.LowPart =
Adapter->ReceivedFragmentCount.LowPart;
pn11Stat->ReceivedFragmentCount.HighPart =
Adapter->ReceivedFragmentCount.HighPart;
pn11Stat->MulticastReceivedFrameCount.LowPart =
Adapter->MulticastReceivedFrameCount.LowPart;
pn11Stat->MulticastReceivedFrameCount.HighPart =
Adapter->MulticastReceivedFrameCount.HighPart;
pn11Stat->FCSErrorCount.LowPart =
Adapter->FCSErrorCount.LowPart;
pn11Stat->FCSErrorCount.HighPart =
Adapter->FCSErrorCount.HighPart;
*BytesWritten = sizeof(NDIS_802_11_STATISTICS);
break;
case OID_802_11_BSSID_LIST:
{
// AllenDBGPRINT(DBG_OID, ("OID_802_11_BSSID_LIST\n"));
/// RETAILMSG(1, (TEXT("OID_802_11_BSSID_LIST \r\n")));
if (Adapter->ListBufferLen == 0)
{
// Per the Spec: "This array must contain at least one item.
// If there are no BSSIDs detected, NumberOfItems must be set to zero."
NdisZeroMemory( Adapter->ListBuffer, sizeof(NDIS_802_11_BSSID_LIST_EX));
Adapter->ListBufferLen = sizeof(NDIS_802_11_BSSID_LIST_EX);
}
MoveSource = Adapter->ListBuffer;
MoveBytes = Adapter->ListBufferLen;
}
case OID_802_11_AUTHENTICATION_MODE:
// AllenDBGPRINT(DBG_OID,("REQUEST - OID_802_11_AUTHENTICATION_MODE - %d ****\n",
// Adapter->AuthenticationMode));
if (InformationBufferLength < sizeof(NDIS_802_11_AUTHENTICATION_MODE))
{
*BytesNeeded = sizeof(NDIS_802_11_AUTHENTICATION_MODE);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Adapter->AuthenticationMode;
*BytesWritten = sizeof(NDIS_802_11_AUTHENTICATION_MODE);
break;
case OID_802_11_PRIVACY_FILTER:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_PRIVACY_FILTER ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_PRIVACY_FILTER))
{
*BytesNeeded = sizeof(NDIS_802_11_PRIVACY_FILTER);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Adapter->PrivacyFilter;
*BytesWritten = sizeof(NDIS_802_11_PRIVACY_FILTER);
break;
#ifndef WPA // mutually exclusive with OID_802_11_ENCRYPTION_STATUS
case OID_802_11_WEP_STATUS:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_WEP_STATUS ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_WEP_STATUS))
{
*BytesNeeded = sizeof(NDIS_802_11_WEP_STATUS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Adapter->WEPStatus;
*BytesWritten = sizeof(NDIS_802_11_WEP_STATUS);
break;
#endif
case OID_802_11_RX_ANTENNA_SELECTED:
{
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_RX_ANTENNA_SELECTED ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_ANTENNA))
{
*BytesNeeded = sizeof(NDIS_802_11_ANTENNA);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_RF_ANTENNA,
HostCmd_ACT_GET_RX,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
0,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_FAILURE;
}
else
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_PENDING;
}
}
break;
case OID_802_11_TX_ANTENNA_SELECTED:
{
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_TX_ANTENNA_SELECTED ****\n"));
if (InformationBufferLength < sizeof(NDIS_802_11_ANTENNA))
{
*BytesNeeded = sizeof(NDIS_802_11_ANTENNA);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_RF_ANTENNA,
HostCmd_ACT_GET_TX,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
0,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_FAILURE;
}
else
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_PENDING;
}
}
break;
case OID_802_11_TX_POWER_LEVEL:
{
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_TX_POWER_LEVEL ****\n"));
if ( InformationBufferLength < sizeof(NDIS_802_11_TX_POWER_LEVEL) )
{
*BytesNeeded = sizeof(NDIS_802_11_TX_POWER_LEVEL);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_RF_TX_POWER,
HostCmd_ACT_TX_POWER_OPT_GET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
0,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_FAILURE;
}
else
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_PENDING;
}
}
break;
#ifdef WPA
case OID_802_11_ENCRYPTION_STATUS:
// AllenDBGPRINT(DBG_OID | DBG_WPA,
// ("REQUEST - OID_802_11_ENCRYPTION_STATUS - %d ****\n",
// Adapter->EncryptionStatus));
if (InformationBufferLength < sizeof(NDIS_802_11_ENCRYPTION_STATUS))
{
*BytesNeeded = sizeof(NDIS_802_11_ENCRYPTION_STATUS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Adapter->EncryptionStatus;
//GenericULONG = 4;
*BytesWritten = sizeof(NDIS_802_11_ENCRYPTION_STATUS);
break;
case OID_802_11_ASSOCIATION_INFORMATION:
{
PNDIS_802_11_ASSOCIATION_INFORMATION pAssoInfo;
DBGPRINT(DBG_OID | DBG_WPA ,
("REQUEST - OID_802_11_ASSOCIATION_INFORMATION ****\n"));
pAssoInfo = (PNDIS_802_11_ASSOCIATION_INFORMATION)
Adapter->AssocInfoBuffer;
// reponse IE is the the last part of the buffer
if ( InformationBufferLength < (pAssoInfo->OffsetResponseIEs +
pAssoInfo->ResponseIELength) )
{
*BytesNeeded = pAssoInfo->OffsetResponseIEs +
pAssoInfo->ResponseIELength;
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = Adapter->AssocInfoBuffer;
MoveBytes = pAssoInfo->OffsetResponseIEs +
pAssoInfo->ResponseIELength;
DBGPRINT(DBG_WPA, ("OID_802_11_ASSOCIATiON_INFO move bytes = %d\n",
MoveBytes));
///HexDump(DBG_CMDRESP,"AssocInfoBuffer: ", MoveSource,
/// MoveBytes);
}
break;
#endif
// WMI support
case OID_MRVL_OEM_GET_ULONG:
GenericULONG = 0;
break;
case OID_MRVL_OEM_SET_ULONG:
break;
case OID_MRVL_OEM_GET_STRING:
MoveSource = (PVOID)VendorDescriptor;
MoveBytes = sizeof(VendorDescriptor);
break;
case OID_MRVL_BBP_REG:
{
// request BBP reg access
if (InformationBufferLength < sizeof(OID_MRVL_DS_BBP_REGISTER_ACCESS))
{
*BytesNeeded = sizeof(OID_MRVL_DS_BBP_REGISTER_ACCESS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
///HexDump(DBG_OID,"OID_MRVL_BBP_REG(GET): ", (PUCHAR)InformationBuffer, InformationBufferLength);
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_BBP_REG_ACCESS,
HostCmd_ACT_GET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
0,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_FAILURE;
}
else
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_PENDING;
}
}
break;
case OID_MRVL_MAC_REG:
{
// request MAC reg access
if ( InformationBufferLength < sizeof(OID_MRVL_DS_MAC_REGISTER_ACCESS) )
{
*BytesNeeded = sizeof(OID_MRVL_DS_MAC_REGISTER_ACCESS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_REG_ACCESS,
HostCmd_ACT_GET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
0,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_FAILURE;
}
else
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_PENDING;
}
}
break;
case OID_MRVL_RF_REG:
{
// request RF reg access
if (InformationBufferLength < sizeof(OID_MRVL_DS_RF_REGISTER_ACCESS))
{
*BytesNeeded = sizeof(OID_MRVL_DS_RF_REGISTER_ACCESS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_RF_REG_ACCESS,
HostCmd_ACT_GET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
0,
BytesNeeded,
InformationBuffer);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_FAILURE;
}
else
{
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_PENDING;
}
}
break;
case OID_MRVL_EEPROM_ACCESS:
{
POID_MRVL_DS_EEPROM_ACCESS pData;
// request flash access
if ( InformationBufferLength < sizeof(OID_MRVL_DS_EEPROM_ACCESS) )
{
*BytesNeeded = sizeof(OID_MRVL_DS_EEPROM_ACCESS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
pD
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?