美女网站一区二区_在线观看日韩毛片_成人在线视频首页_欧美精品一区二区三区久久久_国产精品亚洲一区二区三区在线_日本免费新一区视频_日本美女一区二区三区_精品亚洲成a人_久久不见久久见免费视频1_91首页免费视频_欧美一区二区在线看_91精品91久久久中77777_天堂蜜桃一区二区三区_av在线一区二区_欧美不卡一区二区_欧美影视一区二区三区

產品分類

當前位置: 首頁 > 工業控制產品 > 自動化控制 > 工業觸摸屏

類型分類:
科普知識
數據分類:
工業觸摸屏

觸摸屏的設備驅動

發布日期:2022-10-09 點擊率:60

觸摸屏的硬件原理

按照觸摸屏的工作原理和傳輸信息的介質,我們把觸摸屏分為4種:電阻式、電容感應式、紅外線式以及表面聲波式。

電阻式觸摸屏利用壓力感應進行控制,包含上下疊合的兩個透明層,通常還要用一種彈性材料來將兩層隔開。在觸摸某點時,兩層會在此點接通。四線和八線觸摸屏由兩層具有相同表面電阻的透明阻性材料組成,五線和七線觸摸屏由一個阻性層和一個導電層組成。

所有的電阻式觸摸屏都采用分壓器原理來產生代表X坐標和Y坐標的電壓。如圖1所示,分壓器是通過將兩個電阻進行串聯來實現的。電阻R1連接正參考電壓VREF,電阻R2接地。兩個電阻連接點處的電壓測量值與R2的阻值成正比。


圖1 電阻觸摸屏分壓

為了在電阻式觸摸屏上的特定方向測量一個坐標,需要對一個阻性層進行偏置:將它的一邊接VREF,另一邊接地。同時,將未偏置的那一層連接到一個ADC的高阻抗輸入端。當觸摸屏上的壓力足夠大,兩層之間發生接觸時,電阻性表面被分隔為兩個電阻。它們的阻值與觸摸點到偏置邊緣的距離成正比。觸摸點與接地邊之間的電阻相當于分壓器中下面的那個電阻。因此,在未偏置層上測得的電壓與觸摸點到接地邊之間的距離成正比。

四線觸摸屏包含兩個阻性層。其中一層在屏幕的左右邊緣各有一條垂直總線,另一層在屏幕的底部和頂部各有一條水平總線,如圖2所示。為了在X軸方向進行測量,將左側總線偏置為0V,右側總線偏置為VREF。將頂部或底部總線連接到ADC,當頂層和底層相接觸時即可作一次測量。為了在Y軸方向進行測量,將頂部總線偏置為VREF,底部總線偏置為0V。將ADC輸入端接左側總線或右側總線,當頂層與底層相接觸時即可對電壓進行測量。


圖2 四線電阻式觸摸屏

S3C2410接4線電阻式觸摸屏的電路原理如圖3所示。S3C2410提供了nYMON、YMON、nXPON和XMON直接作為觸摸屏的控制信號,它通過連接FDC6321場效應管觸摸屏驅動器控制觸摸屏。輸入信號在經過阻容式低通濾器濾除坐標信號噪聲后被接入S3C2410內集成的ADC(模數轉換器)的模擬信號輸入通道AIN5、AIN7。

S3C2410內置了一個8信道的10位ADC,該ADC能以500KS/S的采樣速率將外部的模擬信號轉換為10位分辨率的數字量。因此,ADC能與觸摸屏控制器協同工作,完成對觸摸屏絕對地址的測量。

 

圖3 S3C2410連接4線電阻式觸摸屏
 

S3C2410的ADC和觸摸屏接口可工作于5種模式,分別如下:

1.普通轉換模式(Normal Converson Mode)

普通轉換模式(AUTO_PST = 0,XY_PST = 0)用來進行一般的ADC轉換,例如通過ADC測量電池電壓等。

2.獨立X/Y位置轉換模式(Separate X/Y Position Conversion Mode)

獨立X/Y軸坐標轉換模式其實包含了X軸模式和Y軸模式。為獲得X、Y坐標,需首先進行X軸的坐標轉換(AUTO_PST = 0,XY_PST = 1),X軸的轉換資料會寫到ADCDAT0寄存器的XPDAT中,等待轉換完成后,觸摸屏控制器會產生INT_ADC中斷。然后,進行Y軸的坐標轉換(AUTO_PST = 0,XY_PST = 2),Y軸的轉換資料會寫到ADCDAT1寄存器的YPDAT中,等待轉換完成后,觸摸屏控制器也會產生INT_ADC中斷。

3.自動(連續)X/Y位置轉換模式(Auto X/Y Position Conversion Mode)

自動(連續)X/Y位置轉換模式(AUTO_PST = 1,XY_PST = 0)運行方式是觸摸屏控制自動轉換X位置和Y位置。觸摸屏控制器在ADCDAT0的XPDATA位寫入X測定數據,在ADCDAT1的YPADATA位寫入Y測定數據。自動(連續)位置轉換后,觸摸屏控制器產生INT_ADC中斷。

4.等待中斷模式(Wait for Interrupt Mode)

當觸摸屏控制器等待中斷模式時,它等待觸摸屏觸點信號的到來。當觸點信號到來時,控制器產生INT_TC中斷信號。然后,X位置和Y位置能被適當地轉換模式(獨立X/Y位置轉換模式或自動X/Y位置轉換模式)讀取到。

5.待機模式(Standby Mode)

當ADCCON寄存器的STDBM位置1時,待機模式被激活。在這種模式下,A/D轉換動作被禁止,ADCDAT0的XPDATA位和ADXDATA1的YPDAT保留以前被轉換的數據。

觸摸屏設備驅動中數據結構

觸摸屏設備結構體的成員與按鍵設備結構體的成員類似,也包含一個緩沖區,同時包括自旋鎖、等待隊列和fasync_struct指針,如代碼清單12.12所示。

代碼清單12.12  觸摸屏設備結構體

1  typedef struct
2  {
3    unsigned int penStatus;
4    TS_RET buf[MAX_TS_BUF];
5    unsigned int head, tail;
6    wait_queue_head_t wq;
7    spinlock_t lock;
8    #ifdef USE_ASYNC
9      struct fasync_struct *aq;
10   #endif
11   struct cdev cdev;
12 } TS_DEV;
 
觸摸屏結構體中包含的TS_RET值的類型定義如代碼清單12.13所示,包含X、Y坐標和狀態(PEN_DOWN、PEN_UP)等信息,這個信息會在用戶讀取觸摸信息時復制到用戶空間。

代碼清單12.13  TS_RET結構體

1 typedef struct
2 {
3   unsigned short pressure;//PEN_DOWN、PEN_UP
4   unsigned short x;//x坐標
5   unsigned short y;//y坐標
6   unsigned short pad;
7 } TS_RET;
 
在觸摸屏設備驅動中,將實現open()、release()、read()、fasync()和poll()函數,因此,其文件操作結構體定義如代碼清單12.14所示。

代碼清單12.14 觸摸屏驅動文件操作結構體

1  static struct file_operations s3c2410_fops =
2  {
3    owner: THIS_MODULE,
4    open: s3c2410_ts_open, //打開
5    read: s3c2410_ts_read, //讀坐標
6    release:
7      s3c2410_ts_release,
8    #ifdef USE_ASYNC
9      fasync: s3c2410_ts_fasync, // fasync()函數
10   #endif
11   poll: s3c2410_ts_poll,//輪詢
12 };

觸摸屏驅動中的硬件控制

代碼清單12.15中的一組宏用于控制觸摸屏和ADC進入不同的工作模式,如等待中斷、X/Y位置轉換等。

代碼清單12.15  觸摸屏和ADC硬件控制

1  #define wait_down_int(){ ADCTSC = DOWN_INT | XP_PULL_UP_EN |
2  XP_AIN | XM_HIZ | YP_AIN | YM_GND |
3  XP_PST(WAIT_INT_MODE); }
4  #define wait_up_int(){ ADCTSC = UP_INT | XP_PULL_UP_EN | XP_AIN |
5  XM_HIZ |YP_AIN | YM_GND | XP_PST(WAIT_INT_MODE); }
6  #define mode_x_axis(){ ADCTSC = XP_EXTVLT | XM_GND | YP_AIN 
7  | YM_HIZ |XP_PULL_UP_DIS | XP_PST(X_AXIS_MODE); }
8  #define mode_x_axis_n(){ ADCTSC = XP_EXTVLT | XM_GND | YP_AIN |
9   YM_HIZ |XP_PULL_UP_DIS | XP_PST(NOP_MODE); }
10 #define mode_y_axis(){ ADCTSC = XP_AIN | XM_HIZ | YP_EXTVLT 
11 | YM_GND |XP_PULL_UP_DIS | XP_PST(Y_AXIS_MODE); }
12 #define start_adc_x(){ ADCCON = PRESCALE_EN | PRSCVL(49) |
13 ADC_INPUT(ADC_IN5) | ADC_START_BY_RD_EN |
14 ADC_NORMAL_MODE;
15   ADCDAT0; }
16 #define start_adc_y(){ ADCCON = PRESCALE_EN | PRSCVL(49) |
17 ADC_INPUT(ADC_IN7) | ADC_START_BY_RD_EN |
18 ADC_NORMAL_MODE;
19   ADCDAT1; }
20 #define disable_ts_adc(){ ADCCON &= ~(ADCCON_READ_START); }
 
觸摸屏驅動模塊加載和卸載函數

在觸摸屏設備驅動的模塊加載函數中,要完成申請設備號、添加cdev、申請中斷、設置觸摸屏控制引腳(YPON、YMON、XPON、XMON)等多項工作,如代碼清單12.16所示。

代碼清單12.16  觸摸屏設備驅動的模塊加載函數

1  static int __init s3c2410_ts_init(void)
2  {
3    int ret;
4    tsEvent = tsEvent_dummy;
5    ...//申請設備號,添加cdev

7   
8    set_gpio_ctrl(GPIO_YPON);
9    set_gpio_ctrl(GPIO_YMON);
10   set_gpio_ctrl(GPIO_XPON);
11   set_gpio_ctrl(GPIO_XMON);
12
13  
14   ret = request_irq(IRQ_ADC_DONE, s3c2410_isr_adc,
15     SA_INTERRUPT, DEVICE_NAME,s3c2410_isr_adc);
16   if (ret)
17     goto adc_failed;
18   ret = request_irq(IRQ_TC, s3c2410_isr_tc, SA_INTERRUPT,
19     DEVICE_NAME,s3c2410_isr_tc);
20   if (ret)
21     goto tc_failed;
22
23  
24   wait_down_int();
25
26   printk(DEVICE_NAME " initialized ");
27
28   return 0;
29   tc_failed:
30   free_irq(IRQ_ADC_DONE, s3c2410_isr_adc);
31   adc_failed:
32   return ret;
33 }
 
在觸摸屏設備驅動的模塊卸載函數中,要完成釋放設備號、刪除cdev、釋放中斷等工作,如代碼清單12.17所示。

代碼清單12.17 觸摸屏設備驅動模塊卸載函數

1 static void __exit s3c2410_ts_exit(void)
2 {
3 ...//釋放設備號,刪除cdev
4 free_irq(IRQ_ADC_DONE, s3c2410_isr_adc);
5 free_irq(IRQ_TC, s3c2410_isr_tc);
6 }
 
觸摸屏驅動中斷、定時器處理程序

由文章開頭對觸摸屏和ADC模式的分析,可知觸摸屏驅動中會產生兩類中斷,一類是觸點中斷(INT-TC),一類是X/Y位置轉換中斷(INT-ADC)。在前一類中斷發生后,若之前處于PEN_UP狀態,則應該啟動X/Y位置轉換。另外,將抬起中斷也放在INT-TC處理程序中,它會調用tsEvent()完成等待隊列和信號的釋放,如代碼清單12.18所示。

代碼清單12.18  觸摸屏設備驅動的觸點/抬起中斷處理程序

1  static void s3c2410_isr_tc(int irq, void *dev_id, struct pt_regs *reg)
2  {
3    spin_lock_irq(&(tsdev.lock));
4    if (tsdev.penStatus == PEN_UP)
5    {
6      start_ts_adc(); //開始X/Y位置轉換
7    }
8    else
9    {
10     tsdev.penStatus = PEN_UP;
11     DPRINTK("PEN UP: x: %08d, y: %08d ", x, y);
12     wait_down_int();//置于等待觸點中斷模式
13     tsEvent();
14   }
15   spin_unlock_irq(&(tsdev.lock));
16 }
 
當X/Y位置轉換中斷發生后,應讀取X、Y的坐標值,填入緩沖區,如代碼清單12.19所示。

代碼清單12.19 觸摸屏設備驅動X/Y位置轉換中斷處理程序

1  static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg)
2  {
3    spin_lock_irq(&(tsdev.lock));
4    if (tsdev.penStatus == PEN_UP)
5      s3c2410_get_XY(); //讀取坐標
6    #ifdef HOOK_FOR_DRAG
7      else
8        s3c2410_get_XY();
9    #endif
10   spin_unlock_irq(&(tsdev.lock));
11 }

上述程序中調用的s3c2410_get_XY()用于獲得X、Y坐標,它使用代碼清單12.15的硬件操作宏實現,如代碼清單12.20所示。

代碼清單12.20 觸摸屏設備驅動中獲得X、Y坐標

1  static inline void s3c2410_get_XY(void)
2  {
3    if (adc_state == 0)
4    {
5      adc_state = 1;
6      disable_ts_adc();   //禁止INT-ADC
7      y = (ADCDAT0 &0x3ff); //讀取坐標值
8      mode_y_axis();
9      start_adc_y();   //開始y位置轉換
10   }
11   else if (adc_state == 1)
12   {
13     adc_state = 0;
14     disable_ts_adc(); //禁止INT-ADC
15     x = (ADCDAT1 &0x3ff);  //讀取坐標值
16     tsdev.penStatus = PEN_DOWN;
17     DPRINTK("PEN DOWN: x: %08d, y: %08d ", x, y);
18     wait_up_int();   //置于等待抬起中斷模式
19     tsEvent();
20   }
21 }
 
代碼清單12.18、12.20中調用的tsEvent最終為tsEvent_raw(),這個函數很關鍵,當處于PEN_DOWN狀態時調用該函數,它會完成緩沖區的填充、等待隊列的喚醒以及異步通知信號的釋放;否則(處于PEN_UP狀態),將緩沖區頭清0,也喚醒等待隊列并釋放信號,如代碼清單12.21所示。

代碼清單12.21 觸摸屏設備驅動的tsEvent_raw()函數

1  static void tsEvent_raw(void)
2  {
3    if (tsdev.penStatus == PEN_DOWN)
4    {
5     
6      BUF_HEAD.x = x;
7      BUF_HEAD.y = y;
8      BUF_HEAD.pressure = PEN_DOWN;

10     #ifdef HOOK_FOR_DRAG
11       ts_timer.expires = jiffies + TS_TIMER_DELAY;
12       add_timer(&ts_timer);//啟動定時器
13     #endif
14   }
15   else
16   {
17     #ifdef HOOK_FOR_DRAG
18       del_timer(&ts_timer);
19     #endif
20
21    
22     BUF_HEAD.x = 0;
23     BUF_HEAD.y = 0;
24     BUF_HEAD.pressure = PEN_UP;
25   }
26
27   tsdev.head = INCBUF(tsdev.head, MAX_TS_BUF);
28   wake_up_interruptible(&(tsdev.wq));  //喚醒等待隊列
29
30   #ifdef USE_ASYNC
31     if (tsdev.aq)
32       kill_fasync(&(tsdev.aq), SIGIO, POLL_IN);//異步通知
33   #endif
34 }

在包含了對拖動軌跡支持的情況下,定時器會被啟用,周期為10ms,在每次定時器處理函數被引發時,調用start_ts_adc()開始X/Y位置轉換過程,如代碼清單12.22所示。

代碼清單12.22 觸摸屏設備驅動的定時器處理函數

1  #ifdef HOOK_FOR_DRAG
2    static void ts_timer_handler(unsigned long data)
3    {
4      spin_lock_irq(&(tsdev.lock));
5      if (tsdev.penStatus == PEN_DOWN)
6      {
7        start_ts_adc();  //開始X/Y位置轉換
8      }
9      spin_unlock_irq(&(tsdev.lock));
10   }
11 #endif
 
觸摸屏設備驅動的打開、釋放函數

在觸摸屏設備驅動的打開函數中,應初始化緩沖區、penStatus和定期器、等待隊列及tsEvent時間處理函數指針,如代碼清單12.23所示。

代碼清單12.23  觸摸屏設備驅動的打開函數

1  static int s3c2410_ts_open(struct inode *inode, struct file *filp)
2  {
3  tsdev.head = tsdev.tail = 0;
4  tsdev.penStatus = PEN_UP;//初始化觸摸屏狀態為PEN_UP
5  #ifdef HOOK_FOR_DRAG //如果定義了拖動鉤子函數
6  init_timer(&ts_timer);//初始化定時器
7  ts_timer.function = ts_timer_handler;
8  #endif
9  tsEvent = tsEvent_raw;
10 init_waitqueue_head(&(tsdev.wq));//初始化等待隊列
11
12 return 0;
13 }
 
觸摸屏設備驅動的釋放函數非常簡單,刪除為用于拖動軌跡所使用的定時器即可,如代碼清單12.24所示。

代碼清單12.24 觸摸屏設備驅動的釋放函數

1 static int s3c2410_ts_release(struct inode *inode, struct file *filp)
2 {
3   #ifdef HOOK_FOR_DRAG
4     del_timer(&ts_timer);//刪除定時器
5   #endif
6   return 0;
7 } 
 
觸摸屏設備驅動的讀函數

觸摸屏設備驅動的讀函數實現緩沖區中信息向用戶空間的復制,當緩沖區有內容時,直接復制;否則,如果用戶阻塞訪問觸摸屏,則進程在等待隊列上睡眠,否則,立即返回-EAGAIN,如代碼清單12.25所示。

代碼清單12.25  觸摸屏設備驅動的讀函數

1  static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count,
2    loff_t *ppos)
3  {
4    TS_RET ts_ret;

6    retry:
7    if (tsdev.head != tsdev.tail)  //緩沖區有信息
8    {
9      int count;
10     count = tsRead(&ts_ret);
11     if (count)
12       copy_to_user(buffer, (char*) &ts_ret, count);//復制到用戶空間
13     return count;
14   }
15   else
16   {
17     if (filp->f_flags &O_NONBLOCK)    //非阻塞讀
18       return  - EAGAIN;
19     interruptible_sleep_on(&(tsdev.wq));  //在等待隊列上睡眠
20     if (signal_pending(current))
21       return  - ERESTARTSYS;
22     goto retry;
23   }
24
25   return sizeof(TS_RET);
26 }
 
觸摸屏設備驅動的輪詢與異步通知

在觸摸屏設備驅動中,通過s3c2410_ts_poll()函數實現了輪詢接口,這個函數的實現非常簡單。它將等待隊列添加到poll_table,當緩沖區有數據時,返回資源可讀取標志,否則返回0,如代碼清單12.26所示。

代碼清單12.26  觸摸屏設備驅動的poll()函數

1 static unsigned int s3c2410_ts_poll(struct file *filp, struct poll_table_struct *wait)
2 {
3 poll_wait(filp, &(tsdev.wq), wait);//添加等待隊列到poll_table
4 return (tsdev.head == tsdev.tail) ? 0 : (POLLIN | POLLRDNORM);
5 }

而為了實現觸摸屏設備驅動對應用程序的異步通知,設備驅動中要實現s3c2410_ts_fasync()函數,這個函數與第9章給出的模板完全一樣,如代碼清單12.27所示。

代碼清單12.27 觸摸屏設備驅動的fasync()函數

1 #ifdef USE_ASYNC
2 static int s3c2410_ts_fasync(int fd, struct file *filp, int mode)
3 {
4 return fasync_helper(fd, filp, mode, &(tsdev.aq));
5 }
6 #endif


下一篇: PLC、DCS、FCS三大控

上一篇: 基于光學原理的多點觸

美女网站一区二区_在线观看日韩毛片_成人在线视频首页_欧美精品一区二区三区久久久_国产精品亚洲一区二区三区在线_日本免费新一区视频_日本美女一区二区三区_精品亚洲成a人_久久不见久久见免费视频1_91首页免费视频_欧美一区二区在线看_91精品91久久久中77777_天堂蜜桃一区二区三区_av在线一区二区_欧美不卡一区二区_欧美影视一区二区三区


        美国十次了思思久久精品导航| 337p粉嫩大胆噜噜噜噜噜91av| 99在线国产| 成人性生交大合| 国产成人av在线影院| 国产精品69久久久久水密桃| 看片的网站亚洲| 精品无码三级在线观看视频| 黑人巨大精品欧美一区| 狠狠网亚洲精品| 国产精品一区二区久激情瑜伽| 国产精品一区二区三区四区| 成人精品视频一区二区三区| 91亚洲精品丁香在线观看| 成人欧美一区二区三区视频| 乱一区二区三区在线播放| 日韩理论片在线观看| 伊人婷婷久久| 777色狠狠一区二区三区| 欧美不卡在线视频| 国产精品久久久久7777按摩 | 久久精品国产理论片免费| 蜜桃麻豆www久久国产精品| 亚洲一区3d动漫同人无遮挡| 欧美日韩一区中文字幕| 日韩欧美国产综合| 国产日韩精品一区二区三区在线| 一区二区三区在线播放| 老司机免费视频一区二区三区| 成人一级黄色片| 久久久久国产精品视频| 欧美亚洲动漫精品| 国产视频一区在线观看| 婷婷六月综合网| www.av精品| 在线观看成人一级片| 日韩欧美第一区| 一区二区三区四区精品在线视频 | 精品国产亚洲在线| 亚洲精品福利视频网站| 精品影视av免费| 国产视色精品亚洲一区二区| 影音先锋亚洲视频| 国产日韩欧美高清| 麻豆一区二区三| 岛国视频一区| 91国偷自产一区二区开放时间| 久久久无码精品亚洲日韩按摩| 亚洲成人激情社区| 97se狠狠狠综合亚洲狠狠| 亚洲国产欧洲综合997久久| 日韩欧美国产午夜精品| 亚洲图片欧美色图| 91丨国产丨九色丨pron| 欧美做爰猛烈大尺度电影无法无天| 国产免费成人在线视频| 国产一区二区三区美女| 久久香蕉综合色| 日韩精品一区二区三区在线| 亚洲福利一区二区| 国产成人精品福利一区二区三区| 欧美亚男人的天堂| 亚洲乱码中文字幕综合| 成人免费视频视频在线观看免费| 日本公妇乱淫免费视频一区三区| 日韩美一区二区三区| 日韩在线a电影| 久精品国产欧美| 亚洲精品一区二区精华| 久久国产日韩欧美精品| 日韩欧美视频一区二区| 日本一区二区三区久久久久久久久不| 国产在线观看一区二区| 亚洲 日韩 国产第一区| 久久免费电影网| 国产一区二区三区免费| 日本久久电影网| 亚洲午夜久久久| 欧美精品国产精品久久久| 国产亚洲精品资源在线26u| 成人影视亚洲图片在线| 欧美性生活久久| 日韩激情在线观看| 视频在线观看成人| 亚洲精品成a人| 久久国产精品一区二区三区四区 | 亚洲曰韩产成在线| 久久涩涩网站| 亚洲欧洲日产国产综合网| 91麻豆免费观看| 26uuu久久天堂性欧美| 国产精品18久久久久久久网站| 日本丰满少妇一区二区三区| 亚洲成人自拍网| 视频一区二区三| 亚洲一区二区三区三| 蜜桃av噜噜一区二区三区| 中文字幕在线观看不卡| 久久一区免费| 亚洲欧美激情在线| 欧美不卡三区| 亚洲一区免费视频| 神马影院午夜我不卡影院| 亚洲精品日韩专区silk| 欧美精品v日韩精品v国产精品| 中文字幕在线播放不卡一区| 国内视频一区二区| 国产精品国产自产拍在线| 痴汉一区二区三区| 久久久久久久久久久99999| 成人黄色电影在线| 欧美日韩在线播放| 国产精品123区| 国产精品一区二区欧美| 中文在线一区二区| 久久国产精品精品国产色婷婷| 国产视频一区在线播放| 91九色极品视频| 中文字幕在线播放不卡一区| 日韩精品不卡| 日韩va欧美va亚洲va久久| 欧美色手机在线观看| 国产不卡在线一区| 久久亚洲一级片| 欧美不卡在线一区二区三区| 天堂久久一区二区三区| 8v天堂国产在线一区二区| 99国产精品久久久久久久久久| 国产精品美日韩| 亚洲精品欧美精品| 国内欧美视频一区二区 | 亚洲动漫第一页| 欧美日韩三级一区| 91在线国内视频| 一区二区三区免费| 欧美中文字幕一区二区三区 | aaa欧美大片| 亚洲婷婷综合久久一本伊一区 | 91麻豆成人久久精品二区三区| 国产精品丝袜91| 亚洲一区二区高清视频| 国产一区二区在线看| 久久久久久久久久久99999| 欧美一区二区在线| 国产自产高清不卡| 国产欧美精品一区二区三区四区 | 久久久久久艹| 久久99蜜桃精品| 国产精品美女久久久久久| 一本一道久久久a久久久精品91| 国产精品18久久久久久vr| 国产亚洲精品自在久久| 免费欧美日韩国产三级电影| 欧美不卡在线视频| 伊人久久婷婷色综合98网| aaa亚洲精品| 天天色综合成人网| 久久亚洲精精品中文字幕早川悠里 | 日本一区二区三区在线不卡| 亚洲精品电影在线一区| 国产**成人网毛片九色 | 欧美国产一区二区在线| 国产在线观看一区二区| 亚洲男人的天堂一区二区| 制服.丝袜.亚洲.中文.综合| 国产综合色一区二区三区| 国模冰冰炮一区二区| 亚洲欧美日韩国产一区二区三区| 欧美美女黄视频| 日产国产精品精品a∨| 波多野结衣中文字幕一区二区三区| 亚洲国产精品自拍| 欧美—级在线免费片| 3atv一区二区三区| 亚洲女人毛片| 久久99精品久久久久子伦| 福利一区在线观看| 日韩精品一级中文字幕精品视频免费观看 | 狠狠狠色丁香婷婷综合激情| 国产精品国产三级国产有无不卡| 欧美专区日韩专区| 日本精品一区| 国产伦理久久久| 高清视频一区二区| 久久精品国产一区二区三| 一区二区三区精品在线观看| 久久婷婷国产综合精品青草 | 日韩精品中午字幕| 中文字幕日韩精品一区二区| 精品综合久久久| 3d蒂法精品啪啪一区二区免费| 精品亚洲成a人在线观看 | 91女神在线视频| 国产精品1区2区3区在线观看| 日本sm残虐另类| 亚洲一区二区三区视频在线 | 9191精品国产综合久久久久久| 亚洲欧洲精品一区二区| 欧美日韩一区二区三区在线观看免 | 免费精品视频最新在线|