<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產(chǎn)品分類

      當(dāng)前位置: 首頁 > 工業(yè)控制產(chǎn)品 > 自動化控制 > 工業(yè)觸摸屏

      類型分類:
      科普知識
      數(shù)據(jù)分類:
      工業(yè)觸摸屏

      觸摸屏的設(shè)備驅(qū)動

      發(fā)布日期:2022-10-09 點(diǎn)擊率:44

      觸摸屏的硬件原理

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

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

      所有的電阻式觸摸屏都采用分壓器原理來產(chǎn)生代表X坐標(biāo)和Y坐標(biāo)的電壓。如圖1所示,分壓器是通過將兩個電阻進(jìn)行串聯(lián)來實(shí)現(xiàn)的。電阻R1連接正參考電壓VREF,電阻R2接地。兩個電阻連接點(diǎn)處的電壓測量值與R2的阻值成正比。


      圖1 電阻觸摸屏分壓

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

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


      圖2 四線電阻式觸摸屏

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

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

       

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

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

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

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

      2.獨(dú)立X/Y位置轉(zhuǎn)換模式(Separate X/Y Position Conversion Mode)

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

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

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

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

      當(dāng)觸摸屏控制器等待中斷模式時,它等待觸摸屏觸點(diǎn)信號的到來。當(dāng)觸點(diǎn)信號到來時,控制器產(chǎn)生INT_TC中斷信號。然后,X位置和Y位置能被適當(dāng)?shù)剞D(zhuǎn)換模式(獨(dú)立X/Y位置轉(zhuǎn)換模式或自動X/Y位置轉(zhuǎn)換模式)讀取到。

      5.待機(jī)模式(Standby Mode)

      當(dāng)ADCCON寄存器的STDBM位置1時,待機(jī)模式被激活。在這種模式下,A/D轉(zhuǎn)換動作被禁止,ADCDAT0的XPDATA位和ADXDATA1的YPDAT保留以前被轉(zhuǎn)換的數(shù)據(jù)。

      觸摸屏設(shè)備驅(qū)動中數(shù)據(jù)結(jié)構(gòu)

      觸摸屏設(shè)備結(jié)構(gòu)體的成員與按鍵設(shè)備結(jié)構(gòu)體的成員類似,也包含一個緩沖區(qū),同時包括自旋鎖、等待隊(duì)列和fasync_struct指針,如代碼清單12.12所示。

      代碼清單12.12  觸摸屏設(shè)備結(jié)構(gòu)體

      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;
       
      觸摸屏結(jié)構(gòu)體中包含的TS_RET值的類型定義如代碼清單12.13所示,包含X、Y坐標(biāo)和狀態(tài)(PEN_DOWN、PEN_UP)等信息,這個信息會在用戶讀取觸摸信息時復(fù)制到用戶空間。

      代碼清單12.13  TS_RET結(jié)構(gòu)體

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

      代碼清單12.14 觸摸屏驅(qū)動文件操作結(jié)構(gòu)體

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

      觸摸屏驅(qū)動中的硬件控制

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

      代碼清單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); }
       
      觸摸屏驅(qū)動模塊加載和卸載函數(shù)

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

      代碼清單12.16  觸摸屏設(shè)備驅(qū)動的模塊加載函數(shù)

      1  static int __init s3c2410_ts_init(void)
      2  {
      3    int ret;
      4    tsEvent = tsEvent_dummy;
      5    ...//申請?jiān)O(shè)備號,添加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 }
       
      在觸摸屏設(shè)備驅(qū)動的模塊卸載函數(shù)中,要完成釋放設(shè)備號、刪除cdev、釋放中斷等工作,如代碼清單12.17所示。

      代碼清單12.17 觸摸屏設(shè)備驅(qū)動模塊卸載函數(shù)

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

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

      代碼清單12.18  觸摸屏設(shè)備驅(qū)動的觸點(diǎn)/抬起中斷處理程序

      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位置轉(zhuǎn)換
      7    }
      8    else
      9    {
      10     tsdev.penStatus = PEN_UP;
      11     DPRINTK("PEN UP: x: %08d, y: %08d ", x, y);
      12     wait_down_int();//置于等待觸點(diǎn)中斷模式
      13     tsEvent();
      14   }
      15   spin_unlock_irq(&(tsdev.lock));
      16 }
       
      當(dāng)X/Y位置轉(zhuǎn)換中斷發(fā)生后,應(yīng)讀取X、Y的坐標(biāo)值,填入緩沖區(qū),如代碼清單12.19所示。

      代碼清單12.19 觸摸屏設(shè)備驅(qū)動X/Y位置轉(zhuǎn)換中斷處理程序

      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(); //讀取坐標(biāo)
      6    #ifdef HOOK_FOR_DRAG
      7      else
      8        s3c2410_get_XY();
      9    #endif
      10   spin_unlock_irq(&(tsdev.lock));
      11 }

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

      代碼清單12.20 觸摸屏設(shè)備驅(qū)動中獲得X、Y坐標(biāo)

      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); //讀取坐標(biāo)值
      8      mode_y_axis();
      9      start_adc_y();   //開始y位置轉(zhuǎn)換
      10   }
      11   else if (adc_state == 1)
      12   {
      13     adc_state = 0;
      14     disable_ts_adc(); //禁止INT-ADC
      15     x = (ADCDAT1 &0x3ff);  //讀取坐標(biāo)值
      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中調(diào)用的tsEvent最終為tsEvent_raw(),這個函數(shù)很關(guān)鍵,當(dāng)處于PEN_DOWN狀態(tài)時調(diào)用該函數(shù),它會完成緩沖區(qū)的填充、等待隊(duì)列的喚醒以及異步通知信號的釋放;否則(處于PEN_UP狀態(tài)),將緩沖區(qū)頭清0,也喚醒等待隊(duì)列并釋放信號,如代碼清單12.21所示。

      代碼清單12.21 觸摸屏設(shè)備驅(qū)動的tsEvent_raw()函數(shù)

      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));  //喚醒等待隊(duì)列
      29
      30   #ifdef USE_ASYNC
      31     if (tsdev.aq)
      32       kill_fasync(&(tsdev.aq), SIGIO, POLL_IN);//異步通知
      33   #endif
      34 }

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

      代碼清單12.22 觸摸屏設(shè)備驅(qū)動的定時器處理函數(shù)

      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位置轉(zhuǎn)換
      8      }
      9      spin_unlock_irq(&(tsdev.lock));
      10   }
      11 #endif
       
      觸摸屏設(shè)備驅(qū)動的打開、釋放函數(shù)

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

      代碼清單12.23  觸摸屏設(shè)備驅(qū)動的打開函數(shù)

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

      代碼清單12.24 觸摸屏設(shè)備驅(qū)動的釋放函數(shù)

      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 } 
       
      觸摸屏設(shè)備驅(qū)動的讀函數(shù)

      觸摸屏設(shè)備驅(qū)動的讀函數(shù)實(shí)現(xiàn)緩沖區(qū)中信息向用戶空間的復(fù)制,當(dāng)緩沖區(qū)有內(nèi)容時,直接復(fù)制;否則,如果用戶阻塞訪問觸摸屏,則進(jìn)程在等待隊(duì)列上睡眠,否則,立即返回-EAGAIN,如代碼清單12.25所示。

      代碼清單12.25  觸摸屏設(shè)備驅(qū)動的讀函數(shù)

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

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

      代碼清單12.26  觸摸屏設(shè)備驅(qū)動的poll()函數(shù)

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

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

      代碼清單12.27 觸摸屏設(shè)備驅(qū)動的fasync()函數(shù)

      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三大控

      上一篇: 基于光學(xué)原理的多點(diǎn)觸

      主站蜘蛛池模板: 一本久到久久亚洲综合| 亚洲色偷偷综合亚洲AVYP| 97色伦图片97综合影院久久| 亚洲五月综合缴情在线观看| 色综合久久综合网观看| 亚洲狠狠婷婷综合久久| 99久久国产综合精品女同图片| 婷婷色香五月综合激激情| 亚洲日韩久久综合中文字幕| 久久综合五月丁香久久激情| 亚洲综合中文字幕无线码| 色久悠悠婷婷综合在线亚洲| 亚洲综合一区无码精品| 色噜噜狠狠成人中文综合| 色婷婷色综合激情国产日韩| 狠狠色狠狠色综合日日五| 天天躁夜夜躁狂狂躁综合| 久久精品综合电影| 精品国产国产综合精品 | 国产色综合天天综合网| 亚洲精品第一国产综合亚AV| 亚洲国产精品成人综合久久久 | 一本色道久久综合一区| 色综合久久天天综合观看| 99久久综合精品国产| 97se亚洲综合在线| 久久青青草原综合伊人| 九九久久99综合一区二区| 激情综合色五月丁香六月亚洲| 久久综合亚洲色hezyo| 色婷婷99综合久久久精品 | 国产成人亚洲综合无码| 一本色道久久88亚洲综合| 久久综合伊人77777| 久久99精品综合国产首页| 亚洲啪啪综合AV一区| 色综合中文综合网| 一本久道久久综合狠狠躁| 思思91精品国产综合在线 | 色噜噜狠狠狠狠色综合久不| 色综合99久久久无码国产精品 |