⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 miscproc.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 5 页
字号:
 *  Name: SetMacPacketFilter()
 *
 *  Description: To set MAC packet filter
 *
 *  Arguments:	PMRVDRV_ADAPTER Adapter, 
 * 				ULONG CurrentPacketFilter
 *    
 *  Return Value: NDIS_STATUS
 * 
 *  Notes: 
 *
 *****************************************************************************/
NDIS_STATUS
SetMacPacketFilter(
	IN PMRVDRV_ADAPTER Adapter, 
	IN ULONG CurrentPacketFilter
)
{
	NDIS_STATUS Status;

    	DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilter() 0x%x \n", CurrentPacketFilter));
	// if the CurrentPacketFilter is 0, turn off Rx

	if (CurrentPacketFilter == 0)
	{
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	

		Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
					         			    HostCmd_ACT_MAC_TX_ON |
					         			    HostCmd_ACT_MAC_INT_ENABLE);
       }
	else
	{
		// Set default MAC option
		Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
					         HostCmd_ACT_MAC_TX_ON );
		
#ifdef TT_WEP_1        
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE; 
#else
		// need to check if currently the wep is on
		if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
		{
		    	DBGPRINT(DBG_WEP | DBG_ALLEN,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
		    	Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
		}
		else
		{
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;	
		}
#endif // TT_WEP_1


		if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
			Adapter->usMacControlRecord |=  HostCmd_ACT_MAC_BROADCAST_ENABLE;
		else
			Adapter->usMacControlRecord &=  ~HostCmd_ACT_MAC_BROADCAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	

	}

       DBGPRINT(DBG_WEP | DBG_CRLF ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));
	// Send MAc control command ro station
	Status = PrepareAndSendCommand(
					Adapter, 
					HostCmd_CMD_MAC_CONTROL, 
					Adapter->usMacControlRecord, 
					HostCmd_OPTION_USE_INT,
					(NDIS_OID)0,
					HostCmd_PENDING_ON_NONE, 
					0,
					FALSE,
					NULL,
					NULL,
					NULL,
					NULL);

	return Status;
}


 
/******************************************************************************
 *
 *  Name: SetMacPacketFilterOID()
 *
 *  Description: To set MAC packet filter, and indicates status when firmware
 *				  returns
 *
 *  Arguments:	PMRVDRV_ADAPTER Adapter, 
 * 				ULONG CurrentPacketFilter
 *    
 *  Return Value: NDIS_STATUS
 * 
 *  Notes: 
 *
 *****************************************************************************/
NDIS_STATUS
SetMacPacketFilterOID(
	IN PMRVDRV_ADAPTER Adapter, 
	IN ULONG CurrentPacketFilter
)
{
	NDIS_STATUS Status;

	DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN,("+SetMacPacketFilterOID() 0x%x \n", CurrentPacketFilter));
	
	if (CurrentPacketFilter == 0)
	{
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
	    	Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
	    	Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
	    	Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	

	    	Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
						     			      HostCmd_ACT_MAC_TX_ON |
						     			      HostCmd_ACT_MAC_INT_ENABLE);
       }
	else
	{
		// Set default MAC option
		Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
					         			      HostCmd_ACT_MAC_TX_ON );
#ifdef TT_WEP_1        
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE; 
#else
		// need to check if currently the wep is on
		if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
		{
		       DBGPRINT(DBG_WEP,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
		    	Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
		}
		else
		{
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;	
		}
#endif // TT_WEP_1


		if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
			Adapter->usMacControlRecord |=  HostCmd_ACT_MAC_BROADCAST_ENABLE;
		else
			Adapter->usMacControlRecord &=  ~HostCmd_ACT_MAC_BROADCAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	

	}

	DBGPRINT(DBG_WEP | DBG_CRLF ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));

	// Send MAc control command ro station
	Status = PrepareAndSendCommand(
					Adapter, 
					HostCmd_CMD_MAC_CONTROL, 
					Adapter->usMacControlRecord, 
					HostCmd_OPTION_USE_INT,
					(NDIS_OID)0, 
        			       HostCmd_PENDING_ON_NONE,
					0,
					FALSE,
					NULL,
					NULL,
					NULL,
					NULL);

	return Status;
}
 

#ifdef UNDER_CE
#ifdef MRVL_PRINT_DBG_MSG
// redirect DBGPrint to a file
void MrvPrintFile(const char *fmt, ...)
{
    	va_list     	argP;
    	FILE        	*MrvDbgfp;
    	DWORD       	dwThreadID;
    	DWORD       	dwTick;

    	MrvDbgfp = fopen("\\My Documents\\MrvlCF-25DBG.log","a+");

    	//MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
    	if ( MrvDbgfp == NULL )
    	{
       	//MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
        	return;
    	}

    	dwThreadID = GetCurrentThreadId();
    	dwTick = GetTickCount();

    	fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);

    	va_start(argP, fmt);
    	vfprintf(MrvDbgfp, fmt, argP);
    	fflush(MrvDbgfp);

    	va_end(argP);

    	fclose(MrvDbgfp);
}
#endif // #ifdef MRVL_PRINT_DBG_MSG
#endif // #ifdef UNDER_CE




void AllenPrintFile(const char *fmt, ...)
{
    	va_list     	argP;
    	FILE        	*MrvDbgfp;
    	///DWORD       	dwThreadID;
    	///DWORD       	dwTick;

    	MrvDbgfp = fopen("\\My Documents\\MrvlCF-25DBG.txt","a+");

    	//MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
    	if ( MrvDbgfp == NULL )
    	{
       	//MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
        	return;
    	}

    	///dwThreadID = GetCurrentThreadId();
    	///dwTick = GetTickCount();

    	///fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);

    	va_start(argP, fmt);
    	vfprintf(MrvDbgfp, fmt, argP);
    	fflush(MrvDbgfp);

    	va_end(argP);

    	fclose(MrvDbgfp);
}




/******************************************************************************
 *
 *  Name: ConvertNDISRateToFWIndex()
 *
 *  Description: Look up the FW index for the rate
 *
 *  Arguments:	NDISRate    Rate in NDIS format
 *    
 *  Return Value: Equivalent index in FW, return MRVDRV_NUM_SUPPORTED_RATES 
 *                if no matching rate is found
 * 
 *  Notes:
 *
 *****************************************************************************/
UCHAR   ConvertNDISRateToFWIndex(UCHAR  NDISRate)
{
    	UCHAR i;

    	for ( i=0; i < MRVDRV_NUM_SUPPORTED_RATES; i++ )
    	{
       	if ( NDISRate == MrvDrvSupportedRates[i] )
        	{
            		return i;
        	}
    	}

    	return MRVDRV_NUM_SUPPORTED_RATES;
}

/******************************************************************************
 *
 *  Name: ConvertFWIndexToNDISRate()
 *
 *  Description: Look up the rate for FW index
 *
 *  Arguments:	FWIndex
 *    
 *  Return Value: Equivalent NDIS Rate, return 0 
 *                if no matching rate is found
 * 
 *  Notes:
 *
 *****************************************************************************/
UCHAR   ConvertFWIndexToNDISRate(UCHAR  FWIndex)
{
    	if ( FWIndex >= MRVDRV_NUM_SUPPORTED_RATES )
    	{
       	return 0;
    	}

    	return MrvDrvSupportedRates[FWIndex];
}


/******************************************************************************
 *
 *  Name: ascii2hex()
 *
 *  Description: convert acssic hex string to hex value
 *
 *  Arguments:	s-->input string  d-->output value array  dlen-->input length
 *    
 *  Return Value: 
 * 
 *  Notes: for ADHOCAES key convert to sync. with linux driver
 *
 *****************************************************************************/
int AsciiToHex(unsigned char *d, char *s, int dlen)
{
	int i;
	unsigned char n;

	NdisZeroMemory(d, dlen);

	for (i = 0; i < dlen * 2; i++) 
	{
		if ((s[i] >= 48) && (s[i] <= 57))
			n = s[i] - 48;
		else if ((s[i] >= 65) && (s[i] <= 70))
			n = s[i] - 65;
		else if ((s[i] >= 97) && (s[i] <= 102))
			n = s[i] - 97;
		else
			break;
		if ((i % 2) == 0)
			n = n * 16;
		d[i / 2] += n;
	}

	return i;
}

// The function just filter and reorganize WPA IE now and will skip WMM IE
VOID
RegularIeFilter(UCHAR *IeBuf, USHORT *pBufLen)
{
	UCHAR   IeId;
    	UCHAR   IeLen,TmpIeLen;
	USHORT  CurPos =0;
    	UCHAR   TmpBuf[500];
	USHORT  TmpPos = 0;
	BOOLEAN IsWpaFound = FALSE;
	UCHAR   WPA_OUI[] = { 0x00, 0x50, 0xF2, 0x01};
	UCHAR   CCX_OUI[] = { 0x00, 0x40, 0x96};
       BOOLEAN  ExitFlag = FALSE;
	
	NdisMoveMemory( TmpBuf, IeBuf ,*pBufLen);

    	// DBGPRINT(DBG_ALLEN, ("RegularIeFilter++  *pBufLen = %d\n", *pBufLen));

	// HexDump(DBG_ALLEN, "IeBuf ", IeBuf, *pBufLen);
	
    	while (TmpPos < *pBufLen)
    	{
    		IeId  = *(TmpBuf + TmpPos);
		TmpIeLen = *(TmpBuf + TmpPos + 1);
        	IeLen = TmpIeLen;
		
        	switch (IeId)
        	{
			case 0xdd:  // WPA IE or WMM IE
			    
                		if ((! IsWpaFound) && (TmpIeLen >=22))
                		{
					if ( NdisEqualMemory( (TmpBuf + TmpPos + 2), WPA_OUI, 4 ) == 1 )
					{
						if (TmpIeLen == 24)
                				{
							IeLen = *(TmpBuf + TmpPos + 1) = 22;
							NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), IeLen + 2);
							CurPos += (IeLen + 2);
							//HexDump(DBG_ALLEN, "WPA IE TmpIeLen == 24", (IeBuf + CurPos), IeLen + 2);         
                				}	
						else
						if(TmpIeLen == 22)
						
						{
							NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
					    		CurPos += (TmpIeLen + 2);
							//HexDump(DBG_ALLEN, "WPA IE ", (IeBuf + CurPos), TmpIeLen + 2);    
						}
						
						IsWpaFound = TRUE;
                			}	
#ifdef CCX
					else if ( NdisEqualMemory( (TmpBuf + TmpPos + 2), CCX_OUI, 3 ) == 1 )
					{
							NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
					    		CurPos += (TmpIeLen + 2);
					}
#endif
                    			else 
                			{
						// do nothing
                			}	
                		}
				break;
	
		   	case 0x80:   // workarround for Agree AP for USI

				NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), 2);
				CurPos += 2;
				TmpPos = *pBufLen;
		   	       break;

	           	 case 0x2f:
		        case 0x2a:	   	
			   	break;
				
		    	default:

			       if (*pBufLen >= (CurPos + TmpIeLen + 2))
			       {
				NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
				//HexDump(DBG_ALLEN, "ELSE IE ", (IeBuf + CurPos), TmpIeLen + 2);
				CurPos += (TmpIeLen + 2);
			       }
				else
				{
					TmpPos = *pBufLen;
					ExitFlag = TRUE;
				}   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -