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