亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? meeprom_g.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 3 頁
字號:
		setup_raw_dataset_gen5(devNum, pRawDataset_gen5[MODE_11G], pCalDataset_gen5[MODE_11G]->numChannels, pCalDataset_gen5[MODE_11G]->pChannels);
		eeprom_to_raw_dataset_gen5(devNum, pCalDataset_gen5[MODE_11G], pRawDataset_gen5[MODE_11G]);
	} else {
		pRawDataset_gen5[MODE_11G] = NULL;
		pCalDataset_gen5[MODE_11G] = NULL;
	}

	// REMEMBER TO FREE THE CAL DATASETS HERE
//printf("SNOOP: initialize_datasets_gen5 : exited\n");
	return(1);
}


/*
A_BOOL mdk_getFullPwrTable(A_UINT32 devNum, A_UINT16 numPcdacs, A_UINT16 *pcdacs, A_INT16 *power, A_INT16 maxPower, A_INT16 *retVals) {

	A_UINT16	ii;
	A_UINT16	idxL = 0;
	A_UINT16	idxR = 1;

	if (numPcdacs < 2) {
		mError(devNum, EINVAL, "at least 2 pcdac values needed in mdk_getFullPwrTable - [%d]\n", numPcdacs);
		return(FALSE);
	}

	for (ii=0; ii<64; ii++) {
		if ((ii>pcdacs[idxR]) && (idxR < (numPcdacs-1))) {
			idxL++;
			idxR++;
		}
		retVals[ii] = mdk_GetInterpolatedValue_Signed16(ii, pcdacs[idxL], pcdacs[idxR], power[idxL], power[idxR]);
		if (retVals[ii] >= maxPower) {
			while (ii<64) {
				retVals[ii++] = maxPower;
			}
		}
	}
	return(TRUE);
}
*/

/*
A_INT16 getPminAndPcdacTableFromPowerTable(A_INT16 *pwrTable_t4, A_UINT16 retVals[]) {
	A_INT16	ii, jj, jj_max;
	A_INT16		Pmin, currPower, Pmax;
	
	// if the spread is > 31.5dB, keep the upper 31.5dB range
	if ((pwrTable_t4[63] - pwrTable_t4[0]) > 126) {
		Pmin = (A_INT16) (pwrTable_t4[63] - 126);
	} else {
		Pmin = pwrTable_t4[0];
	}

	Pmax = pwrTable_t4[63];
	jj_max = 63;
	// search for highest pcdac 0.25dB below maxPower
	while ((pwrTable_t4[jj_max] > (Pmax - 1) ) && (jj_max >= 0)){
		jj_max--;
	} 


	jj = jj_max;
	currPower = Pmax;
	for (ii=63; ii>=0; ii--) {
		while ((jj<64) && (jj>0) && (pwrTable_t4[jj] >= currPower)) {
			jj--;
		}
		if (jj == 0) {
			while (ii >= 0) {
				retVals[ii] = retVals[ii+1];
				ii--;
			}
			break;
		}
		retVals[ii] = jj;
		currPower -= 2;  // corresponds to a 0.5dB step
	}
	return(Pmin);
}
*/

/*
A_INT16 getPminAndPcdacTableFromTwoPowerTables(A_INT16 *pwrTableLXPD_t4, A_INT16 *pwrTableHXPD_t4, A_UINT16 retVals[], A_INT16 *Pmid) {
	A_INT16		ii, jj, jj_max;
	A_INT16		Pmin, currPower, Pmax;
	A_INT16		*pwrTable_t4;
	A_UINT16	msbFlag = 0x40;  // turns on the 7th bit of the pcdac
	
	// if the spread is > 31.5dB, keep the upper 31.5dB range
	if ((pwrTableLXPD_t4[63] - pwrTableHXPD_t4[0]) > 126) {
		Pmin = (A_INT16)(pwrTableLXPD_t4[63] - 126);		
	} else {
		Pmin = pwrTableHXPD_t4[0];
	}

	Pmax = pwrTableLXPD_t4[63];
	jj_max = 63;
	// search for highest pcdac 0.25dB below maxPower
	while ((pwrTableLXPD_t4[jj_max] > (Pmax - 1) ) && (jj_max >= 0)){
		jj_max--;
	} 


	*Pmid = pwrTableHXPD_t4[63];
	jj = jj_max;
	ii = 63;
	currPower = Pmax;
	pwrTable_t4 = &(pwrTableLXPD_t4[0]);
	while(ii >= 0) {
		if ((currPower <= *Pmid) || ( (jj == 0) && (msbFlag == 0x40))){
			msbFlag = 0x00;
			pwrTable_t4 = &(pwrTableHXPD_t4[0]);
			jj = 63;
		}
		while ((jj>0) && (pwrTable_t4[jj] >= currPower)) {
			jj--;
		}
		if ((jj == 0) && (msbFlag == 0x00)) {
			while (ii >= 0) {
				retVals[ii] = retVals[ii+1];
				ii--;
			}
			break;
		}
		retVals[ii] = (A_UINT16)(jj | msbFlag);
		currPower -= 2;  // corresponds to a 0.5dB step
		ii--;
	}
	return(Pmin);
}
*/

void copyGen5EepromStruct
(
 EEPROM_FULL_DATA_STRUCT_GEN5 *pFullCalDataset_gen5,
 EEPROM_DATA_STRUCT_GEN5 *pCalDataset_gen5[]
)
{
	if (pCalDataset_gen5[MODE_11A] != NULL) {
		//copy the 11a structs
		pFullCalDataset_gen5->numChannels11a = pCalDataset_gen5[MODE_11A]->numChannels;
		pFullCalDataset_gen5->xpd_mask11a = pCalDataset_gen5[MODE_11A]->xpd_mask;
		memcpy(pFullCalDataset_gen5->pDataPerChannel11a, pCalDataset_gen5[MODE_11A]->pDataPerChannel, 
			sizeof(EEPROM_DATA_PER_CHANNEL_GEN5) * pCalDataset_gen5[MODE_11A]->numChannels);
	}

	if (pCalDataset_gen5[MODE_11B] != NULL) {
		//copy the 11b structs
		pFullCalDataset_gen5->numChannels11b = pCalDataset_gen5[MODE_11B]->numChannels;
		pFullCalDataset_gen5->xpd_mask11b = pCalDataset_gen5[MODE_11B]->xpd_mask;
		memcpy(pFullCalDataset_gen5->pDataPerChannel11b, pCalDataset_gen5[MODE_11B]->pDataPerChannel, 
			sizeof(EEPROM_DATA_PER_CHANNEL_GEN5) * pCalDataset_gen5[MODE_11B]->numChannels);
	}

	if (pCalDataset_gen5[MODE_11G] != NULL) {
		//copy the 11g structs
		pFullCalDataset_gen5->numChannels11g = pCalDataset_gen5[MODE_11G]->numChannels;
		pFullCalDataset_gen5->xpd_mask11g = pCalDataset_gen5[MODE_11G]->xpd_mask;
		memcpy(pFullCalDataset_gen5->pDataPerChannel11g, pCalDataset_gen5[MODE_11G]->pDataPerChannel, 
			sizeof(EEPROM_DATA_PER_CHANNEL_GEN5) * pCalDataset_gen5[MODE_11G]->numChannels);
	}
}

A_BOOL get_gain_boundaries_and_pdadcs_for_powers
(
 A_UINT32 devNum,                          // In
 A_UINT16 channel,                         // In       
 RAW_DATA_STRUCT_GEN5 *pRawDataset,        // In
 A_UINT16 pdGainOverlap_t2,                // In
 A_INT16 *pMinCalPower,                    // Out	(2 x min calibrated power)
 A_UINT16 pPdGainBoundaries[],             // Out
 A_UINT16 pPdGainValues[],                 // Out
 A_UINT16 pPDADCValues[]                   // Out 
 ) 
{
	A_UINT32  ii, jj, kk;
	A_INT32   ss; // potentially -ve index for taking care of pdGainOverlap
	A_UINT32  idxL, idxR;
	A_UINT32  numPdGainsUsed = 0;
	A_UINT16  VpdTable_L[MAX_NUM_PDGAINS_PER_CHANNEL][MAX_PWR_RANGE_IN_HALF_DB]; // filled out Vpd table for all pdGains (chanL)
	A_UINT16  VpdTable_R[MAX_NUM_PDGAINS_PER_CHANNEL][MAX_PWR_RANGE_IN_HALF_DB]; // filled out Vpd table for all pdGains (chanR)
	A_UINT16  VpdTable_I[MAX_NUM_PDGAINS_PER_CHANNEL][MAX_PWR_RANGE_IN_HALF_DB]; // filled out Vpd table for all pdGains (interpolated)
	// if desired to support -ve power levels in future, just change pwr_I_0 to signed 5-bits.
	A_INT16   Pmin_t2[MAX_NUM_PDGAINS_PER_CHANNEL];  // to accomodate -ve power levels later on. 
	A_INT16   Pmax_t2[MAX_NUM_PDGAINS_PER_CHANNEL];  // to accomodate -ve power levels later on
	A_UINT16  numVpd = 0;
	A_UINT16  Vpd_step;
	A_INT16   tmpVal ; 
	A_UINT32  sizeCurrVpdTable, maxIndex, tgtIndex;
	
	// get upper lower index
	mdk_GetLowerUpperIndex(channel, pRawDataset->pChannels, pRawDataset->numChannels, &(idxL), &(idxR));

//printf ("SNOOP: idxL = %d, idxR = %d, pdOverlap*2 = %d\n", idxL, idxR, pdGainOverlap_t2);
	for (ii = 0; ii < MAX_NUM_PDGAINS_PER_CHANNEL; ii++) {
		jj = MAX_NUM_PDGAINS_PER_CHANNEL - ii - 1; // work backwards 'cause highest pdGain for lowest power

		numVpd = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].numVpd;
//printf("SNOOP: ii[%d], jj[%d], numVpd = %d\n", ii, jj, numVpd);
		if (numVpd > 0) {
			pPdGainValues[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pd_gain;
			Pmin_t2[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pwr_t4[0];
			if (Pmin_t2[numPdGainsUsed] > pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[0]) {
				Pmin_t2[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[0];
			}
			Pmin_t2[numPdGainsUsed] = (A_INT16)(Pmin_t2[numPdGainsUsed] / 2);

			Pmax_t2[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pwr_t4[numVpd-1];
//printf ("SNOOP: idxL = %d, idxR = %d, numVpd = %d, pMax*4[%d] = %d\n", idxL, idxR, numVpd, numPdGainsUsed, Pmax_t2[numPdGainsUsed]);
			if (Pmax_t2[numPdGainsUsed] > pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[numVpd-1]) {
				Pmax_t2[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[numVpd-1];
			}
//printf ("SNOOP: pMax*4[%d] = %d\n", numPdGainsUsed, Pmax_t2[numPdGainsUsed]);
			Pmax_t2[numPdGainsUsed] = (A_INT16)(Pmax_t2[numPdGainsUsed] / 2);
//printf ("SNOOP: pMax*2[%d] = %d\n", numPdGainsUsed, Pmax_t2[numPdGainsUsed]);
//printf("SNOOP: currGainNum = %d, pdGain = %d, Pmin*2 = %d, Pmax*2 = %d\n", numPdGainsUsed, pPdGainValues[numPdGainsUsed], Pmin_t2[numPdGainsUsed], Pmax_t2[numPdGainsUsed]);
			fill_Vpd_Table(numPdGainsUsed, Pmin_t2[numPdGainsUsed], Pmax_t2[numPdGainsUsed], &(pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pwr_t4[0]),
				           &(pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].Vpd[0]), numVpd, VpdTable_L);
			fill_Vpd_Table(numPdGainsUsed, Pmin_t2[numPdGainsUsed], Pmax_t2[numPdGainsUsed], &(pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[0]),
				           &(pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].Vpd[0]), numVpd, VpdTable_R);
			for (kk = 0; kk < (A_UINT16)(Pmax_t2[numPdGainsUsed] - Pmin_t2[numPdGainsUsed]); kk++) {
				VpdTable_I[numPdGainsUsed][kk] = mdk_GetInterpolatedValue_Signed16(channel, pRawDataset->pChannels[idxL], pRawDataset->pChannels[idxR],
															(A_INT16)VpdTable_L[numPdGainsUsed][kk], (A_INT16)VpdTable_R[numPdGainsUsed][kk]);
			} // fill VpdTable_I for this pdGain
			numPdGainsUsed++;
		} // if this pdGain is used
	}

		*pMinCalPower = Pmin_t2[0];
		kk = 0; // index for the final table
		for (ii = 0; ii < (numPdGainsUsed ); ii++) {

			if (ii == (numPdGainsUsed - 1)) {
				// artifically stretch the boundary 2dB above the max measured data (~22dBm).
				// helps move gain boundary away from the highest tgt pwrs. 
				pPdGainBoundaries[ii] = (A_UINT16)(Pmax_t2[ii] + PD_GAIN_BOUNDARY_STRETCH_IN_HALF_DB);
			} else {
				pPdGainBoundaries[ii] = (A_UINT16)( (Pmax_t2[ii] + Pmin_t2[ii+1]) / 2 );
			}

			if (pPdGainBoundaries[ii] > 63) {
				pPdGainBoundaries[ii] = 63;
			}

//printf("SNOOP : pdGainBoundary[%d] = %d\n", ii, pPdGainBoundaries[ii]);

			// find starting index for this pdGain
			if (ii == 0) {
				ss = 0; // for the first pdGain, start from index 0
			} else {
				ss = (pPdGainBoundaries[ii-1] - Pmin_t2[ii]) - pdGainOverlap_t2 + 1;
				//ss = (pPdGainBoundaries[ii-1] - Pmin_t2[ii]) - pdGainOverlap_t2 ; // do overlap - 1 below per PH
			}

			Vpd_step = (A_UINT16)(VpdTable_I[ii][1] - VpdTable_I[ii][0]);
			Vpd_step = (A_UINT16)((Vpd_step < 1) ? 1 : Vpd_step);
			// -ve ss indicates need to extrapolate data below for this pdGain
			while ((ss < 0) && (kk < (PDADC_TABLE_SIZE-1))){
				tmpVal = (A_INT16)(VpdTable_I[ii][0] + ss*Vpd_step);
				pPDADCValues[kk++] = (A_UINT16)((tmpVal < 0) ? 0 : tmpVal);
				ss++;
			} // while ss < 0

			sizeCurrVpdTable = Pmax_t2[ii] - Pmin_t2[ii];
			tgtIndex = pPdGainBoundaries[ii] + pdGainOverlap_t2 - Pmin_t2[ii];
			// pick the smaller one
			maxIndex = (tgtIndex < sizeCurrVpdTable) ? tgtIndex : sizeCurrVpdTable;

			while ((ss < (A_INT16)maxIndex)  && (kk < (PDADC_TABLE_SIZE-1))){
				pPDADCValues[kk++] = VpdTable_I[ii][ss++];
			}
			
			Vpd_step = (A_UINT16)(VpdTable_I[ii][sizeCurrVpdTable-1] - VpdTable_I[ii][sizeCurrVpdTable-2]);
			Vpd_step = (A_UINT16)((Vpd_step < 1) ? 1 : Vpd_step);			
			// for last gain, pdGainBoundary == Pmax_t2, so will have to extrapolate
			if (tgtIndex > maxIndex) {  // need to extrapolate above
				while((ss <= (A_INT16)tgtIndex)  && (kk < (PDADC_TABLE_SIZE-1))){
					tmpVal = (A_UINT16)(VpdTable_I[ii][sizeCurrVpdTable-1] + 
											(ss-maxIndex)*Vpd_step);
					pPDADCValues[kk++] = (A_UINT16) ((tmpVal > 127) ? 127 : tmpVal);
					ss++;
				}
			} // extrapolated above

		} // for all pdGainUsed
		while (ii < MAX_NUM_PDGAINS_PER_CHANNEL) {
			pPdGainBoundaries[ii] = pPdGainBoundaries[ii-1];
			ii++;
		}

		while (kk < 128) {
			pPDADCValues[kk] = pPDADCValues[kk-1];
			kk++;
		}

//		for (ii=0; ii<MAX_NUM_PDGAINS_PER_CHANNEL; ii++) {
//			printf("SNOOP: %d : gainValue = %d, gainBoundary = %d\n", ii, pPdGainValues[ii], pPdGainBoundaries[ii]);
//		}
//		printf("SNOOP: NumPdGainsUsed = %d, minCalPwr = %d\npdadcTable = ", numPdGainsUsed, *pMinCalPower);
//		for (ii=0; ii<128; ii++) {
//			printf("[%d,%d],", ii, pPDADCValues[ii]);
//		}
//		printf("\n");
		
	numPdGainsUsed = devNum; // to quiet warnings

	return(TRUE);

}

// fill the Vpdlist for indices Pmax-Pmin
void fill_Vpd_Table(A_UINT32 pdGainIdx, A_INT16 Pmin, A_INT16  Pmax, A_INT16 *pwrList, 
					A_UINT16 *VpdList, A_UINT16 numIntercepts, A_UINT16 retVpdList[][64])
{
	A_UINT16  ii, jj, kk;
	A_INT16   currPwr = (A_INT16)(2*Pmin); // since Pmin is pwr*2 and pwrList is 4*pwr
	A_UINT32  idxL, idxR;

	ii = 0;
	jj = 0;

	if (numIntercepts < 2) {
		printf("ERROR : fill_Vpd_Table : numIntercepts should be at least 2\n");
		exit(0);
	}

	while (ii <= (A_UINT16)(Pmax - Pmin)) {
		mdk_GetLowerUpperIndex_Signed16(currPwr, pwrList, numIntercepts, &(idxL), &(idxR));
		if (idxR < 1) {
			idxR = 1; // extrapolate below
		}
		if (idxL == (A_UINT32)(numIntercepts - 1)) {
			idxL = numIntercepts - 2; // extrapolate above
		}
//printf("SNOOP: nI=%d,idxL:%d,idxR:%d --> ", numIntercepts, idxL, idxR);		
		if (pwrList[idxL] == pwrList[idxR]) {
			kk = VpdList[idxL];
		} else {
			kk = (A_UINT16)( ( (currPwr - pwrList[idxL])*VpdList[idxR]+ (pwrList[idxR] - currPwr)*VpdList[idxL])/(pwrList[idxR] - pwrList[idxL]));
		}

		retVpdList[pdGainIdx][ii] = kk;
//printf("[%d:(%d,%d)[cP%d,PL%d,PR%d,VL%d,VR%d]:%d]\n", ii, idxL, idxR, currPwr, pwrList[idxL], pwrList[idxR], VpdList[idxL], VpdList[idxR], retVpdList[pdGainIdx][ii]);
		ii++;
		currPwr += 2; // half dB steps
	}
}

A_UINT16 fbin2freq_gen5(A_UINT32 fbin, A_UINT32 mode)
{
	A_UINT16 returnValue; 

	if(mode == MODE_11A) {
		returnValue = (A_UINT16)(4800 + 5*fbin);
	}
	else {
		returnValue = (A_UINT16)(2300 + fbin);
	}
	return returnValue;
}

A_BOOL initialize_datasets_forced_eeprom_gen5(A_UINT32 devNum, EEPROM_DATA_STRUCT_GEN5 **pDummyCalDataset_gen5, RAW_DATA_STRUCT_GEN5  **pDummyRawDataset_gen5, A_UINT32 *words, A_UINT16 xpd_mask) {

	A_UINT16	start_offset		= 0; // for this routine, must pass the array starting at 11g cal data
	
	A_UINT32	maxPiers;
//	A_UINT16    numEEPROMWordsPerChannel;
//	A_UINT16    wordsForPdgains[] = {4,6,9,12}; // index is 1 less than numPdgains

	if (words == NULL) {
		mError(devNum, EIO,"initialize_datasets_forced_eeprom_gen5 : null array pointer supplied. Exiting...\n");		
		return(0);
	}

	// setup datasets for mode_11b first
	start_offset = 0;
	maxPiers = NUM_2_4_EEPROM_CHANNELS_GEN5;

	*pDummyCalDataset_gen5 = (EEPROM_DATA_STRUCT_GEN5 *)malloc(sizeof(EEPROM_DATA_STRUCT_GEN5));
	if(NULL == (*pDummyCalDataset_gen5)) {
		mError(devNum, ENOMEM, "unable to allocate 11g gen5 cal data struct\n");
		return(0);
	}
	(*pDummyCalDataset_gen5)->xpd_mask = xpd_mask;
	if (!read_Cal_Dataset_From_EEPROM_gen5(devNum, (*pDummyCalDataset_gen5), start_offset, maxPiers,  &(words[0]), MODE_11G ) ) {
		mError(devNum, EIO,"unable to allocate cal dataset (gen5) for mode 11g\n");
		return(0);
	}		
	(*pDummyRawDataset_gen5) = (RAW_DATA_STRUCT_GEN5 *)malloc(sizeof(RAW_DATA_STRUCT_GEN5));
	if(NULL == (*pDummyRawDataset_gen5)) {
		mError(devNum, ENOMEM, "unable to allocate 11g gen5 raw data struct\n");
		return(0);
	}

	(*pDummyRawDataset_gen5)->xpd_mask = xpd_mask;
	setup_raw_dataset_gen5(devNum, (*pDummyRawDataset_gen5), (*pDummyCalDataset_gen5)->numChannels, (*pDummyCalDataset_gen5)->pChannels);
	eeprom_to_raw_dataset_gen5(devNum, (*pDummyCalDataset_gen5), (*pDummyRawDataset_gen5));

	// REMEMBER TO FREE THE CAL DATASETS HERE
	return(1);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
全国精品久久少妇| 国产午夜精品理论片a级大结局| 亚洲v日本v欧美v久久精品| 亚洲欧美日韩在线不卡| 亚洲三级电影全部在线观看高清| 国产亚洲精品bt天堂精选| 精品国产污污免费网站入口| 日韩欧美亚洲国产另类| 国产午夜精品一区二区三区四区| 国产精品天天摸av网| 亚洲狼人国产精品| 蜜桃传媒麻豆第一区在线观看| 久久99九九99精品| 在线观看亚洲成人| 欧美va亚洲va国产综合| 中文字幕亚洲视频| 久久精品国产免费看久久精品| 成人黄动漫网站免费app| 色香蕉成人二区免费| 欧美sm极限捆绑bd| 亚洲国产裸拍裸体视频在线观看乱了| 日韩激情视频网站| 色婷婷av久久久久久久| 国产精品久久午夜| 久久噜噜亚洲综合| 日本中文字幕一区二区视频| av影院午夜一区| 久久综合一区二区| 麻豆精品在线播放| 欧美精品在线观看播放| 亚洲专区一二三| 在线这里只有精品| 有码一区二区三区| 色欧美88888久久久久久影院| 中文字幕精品一区二区三区精品| 麻豆精品一区二区| 欧美一区二区观看视频| 调教+趴+乳夹+国产+精品| 欧美日韩激情一区二区三区| 亚洲欧美另类久久久精品| 精品午夜一区二区三区在线观看| 日韩色在线观看| 国产福利一区二区三区视频在线| 99精品久久久久久| 国产一区二区福利视频| 日日嗨av一区二区三区四区| 欧美一级在线免费| 中文字幕一区二区三区精华液| 一区二区国产视频| 欧美日本一区二区三区| 蜜臀va亚洲va欧美va天堂| 2023国产一二三区日本精品2022| 国产成人精品三级| 一区二区三区在线影院| 日韩欧美黄色影院| 不卡的电视剧免费网站有什么| 亚洲另类在线视频| 精品国产乱子伦一区| 国产乱码精品一区二区三区忘忧草| 26uuu精品一区二区三区四区在线| 不卡电影一区二区三区| 日韩va欧美va亚洲va久久| 国产欧美日韩在线| 91久久精品一区二区二区| 久久99久久精品欧美| 亚洲综合丝袜美腿| 亚洲欧洲av色图| 日本一区二区免费在线 | 精品午夜一区二区三区在线观看| 国产精品网友自拍| 久久久久久久久久久久久女国产乱| 色婷婷亚洲综合| 久久女同精品一区二区| 国产精品天干天干在观线| 欧美夫妻性生活| 欧美丰满美乳xxx高潮www| 97超碰欧美中文字幕| 波多野结衣中文字幕一区| 国产成人精品一区二| 国产一区 二区| 国产精品一区二区三区四区| 欧美a一区二区| 蜜桃视频在线观看一区二区| 亚洲国产中文字幕在线视频综合| 亚洲午夜影视影院在线观看| 亚洲精品一卡二卡| 午夜视频一区二区| 中文字幕欧美一区| 国产精品青草久久| 亚洲欧美日韩国产另类专区| 一区二区理论电影在线观看| 亚洲国产一区视频| 奇米影视在线99精品| 经典三级在线一区| av在线这里只有精品| 欧美亚洲图片小说| 精品日韩一区二区三区| 中日韩av电影| 天天色 色综合| 国产成a人亚洲| 91精品欧美综合在线观看最新 | 精品奇米国产一区二区三区| 欧美自拍偷拍午夜视频| 91麻豆精品秘密| 欧美一区日韩一区| 国产精品二三区| 青青草国产成人av片免费| 99综合电影在线视频| 91精品国产综合久久香蕉的特点| 国产清纯白嫩初高生在线观看91 | 国产不卡高清在线观看视频| 欧美日韩一级黄| 欧美激情在线看| 青青国产91久久久久久| 欧美在线你懂得| 国产精品美女视频| 视频在线观看91| 在线播放国产精品二区一二区四区| 国产午夜亚洲精品羞羞网站| 免费精品99久久国产综合精品| 欧美熟乱第一页| 亚洲欧美综合在线精品| 国产乱码精品一区二区三区忘忧草| 91精品国产一区二区三区蜜臀 | 欧美日韩一区高清| 亚洲制服丝袜av| 欧美性猛交xxxxxx富婆| 日韩国产在线观看一区| 亚洲国产精品久久久男人的天堂| 国产毛片精品视频| 欧美成人午夜电影| 欧美日韩电影在线播放| 欧美在线播放高清精品| 亚洲欧美日韩国产成人精品影院| 亚洲综合成人网| 欧美精品99久久久**| 日本视频中文字幕一区二区三区| 91精品国产综合久久香蕉麻豆 | www.亚洲人| 亚洲伦理在线精品| 91精品国产品国语在线不卡| 激情国产一区二区| 中文字幕在线一区免费| 在线观看视频一区二区| 天天综合色天天| 国产三级一区二区三区| 成人高清视频在线| 亚洲高清免费在线| 精品1区2区在线观看| 91在线观看一区二区| 亚洲成年人影院| 国产精品丝袜一区| 日韩一级免费一区| 91久久线看在观草草青青| 美脚の诱脚舐め脚责91 | 成人免费看视频| 欧美日韩在线综合| 岛国精品在线播放| 精品一区二区免费| 日韩专区在线视频| 亚洲一区av在线| 亚洲欧美日本在线| 国产精品麻豆99久久久久久| 日韩午夜三级在线| 欧美综合一区二区| 日韩二区三区在线观看| 欧美激情中文字幕一区二区| 在线电影一区二区三区| 色94色欧美sute亚洲线路一ni | 色乱码一区二区三区88| 成人中文字幕电影| 国产91高潮流白浆在线麻豆| 国产综合一区二区| 黑人精品欧美一区二区蜜桃| 国精品**一区二区三区在线蜜桃| 日韩高清欧美激情| 国产精品亚洲第一| 成人黄色小视频在线观看| av激情综合网| 欧美日本高清视频在线观看| 日韩一级免费一区| 日韩一区二区三区在线| 久久久久久一二三区| 国产日本欧美一区二区| 亚洲欧洲美洲综合色网| 一区二区三区在线观看视频| 香蕉av福利精品导航| 韩国成人精品a∨在线观看| 国内外成人在线视频| 成人app网站| 欧美视频日韩视频在线观看| 精品日韩成人av| 亚洲品质自拍视频| 免费看欧美女人艹b| 97久久超碰国产精品| 欧美日韩精品专区| 中文在线一区二区| 日本欧美大码aⅴ在线播放| 福利电影一区二区| 91精品国产综合久久久久久久|