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

📄 rtmp_info.c

📁 r73模块的无线网卡在Linux下的驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	range->num_bitrates = val;	range->max_qual.qual = 100; /* what is correct max? This was not                                * documented exactly. At least					            * 69 has been observed. */	range->max_qual.level = 0; /* dB */	range->max_qual.noise = 0; /* dB */	/* What would be suitable values for "average/typical" qual? */	range->avg_qual.qual = 20;	range->avg_qual.level = -60;	range->avg_qual.noise = -95;	range->sensitivity = 3;	range->max_encoding_tokens = NR_WEP_KEYS;	range->num_encoding_sizes = 2;	range->encoding_size[0] = 5;	range->encoding_size[1] = 13;#if 0	over2 = 0;	len = prism2_get_datarates(dev, rates);	range->num_bitrates = 0;	for (i = 0; i < len; i++) {		if (range->num_bitrates < IW_MAX_BITRATES) {			range->bitrate[range->num_bitrates] =				rates[i] * 500000;			range->num_bitrates++;		}		if (rates[i] == 0x0b || rates[i] == 0x16)			over2 = 1;	}	/* estimated maximum TCP throughput values (bps) */	range->throughput = over2 ? 5500000 : 1500000;#endif	range->min_rts = MIN_RTS_THRESHOLD;	range->max_rts = MAX_RTS_THRESHOLD;	range->min_frag = MIN_FRAG_THRESHOLD;	range->max_frag = MAX_FRAG_THRESHOLD;	return 0;}int rt_ioctl_giwap(struct net_device *dev,			  struct iw_request_info *info,			  struct sockaddr *ap_addr, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;    //check if the interface is down    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))	{		ap_addr->sa_family = ARPHRD_ETHER;		memcpy(ap_addr->sa_data, &pAdapter->PortCfg.Bssid, ETH_ALEN);	}	else	{		DBGPRINT(RT_DEBUG_TRACE, "IOCTL::SIOCGIWAP(=EMPTY)\n");		return -ENOTCONN;	}	return 0;}/* * Units are in db above the noise floor. That means the * rssi values reported in the tx/rx descriptors in the * driver are the SNR expressed in db. * * If you assume that the noise floor is -95, which is an * excellent assumption 99.5 % of the time, then you can * derive the absolute signal level (i.e. -95 + rssi). * There are some other slight factors to take into account * depending on whether the rssi measurement is from 11b, * 11g, or 11a.   These differences are at most 2db and * can be documented. * * NB: various calculations are based on the orinoco/wavelan *	   drivers for compatibility */static void set_quality(PRTMP_ADAPTER pAdapter,                        struct iw_quality *iq,                        u_int rssi){    u32 ChannelQuality, NorRssi;    // Normalize Rssi    if (rssi > 0x50)        NorRssi = 100;    else if (rssi  < 0x20)        NorRssi = 0;    else        NorRssi = (rssi  - 0x20) * 2;    // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER	 (RSSI 0..100), (TxPER 100..0), (RxPER 100..0)    ChannelQuality = (RSSI_WEIGHTING * NorRssi +					    TX_WEIGHTING * (100 - 0) +				        RX_WEIGHTING* (100 - 0)) / 100;    if (ChannelQuality >= 100)        ChannelQuality = 100;    iq->qual = ChannelQuality;#ifdef RTMP_EMBEDDED    iq->level = rt_abs(rssi);   // signal level (dBm)#else    iq->level = abs(rssi);      // signal level (dBm)#endif    iq->level += 256 - pAdapter->BbpRssiToDbmDelta;    iq->noise = (pAdapter->BbpWriteLatch[17] > pAdapter->BbpTuning.R17UpperBoundG) ? pAdapter->BbpTuning.R17UpperBoundG : ((ULONG) pAdapter->BbpWriteLatch[17]); 	// noise level (dBm)    iq->noise += 256 - 143;    iq->updated = pAdapter->iw_stats.qual.updated;}int rt_ioctl_iwaplist(struct net_device *dev,			struct iw_request_info *info,			struct iw_point *data, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	struct sockaddr addr[IW_MAX_AP];	struct iw_quality qual[IW_MAX_AP];	int i;    //check if the interface is down    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	for (i = 0; i <IW_MAX_AP ; i++)	{		if (i >=  pAdapter->ScanTab.BssNr)			break;		addr[i].sa_family = ARPHRD_ETHER;			memcpy(addr[i].sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, MAC_ADDR_LEN);		set_quality(pAdapter, &qual[i], pAdapter->ScanTab.BssEntry[i].Rssi);	}	data->length = i;	memcpy(extra, &addr, i*sizeof(addr[0]));	data->flags = 1;		/* signal quality present (sort of) */	memcpy(extra + i*sizeof(addr[0]), &qual, i*sizeof(qual[i]));	return 0;}#ifdef SIOCGIWSCANint rt_ioctl_siwscan(struct net_device *dev,			struct iw_request_info *info,			struct iw_point *data, char *extra){	ULONG								Now;	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	int Status = NDIS_STATUS_SUCCESS;	//BOOLEAN		StateMachineTouched = FALSE;    //check if the interface is down    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) {		DBGPRINT(RT_DEBUG_TRACE,"<===rt_ioctl_siwscan still scanning\n");		return -EINPROGRESS;	}	do{		Now = jiffies;		if ((OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) &&			((pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA) ||			(pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||			(pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA2) ||			(pAdapter->PortCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) &&			(pAdapter->PortCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)			)		{			DBGPRINT(RT_DEBUG_TRACE, "!!! Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n");			Status = NDIS_STATUS_SUCCESS;			break;		}		if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE  && (pAdapter->MLMEThr_pid > 0))		{			DBGPRINT(RT_DEBUG_INFO,"- %s:: CNTL SM not idle (state=%d)\n",					__FUNCTION__, pAdapter->Mlme.CntlMachine.CurrState);			MlmeEnqueue(pAdapter,                        MLME_CNTL_STATE_MACHINE,                        RT_CMD_RESET_MLME,                        0,                        NULL);		}		// tell CNTL state machine to call NdisMSetInformationComplete() after completing		// this request, because this request is initiated by NDIS.		pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE;		// Reset Missed scan number		pAdapter->PortCfg.ScanCnt = 0;		pAdapter->PortCfg.LastScanTime = Now;		MlmeEnqueue(pAdapter,					MLME_CNTL_STATE_MACHINE,					OID_802_11_BSSID_LIST_SCAN,					0,					NULL);		RTUSBMlmeUp(pAdapter);		Status = NDIS_STATUS_SUCCESS;		//StateMachineTouched = TRUE;	}while(0);	DBGPRINT(RT_DEBUG_TRACE,"<===rt_ioctl_siwscan\n");	return 0;}#define MAX_CUSTOM_LEN 64intrt_ioctl_giwscan(struct net_device *dev,			struct iw_request_info *info,			struct iw_point *data, char *extra){	PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;	int i=2, j;	char *current_ev = extra, *previous_ev = extra;	char *end_buf = extra + IW_SCAN_MAX_DATA;   // some of platforms restricted on IW_SCAN_MAX_DATA	char *current_val;    struct iw_event iwe;	iwri_struct(iwri);#if 0   // support bit rate, extended rate, quality and last beacon timing    //-------------------------------------------	char custom[MAX_CUSTOM_LEN];	char *p;	char SupRateLen, ExtRateLen;	char rate, max_rate;    int  k;	//-------------------------------------------#endif    //check if the interface is down    if (pAdapter->RTUSBCmdThr_pid < 0)        return -ENETDOWN;	if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)){		/*		 * Still scanning, indicate the caller should try again.		 */		return -EAGAIN;	}	for (i = 0; i < pAdapter->ScanTab.BssNr; i++)	{		if (current_ev >= end_buf)			break;		//MAC address		//================================		memset(&iwe, 0, sizeof(iwe));		iwri_start(iwri);		iwe.cmd = SIOCGIWAP;		iwe.u.ap_addr.sa_family = ARPHRD_ETHER;        memcpy(iwe.u.ap_addr.sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, ETH_ALEN);        previous_ev = current_ev;        current_ev = iwe_stream_add_event(iwri_ref(&iwri) current_ev,end_buf, &iwe, IW_EV_ADDR_LEN);        if (current_ev == previous_ev)            break;		//ESSID		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWESSID;		iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].SsidLen;		iwe.u.data.flags = 1;        previous_ev = current_ev;		current_ev = iwe_stream_add_point(iwri_ref(&iwri) current_ev,end_buf, &iwe, pAdapter->ScanTab.BssEntry[i].Ssid);        if (current_ev == previous_ev)            break;		//Network Type		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWMODE;		if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11IBSS)		{			iwe.u.mode = IW_MODE_ADHOC;		}		else if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11Infrastructure)		{			iwe.u.mode = IW_MODE_INFRA;		}		else		{			iwe.u.mode = IW_MODE_AUTO;		}		iwe.len = IW_EV_UINT_LEN;        previous_ev = current_ev;		current_ev = iwe_stream_add_event(iwri_ref(&iwri) current_ev, end_buf, &iwe,  IW_EV_UINT_LEN);        if (current_ev == previous_ev)            break;		//Channel and Frequency		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWFREQ;		if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))			iwe.u.freq.m = pAdapter->ScanTab.BssEntry[i].Channel;		else			iwe.u.freq.m = pAdapter->ScanTab.BssEntry[i].Channel;		iwe.u.freq.e = 0;		iwe.u.freq.i = 0;		previous_ev = current_ev;		current_ev = iwe_stream_add_event(iwri_ref(&iwri) current_ev,end_buf, &iwe, IW_EV_FREQ_LEN);        if (current_ev == previous_ev)            break;		//Encyption key		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWENCODE;		if (CAP_IS_PRIVACY_ON (pAdapter->ScanTab.BssEntry[i].CapabilityInfo ))			iwe.u.data.flags =IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;		else			iwe.u.data.flags = IW_ENCODE_DISABLED;        previous_ev = current_ev;        current_ev = iwe_stream_add_point(iwri_ref(&iwri) current_ev, end_buf,&iwe,  pAdapter->SharedKey[(iwe.u.data.flags & IW_ENCODE_INDEX)-1].Key);        if (current_ev == previous_ev)            break;#if 1	// support bit rate		//Bit Rate		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWRATE;		current_val = current_ev + IW_EV_LCP_LEN;		//for (j = 0; j < pAdapter->ScanTab.BssEntry[i].RatesLen;j++)		for (j = 0; j < 1;j++)		{			iwe.u.bitrate.value = RateIdToMbps[pAdapter->ScanTab.BssEntry[i].SupRate[i]/2] * 1000000;			iwe.u.bitrate.disabled = 0;			current_val = iwe_stream_add_value(iwri_ref(&iwri) current_ev,				current_val, end_buf, &iwe,				IW_EV_PARAM_LEN);		}        if((current_val-current_ev)>IW_EV_LCP_LEN)            current_ev = current_val;        else            break;#else	// support bit rate, extended rate, quality and last beacon timing        // max. of displays used IW_SCAN_MAX_DATA are about 22~24 cells		//Bit Rate		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = SIOCGIWRATE;		current_val = current_ev + IW_EV_LCP_LEN;		SupRateLen = pAdapter->ScanTab.BssEntry[i].SupRateLen;		ExtRateLen = pAdapter->ScanTab.BssEntry[i].ExtRateLen;		max_rate = 0;		p = custom;		p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): ");		for (k = 0, j = 0; k < SupRateLen; )		{			if (j < ExtRateLen &&			((pAdapter->ScanTab.BssEntry[i].ExtRate[j] & 0x7F) <				(pAdapter->ScanTab.BssEntry[i].SupRate[k] & 0x7F)))			{				rate = pAdapter->ScanTab.BssEntry[i].ExtRate[j++] & 0x7F;			}			else			{				rate = pAdapter->ScanTab.BssEntry[i].SupRate[k++] & 0x7F;			}			if (rate > max_rate)				max_rate = rate;			p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),					  "%d%s ", rate >> 1, (rate & 1) ? ".5" : "");		}		for (; j < ExtRateLen; j++)		{			rate = pAdapter->ScanTab.BssEntry[i].ExtRate[j] & 0x7F;			p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),					  "%d%s ", rate >> 1, (rate & 1) ? ".5" : "");			if (rate > max_rate)				max_rate = rate;		}		iwe.u.bitrate.value = max_rate * 500000;		iwe.u.bitrate.disabled = 0;		current_val = iwe_stream_add_value(iwri_ref(&iwri) current_ev,			current_val, end_buf, &iwe,			IW_EV_PARAM_LEN);		if((current_val-current_ev)>IW_EV_LCP_LEN)			current_ev = current_val;		else		    break;		//Extended Rate		//================================		memset(&iwe, 0, sizeof(iwe));		iwe.cmd = IWEVCUSTOM;		iwe.u.data.length = p - custom;		if (iwe.u.data.length)

⌨️ 快捷键说明

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