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

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

?? target_win32_gui.c

?? AUTOMGEN runtime is an open source royalty free runtime for open PLCs. By using this runtime, any ta
?? C
字號:
// AUTOMGEN interpretor runtime	 - target
// Target specific file : Windows 32 bits OS - GUI
// (C) 2003-2008 IRAI

#include "windows.h"
#include "stdio.h"
#include "conio.h"
#include "core.h"
#include "com.h"
#include "io.h"

#include "resource.h"

//
// General functions
//

// Must return current time in ms in a DWORD, no matter the starting value
DWORD target_gettimeinms(void)
{
return GetTickCount();
}

// Return RTC time
void target_readrtc(unsigned short *ms,unsigned short *sec,unsigned short *min,unsigned short *hour,unsigned short *day,unsigned short *month,unsigned short *year)
{
SYSTEMTIME st;
GetLocalTime(&st);
*ms=st.wMilliseconds;
*sec=st.wSecond;
*min=st.wMinute;
*hour=st.wHour;
*day=st.wDay;
*month=st.wMonth;
*year=st.wYear;
}

// Called when a fatal error occurs
void target_fatal(void)
{
#ifdef _DEBUG
_asm int 3
#endif
}

// Return a 16 chars string target identifier
char *target_id(void)
{
static char id[16]="WINDOWS32 RTV01";
return id;
}

// Return a byte with bits as follow :
// b0= 0: time base 1ms (alsways 0, for 1 is for backward compatibility)
// b1= 0: integers are coded with LSB first, 1: integers are coded with MSB first 
unsigned char target_confbyte(void)
{
return 0;
} 

//
// Serial communication functions
//

HANDLE hcom=(HANDLE)-1;

// Open a serial port
int target_com_open(unsigned port,unsigned speed,unsigned parity,unsigned databit,unsigned stopbit)
{
DCB dcb;
char szBuff[16];
sprintf(szBuff,"COM%lu",port);
hcom=CreateFile(szBuff, GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if(hcom==(HANDLE)-1) return -1;
// 4 Ko buffers
SetupComm(hcom, 4096, 4096 ) ;
memset(&dcb,0,sizeof(dcb));
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate=speed;
dcb.fBinary=1;
dcb.ByteSize=databit;
dcb.fRtsControl=RTS_CONTROL_DISABLE;
switch(parity)
	{
	case 'N' : 
		{	
		dcb.fParity=0;
		dcb.Parity=0;
		} break;
	case 'O' : 
		{	
		dcb.fParity=1;
		dcb.Parity=1;
		} break;
	case 'E' : 
		{	
		dcb.fParity=1;
		dcb.Parity=2;
		} break;
	case 'M' : 
		{	
		dcb.fParity=1;
		dcb.Parity=3;
		} break;
	case 'S' : 
		{	
		dcb.fParity=1;
		dcb.Parity=4;
		} break;
	}
switch(stopbit)
	{
	case 1 : dcb.StopBits=0; break;
	case 2 : dcb.StopBits=2; break;
	default : 
		{
		CloseHandle(hcom);
		hcom=(HANDLE)-1;
		return -1;
		}
	}
if(!SetCommState(hcom,&dcb))
	{
	CloseHandle(hcom);
	hcom=(HANDLE)-1;
	return -1;
	}
return 0;
}

OVERLAPPED OVL;

// Send a buffer to serial port
void target_com_send(unsigned char *buff,unsigned len)
{
DWORD dw;
WriteFile(hcom,buff,len,&dw,&OVL);
}


// Is there one or more chars in RX buffer?
int target_com_ischarin(void)
{
COMSTAT CS;
DWORD dw;
ClearCommError(hcom,&dw,&CS);
if(CS.cbInQue>0) 
	{
	return 1;
	}
return 0;
}

// Get one char
int target_com_getchar(void)
{
DWORD dw;
int result=0;
unsigned char c;
ReadFile(hcom,&c,1,&dw,&OVL);
result=c;
if(dw==0) return -1;
return result;
}

// Close serial com port 
void target_com_close(void)
{
if(hcom!=(HANDLE)-1)
	{
	CloseHandle(hcom);
	hcom=(HANDLE)-1;
	}
}

//
// TCP-IP functions
//


#include "winsock.h"							

#define MAXCLIENTSOCK 16			// Max client connections
#define MAX_PENDING_CONNECTS  8     // Maximum length of the queue of pending connections
#define MAXDATAINLEN 0x1000

#pragma pack(1)

typedef enum {NEWCLICONNECTED,CLIENTDATARECEIVED,CLIDECONNECTED} NETEVENTTYPE;

struct _NE
	{
	NETEVENTTYPE event;
	int data1,data2,data3,data4;
	};

WSADATA WSAData;

SOCKET WinSocket=INVALID_SOCKET;
SOCKET ClientSock[MAXCLIENTSOCK]; 
DWORD ClientID[MAXCLIENTSOCK];
SOCKADDR_IN local_sin,accept_sin;
int accept_sin_len;
unsigned maxtramelen;

// TCP-IP initialization
int target_netcom_start(void)
{
unsigned count;
for(count=0;count<MAXCLIENTSOCK;count++)
	{
	ClientSock[count]=INVALID_SOCKET;
	}
if(WSAStartup(MAKEWORD(1,1),&WSAData)!= 0) 
  {
  return -1;
  }
maxtramelen=WSAData.iMaxUdpDg;
if(maxtramelen==0||maxtramelen>0x10000)
	{
	maxtramelen=0x10000;
	}
return 0;
}

// TCP-IP close
int target_netcom_close(void)
{
if(WSACleanup()!=0)
	{
	return -1;
	}
return 0;
}

HANDLE htsrv,htsrvr;
BOOL bStophtsrv,bStophtsrvr;


// Client connection thread
DWORD WINAPI asyncconnectsrv(LPVOID p)
{
int (*netevent)(struct _NE *pne)=(int (*)(struct _NE *pne))p;
do
	{
	unsigned pos;
	SOCKET clisocket;
	accept_sin_len = sizeof (accept_sin);
	clisocket=accept(WinSocket,(struct sockaddr *)&accept_sin,(int *)&accept_sin_len);
	if(clisocket==INVALID_SOCKET||bStophtsrv)
		{
		CloseHandle(htsrv);
		htsrv=NULL;
		ExitThread(0);
		}
	else
		{
		// Search a free space for this connection
		pos=0;
		while(pos<MAXCLIENTSOCK)
			{
			if(ClientSock[pos]==INVALID_SOCKET) break;
			pos++;
			}
		if(pos!=MAXCLIENTSOCK) // Found!
			{
			struct _NE ne;
			ClientSock[pos]=clisocket;
			ne.event=NEWCLICONNECTED;
			ne.data1=pos;
			ne.data2=(int)accept_sin.sin_addr.S_un.S_addr;
			ClientID[pos]=ne.data2;
			(*netevent)(&ne);
			}
		}
	Sleep(10);
	}
while(1);
}

#define MAXRECEIVELEN 0x1000

// Client datas received thread
DWORD WINAPI asyncconnectsrvr(LPVOID p)
{
int (*netevent)(struct _NE *pne)=(int (*)(struct _NE *pne))p;
do
	{
	unsigned count;
	for(count=0;count<MAXCLIENTSOCK;count++)
		{
		if(ClientSock[count]!=INVALID_SOCKET)
			{
			BYTE data[MAXRECEIVELEN];
			int iRet;
			// Available datas ?
			iRet=recv(ClientSock[count],(char *)data,MAXRECEIVELEN,0);
			if(iRet==SOCKET_ERROR)
				{
				DWORD dwerr=WSAGetLastError();
				if(dwerr==WSAEWOULDBLOCK)
					{
					iRet=0;
					}
				}
			if(iRet==SOCKET_ERROR)
				{
				struct _NE ne;
				closesocket(ClientSock[count]);
				ClientSock[count]=INVALID_SOCKET;
				ne.event=CLIDECONNECTED;
				ne.data1=count;
				ne.data2=ClientID[count];
				(*netevent)(&ne);
				}
			else
				{
				if(iRet>0)
					{
					struct _NE ne;
					ne.event=CLIENTDATARECEIVED;
					ne.data1=count;
					ne.data2=ClientID[count];
					ne.data3=iRet;
					ne.data4=(int)(char *)&data;
					(*netevent)(&ne);
					}
				}
			}
		if(bStophtsrvr)
			{
			htsrvr=NULL;
			CloseHandle(htsrvr);
			ExitThread(0);
			}
		}		
	Sleep(10);
	}
while(1);
}

unsigned char cliconnected[MAXCLIENTSOCK];
unsigned datain[MAXCLIENTSOCK][MAXDATAINLEN];
unsigned datainlen[MAXCLIENTSOCK];

int internalnetevent(struct _NE *pne)
{
switch(pne->event)
	{
	case CLIENTDATARECEIVED :
		{
		if(datainlen[pne->data1]+pne->data3<MAXDATAINLEN)
			{
			memcpy(&datain[pne->data1][datainlen[pne->data1]],(void *)pne->data4,pne->data3);
			datainlen[pne->data1]+=pne->data3;
			}
		} break;
	case CLIDECONNECTED :
		{
		cliconnected[pne->data1]=0;
		} break;
	case NEWCLICONNECTED :
		{
		cliconnected[pne->data1]=1;
		datainlen[pne->data1]=0;
		} break;
	}
return 0;
}

// Read datas from a client
int target_netcom_srvread(unsigned client,unsigned char *data,unsigned maxdata)
{
unsigned len;
if(!cliconnected[client]) return -1;
len=min(maxdata,datainlen[client]);
if(len==0) return 0;
memcpy(data,datain[client],len);
if(len<datainlen[client])
	{
	memmove(&datain[client][0],((unsigned char *)&datain[client][0])+1,datainlen[client]-len);
	}	
datainlen[client]-=len;
return len;
}

// How many bytes in RX buffer?
int target_netcom_srvgetlenin(unsigned client)
{
if(!cliconnected[client]) return -1;
return datainlen[client];
}

// Get first connected client number : return -1 if none
int target_netcom_srvgetfirstclient(void)
{
unsigned count;
for(count=0;count<MAXCLIENTSOCK;count++)
	{
	if(cliconnected[count]) return count;
	}
return -1;
}

// Get next connected client : return -1 if none
int target_netcom_srvgetnextclient(unsigned cli)
{
unsigned count;
for(count=cli+1;count<MAXCLIENTSOCK;count++)
	{
	if(cliconnected[count]) return count;
	}
return -1;
}

// Oopen a TCP-IP server
int target_netcom_srvopen(int (*netevent)(struct _NE *pne),WORD port)
{
DWORD tid;
// Create a TCP/IP socket, WinSocket.
if((WinSocket=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) 
  {
  return -1;
  }
// Fill out the local socket's address information.
local_sin.sin_family = AF_INET;
local_sin.sin_port = htons (port);  
local_sin.sin_addr.s_addr = htonl (INADDR_ANY);
// Associate the local address with WinSocket.
if (bind(WinSocket,(struct sockaddr *) &local_sin,sizeof (local_sin)) == SOCKET_ERROR) 
	{
	closesocket(WinSocket);
    return -2;
	}
// Establish a socket to listen for incoming connections.
if(listen(WinSocket,MAX_PENDING_CONNECTS)==SOCKET_ERROR) 
  {
  closesocket(WinSocket);
  return -3;
  }
bStophtsrv=FALSE;
bStophtsrvr=FALSE;
if(netevent==NULL) netevent=internalnetevent;
// Create thread for clients connection
htsrv=CreateThread(NULL,0,asyncconnectsrv,(PVOID)netevent,0,&tid);
if(htsrv==NULL)
	{
	return -4;
	}
// Create a thread for clients datas RX
htsrvr=CreateThread(NULL,0,asyncconnectsrvr,(PVOID)netevent,0,&tid);
if(htsrvr==NULL)
	{
	bStophtsrv=TRUE;
	WSACancelBlockingCall();
	TerminateThread(htsrv,0);
	CloseHandle(htsrv);
	return -5;
	}
return 0;
}

int target_netcom_srvclose(void)
{
unsigned count;
if(closesocket(WinSocket)!=0) return -1;
for(count=0;count<MAXCLIENTSOCK;count++)
	{
	if(ClientSock[count]!=INVALID_SOCKET)
		{
		// Disable both sending and receiving on ClientSock.
		shutdown(ClientSock[count],0x02);
		closesocket(ClientSock[count]);
		ClientSock[count]=INVALID_SOCKET;
		}
	}
if(htsrv!=NULL)
	{
	bStophtsrv=TRUE;
	WSACancelBlockingCall();
	TerminateThread(htsrv,0);
	CloseHandle(htsrv);
	htsrv=NULL;
	}
if(htsrvr!=NULL)
	{
	bStophtsrvr=TRUE;
	WSACancelBlockingCall();
	TerminateThread(htsrvr,0);
	CloseHandle(htsrvr);
	htsrvr=NULL;
	}
return 0;
}



int target_netcom_srvsenddata(int pos,BYTE *data,int len)
{
if(send(ClientSock[pos],(char *)data,len,0)==SOCKET_ERROR) 
	{
	return -1;
	}
return 0;	
}


//
// Main
//



// Variables
unsigned char i[10000];
unsigned char o[10000];
unsigned char b[10000];
unsigned char t[100*(sizeof(unsigned char)+sizeof(unsigned long)+sizeof(unsigned long))];
unsigned short c[10000];
unsigned short m[10000];
float f[10000];
unsigned long l[10000];
struct _a7int a7int;


// Variable memory and interpretor structure initialization
int init(void)
{
memset(&a7int,0,sizeof(a7int));
a7int.ni=10000;
a7int.no=10000;
a7int.nb=10000;
a7int.nt=100;
a7int.nc=10000;
a7int.nm=10000;
a7int.nf=10000;
a7int.nl=10000;
a7int.pI=i;
a7int.pO=o;
a7int.pB=b;
a7int.pT=t;
a7int.pC=c;
a7int.pM=m;
a7int.pF=f;
a7int.pL=l;			 
a7int.init=1;
return 0;
}

// Execute the program one time
void cycle(void)
{
if(a7int.init) 
	{
	automgenintinit(&a7int);
	a7int.init=0;
	}
if((a7int.run||a7int.step))
	{
	automgenintrun(&a7int);
	if(a7int.pB[SYSTEM_BIT_EMERGENCY_STOP]&TRUEFORBOOL)
		{ // Emergency stop stops the program
		a7int.run=0;
		}
	a7int.step=0;
	}
// Process system variables
automgenintprocesssysvar(&a7int);
}

void uninit(void)
{
}

int stop=0;
char status[512];

DWORD WINAPI runtime(LPVOID lp)
{
unsigned count=0;
if(init()<0) // Interpretor initialization
	{
	sprintf(status,"AUTOMGEN INTERPRETOR INITIALIZATION FAILED\n");
	return (DWORD)-1;
	}; 
if(initcom()<0) // Communication setup
	{
	sprintf(status,"AUTOMGEN COMMUNICATION INITIALIZATION FAILED\n");
	return (DWORD)-2;
	}
if(initio()<0) // I/O initialization
	{
	sprintf(status,"AUTOMGEN I/O INITIALIZATION FAILED\n");
	return (DWORD)-3;
	}
do
	{
	sprintf(status,"%c - %c - %4.4X - %u\r",a7int.run?'R':'S',(a7int.pB[SYSTEM_BIT_EMERGENCY_STOP]&TRUEFORBOOL)?'E':' ',a7int.pM[SYSTEM_WORD_ERROR_NUMBER],count++);
	// Process the communication
	processcom(&a7int);
	// Process inputs
	// Reset I/O pos
	a7int.io_i_pos=0;
	a7int.io_o_pos=0;
	a7int.io_m_pos=200;
	readi(&a7int);
	// Ex閏ute the program one time
	cycle();
	// Process outputs
	writeo(&a7int);
	// Let time for other tasks
	}
while(!stop);
uninitio();	// I/O stop
uninitcom(); // Communication STOP
uninit(); // Interpretor stop
return 0;
}

LRESULT CALLBACK DlgProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
switch(msg)
	{
	case WM_INITDIALOG:
		{
		SetTimer(hwnd,1,500,NULL);
		return TRUE;
		}
	case WM_COMMAND:
		{
		switch(wparam)
			{
			case IDC_CLOSE: 
				{
				stop=1;
				DestroyWindow(hwnd);
				} break;
			case IDC_RUN:
				{
				a7int.run=a7int.run?0:1;
				} break;
			}
		return TRUE;
		}
	case WM_TIMER:
		{
		SetDlgItemText(hwnd,IDC_STATUS,status);
		CheckDlgButton(hwnd,IDC_RUN,a7int.pB&&(a7int.pB[SYSTEM_BIT_RUN]&0x40)?BST_CHECKED:BST_UNCHECKED);
		return TRUE;
		} 
	case WM_DESTROY:
		{
		KillTimer(hwnd,1);
		} break;
	}
return FALSE;
}


int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
HWND hwnd;
MSG msg;
BOOL bGotMsg;
DWORD id;
HANDLE thread;
hwnd=CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG),NULL,DlgProc);
ShowWindow(hwnd,SW_SHOW);
thread=CreateThread(NULL,0,runtime,0,0,&id);
while(msg.message!=WM_QUIT&&IsWindow(hwnd))
	{
	bGotMsg=PeekMessage(&msg,NULL,0,0,PM_REMOVE);
	if(bGotMsg)
		{
		if(!IsDialogMessage(hwnd,&msg))
			{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
			}
		}
	else
		{
		Sleep(1);
		}
	}
return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩aaa| 亚洲国产经典视频| 欧美三级日韩三级国产三级| 成人综合在线观看| 国产精品一区二区久久不卡| 久久国产视频网| 麻豆国产一区二区| 久久99九九99精品| 狠狠色丁香婷婷综合久久片| 久久99精品国产91久久来源| 精品中文字幕一区二区小辣椒| 免费的成人av| 国内精品视频666| 日韩美女主播在线视频一区二区三区| 欧美视频三区在线播放| 欧美日韩综合在线| 在线不卡的av| 欧美zozozo| 亚洲精品一区二区三区四区高清| 精品久久久久久久人人人人传媒| 欧美哺乳videos| 久久久精品蜜桃| 国产精品家庭影院| 亚洲黄色片在线观看| 亚洲成a人v欧美综合天堂下载| 天堂久久久久va久久久久| 日本不卡一区二区三区| 裸体在线国模精品偷拍| 国产精品白丝av| 91网站在线播放| 欧美视频精品在线观看| 日韩视频一区二区在线观看| 久久嫩草精品久久久精品一| 国产精品色噜噜| 亚洲在线观看免费视频| 日本不卡高清视频| 国产激情一区二区三区四区| 99vv1com这只有精品| 欧美精品一二三四| 国产色产综合色产在线视频| 亚洲欧美另类小说| 日韩激情av在线| 国产成人综合网站| 色综合久久久久久久久| 欧美顶级少妇做爰| 国产欧美一区二区精品忘忧草 | 欧美大片日本大片免费观看| 26uuu国产电影一区二区| 91在线云播放| 正在播放亚洲一区| 久久久91精品国产一区二区精品 | 精品粉嫩aⅴ一区二区三区四区| 国产欧美一区二区在线| 亚洲午夜免费福利视频| 国产真实精品久久二三区| av激情综合网| 欧美一级午夜免费电影| 国产精品高潮久久久久无| 五月激情综合婷婷| 丰满亚洲少妇av| 欧美精品少妇一区二区三区| 国产亚洲欧洲997久久综合| 亚洲激情图片一区| 国产麻豆精品在线| 欧美日韩国产在线播放网站| 欧美国产日韩精品免费观看| 亚洲a一区二区| av资源网一区| 精品国产一区二区三区久久影院| 亚洲精品国产a久久久久久 | 国产69精品久久777的优势| 欧美日韩国产在线观看| 中文字幕亚洲区| 久久er99热精品一区二区| 欧洲视频一区二区| 亚洲国产成人在线| 精品日韩99亚洲| 一区二区三区日韩欧美| 国产成人在线观看免费网站| 51精品国自产在线| 亚洲乱码国产乱码精品精的特点 | 国产不卡视频在线观看| 欧美一区二区成人6969| 一区二区成人在线| www.日本不卡| 久久精品一二三| 久久激五月天综合精品| 欧美精品黑人性xxxx| 亚洲美女视频在线观看| 成人免费视频国产在线观看| 日韩欧美国产不卡| 日韩国产欧美在线视频| 欧美色电影在线| 亚洲欧美激情一区二区| 成人av午夜电影| 国产三级精品视频| 国产在线一区观看| 欧美大肚乱孕交hd孕妇| 日韩不卡手机在线v区| 欧美少妇xxx| 亚洲综合自拍偷拍| 色菇凉天天综合网| 亚洲精品中文字幕在线观看| 99久久久久久99| 国产精品免费看片| 成人一区二区三区视频| 中文字幕av在线一区二区三区| 国产精品一二三四五| 久久一留热品黄| 国产麻豆精品95视频| 久久久精品黄色| 顶级嫩模精品视频在线看| 久久久av毛片精品| 丰满白嫩尤物一区二区| 国产欧美一区二区三区在线看蜜臀| 国产伦精品一区二区三区视频青涩 | 天天综合色天天| 欧美精品日日鲁夜夜添| 日韩av成人高清| 日韩欧美中文字幕一区| 欧美一区二区三区免费观看视频| 午夜精品免费在线| 4438x成人网最大色成网站| 日本va欧美va欧美va精品| 精品欧美乱码久久久久久1区2区| 激情久久五月天| 国产精品天美传媒| 色综合久久六月婷婷中文字幕| 一区二区三区高清在线| 91精品国产综合久久久久久久久久 | 久久精品亚洲麻豆av一区二区| 国产精品18久久久久久久久| 国产精品每日更新| 在线观看区一区二| 视频一区在线视频| 久久久亚洲精品石原莉奈| www.激情成人| 亚洲网友自拍偷拍| 日韩久久免费av| 成人小视频免费观看| 一区二区三区四区在线播放 | 国产人成亚洲第一网站在线播放 | 国产精品狼人久久影院观看方式| 色狠狠色噜噜噜综合网| 奇米亚洲午夜久久精品| 国产欧美视频在线观看| 欧美影院一区二区三区| 另类小说色综合网站| 国产精品久久久久久久久搜平片 | 99国产一区二区三精品乱码| 亚洲午夜av在线| 精品美女一区二区| 91香蕉视频污| 看电视剧不卡顿的网站| 国产精品麻豆久久久| 91麻豆精品国产91久久久久久久久 | 亚洲午夜激情av| 久久影院午夜论| 91麻豆视频网站| 美女网站一区二区| 亚洲人成网站精品片在线观看| 欧美一区三区二区| 91视频免费播放| 裸体歌舞表演一区二区| 一区二区三区中文字幕电影 | 日本va欧美va精品| 自拍偷拍国产精品| 欧美mv日韩mv亚洲| 欧洲av一区二区嗯嗯嗯啊| 韩国毛片一区二区三区| 亚洲最新视频在线观看| 国产视频一区不卡| 欧美丰满嫩嫩电影| 色综合久久中文综合久久97| 日韩欧美一级特黄在线播放| 色狠狠色狠狠综合| 成人丝袜高跟foot| 美国av一区二区| 亚洲成人精品一区| 中文字幕亚洲区| 久久精品无码一区二区三区| 91精品国产免费久久综合| 色综合久久综合网| 丁香亚洲综合激情啪啪综合| 蜜臀av国产精品久久久久| 亚洲综合区在线| 中文字幕一区不卡| 国产欧美日产一区| 精品国精品自拍自在线| 欧美精品久久一区二区三区| 色综合久久综合网| 99视频国产精品| 成人午夜精品一区二区三区| 久草这里只有精品视频| 日日摸夜夜添夜夜添国产精品| 一区二区三区免费在线观看| 亚洲欧洲精品成人久久奇米网 | 精品一区二区免费在线观看| 亚洲成av人片在线| 亚洲国产精品一区二区尤物区|