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 + -
显示快捷键?