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

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

?? pcbind.c

?? zigbee 2004協議棧
?? C
字號:
/*
 * "Copyright (c) 2006 Robert B. Reese ("AUTHOR")"
 * All rights reserved.
 * (R. Reese, reese@ece.msstate.edu, Mississippi State University)
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 *
 * IN NO EVENT SHALL THE "AUTHOR" BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE "AUTHOR"
 * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * THE "AUTHOR" SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE "AUTHOR" HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 * Please maintain this header in its entirety when copying/modifying
 * these files.
 *
 * Files in this software distribution may have different usage
 * permissions, see the header in each file. Some files have NO permission
 * headers since parts of the original sources in these files
 * came from vendor  sources with no usage restrictions.
 *
 */


/*
V0.2 added PC-based binding         21/July/2006  RBR
V0.1 Initial Release                10/July/2006  RBR
 

*/



/*
Support functions for PC binding demo
*/

#include "compiler.h"               //compiler specific
#include "lrwpan_common_types.h"
#include "lrwpan_config.h"
#include "ieee_lrwpan_defs.h"
#include "hal.h"
#include "console.h"
#include "debug.h"
#include "phy.h"
#include "mac.h"
#include "nwk.h"
#include "aps.h"
#include "zep.h"
#include "neighbor.h"


#ifdef LRWPAN_COORDINATOR
#ifdef LRWPAN_USE_PC_BIND

#include "pcbind.h"

static ROMCHAR crc8tab[] = {
0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65, 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5, 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85, 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2, 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2, 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32, 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42, 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C, 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC, 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C, 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C, 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B, 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B, 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB, 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB, 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4,0xF3};


#define SERIAL_INPUT_TIMEOUT MSECS_TO_MACTICKS(400)


typedef struct _PC_BIND_ELEM{
	SADDR saddr;
	BYTE  ep;
}PC_BIND_ELEM;

PC_BIND_ELEM binding_cache[LRWPAN_PC_BIND_CACHE_SIZE];

BYTE active_bind_cnt;
BYTE active_bind_index;
BYTE bind_status;




static BYTE pbdSendCmdHdr(UINT16 len);
static void pbdSendPayload(BYTE *buf, UINT16 len, BYTE crc);

static void pbdParseSerialCmd(void);
static void pdbParseAlarmReq(BYTE crc);
static void pdbSendAck(BYTE cmd_being_acked, BYTE status);


typedef enum _PBD_STATE_ENUM {
  PBD_STATE_IDLE,
  PBD_STATE_SEND_ALARM,
  PBD_STATE_ALARM_WAIT
}PBD_STATE_ENUM;


PBD_STATE_ENUM pbdState;

typedef union _PDB_ARGS {
	struct {
		BYTE   mode;
		SADDR  saddr;
	}alarm;
}PBD_ARGS;

PBD_ARGS pdb_args;


void pbdInit(void) {
	pbdState = PBD_STATE_IDLE;
}

void pbdFSM(void){

	switch(pbdState)
	{
	case PBD_STATE_IDLE:
		//check if we have input from PC client
		if (halGetchRdy()) pbdParseSerialCmd();
		break;

	case PBD_STATE_SEND_ALARM:
		//wait until APS level is free
		if (apsBusy()) break;
		aplSendAlarm(pdb_args.alarm.saddr,pdb_args.alarm.mode);
        pbdState = PBD_STATE_ALARM_WAIT;
		break;

	case PBD_STATE_ALARM_WAIT:
		if (apsBusy()) break;
		//finished. Send the status back
		pdbSendAck(SCMD_SEND_ALARM_REQ, (BYTE)aplGetStatus());
        pbdState = PBD_STATE_IDLE;
		break;
	}

}


BYTE pbdGetNextCrc (BYTE crc, BYTE val){
	return(crc8tab[crc ^ val]);
}


void pbdSendSerialCommand(BYTE *buf, UINT16 len){
	BYTE crc, x;

	//send header
	halRawPut(SCMD_HDR_BYTE1);
   	halRawPut(SCMD_HDR_BYTE2);

	crc = 0;
	//send length
	x = len & 0xFF;
    crc = pbdGetNextCrc(crc, x);
	halRawPut(x);
	x = (len >> 8) & 0xFF;
    crc = pbdGetNextCrc(crc, x);
	halRawPut(x);
	//send the payload
	while(len) {
     crc = pbdGetNextCrc(crc, *buf);
	 halRawPut(*buf);
	 buf++;
	 len--;
	}
	//send the CRC
    halRawPut(crc);

}

static BYTE pbdSendCmdHdr(UINT16 len) {
	BYTE crc;
	BYTE x;

	crc = 0;
	halRawPut(SCMD_HDR_BYTE1);
	halRawPut(SCMD_HDR_BYTE2);
	x = len & 0xFF;
	crc = pbdGetNextCrc(crc, x);
    halRawPut(x);
    x = (len>>8) & 0xFF;
	crc = pbdGetNextCrc(crc, x);
    halRawPut(x);
	return(crc);
}

static void pdbSendAck(BYTE cmd_being_acked, BYTE status) {

    BYTE crc,x;

	crc = pbdSendCmdHdr(3);

	x = SCMD_CMD_ACK;
	crc = pbdGetNextCrc(crc, x);
    halRawPut(x);

	x = cmd_being_acked;
	crc = pbdGetNextCrc(crc, x);
    halRawPut(x);

	x = status;
	crc = pbdGetNextCrc(crc, x);
    halRawPut(x);
	//send CRC
    halRawPut(crc);
}

static void pbdSendPayload(BYTE *buf, UINT16 len, BYTE crc)
{
  while (len) {
    crc = pbdGetNextCrc(crc, *buf);
    halRawPut(*buf);
    buf++;
    len--;
  }
  //send CRC
  halRawPut(crc);
 }



//send the contents of a ZEP command to the PC client
//the first byte of 'buf' contains the ZEP cluster ID
//the rest is the ZEP payload
void pbdHandleZepForward(void){
	BYTE crc;
	BYTE plen;

	plen = aplGetRxMsgLen() +1;  //+1 includes the ClusterID put into the packet
	crc = pbdSendCmdHdr(plen+1); //add in the byte to the payload length for SCMD_CMD_ZEP byte
	//send the cmd type
	crc = pbdGetNextCrc(crc, SCMD_CMD_ZEP);
	halRawPut(SCMD_CMD_ZEP);
	//send the cluster ID
    crc = pbdGetNextCrc(crc, aplGetRxCluster());
    halRawPut(aplGetRxCluster());
   	//send the payload
	pbdSendPayload(aplGetRxMsgData(),aplGetRxMsgLen(),crc);
}

//get a byte with a timeout.
BOOL pdbGetchWithTimeOut(BYTE *c)
{
	UINT32 my_timer;

	//if character is rdy, return immediately
	if (halGetchRdy()) {
            *c = halGetch();
			return(TRUE);
	}
	//now do timeout
	my_timer= halGetMACTimer();
	do {
		if (halGetchRdy()) {
			*c = halGetch();
			return(TRUE);
		}
	}while ((halMACTimerNowDelta(my_timer))< SERIAL_INPUT_TIMEOUT);
	*c = 0;  //return reasonable default
    return (FALSE);
}

//read the header from a packet sent by PC client
static BOOL pbdGetCmdHdr(UINT16 *rlen, BYTE *rcrc) {
	BYTE x;
	UINT16 len;
	BYTE crc;

	x = 0;

	pdbGetchWithTimeOut(&x) ;
	if (x != SCMD_HDR_BYTE1) return(FALSE);
	pdbGetchWithTimeOut(&x); //get SCMD_HDR_BYTE2
	if (x != SCMD_HDR_BYTE2) return(FALSE);
	crc = 0;
	pdbGetchWithTimeOut(&x);  //get LSB length
	crc = pbdGetNextCrc(crc, x);
	len = x;
	pdbGetchWithTimeOut(&x);  //get MSB length
	crc = pbdGetNextCrc(crc, x);
	len += (((UINT16) x) << 8);
	*rlen = len;
	*rcrc = crc;
	return (TRUE);
}

static void pdbParseAlarmReq(BYTE crc) {
	BYTE x;

	pdbGetchWithTimeOut(&x);  //get LSB
	crc = pbdGetNextCrc(crc, x);
	pdb_args.alarm.saddr = x;
	pdbGetchWithTimeOut(&x);  //get MSB
	crc = pbdGetNextCrc(crc, x);
	pdb_args.alarm.saddr += (((UINT16) x) << 8);

	//get mode
	pdbGetchWithTimeOut(&x);  //get MSB length
	crc = pbdGetNextCrc(crc, x);

	pdb_args.alarm.mode = x;

    pdbGetchWithTimeOut(&x);  //get CRC

	if (x != crc) {
		 DEBUG_STRING(DBG_ERR,"Incorrect CRC for Alarm request\n");
		 //this request will be ignored since we don't kickoff the FSM
		 return;
	}
	//got a valid alarm request, kickoff the FSM state
	pbdState = PBD_STATE_SEND_ALARM;
 }


//parses a generic serial command from the PC client
static void pbdParseSerialCmd(void){
  BYTE crc;
  BYTE x;
  UINT16 tmp;

  //now, lets wait for the response.
  if (!pbdGetCmdHdr(&tmp, &crc)) {
	  DEBUG_STRING(DBG_ERR,"Serial Command Parsing Failed\n");
	  return;
  }
  //get the command
  pdbGetchWithTimeOut(&x);
  crc = pbdGetNextCrc(crc, x);

  switch(x)
  {
    case SCMD_SEND_ALARM_REQ:
	   pdbParseAlarmReq(crc);
	   break;
    case SCMD_CMD_USER_CALLBACK:
	   usrPbdCallback(tmp,crc);
	   break;
   default:
      DEBUG_STRING(DBG_ERR,"Unknown PC Serial Commandn");
	
  }

}

//Reads bindings from PC client

static BOOL pbdReadBindInitRsp(void) {
  BYTE crc;
  BYTE x;
  UINT16 tmp;
  BYTE cnt;

  //now, lets wait for the response.
  if (!pbdGetCmdHdr(&tmp, &crc)) {
	  DEBUG_STRING(DBG_ERR,"PC Bind Table response hdr failed\n");
	  return FALSE;
  }
  //get the command
  pdbGetchWithTimeOut(&x);
  crc = pbdGetNextCrc(crc, x);
  if (x != SCMD_CMD_BINDINIT_RSP) {
      DEBUG_STRING(DBG_ERR,"PC Bind Table response cmd failed\n");
	  return FALSE;
  }
  //get the status
  pdbGetchWithTimeOut(&x);
  crc = pbdGetNextCrc(crc, x);
  bind_status = x;  //save

  //get the number of bindings
  pdbGetchWithTimeOut(&x);
  crc = pbdGetNextCrc(crc, x);
  active_bind_cnt = x;

  if (!active_bind_cnt) {
     DEBUG_STRING(DBG_ERR,"PC Binding found no binding entries!\n");
  }

  //get the binding entries
  cnt = 0;
  while (cnt != active_bind_cnt) {
	//get the SADDR
	pdbGetchWithTimeOut(&x);
    crc = pbdGetNextCrc(crc, x);
	tmp = x;  //LSB
	pdbGetchWithTimeOut(&x);
    crc = pbdGetNextCrc(crc, x);
	tmp += (((UINT16) x) << 8); //MSB
	//save
    binding_cache[cnt].saddr = tmp;
	//get the endpoint
	pdbGetchWithTimeOut(&x);
    crc = pbdGetNextCrc(crc, x);
	binding_cache[cnt].ep = x;
	cnt++;
  }
  //get the CRC
  pdbGetchWithTimeOut(&x);
  if (x != crc) {
	  //wrong CRC, discard
	  active_bind_cnt = 0;
      DEBUG_STRING(DBG_ERR,"PC Binding response, wrong crc!\n");
	  return(FALSE);
  }
  if (!active_bind_cnt) return(FALSE);
  //at this point, we can return TRUE, we have some bindings
  DEBUG_STRING(DBG_INFO,"Got valid bind response!\n");
  return(TRUE);


}

/*

Request the next set of bindings
 Format of Bindinit Req  (1 byte)
 Cmd (SCMD_CMD_BINDGETNEXT_REQ)
 CRC

 This assumes that SCMD_CMD_BINDINIT_REQ has
 already been made, and the PC could not return
 all of the bindings that it found in one packet.

*/

static BOOL pbdSendBindGetNextReq(void){
  BYTE crc;

  active_bind_cnt = 0;
  active_bind_index = 0;
  //send the SCMD_CMD_BINDGETNXT_REQ
  crc = pbdSendCmdHdr(1);
  //send the cmd type
  crc = pbdGetNextCrc(crc, SCMD_CMD_BINDGETNXT_REQ);
  halRawPut(SCMD_CMD_BINDGETNXT_REQ);
  //send the CRC
  halRawPut(crc);
  //now read the response
  return(pbdReadBindInitRsp());
}
	

//send a serial command to the PC to get binding information
/*

Format of Bindinit Req  (6 bytes)  , CRC not included in payload
 Cmd (SCMD_CMD_BINDINIT_REQ)
 Src Saddr (LSB)
 Src Saddr (MSB)
 SrcEP
 Cluster
 Max binds       --maximum return binds that I can handle
 CRC

## response will be a BindInit Rsp
## length is 3 + Numbinds*
 Cmd (SCMD_CMD_BINDINIT_Rsp)
 Status  (0x00 - all bindings found
          0x01 - more to come, need to try again.)
 NumBinds  (number of bindings being returned, always present)
 dst Saddr (LSB)
 dst Saddr (MSB)
 dst EP
 CRC


*/

BOOL evbBindTableIterInit(BYTE srcEP, SADDR srcSADDR, BYTE cluster){
  BYTE crc;
  BYTE x;

  DEBUG_STRING(DBG_INFO,"Sending Binding Iter request!\n");
  active_bind_cnt = 0;
  active_bind_index = 0;
  //send the SCMD_CMD_BINDINIT_REQ
  crc = pbdSendCmdHdr(6);
  //send the cmd type
  crc = pbdGetNextCrc(crc, SCMD_CMD_BINDINIT_REQ);
  halRawPut(SCMD_CMD_BINDINIT_REQ);
  //send SADDR
  x = srcSADDR & 0xFF;
  crc = pbdGetNextCrc(crc, x);
  halRawPut(x);
  x = ((srcSADDR) >> 8) & 0xFF;
  crc = pbdGetNextCrc(crc, x);
  halRawPut(x);
  //send EP
  crc = pbdGetNextCrc(crc, srcEP);
  halRawPut(srcEP);
  //send Cluster
  crc = pbdGetNextCrc(crc, cluster);
  halRawPut(cluster);
  //send the max number of binds to return
  crc = pbdGetNextCrc(crc, LRWPAN_PC_BIND_CACHE_SIZE);
  halRawPut(LRWPAN_PC_BIND_CACHE_SIZE);
  //send the CRC
  halRawPut(crc);
  return(pbdReadBindInitRsp());
}

//return the next bind that is in the list
BOOL evbResolveBind(BYTE *dstEP, SADDR *dstSADDR){
	if (!active_bind_cnt) return(FALSE);
	if (active_bind_index == active_bind_cnt) {
		//see if PC has more bindings for us
		if (!bind_status) return(FALSE);  //last status was last
		//there are more bindings, request them
		if (!pbdSendBindGetNextReq()) return(FALSE);
		if (!active_bind_cnt) return(FALSE);
		//if we get to here, we have fetched more bindings
	}
      DEBUG_STRING(DBG_INFO,"Next Indirect dest is SADDR: ");
      DEBUG_UINT16(DBG_INFO,binding_cache[active_bind_index].saddr);
      DEBUG_STRING(DBG_INFO,", EP: ");
      DEBUG_UINT8(DBG_INFO,binding_cache[active_bind_index].ep);
      DEBUG_STRING(DBG_INFO,"\n");

	*dstSADDR = binding_cache[active_bind_index].saddr;
	*dstEP = binding_cache[active_bind_index].ep;
    active_bind_index++;
	return(TRUE);
}



#endif
#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品一区二区三区四区| 国产成人精品亚洲777人妖| 久久久久国产一区二区三区四区 | 欧美日韩国产一二三| 色哟哟在线观看一区二区三区| 国产一区二区三区四区五区入口 | 欧美mv日韩mv亚洲| 日韩欧美国产三级| 欧美成人女星排行榜| 精品99999| 久久久久久99久久久精品网站| 久久这里只精品最新地址| 精品福利av导航| 久久综合九色综合久久久精品综合| 精品国产制服丝袜高跟| 久久久久久9999| 最新国产精品久久精品| 亚洲激情自拍偷拍| 天天爽夜夜爽夜夜爽精品视频| 日韩电影在线免费看| 精品在线一区二区| 成人免费av在线| 色婷婷久久99综合精品jk白丝| 欧美系列亚洲系列| 欧美成人女星排名| 中文字幕亚洲成人| 亚洲成av人综合在线观看| 蜜桃视频在线观看一区二区| 国产精品一区二区三区99| 91老师国产黑色丝袜在线| 欧美亚洲国产一区二区三区va | 欧美videos中文字幕| 国产亚洲欧美日韩在线一区| 综合亚洲深深色噜噜狠狠网站| 亚洲成人动漫一区| 国产乱码精品一区二区三区av| 波多野结衣视频一区| 欧美精品一级二级三级| 久久日一线二线三线suv| 亚洲天堂久久久久久久| 日本不卡一区二区三区高清视频| 国产sm精品调教视频网站| 色妹子一区二区| 欧美精品一区二区三区四区| 一区二区三区在线免费视频| 精品伊人久久久久7777人| 91免费在线看| 久久久久国产精品麻豆ai换脸| 亚洲欧美偷拍卡通变态| 免费成人美女在线观看.| 色婷婷综合久久久久中文| 国产性做久久久久久| 午夜久久久影院| 懂色av一区二区三区免费观看| 欧美理论片在线| 中文字幕欧美国产| 美国十次了思思久久精品导航| 成人av在线网站| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品一卡二卡在线观看| 欧美亚男人的天堂| 国产精品对白交换视频| 国产一区二区视频在线播放| 欧美精品久久99久久在免费线| 欧美激情在线看| 国产一区二三区好的| 91精品国产色综合久久ai换脸 | 久久综合九色综合97婷婷女人 | 欧美亚洲一区二区三区四区| 国产精品欧美经典| 国产精品主播直播| 欧美成人一区二区| 首页综合国产亚洲丝袜| 欧美日韩在线免费视频| 亚洲男人天堂一区| 91精品办公室少妇高潮对白| 中文字幕av一区二区三区免费看| 久久国产免费看| 日韩午夜小视频| 青娱乐精品在线视频| 91.xcao| 五月天一区二区| 欧美性猛片xxxx免费看久爱| 亚洲欧美在线高清| 99riav一区二区三区| 亚洲欧美日韩久久| 91麻豆视频网站| 一区二区三区在线免费观看 | 91麻豆精品国产自产在线观看一区| 一区二区三区欧美激情| 在线区一区二视频| 日日嗨av一区二区三区四区| 7777精品伊人久久久大香线蕉的 | 国产一区二区三区不卡在线观看| 日韩一级黄色片| 美国av一区二区| 91精品国产综合久久蜜臀 | 亚洲激情六月丁香| 欧美亚洲一区二区在线| 日韩va亚洲va欧美va久久| 日韩一区二区精品在线观看| 国内成人精品2018免费看| 2023国产精品自拍| 成人小视频免费观看| 国产精品日韩成人| 欧美亚洲综合另类| 久久机这里只有精品| 国产精品日日摸夜夜摸av| 色av成人天堂桃色av| 午夜影视日本亚洲欧洲精品| 久久男人中文字幕资源站| 波多野结衣中文字幕一区 | 国产欧美日韩在线看| av电影一区二区| 午夜精品福利在线| 亚洲精品一区二区三区福利| 99精品视频在线播放观看| 午夜精品久久久久| 中日韩av电影| 欧美精品777| 高清不卡一区二区| 亚洲国产wwwccc36天堂| 国产亚洲自拍一区| 欧美日韩精品一区二区三区四区 | 中文字幕国产一区二区| 欧美午夜影院一区| 成人午夜激情片| 首页亚洲欧美制服丝腿| 国产日本欧洲亚洲| 欧美女孩性生活视频| 国产一区二区三区免费| 亚洲最新视频在线观看| 精品久久久久香蕉网| 91成人国产精品| 国产成人综合精品三级| 亚洲一区二区三区四区在线 | 欧美日韩国产一级二级| 福利一区二区在线| 午夜电影一区二区| 亚洲视频在线一区二区| 26uuu久久天堂性欧美| 欧美区一区二区三区| 91影院在线观看| 国产精品一卡二卡在线观看| 免费人成精品欧美精品| 亚洲一区二区美女| 亚洲欧美激情一区二区| 久久久久国产精品人| 日韩一区二区三区电影| 欧美日韩二区三区| 色综合久久久久综合体桃花网| 国产成人一区二区精品非洲| 精彩视频一区二区三区| 免费av成人在线| 日韩高清不卡在线| 亚洲.国产.中文慕字在线| 亚洲激情图片小说视频| 亚洲嫩草精品久久| 亚洲色图欧美激情| 亚洲色图一区二区三区| 国产精品第四页| 亚洲欧美在线aaa| 亚洲人成7777| 亚洲日本乱码在线观看| 国产精品电影一区二区三区| 中文av字幕一区| 国产精品久久午夜夜伦鲁鲁| 欧美激情综合网| 中文字幕一区二区三区在线播放 | 亚洲第一福利视频在线| 亚洲综合在线观看视频| 亚洲黄一区二区三区| 亚洲成a人v欧美综合天堂下载| 亚洲资源在线观看| 无吗不卡中文字幕| 日日夜夜精品视频天天综合网| 日韩精品亚洲一区| 久久国产麻豆精品| 国产激情视频一区二区三区欧美| 国产一区999| 成人黄页在线观看| 在线视频你懂得一区| 欧美日韩国产小视频在线观看| 日韩视频中午一区| 久久久国产午夜精品| 国产精品毛片大码女人| 一区二区在线观看免费 | 一个色在线综合| 午夜欧美2019年伦理| 久久er精品视频| 不卡一区二区中文字幕| 91在线观看高清| 91精品国产综合久久国产大片| 精品国产3级a| 亚洲三级免费电影| 亚欧色一区w666天堂| 国产精品中文欧美| 91黄色激情网站| 欧美大片一区二区三区| 久久夜色精品一区|