oidproc.c
来自「Windows CE 6.0 BSP for VOIP sample phone」· C语言 代码 · 共 2,127 行 · 第 1/5 页
C
2,127 行
pNetworkTypeList->NetworkType[1] = Ndis802_11OFDM24;
MoveSource = pNetworkTypeList;
MoveBytes = cbReqdSize;
}
break;
case OID_802_11_NETWORK_TYPE_IN_USE:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_NETWORK_TYPE_IN_USE ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_NETWORK_TYPE) )
{
*BytesNeeded = sizeof(NDIS_802_11_NETWORK_TYPE);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
if ( NdisEqualMemory(Adapter->CurrentBSSID,
Adapter->NullBSSID,
MRVDRV_ETH_ADDR_LEN) )
{
GenericULONG = (ULONG)Ndis802_11OFDM24;
MoveSource = &GenericULONG;
}
else
{
MoveSource = &(Adapter->CurrentBSSIDDesciptor.NetworkTypeInUse);
}
MoveBytes = sizeof(NDIS_802_11_NETWORK_TYPE);
break;
case OID_802_11_BSSID:
// AllenDBGPRINT(DBG_OID,("REQUEST - OID_802_11_BSSID ****\n"));
if (Adapter->MediaConnectStatus == NdisMediaStateDisconnected)
{
MoveSource = NULL;
MoveBytes = 0;
Status = NDIS_STATUS_ADAPTER_NOT_READY;
}
else
{
// if the CurrentBSSID is a NULL string
if ( NdisEqualMemory(Adapter->CurrentBSSID,
Adapter->NullBSSID,
MRVDRV_ETH_ADDR_LEN) )
{
Status = NDIS_STATUS_ADAPTER_NOT_READY;
}
else if( InformationBufferLength < MRVDRV_ETH_ADDR_LEN )
{
*BytesNeeded = MRVDRV_ETH_ADDR_LEN;
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
else
{
MoveSource = (PVOID)Adapter->CurrentBSSID;
MoveBytes = MRVDRV_ETH_ADDR_LEN;
// AllenDBGPRINT(1, ("---> %02x %02x %02x %02x %02x %02x\n",
// Adapter->CurrentBSSID[0],
// Adapter->CurrentBSSID[1],
// Adapter->CurrentBSSID[2],
// Adapter->CurrentBSSID[3],
// Adapter->CurrentBSSID[4],
// Adapter->CurrentBSSID[5]));
}
}
break;
case OID_802_11_SSID:
// AllenDBGPRINT(DBG_OID,("REQUEST - OID_802_11_SSID ****\n"));
if (Adapter->MediaConnectStatus == NdisMediaStateDisconnected)
{
MoveBytes = 0;
}
else
{
if ( InformationBufferLength < sizeof(NDIS_802_11_SSID))
{
*BytesNeeded = sizeof(NDIS_802_11_SSID);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
if ( NdisEqualMemory( &(Adapter->CurrentSSID),
&(Adapter->NullSSID),
sizeof(NDIS_802_11_SSID)))
{
MoveBytes = 0;
DBGPRINT(DBG_OID,("Current SSID is null!\n"));
}
else
{
DBGPRINT(DBG_OID,("Current SSID is %s\n", Adapter->CurrentSSID.Ssid));
MoveSource = (PVOID)&Adapter->CurrentSSID;
MoveBytes = sizeof(NDIS_802_11_SSID);
// HexDump(DBG_OID, "CurrentSSID: ", (PUCHAR)&Adapter->CurrentSSID,
// sizeof(NDIS_802_11_SSID));
}
}
break;
case OID_802_11_POWER_MODE:
// AllenDBGPRINT(DBG_OID | DBG_SP,("REQUEST - OID_802_11_POWER_MODE ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_POWER_MODE) )
{
*BytesNeeded = sizeof(NDIS_802_11_POWER_MODE);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID)&Adapter->PSMode;
MoveBytes = sizeof(NDIS_802_11_POWER_MODE);
break;
case OID_MRVL_HOST_SLEEP_STATUS:
{
POID_MRVL_DS_HOST_WAKEUP_STATUS phws = (POID_MRVL_DS_HOST_WAKEUP_STATUS) &(GenericArray[0]);
if( InformationBufferLength < sizeof(OID_MRVL_DS_HOST_WAKEUP_STATUS) )
{
*BytesNeeded = sizeof(OID_MRVL_DS_HOST_WAKEUP_STATUS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
phws->hwState = Adapter->HostPowerState;
phws->psState = Adapter->psState;
MoveSource = (PVOID) (GenericArray);
MoveBytes = sizeof(OID_MRVL_DS_HOST_WAKEUP_STATUS);
break;
}
case OID_802_11_RSSI:
{
ULONG CurrentTime, Diff;
if ( InformationBufferLength < sizeof(NDIS_802_11_RSSI) )
{
*BytesNeeded = sizeof(NDIS_802_11_RSSI);
return NDIS_STATUS_INVALID_LENGTH;
}
if (Adapter->MediaConnectStatus == NdisMediaStateConnected)
{
NdisGetSystemUpTime(&(CurrentTime)); // unit = 1/1000 sec
if (CurrentTime >= Adapter->RxPDSNRAge)
Diff = CurrentTime - Adapter->RxPDSNRAge;
else
Diff = (0xffffffff - Adapter->RxPDSNRAge) + CurrentTime;
if (Diff <= RXPD_SNR_AGEOUT_TIME || Adapter->bIsScanInProgress)
{
// AllenDBGPRINT(DBG_OID,("REQUEST - OID_802_11_RSSI (%d) (from RXPD) \n",
// Adapter->LastRSSI));
GenericLONG = Adapter->LastRSSI;
MoveSource = (PVOID) (&GenericLONG);
MoveBytes = sizeof(GenericLONG);
}
else
{
NdisMoveMemory( InformationBuffer,
(UCHAR *)(&Adapter->LastRSSI),
sizeof(LONG));
*BytesWritten = sizeof(ULONG);
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_RSSI,
0,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
NULL,
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;
}
}
}
else
{
GenericLONG = -200;
MoveSource = (PVOID) (&GenericLONG);
MoveBytes = sizeof(GenericLONG);
}
}
break;
case OID_802_11_RSSI_TRIGGER:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_RSSI_TRIGGER ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_RSSI) )
{
*BytesNeeded = sizeof(NDIS_802_11_RSSI);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
GenericLONG = Adapter->RSSITriggerValue;
MoveSource = (PVOID) (&GenericLONG);
MoveBytes = sizeof(GenericLONG);
break;
case OID_802_11_INFRASTRUCTURE_MODE:
// AllenDBGPRINT(DBG_OID,("REQUEST - OID_802_11_INFRASTRUCTURE_MODE ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE) )
{
*BytesNeeded = sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
if (Adapter->ulCurrentBSSIDIndex < MRVDRV_MAX_BSSID_LIST)
{
GenericULONG = Adapter->InfrastructureMode;
}
break;
case OID_802_11_FRAGMENTATION_THRESHOLD:
{
if( InformationBufferLength < sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD) )
{
*BytesNeeded = sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
NULL,
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_RTS_THRESHOLD:
{
if( InformationBufferLength < sizeof(NDIS_802_11_RTS_THRESHOLD) )
{
*BytesNeeded = sizeof(NDIS_802_11_RTS_THRESHOLD);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
NULL,
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_CONFIGURATION:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_CONFIGURATION ****\n"));
if ( InformationBufferLength < sizeof(NDIS_802_11_CONFIGURATION) )
{
*BytesNeeded = sizeof(NDIS_802_11_CONFIGURATION);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID)&(Adapter->CurrentConfiguration);
MoveBytes = sizeof(NDIS_802_11_CONFIGURATION);
break;
case OID_802_11_SUPPORTED_RATES:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_SUPPORTED_RATES ****\n"));
if( InformationBufferLength < MRVDRV_NUM_SUPPORTED_RATES )
{
*BytesNeeded = MRVDRV_NUM_SUPPORTED_RATES;
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID)MrvDrvSupportedRates;
MoveBytes = MRVDRV_NUM_SUPPORTED_RATES;
break;
case OID_802_11_DESIRED_RATES:
{
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_DESIRED_RATES ****\n"));
if( InformationBufferLength < 8 )
{
*BytesNeeded = 8;
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_DATA_RATE,
HostCmd_ACT_GET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
BytesWritten,
NULL,
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_STATISTICS:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_STATISTICS ****\n"));
if ( InformationBufferLength < sizeof(NDIS_802_11_STATISTICS) )
{
*BytesNeeded = sizeof(NDIS_802_11_STATISTICS);
Adapter->bIsOidUsed = FALSE;
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID)InformationBuffer;
pn11Stat = (PNDIS_802_11_STATISTICS)InformationBuffer;
pn11Stat->Length = sizeof(NDIS_802_11_STATISTICS);
pn11Stat->TransmittedFragmentCount.LowPart =
Adapter->TransmittedFragmentCount.LowPart;
pn11Stat->TransmittedFragmentCount.HighPart =
Adapter->TransmittedFragmentCount.HighPart;
pn11Stat->MulticastTransmittedFrameCount.LowPart =
Adapter->MulticastTransmittedFrameCount.LowPart;
pn11Stat->MulticastTransmittedFrameCount.HighPart =
Adapter->MulticastTransmittedFrameCount.HighPart;
pn11Stat->FailedCount.LowPart =
Adapter->FailedCount.LowPart;
pn11Stat->FailedCount.HighPart =
Adapter->FailedCount.HighPart;
pn11Stat->RetryCount.LowPart =
Adapter->RetryCount.LowPart;
pn11Stat->RetryCount.HighPart =
Adapter->RetryCount.HighPart;
pn11Stat->MultipleRetryCount.LowPart =
Adapter->MultipleRetryCount.LowPart;
pn11Stat->MultipleRetryCount.HighPart =
Adapter->MultipleRetryCount.HighPart;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?