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

📄 spectrum.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
	}	RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock);		return pEntry;}static PTPC_REQ_ENTRY TpcReqInsert(	IN PRTMP_ADAPTER	pAd,	IN UINT8			DialogToken){	INT i;	ULONG HashIdx;	PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab;	PTPC_REQ_ENTRY pEntry = NULL, pCurrEntry;	ULONG Now;	if(pTab == NULL)	{		DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __FUNCTION__));		return NULL;	}	pEntry = TpcReqLookUp(pAd, DialogToken);	if (pEntry == NULL)	{		RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock);		for (i = 0; i < MAX_TPC_REQ_TAB_SIZE; i++)		{			NdisGetSystemUpTime(&Now);			pEntry = &pTab->Content[i]; 			if ((pEntry->Valid == TRUE)				&& RTMP_TIME_AFTER((unsigned long)Now, (unsigned long)(pEntry->lastTime + TPC_REQ_AGE_OUT)))			{				PTPC_REQ_ENTRY pPrevEntry = NULL;				ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken);				PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx];				// update Hash list				do				{					if (pProbeEntry == pEntry)					{						if (pPrevEntry == NULL)						{							pTab->Hash[HashIdx] = pEntry->pNext;						}						else						{							pPrevEntry->pNext = pEntry->pNext;						}						break;					}					pPrevEntry = pProbeEntry;					pProbeEntry = pProbeEntry->pNext;				} while (pProbeEntry);				NdisZeroMemory(pEntry, sizeof(TPC_REQ_ENTRY));				pTab->Size--;				break;			} 			if (pEntry->Valid == FALSE)				break;		}		if (i < MAX_TPC_REQ_TAB_SIZE)		{			NdisGetSystemUpTime(&Now);			pEntry->lastTime = Now;			pEntry->Valid = TRUE;			pEntry->DialogToken = DialogToken;			pTab->Size++;		}		else		{			pEntry = NULL;			DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab tab full.\n", __FUNCTION__));		}		// add this Neighbor entry into HASH table		if (pEntry)		{			HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(DialogToken);			if (pTab->Hash[HashIdx] == NULL)			{				pTab->Hash[HashIdx] = pEntry;			}			else			{				pCurrEntry = pTab->Hash[HashIdx];				while (pCurrEntry->pNext != NULL)					pCurrEntry = pCurrEntry->pNext;				pCurrEntry->pNext = pEntry;			}		}		RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock);	} 	return pEntry;}static VOID TpcReqDelete(	IN PRTMP_ADAPTER	pAd,	IN UINT8			DialogToken){	PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab;	PTPC_REQ_ENTRY pEntry = NULL;	if(pTab == NULL)	{		DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __FUNCTION__));		return;	}	// if empty, return	if (pTab->Size == 0) 	{		DBGPRINT(RT_DEBUG_ERROR, ("pTpcReqTab empty.\n"));		return;	}	pEntry = TpcReqLookUp(pAd, DialogToken);	if (pEntry != NULL)	{		PTPC_REQ_ENTRY pPrevEntry = NULL;		ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken);		PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx];		RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock);		// update Hash list		do		{			if (pProbeEntry == pEntry)			{				if (pPrevEntry == NULL)				{					pTab->Hash[HashIdx] = pEntry->pNext;				}				else				{					pPrevEntry->pNext = pEntry->pNext;				}				break;			}			pPrevEntry = pProbeEntry;			pProbeEntry = pProbeEntry->pNext;		} while (pProbeEntry);		NdisZeroMemory(pEntry, sizeof(TPC_REQ_ENTRY));		pTab->Size--;		RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock);	}	return;}/*	==========================================================================	Description:		Get Current TimeS tamp.			Parametrs:		Return	: Current Time Stamp.	========================================================================== */static UINT64 GetCurrentTimeStamp(	IN PRTMP_ADAPTER pAd){	// get current time stamp.	return 0;}/*	==========================================================================	Description:		Get Current Transmit Power.			Parametrs:		Return	: Current Time Stamp.	========================================================================== */static UINT8 GetCurTxPwr(	IN PRTMP_ADAPTER pAd,	IN UINT8 Wcid){	return 16; /* 16 dBm */}/*	==========================================================================	Description:		Get Current Transmit Power.			Parametrs:		Return	: Current Time Stamp.	========================================================================== */VOID InsertChannelRepIE(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen,	IN PSTRING pCountry,	IN UINT8 RegulatoryClass){	ULONG TempLen;	UINT8 Len;	UINT8 IEId = IE_AP_CHANNEL_REPORT;	PUCHAR pChListPtr = NULL;	Len = 1;	if (strncmp(pCountry, "US", 2) == 0)	{		if (RegulatoryClass >= USA_REGULATORY_INFO_SIZE)		{			DBGPRINT(RT_DEBUG_ERROR, ("%s: USA Unknow Requlatory class (%d)\n",						__FUNCTION__, RegulatoryClass));			return;		}		Len += USARegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels;		pChListPtr = USARegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList;	}	else if (strncmp(pCountry, "JP", 2) == 0)	{		if (RegulatoryClass >= JP_REGULATORY_INFO_SIZE)		{			DBGPRINT(RT_DEBUG_ERROR, ("%s: JP Unknow Requlatory class (%d)\n",						__FUNCTION__, RegulatoryClass));			return;		}		Len += JapanRegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels;		pChListPtr = JapanRegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList;	}	else	{		DBGPRINT(RT_DEBUG_ERROR, ("%s: Unknow Country (%s)\n",					__FUNCTION__, pCountry));		return;	}	MakeOutgoingFrame(pFrameBuf,	&TempLen,					1,				&IEId,					1,				&Len,					1,				&RegulatoryClass,					Len -1,			pChListPtr,					END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	return;}/*	==========================================================================	Description:		Insert Dialog Token into frame.			Parametrs:		1. frame buffer pointer.		2. frame length.		3. Dialog token.		Return	: None.	========================================================================== */VOID InsertDialogToken(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen,	IN UINT8 DialogToken){	ULONG TempLen;	MakeOutgoingFrame(pFrameBuf,	&TempLen,					1,				&DialogToken,					END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	return;}/*	==========================================================================	Description:		Insert TPC Request IE into frame.			Parametrs:		1. frame buffer pointer.		2. frame length.		Return	: None.	========================================================================== */ static VOID InsertTpcReqIE(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen){	ULONG TempLen;	ULONG Len = 0;	UINT8 ElementID = IE_TPC_REQUEST;	MakeOutgoingFrame(pFrameBuf,					&TempLen,						1,							&ElementID,						1,							&Len,						END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	return;}/*	==========================================================================	Description:		Insert TPC Report IE into frame.			Parametrs:		1. frame buffer pointer.		2. frame length.		3. Transmit Power.		4. Link Margin.		Return	: None.	========================================================================== */VOID InsertTpcReportIE(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen,	IN UINT8 TxPwr,	IN UINT8 LinkMargin){	ULONG TempLen;	ULONG Len = sizeof(TPC_REPORT_INFO);	UINT8 ElementID = IE_TPC_REPORT;	TPC_REPORT_INFO TpcReportIE;	TpcReportIE.TxPwr = TxPwr;	TpcReportIE.LinkMargin = LinkMargin;	MakeOutgoingFrame(pFrameBuf,					&TempLen,						1,							&ElementID,						1,							&Len,						Len,						&TpcReportIE,						END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	return;}/*	==========================================================================	Description:		Insert Channel Switch Announcement IE into frame.			Parametrs:		1. frame buffer pointer.		2. frame length.		3. channel switch announcement mode.		4. new selected channel.		5. channel switch announcement count.		Return	: None.	========================================================================== */static VOID InsertChSwAnnIE(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen,	IN UINT8 ChSwMode,	IN UINT8 NewChannel,	IN UINT8 ChSwCnt){	ULONG TempLen;	ULONG Len = sizeof(CH_SW_ANN_INFO);	UINT8 ElementID = IE_CHANNEL_SWITCH_ANNOUNCEMENT;	CH_SW_ANN_INFO ChSwAnnIE;	ChSwAnnIE.ChSwMode = ChSwMode;	ChSwAnnIE.Channel = NewChannel;	ChSwAnnIE.ChSwCnt = ChSwCnt;	MakeOutgoingFrame(pFrameBuf,				&TempLen,						1,						&ElementID,						1,						&Len,						Len,					&ChSwAnnIE,						END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	return;}/*	==========================================================================	Description:		Insert Measure Request IE into frame.			Parametrs:		1. frame buffer pointer.		2. frame length.		3. Measure Token.		4. Measure Request Mode.		5. Measure Request Type.		6. Measure Channel.		7. Measure Start time.		8. Measure Duration.		Return	: None.	========================================================================== */static VOID InsertMeasureReqIE(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen,	IN UINT8 Len,	IN PMEASURE_REQ_INFO pMeasureReqIE){	ULONG TempLen;	UINT8 ElementID = IE_MEASUREMENT_REQUEST;	MakeOutgoingFrame(pFrameBuf,					&TempLen,						1,							&ElementID,						1,							&Len,						sizeof(MEASURE_REQ_INFO),	pMeasureReqIE,						END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	return;}/*	==========================================================================	Description:		Insert Measure Report IE into frame.			Parametrs:		1. frame buffer pointer.		2. frame length.		3. Measure Token.		4. Measure Request Mode.		5. Measure Request Type.		6. Length of Report Infomation 		7. Pointer of Report Infomation Buffer.		Return	: None.	========================================================================== */static VOID InsertMeasureReportIE(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen,	IN PMEASURE_REPORT_INFO pMeasureReportIE,	IN UINT8 ReportLnfoLen,	IN PUINT8 pReportInfo){	ULONG TempLen;	ULONG Len;	UINT8 ElementID = IE_MEASUREMENT_REPORT;	Len = sizeof(MEASURE_REPORT_INFO) + ReportLnfoLen;			MakeOutgoingFrame(pFrameBuf,					&TempLen,						1,							&ElementID,						1,							&Len,						Len,						pMeasureReportIE,						END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	if ((ReportLnfoLen > 0) && (pReportInfo != NULL))	{		MakeOutgoingFrame(pFrameBuf + *pFrameLen,		&TempLen,							ReportLnfoLen,				pReportInfo,							END_OF_ARGS);		*pFrameLen = *pFrameLen + TempLen;	}	return;}/*	==========================================================================	Description:		Prepare Measurement request action frame and enqueue it into		management queue waiting for transmition.			Parametrs:		1. the destination mac address of the frame.		Return	: None.	========================================================================== */VOID MakeMeasurementReqFrame(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pOutBuffer,	OUT PULONG pFrameLen,	IN UINT8 TotalLen,	IN UINT8 Category,	IN UINT8 Action,	IN UINT8 MeasureToken, 	IN UINT8 MeasureReqMode,	IN UINT8 MeasureReqType,	IN UINT8 NumOfRepetitions){	ULONG TempLen;	MEASURE_REQ_INFO MeasureReqIE;	InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, Action);	// fill Dialog Token	InsertDialogToken(pAd, (pOutBuffer + *pFrameLen), pFrameLen, MeasureToken);	/* fill Number of repetitions. */	if (Category == CATEGORY_RM)	{		MakeOutgoingFrame((pOutBuffer+*pFrameLen),	&TempLen,						2,							&NumOfRepetitions,						END_OF_ARGS);		*pFrameLen += TempLen;	}	// prepare Measurement IE.	NdisZeroMemory(&MeasureReqIE, sizeof(MEASURE_REQ_INFO));	MeasureReqIE.Token = MeasureToken;	MeasureReqIE.ReqMode.word = MeasureReqMode;	MeasureReqIE.ReqType = MeasureReqType;	InsertMeasureReqIE(pAd, (pOutBuffer+*pFrameLen), pFrameLen,		TotalLen, &MeasureReqIE);	return;}/*	==========================================================================	Description:		Prepare Measurement report action frame and enqueue it into

⌨️ 快捷键说明

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