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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ds8007.c

?? dallas公司的ds8007芯片源代碼。絕對好用。可以兼容tda8007.
?? C
?? 第 1 頁 / 共 2 頁
字號:
	uint8_t val;
	uint8_t USRval;
	uint8_t index;
	uint8_t etucount = 0;
	int16_t i;
	uint8_t historicalBytes;
	uint8_t expectedCharacters;
	uint8_t interfaceIteration = 1;
	uint8_t done = 0;
	uint8_t check;
	// Default to T=0 mode
	uint8_t T = 0;
	uint8_t curByte;

	clearATRStruct(&lastATR[currentSlot]);
	NAD[currentSlot] = 0;

	// Reset the UART
	val = dssc_readregister(CSR);
	dssc_writeregister(CSR,val & ~CSR_nRIU_MASK);
	// Remove UART reset
	val = dssc_readregister(CSR);
	dssc_writeregister(CSR,val | CSR_nRIU_MASK);
	// Set FIFO to 1 byte
	dssc_writeregister(FCR,0x00);
	// Set divisor
	dssc_writeregister(PDR,12);
	// Set prescaler
	dssc_writeregister(UCR2,0x00);

	// Enable auto convention
	val = dssc_readregister(UCR2);
  	dssc_writeregister(UCR2,val & ~UCR2_nAUTOCONV_MASK);

	// Set SS bit
	dssc_writeregister(UCR1,UCR1_SS_MASK);

	// Wait 40000 to 45000 cycles to release reset
	dssc_writeregister(TOC,0x00);
	dssc_writeregister(TOR3,0x00);
	dssc_writeregister(TOR2,0x6C);
	dssc_writeregister(TOR1,0x00);
	dssc_writeregister(TOC,0x61);

	do
	{
		val = dssc_readregister(USR);
	}
	while (!(val & USR_TOL3_MASK));

	if (mode == POWERUP_ISO)
	{
		// Wait up to 40000 cycles for ATR to start
    	dssc_writeregister(TOC,0x00);
		dssc_writeregister(TOR3,0x00);
		dssc_writeregister(TOR2,0x78);
		dssc_writeregister(TOR1,0x00);
		dssc_writeregister(TOC,0x61);
	}
	else  // power up EMV
	{
		// Wait up to 40000 cycles for ATR to start and 19200 etu counter after first byte
		dssc_writeregister(TOC,0x00);
		dssc_writeregister(TOR3,0x00);
    	dssc_writeregister(TOR2,0x78);
		dssc_writeregister(TOR1,0xC0);
		dssc_writeregister(TOC,0x65);
  	}

	// Release reset
	val = dssc_readregister(PCR);
	dssc_writeregister(PCR,val | PCR_RSTIN_MASK);

	while (1)
	{
		val = dssc_readregister(MSR);
		// If we see the first character come in, break.
		if (val & MSR_TBE_RBF_MASK)
			break;

		val = dssc_readregister(USR);

		if (val & (USR_PE_MASK|USR_FER_MASK|USR_OVR_MASK|USR_EA_MASK))
		{
			dssc_powerdown();
			return ERR_POWERUP_ATR_INVALID; 
		}
		if (val & USR_TOL3_MASK)
		{
			dssc_powerdown();
			return ERR_POWERUP_ATR_TIMEOUT;
		}
	}

	if (mode == POWERUP_ISO)
	{
		// Set up timer for 9600 etu between characters in ATR
		dssc_writeregister(TOC,0x00);
		dssc_writeregister(TOR3,0x25);
		dssc_writeregister(TOR2,0x80);
		dssc_writeregister(TOR1,0x00);
		// Start timer
		dssc_writeregister(TOC,0x61);
	}
	else  // mode is EMV
	{
		// Set up timer for 9600 etu between characters in ATR, and
		// maximum of 19200 etu for whole ATR
    	dssc_writeregister(TOC,0x05);
		dssc_writeregister(TOR3,0x25);
		dssc_writeregister(TOR2,0x80);
		dssc_writeregister(TOR1,0xC0);
    	// Start timer
		dssc_writeregister(TOC,0x65);
	}

	index = 0;

	while (!done)
	{
		// Read UART status
		USRval = dssc_readregister(USR);
		{
			// If receive buffer full
			if (USRval & USR_TBE_RBF_MASK)
			{
				// Read and store ATR byte
				val = dssc_readregister(URR);
				curByte = val;
				workingBuffer[index++] = val;
				if (index == 1)
				{
					lastATR[currentSlot].TS = curByte;
					if ((curByte != 0x3f) && (curByte != 0x3b))
					{
						dssc_powerdown();
						return ERR_POWERUP_ATR_INVALID;
					}
		  			check = 0;
				}
				else
					check ^= curByte;
				if (index == 2)
				{
					historicalBytes = curByte & 0x0F;
					expectedCharacters = curByte & 0xF0;
					lastATR[currentSlot].T0 = curByte;
				}
				if (index > 2)
				{
					switch(expectedCharacters)
					{
					case 0x00:
						// Historical characters
						historicalBytes--;
						lastATR[currentSlot].Historical[lastATR[currentSlot].HistoricalLength++] = curByte;
						if (historicalBytes == 0)
              			{
                			if (T==0)
							{
								done = 1;
                			}
							else
								expectedCharacters = 0x01;  // Go to checksum state
              			}
						break;
					case 0x01:
						// TCK case
						lastATR[currentSlot].TCK = curByte;
				        done = 1;
						break;

					case 0x10:
					case 0x30:
					case 0x50:
					case 0x70:
					case 0x90:
					case 0xB0:
					case 0xD0:
					case 0xF0:
						// TA case
			    		expectedCharacters &= 0xE0;
						lastATR[currentSlot].TA[interfaceIteration] = curByte;
						break;

					case 0x20:
					case 0x60:
					case 0xA0:
					case 0xE0:
						// TB case
						expectedCharacters &= 0xD0;

						lastATR[currentSlot].TB[interfaceIteration] = curByte;
						break;

					case 0x40:
					case 0xC0:
						// TC case
						expectedCharacters &= 0xB0;
						lastATR[currentSlot].TC[interfaceIteration] = curByte;
						break;

					case 0x80:
						// TD case
						expectedCharacters=(curByte&0xF0);
						// Handle zero historical characters
						if ((expectedCharacters == 0x00) && (historicalBytes == 0))
						{
							if (T==0)
							{
								done = 1;
							}
							else
								expectedCharacters = 0x01;
						}
						lastATR[currentSlot].TD[interfaceIteration] = curByte;
						// If we get TD1, we have the first protocol selection
						if ((interfaceIteration==1))
						{
							T=curByte & 0x0F;
						}
						else
						{
							// Changing protocols is only valid under ISO (not allowed in EMV)
							if (mode == POWERUP_ISO)
							{
								if ((curByte & 0x0F) != T)
								{
									T=curByte & 0x0F;
                  				}
							}
							else
								return ERR_POWERUP_ATR_INVALID;  // You cannot change T protocol under EMV
						}
						interfaceIteration++;
						break;
					default:
						dssc_powerdown();
						return ERR_POWERUP_ATR_INVALID;
              			break;
					}
				}

			if (mode == POWERUP_ISO)
    	    {
				// Reset timer for 9600 etu between characters in ATR
				dssc_writeregister(TOC,0x00);
				dssc_writeregister(TOR3,0x25);
          		dssc_writeregister(TOR2,0x80);
				dssc_writeregister(TOR1,0x00);
				// Start timer
				dssc_writeregister(TOC,0x61);
			}
        	else  // mode is EMV
        	{
				// Set up timer for 9600 etu between characters in ATR
				// Don't modify TOR1 as it is in auto-reload mode.
				dssc_writeregister(TOC,0x05);
				dssc_writeregister(TOR3,0x25);
				dssc_writeregister(TOR2,0x80);

				// Start timer
				dssc_writeregister(TOC,0x65);
        	}
      	}
    }

	// Read Timer status
	if (USRval & USR_TOL3_MASK)
	{
		dssc_powerdown();
		return ERR_POWERUP_ATR_TIMEOUT;
	}
	if ((mode == POWERUP_EMV) && (USRval & USR_TOL1_MASK))
	{
		// If 192 ETU rollover, increment total count
		etucount++;
		// If we exceed 192 * 100 or 19200 etu, we fail as the whole ATR has not come
		if (etucount > 100)
		{
			dssc_powerdown();
			return ERR_POWERUP_ATR_TIMEOUT;
		}
	}
	}

	// If we are in T=1 protocol, we get a LRC (xor checksum) at the end
	if (T==1)
	{
		if (check != 0)
		{
			dssc_powerdown();
			return ERR_POWERUP_ATR_CRC_FAILURE;
		}
	}

	// Set ATR length for the ATR received
	ATRLength[currentSlot] = index;
	// Set T protocol mode
	TMode[currentSlot] = T;

	// Set the DS8007 UCR1.PROT mode according to T value
	val = dssc_readregister(UCR1);
	if (T == 0)
		dssc_writeregister(UCR1,val & ~UCR1_PROT_MASK);
	else
		dssc_writeregister(UCR1,val | UCR1_PROT_MASK);

	// Set extra guard time if present in TC1, else use guard time of 0
	if (lastATR[currentSlot].TC[1] != -1)
    	dssc_writeregister(GTR,lastATR[currentSlot].TC[1]);
	else
		dssc_writeregister(GTR,0x00);

	// Set the EDC type (either LRC or CRC)
  	EDCtype[currentSlot] = EDC_TYPE_LRC;  // Default to LRC if not told otherwise.
	for (i = 3;i < 8;i++)
	{
		if (lastATR[currentSlot].TC[3] != -1)
	    { 
			EDCtype[currentSlot] = (lastATR[currentSlot].TC[3] & 0x01)?EDC_TYPE_CRC:EDC_TYPE_LRC;
		}
	}

	// Set IFSC (max segment size of card) if TA3 present (only used for T=1 protocol)
	if (lastATR[currentSlot].TA[3] != -1)
	{
		val = lastATR[currentSlot].TA[3];
		if ((val < 0x10) || (val == 0xFF))
		{
			dssc_powerdown();
			return ERR_POWERUP_ATR_INVALID;
		}
		IFSC[currentSlot] = val;
	}
	else
		IFSC[currentSlot] = 0x20;  // Default for IFSC is 0x20 according to EMV 4.1 8.3.3.9 and ISO7816 9.5.2.1

	// Set WWT if present in TC2 (only used for T=0), ISO7816 8.2
	if (lastATR[currentSlot].TC[2] != -1)
		WWT[currentSlot] = lastATR[currentSlot].TC[2] * 960;
	else
		WWT[currentSlot] = 960 * 10;

	if (mode == POWERUP_EMV)
	{
		if (lastATR[currentSlot].TB[3] == -1)
		{
			dssc_powerdown();
			return ERR_POWERUP_ATR_INVALID;
		}
    	else
		{
			val = lastATR[currentSlot].TB[i] & 0x0F;
			// Fail if CWI is out of range
			if (val > 5)
			{
				dssc_powerdown();
				return ERR_POWERUP_ATR_INVALID;
			}
			val = (lastATR[currentSlot].TB[i] & 0x0F) >> 4;
			// Fail if BWI is out of range
			if (val > 4)
			{
			dssc_powerdown();
			return ERR_POWERUP_ATR_INVALID;
			}
		}
	}

	// Set default values for CWT and BWT, ISO7816 9.5.3.1 and 9.5.3.2
	CWT[currentSlot] = 11 + (1 << 13);
	BWT[currentSlot] = 11 + (1 << 4) * 960;
	for (i = 3;i < 8;i++)
	{
		// Set CWT and BWT if present in TBi
	    if (lastATR[currentSlot].TB[i] != -1)
		{
			val = lastATR[currentSlot].TB[i] & 0x0F;
			CWT[currentSlot] = 11 + (1 << val);
			val = (lastATR[currentSlot].TB[i] & 0x0F) >> 4;
			if (val > 9)
			{
				dssc_powerdown();
				return ERR_POWERUP_ATR_INVALID;
			}
			BWT[currentSlot] = 11 + (1 << val) * 960;
			break;
		}
	}
	return 0;
}

int16_t dssc_powerdown()
{
	uint8_t val;

	// Power down the card
	val = dssc_readregister(PCR);
	dssc_writeregister(PCR,val & ~PCR_START_MASK);

	return 0;
}

int16_t dssc_selectcard(uint8_t slot)
{
	uint8_t val;

	val = dssc_readregister(CSR);
	switch (slot) 
	{
    case 1:
		// Select appropriate smartcard and clear other card selects
		dssc_writeregister(CSR,val & ~(CSR_SC3_MASK|CSR_SC2_MASK) | CSR_SC1_MASK);
		break;
	case 2:
		// Select appropriate smartcard and clear other card selects
		dssc_writeregister(CSR,val & ~(CSR_SC3_MASK|CSR_SC1_MASK) | CSR_SC2_MASK);
		break;
	case 3:
		// Select appropriate smartcard and clear other card selects
		dssc_writeregister(CSR,val & ~(CSR_SC2_MASK|CSR_SC1_MASK) | CSR_SC3_MASK);
		break;
	default:
		return ERR_INVALID_SLOT;
	}

	// Set global slot identifier value
	currentSlot = slot-1;

	return 0;
}

int16_t dssc_checkpresence(uint8_t slot)
{
	uint8_t val;

	val = dssc_readregister(MSR);

	switch(slot)
	{
    case 1:
		if (val & MSR_PR1_MASK) return 1;
		break;
	case 2:
		if (val & MSR_PR2_MASK) return 1;
		break;
	default:
		return ERR_INVALID_SLOT;
		break;
	}
	return 0;
}

/*
Library initialization
*/
int16_t dssc_init()
{
	uint8_t val;

	// Reset the UART
	dssc_writeregister(CSR,0x00);

	// Select smart card slot 1
	dssc_writeregister(CSR,CSR_SC1_MASK);

	// Make sure card is powered down
	val = dssc_readregister(PCR);
	dssc_writeregister(PCR,val & ~PCR_START_MASK);

	// Select smart card slot 2
	dssc_writeregister(CSR,CSR_SC2_MASK);

	// Make sure card is powered down
	val = dssc_readregister(PCR);
	dssc_writeregister(PCR,val & ~PCR_START_MASK);

	// Select smart card slot 3
	dssc_writeregister(CSR,CSR_SC3_MASK);

	// Deselect all cards
	dssc_writeregister(CSR,0x00);

	return 0;
}

int16_t dssc_getATRbuffer(uint8_t *buff, int16_t length)
{
	memcpy(buff,workingBuffer,(length<ATRLength[currentSlot])?length:ATRLength[currentSlot]);
	return ATRLength[currentSlot];
}

void dssc_getATR(struct ATR *userATR)
{
	memcpy(userATR,&lastATR[currentSlot],sizeof(struct ATR));
}

#pragma REGPARMS
uint8_t dssc_readregister(uint8_t address)
{
	idata uint8_t rAddress, toReturn;
#ifdef DEBUG_CRED
	idata uint8_t count = 0;
#endif
	rAddress = address;

	//ds5250 DMOS |= 0x01;
	RPCTL |= 0x20;
	P1 &= 0xEF;        // Happy CS for DS8007 on Eval Refrence Design
	switch (rAddress)
	{
    case URR:
		// If reading URR, check the CRED bit in MSR so that
		// we don't overrun the DS8007.  See MSR.CRED bit description on page
		// 18 of DS8007 spec.
#ifdef DEBUG_CRED
		while (!(BASE_ADDRESS[MSR] & MSR_CRED_MASK))
		{
        	// If card de-powers exit with zero return value.
	        if ((BASE_ADDRESS[PCR] & 0x01) == 0)
			{
				//ds5250 DMOS &= 0xFE;
				P1 |= 0x10;        // Happy CS for DS8007 on Eval Refrence Design

				RPCTL &= 0xDF;
		        return 0;
			}

			count++;
			if (count == 30000)
			{
				printf("CRED read locked up on: %02bx\n",rAddress);
				printf("PCR: %02bx\n",BASE_ADDRESS[PCR]);
				printf("HSR: %02bx\n",BASE_ADDRESS[HSR]);
				count = 0;
			}
		}
#else
		while (!(BASE_ADDRESS[MSR] & MSR_CRED_MASK))
		{
			// If card de-powers exit with zero return value.
			if ((BASE_ADDRESS[PCR] & 0x01) == 0)
	        {
				//ds5250 DMOS &= 0xFE;
				P1 |= 0x10;        // Happy CS for DS8007 on Eval Refrence Design

				RPCTL &= 0xDF;
          		return 0;
			}
		}
#endif
			break;
		default:
			break;
	}

	toReturn = BASE_ADDRESS[rAddress];
	//ds5250 DMOS &= 0xFE;
	P1 |= 0x10;        // Happy CS for DS8007 on Eval Refrence Design

  	RPCTL &= 0xDF;
	return toReturn;

}

void dssc_writeregister(uint8_t address,uint8_t value)
{
	idata uint8_t rAddress, rValue ;
#ifdef DEBUG_CRED
  	idata int count = 0;
#endif
	rAddress = address;
	rValue = value;

	//ds5250 DMOS |= 0x01;
  	RPCTL |= 0x20;
	P1 &= 0xEF;        // Happy CS for DS8007 on Eval Refrence Design
  	switch (rAddress)
  	{
	case TOC:
    case UTR:
		// If writing TOC or UTR, check the CRED bit in MSR so that
		// we don't overrun the DS8007.  See MSR.CRED bit description on page
		// 18 of DS8007 spec.
#ifdef DEBUG_CRED
		while (!(BASE_ADDRESS[MSR] & MSR_CRED_MASK))
		{
			// If card de-powers exit with zero return value.
	        if ((BASE_ADDRESS[PCR] & 0x01) == 0)
        	{
				//ds5250 DMOS &= 0xFE;
				P1 |= 0x10;        // Happy CS for DS8007 on Eval Refrence Design

				RPCTL &= 0xDF;
				return;
			}
        	count++;
			if (count == 30000)
			{
				printf("CRED write locked up on: %02bx\n",rAddress);
				printf("PCR: %02bx\n",BASE_ADDRESS[PCR]);
				printf("HSR: %02bx\n",BASE_ADDRESS[HSR]);
				count = 0;
			}
		}
#else
		while (!(BASE_ADDRESS[MSR] & MSR_CRED_MASK));
#endif
		break;
	    default:
      		break;
	}
	BASE_ADDRESS[rAddress] = rValue;

	//ds5250 DMOS &= 0xFE;
	P1 |= 0x10;        // Happy CS for DS8007 on Eval Refrence Design
	RPCTL &= 0xDF;

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区在线观看免费| 亚洲va国产天堂va久久en| 国产精品理论在线观看| 青青草国产成人av片免费| 色久优优欧美色久优优| 久久―日本道色综合久久| 国产一区在线不卡| 欧美精三区欧美精三区| 久久精品日韩一区二区三区| 色综合网站在线| 久久av中文字幕片| 午夜欧美在线一二页| 国产精品美女久久久久久| 欧美一区二区三区男人的天堂| eeuss影院一区二区三区| 久久aⅴ国产欧美74aaa| 午夜伊人狠狠久久| 一区二区三区免费在线观看| 国产精品日韩精品欧美在线| 久久精品日韩一区二区三区| 日韩欧美区一区二| 宅男噜噜噜66一区二区66| 色香蕉成人二区免费| 成人动漫一区二区三区| 国产一区二区三区不卡在线观看 | 日韩欧美资源站| 在线一区二区视频| 99久久综合精品| 国产91在线|亚洲| 国产在线不卡一卡二卡三卡四卡| 日本人妖一区二区| 图片区日韩欧美亚洲| 亚洲一区国产视频| 亚洲一二三区视频在线观看| 亚洲精品网站在线观看| 最新久久zyz资源站| 国产精品国产成人国产三级| 国产欧美综合色| 国产欧美精品一区二区色综合| 久久综合色鬼综合色| 26uuu色噜噜精品一区二区| 日韩一区二区在线观看视频播放| 日韩一区二区三免费高清| 日韩欧美高清一区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美电视剧免费全集观看| 日韩美女主播在线视频一区二区三区| 欧美一区二区性放荡片| 日韩一区二区三区av| 精品奇米国产一区二区三区| www国产精品av| 欧美国产日韩a欧美在线观看| 国产精品久久网站| 亚洲丝袜另类动漫二区| 一区二区三区四区在线| 亚洲国产成人va在线观看天堂 | 日韩三级免费观看| 欧美一级一区二区| 国产尤物一区二区| 99视频精品全部免费在线| 国产另类ts人妖一区二区| 蜜臀精品一区二区三区在线观看| 日韩av中文在线观看| 一区在线观看视频| 136国产福利精品导航| 国产色婷婷亚洲99精品小说| 久久久午夜精品| 日本一区二区综合亚洲| 成人激情综合网站| 91久久精品网| 91精品国产91热久久久做人人| 精品成人a区在线观看| 国产亚洲女人久久久久毛片| 自拍偷拍亚洲综合| 图片区小说区国产精品视频| 国产一区二区主播在线| 成人av网在线| 欧美日韩国产精品成人| 久久九九影视网| 亚洲精品免费播放| 麻豆精品视频在线观看免费| 丁香天五香天堂综合| 欧美午夜一区二区| 2014亚洲片线观看视频免费| 综合欧美亚洲日本| 麻豆国产精品官网| 色综合色狠狠天天综合色| 欧美一区二区视频网站| 国产精品久久综合| 久久国产精品99精品国产| 99久久国产免费看| 日韩欧美亚洲一区二区| 亚洲视频综合在线| 国产乱人伦偷精品视频免下载| 欧美性受极品xxxx喷水| 久久久99久久| 日本在线不卡一区| 91免费版在线看| 久久综合资源网| 日韩专区在线视频| 99re热这里只有精品免费视频| 欧美精品一区二区在线播放| 亚洲成a人片综合在线| 成人开心网精品视频| 欧美大片一区二区| 亚洲va国产天堂va久久en| 99精品久久久久久| 久久婷婷国产综合精品青草| 日日摸夜夜添夜夜添国产精品| 日本精品一区二区三区高清 | 911精品国产一区二区在线| 亚洲欧洲日韩一区二区三区| 激情亚洲综合在线| 337p亚洲精品色噜噜噜| 亚洲一区免费在线观看| 97超碰欧美中文字幕| 国产精品每日更新在线播放网址| 精品一区二区免费| 日韩一区二区三区三四区视频在线观看| 亚洲国产精品尤物yw在线观看| 国产精品88av| 精品亚洲aⅴ乱码一区二区三区| 久久久久久久久久久电影| 激情五月播播久久久精品| 久久综合99re88久久爱| 成人精品视频.| 亚洲精品中文在线影院| 色综合天天视频在线观看| 亚洲图片欧美视频| 日韩一区二区在线观看视频| 狠狠色丁香婷综合久久| 综合电影一区二区三区 | 成人性生交大片免费看中文| 精品国产青草久久久久福利| 日本网站在线观看一区二区三区| 欧美日韩午夜在线| 亚洲一区免费在线观看| 欧美性猛片xxxx免费看久爱| 一区二区三区.www| 欧美专区日韩专区| 亚洲国产一区二区视频| 精品视频999| 日韩成人午夜精品| 欧美xxx久久| 国产成人啪免费观看软件| 久久精品欧美日韩| 丁香婷婷综合五月| 亚洲视频网在线直播| 色婷婷国产精品久久包臀| 亚洲成人一区在线| 欧美一卡在线观看| 国产曰批免费观看久久久| 久久综合久久综合九色| 福利一区二区在线观看| 亚洲欧美一区二区三区孕妇| 91福利在线看| 日本成人在线看| 亚洲精品在线电影| 成人免费毛片aaaaa**| 亚洲精品视频观看| 337p亚洲精品色噜噜| 国精产品一区一区三区mba桃花 | 久久久久久久网| 不卡视频一二三| 性久久久久久久久| 精品国产精品网麻豆系列| 成人av网址在线观看| 亚洲国产美女搞黄色| 日韩精品一区二区在线观看| 岛国一区二区在线观看| 一区二区三区日韩欧美| 欧美一区2区视频在线观看| 国产成a人亚洲精品| 一区二区三区精品在线| 欧美电影影音先锋| 成人免费观看av| 视频一区免费在线观看| 久久久久97国产精华液好用吗| 色婷婷av一区二区三区大白胸| 免费成人你懂的| 国产精品国产三级国产aⅴ原创| 中文字幕在线不卡视频| 欧美日韩一区二区三区四区| 九色综合狠狠综合久久| 亚洲女人的天堂| 欧美www视频| 中文字幕第一区| 国产老妇另类xxxxx| 亚洲精品乱码久久久久久久久 | 欧美亚州韩日在线看免费版国语版| 欧美日韩一二三| 精品国产sm最大网站| 国产日本欧美一区二区| 亚洲一区二区三区免费视频| 亚洲大片精品永久免费| 午夜免费久久看| 国产 日韩 欧美大片| 色国产综合视频| 亚洲精品ww久久久久久p站| 精品久久久三级丝袜|