精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux input子系統編程、分析與模板

系統 Linux 系統運維
input對象描述了一個輸入設備,包括它可能上報的事件,這些事件使用位圖來描述,內核提供的相應的工具幫助我們構建一個input對象,大家可以參考內核文檔"Documentation/input/input-programming.txt",里面對于input子系統的使用有詳細的描述。

輸入設備都有共性:中斷驅動+字符IO,基于分層的思想,Linux內核將這些設備的公有的部分提取出來,基于cdev提供接口,設計了輸入子系統,所有使用輸入子系統構建的設備都使用主設備號13,同時輸入子系統也支持自動創建設備文件,這些文件采用阻塞的IO讀寫方式,被創建在"/dev/input/"下。如下圖所示。內核中的輸入子系統自底向上分為設備驅動層,輸入核心層,事件處理層。由于每種輸入的設備上報的事件都各有不同,所以為了應用層能夠很好識別上報的事件,內核中也為應用層封裝了標準的接口來描述一個事件,這些接口在"/include/upai/linux/input"中。

  • 設備驅動層是具體硬件相關的實現,也是驅動開發中主要完成的部分,
  • 輸入核心層主要提供一些API供設備驅動層調用,通過這些API設備驅動層上報的數據就可以傳遞到事件處理層,
  • 事件處理層負責創建設備文件以及將上報的事件傳遞到用戶空間, 

 

 

 

input的使用

input對象描述了一個輸入設備,包括它可能上報的事件,這些事件使用位圖來描述,內核提供的相應的工具幫助我們構建一個input對象,大家可以參考內核文檔"Documentation/input/input-programming.txt",里面對于input子系統的使用有詳細的描述。

  1. //input設備對象 
  2.  struct input_dev { 
  3.          const char *name
  4.          unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; 
  5.          unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; 
  6.          unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; 
  7.          unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; 
  8.          unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; 
  9.          unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; 
  10.          unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; 
  11.          unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; 
  12.          unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; 
  13.   
  14.          unsigned long key[BITS_TO_LONGS(KEY_CNT)]; 
  15.          unsigned long led[BITS_TO_LONGS(LED_CNT)]; 
  16.          unsigned long snd[BITS_TO_LONGS(SND_CNT)]; 
  17.          unsigned long sw[BITS_TO_LONGS(SW_CNT)]; 
  18.   
  19.          struct input_handle __rcu *grab; 
  20.   
  21.          struct device dev; 
  22.   
  23.          struct list_head        h_list; 
  24.          struct list_head        node; 
  25.  }; 

struct input_dev

--122--> 這個name不是設備名,input子系統的設備名在子系統源碼中指定的,不是這。

--129--> 設備支持的輸入事件位圖,EV_KEY,EV_REL, etc

--130--> 對于按鍵事件,設備支持的輸入子事件位圖

--132--> 對于相對坐標事件,設備支持的相對坐標子事件位圖

--133--> 對于絕對坐標事件,設備支持的絕對坐標子事件位圖

--134--> 混雜設備的支持的子事件位圖

--180-->表示這是一個device。

--182-->h_list是用來鏈接相關handle的鏈表

--183-->node用來鏈接其他input_dev的鏈表

分配/釋放

  1. //drivers/input/input.c 
  2. //創建一個input對象 
  3.  
  4. struct input_dev *input_allocate_device(void);//釋放一個input對象 
  5.  
  6. void input_free_device(struct input_dev *dev); 

初始化

初始化一個input對象是使用input子系統編寫驅動的主要工作,內核在頭文件"include/uapi/linux/input.h"中規定了一些常見輸入設備的常見的輸入事件,這些宏和數組就是我們初始化input對象的工具。這些宏同時用在用戶空間的事件解析和驅動的事件注冊,可以看作是驅動和用戶空間的通信協議,所以理解其中的意義十分重要。在input子系統中,每一個事件的發生都使用事件(type)->子事件(code)->值(value)三級來描述,比如,按鍵事件->按鍵F1子事件->按鍵F1子事件觸發的值是高電平1。注意,事件和子事件和值是相輔相成的,只有注冊了事件EV_KEY,才可以注冊子事件BTN_0,也只有這樣做才是有意義的。

下面就是內核約定的事件類型,對應應用層的事件對象的type域 

 

 

 

下面這些是按鍵子事件的類型,可以看到對PC鍵值的定義 

 

 

 

除了對常用的事件進行描述,內核同樣提供了工具將這些事件正確的填充到input對象中描述事件的位圖中。

  1. //***種//這種方式非常適合同時注冊多個事件 
  2.  
  3. button_dev->evbit[0] = BIT_MASK(EV_KEY);             
  4. button_dev->keybit[BIT_WORD(BTN_0|BTN_1)] = BIT_MASK(BTN_0|BTN_1);   

注冊/注銷

初始化好了一個input對象,接下來就需要將其注冊到內核

  1. //注冊input對象到內核 
  2. int input_register_device(struct input_dev *dev); 
  3. //從內核注銷一個input對象 
  4. void input_unregister_device(struct input_dev *dev); 

驅動層報告事件

在合適的時機(由于輸入最終是中斷表示的,所以通常在驅動的中斷處理函數中)驅動可以將注冊好的事件上報,且可以同時上報多個事件,下面是內核提供的API

  1. //上報指定的事件+子事件+值 
  2. void input_event( 
  3.    struct input_dev *dev,unsigned int type,unsigned int code,int value);//上報鍵值 
  4.    void input_report_key(struct input_dev *dev,unsigned int code,int value);//上報絕對坐標 
  5.    void input_report_abs(struct input_dev *dev,unsigned int code,int value);//報告同步事件 
  6.    void input_report_rel(struct input_dev *dev,unsigned int code,int value);//同步所有的上報 
  7.    void input_sync(struct input_dev *dev); 

上報事件有2點需要注意:

  1. report函數們并不會真的上報,只是準備上報,sync才會真的將剛剛report的事件真的上報搭input核心
  2. input核心會進行裁決再上報的事件處理層,所以對于按鍵事件,一定要先報1再報0(或者反過來),不能只report 1或0, 這樣核心會認為是一個事件被誤觸發了多次而只上報一次,雖然我們真的按下了多次。

應用層解析

事件處理層最終會將驅動sync一次時所有report的事件組織成一個struct input_value[]的形式上報到應用層,在應用層從相應的設備文件中獲取上報的事件的時候,需要注意:

  1. 收到數組元素的數量會比底層多一個空元素,類似于寫of_device_id[]時***的空元素,這點應用層在解析的時候需要注意。
  2. 事件處理層并不會緩存收到的事件,如果有新的事件到來,即使舊的事件沒有被讀取,也會被覆蓋,所以應用程序需要及時讀取。

前文已經說過,"include/uapi/linux/input.h"中的宏是應用層和驅動層共用的通信協議,所以應用層在解析收到的struct input_value對象的時候,只需要"include <linux/input.h>"即可使用其中的宏。

  1. /* 
  2.  * The event structure itself 
  3.  */ 
  4.  
  5. struct input_event { 
  6.     struct timeval time
  7.     __u16 type; 
  8.     __u16 code; 
  9.     __s32 value; 
  10. };  

input分析

上文已經說過,input子系統使用三層結構來實現驅動事件到應用層的傳遞。具體的,這三個層次每一個層次都由一條結構體鏈表組成,在設備驅動層,核心結構體是input_dev;在input核心層,是input_handle;在事件處理層,是input_handler。內核通過鏈表和指針將三者結合到一起,最終實現了input_dev和input_handler的多對多的映射關系,這種關系可用下圖簡單描述。 

 

 

 

模板

下面的這個模板首先使用input子系統上報按鍵事件,然后在應用層讀取。

input按鍵設備驅動

  1.            key@26{ 
  2.                       compatible = "xj4412,key"
  3.                       interrupt-parent = <&gpx1>; 
  4.                       interrupts = <2 2>; 
  5.            }; 
  6. };  
  1. static struct input_dev *button_dev; 
  2. static int button_irq; 
  3. static int irqflags; 
  4. static irqreturn_t button_interrupt(int irq, void *dummy){ 
  5.     input_report_key(button_dev, BTN_0, 0); 
  6.     input_report_key(button_dev, BTN_0, 1); 
  7.     input_sync(button_dev);    return IRQ_HANDLED; 
  8. }  
  9. static int button_init(void){ 
  10.     request_irq(button_irq, button_interrupt,irqflags, "button"NULL)) ; 
  11.      
  12.     button_dev = input_allocate_device(); 
  13.     button_dev->name = "button"
  14.     button_dev->evbit[0] = BIT_MASK(EV_KEY); 
  15.     button_dev->keybit[BIT_WORD(BTN_0)] = BIT_MASK(BTN_0); 
  16.      
  17.     input_register_device(button_dev);    return 0; 
  18. static int button_exit(void){ 
  19.     input_free_device(button_dev); 
  20.     free_irq(button_irq, button_interrupt);    return 0;    
  21. static int key_probe(struct platform_device *pdev){ 
  22.     struct resource *irq_res; 
  23.     irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 
  24.     if(irq_res){ 
  25.         button_irq = irq_res->start; 
  26.         irqflags = irq_res->flags & IRQF_TRIGGER_MASK; 
  27.     }else
  28.          return -EINVAL;      
  29.     }    return button_init(); 
  30. static int key_remove(struct platform_device *dev){ 
  31.     return button_exit(); 
  32. struct of_device_id of_tbl[] = { 
  33.     {.compatible = "xj4412,key",}, 
  34.     {}, 
  35. }; 
  36. MODULE_DEVICE_TABLE(of, of_tbl);struct platform_driver key_drv = { 
  37.     .probe = key_probe, 
  38.     .remove = key_remove, 
  39.     .driver.name = "keydrv"
  40.     .driver.of_match_table = of_tbl, 
  41. }; 
  42. module_platform_driver_register(key_drv); 
  43. MODULE_LICENSE("GPL");  

應用層獲取鍵值

  1. #include <linux/input.h> 
  2. struct input_event {    struct timeval time
  3.     unsigned short type; 
  4.     unsigned short code;    int value; 
  5. }; 
  6. int main(int argc, char * const argv[]){ 
  7.     int fd = 0; 
  8.     struct input_event event[3] = {0};      //3!!!,驅動上傳了2個事件,第三個用來裝空元素  
  9.     int ret = 0; 
  10.     fd = open(argv[1],O_RDONLY); 
  11.     while(1){ 
  12.         ret = read(fd,&event,sizeof(event)); 
  13.         printf("ret:%d,val0:%d,val1:%d,val12:%d\n",ret,event[0].value,event[1].value,event[2].value);          //2!!!,***一個是空 
  14.         sleep(1); 
  15.     } 
  16.     return 0; 
責任編輯:龐桂玉 來源: 嵌入式Linux中文站
相關推薦

2021-08-31 11:53:38

Linux inputLinux 系統

2020-10-05 22:01:02

Linux系統編程線程屬性

2020-09-26 21:43:59

Linux系統編程條件變量

2020-10-18 07:13:44

Linux系統編程信號捕捉

2020-10-10 07:18:14

Linux系統編程管道

2020-09-25 07:34:40

Linux系統編程信號量

2020-10-05 22:05:10

Linux系統編程時序競態

2020-09-22 07:35:06

Linux線程進程

2020-09-28 06:49:50

Linux系統編程互斥量mutex

2020-09-26 23:09:00

Linux系統編程讀寫鎖

2020-10-09 07:13:11

Linux系統編程mmap

2020-10-08 10:10:51

Linux系統編程信號集

2009-07-03 11:57:18

系統編程安全linux

2017-07-14 14:35:27

Linux中斷系統

2009-10-12 12:46:55

Linux內核SCSI IO

2017-09-11 15:35:43

AndroidInput系統框架

2010-03-05 13:34:54

2021-05-06 07:53:20

LinuxUBI子系統

2019-03-15 09:30:09

Linux系統CPU

2014-09-22 13:31:46

Linux
點贊
收藏

51CTO技術棧公眾號

欧美性资源免费| 欧美日本国产一区| 欧美精品二区三区四区免费看视频| 黄色av一级片| 久久久久久久久久久久久久久久久久| 日韩免费一区二区三区在线播放| 黄色免费视频大全| 欧美精品日韩少妇| 成人av电影免费观看| 国产精品aaaa| 青青草偷拍视频| 欧美日韩国产高清电影| 日韩视频免费观看高清完整版在线观看| 浮妇高潮喷白浆视频| 黄色视屏免费在线观看| 99久久国产综合精品色伊| 成人免费看吃奶视频网站| 亚洲黄色小说图片| 欧美a级片一区| 中文字幕欧美日韩精品| 亚洲欧美日韩偷拍| 伊人亚洲精品| 91福利在线观看| 欧美一级欧美一级| 国产成人天天5g影院在线观看| 成人午夜精品在线| 91欧美激情另类亚洲| 少妇一级淫片日本| 中文精品在线| 欧美激情综合色综合啪啪五月| 亚洲精品国产精品国自| 亚洲最大在线| 日韩精品中文字幕在线播放| 中文字幕久久久久久久| 欧洲亚洲精品| 在线一区二区三区四区| 777久久久精品一区二区三区| a毛片在线看免费观看| 国产精品全国免费观看高清| 欧美成人蜜桃| 手机亚洲第一页| 成人国产电影网| 国产久一道中文一区| www五月婷婷| 国产精品资源网| 亚洲va电影大全| 国产精品视频久久久久久| 日韩电影在线看| 日韩免费观看在线观看| 在线观看日韩中文字幕| 国产欧美日韩一区二区三区在线| 欧美激情精品久久久久久黑人| 一级特黄曰皮片视频| 国产剧情一区| 伊人一区二区三区久久精品| 亚洲欧洲久久久| 国产成人一区| 亚洲精品一区二区三区四区高清| 无码人妻少妇色欲av一区二区| a一区二区三区亚洲| 欧美一区二区三区性视频| 992kp免费看片| 欧美日本三级| 精品福利一区二区三区 | jizz亚洲少妇| 在线精品国产| 久久全国免费视频| 国产精品一区无码| 青青草成人在线观看| 国产精品视频一区国模私拍| 国产精品国产精品国产专区| 国产乱子轮精品视频| 91视频99| 亚洲成人一级片| 91天堂素人约啪| 亚洲mv在线看| 伊人手机在线| 精品国产乱码久久久久久天美| 农村妇女精品一二区| jizz亚洲女人高潮大叫| 日韩午夜精品视频| 少妇按摩一区二区三区| 日韩精品1区| 欧美黄色三级网站| 九九热在线视频播放| 日韩中文欧美在线| 91成人免费观看| 神马电影在线观看| 国产精品白丝在线| 2019日韩中文字幕mv| 丝袜美腿一区| 欧美一级在线观看| 免费黄色在线视频| 69精品久久久| 欧美日韩精品一本二本三本| 5252色成人免费视频| 最近中文在线观看| 成熟亚洲日本毛茸茸凸凹| 欧美中日韩一区二区三区| 黄色网页在线观看| 色综合亚洲欧洲| 亚洲在线观看网站| 蜜桃精品wwwmitaows| 欧美精品在线视频观看| 9i看片成人免费看片| 狠狠色综合日日| 久久久久资源| 日韩另类在线| 欧美视频中文字幕| 女性生殖扒开酷刑vk| 波多野结衣在线播放一区| 欧美精品久久久久a| 最近中文字幕免费观看| 99久久精品免费看| 一本二本三本亚洲码| www.com.cn成人| 精品欧美黑人一区二区三区| 国产7777777| 免费在线成人| 国产伦精品一区二区三区免费视频| 97在线观看免费观看高清 | 91video| 高清在线观看日韩| 日韩第一页在线观看| 亚洲a∨精品一区二区三区导航| 精品国产成人系列| 99鲁鲁精品一区二区三区| 日韩精品电影一区亚洲| 鲁片一区二区三区| 高h视频在线播放| 欧美一区午夜精品| 美国一级片在线观看| 日韩国产精品久久久| 美国av一区二区三区| 91九色porn在线资源| 精品国产乱码久久久久久浪潮 | 九色在线观看视频| 精品福利在线观看| 欧美日韩人妻精品一区在线| 欧美 日韩 国产 一区| 成人两性免费视频| 日本免费在线观看| 欧美久久久久久久久久| 中文字幕有码在线播放| 亚洲欧美春色| 欧美人与物videos另类| 成人免费看黄| 亚洲女同精品视频| 91黑人精品一区二区三区| 久久伊人中文字幕| 男人天堂网视频| 亚洲人挤奶视频| 欧洲成人免费aa| 久久精品蜜桃| 欧美视频精品在线观看| 亚洲色图 激情小说| 理论片日本一区| 国产精品无码乱伦| 日韩一二三区| 国模叶桐国产精品一区| 欧美在线一卡| 欧美日韩国产另类不卡| 91麻豆免费视频网站| 国产成人免费视频网站高清观看视频 | 亚洲国产一区二区a毛片| 天天躁日日躁狠狠躁av麻豆男男 | 日本中文字幕久久看| 精品亚洲成a人片在线观看| 在线中文字幕一区二区| 亚洲欧美日韩第一页| 国产麻豆精品theporn| 久久久久久久9| 日韩mv欧美mv国产网站| 国产成人精品一区二区| 免费a级在线播放| 日韩一区二区免费电影| 成人毛片18女人毛片| 欧美国产精品一区二区| 黄色三级视频在线播放| 亚洲福利电影| 日韩欧美精品一区二区| 日韩三级久久| 国产97免费视| 国产成人高清精品| 亚洲精品www久久久久久广东| 丰满少妇xoxoxo视频| 亚洲人成网站影音先锋播放| 超碰男人的天堂| 美女一区二区久久| 成年人看的毛片| 日韩精品一卡| 国产麻豆日韩| 偷拍自拍亚洲| 日本在线观看天堂男亚洲| 午夜在线激情影院| 国产一区二区日韩| 丰满人妻一区二区三区无码av | 亚洲精品国产手机| 日本韩国欧美在线| 九九视频在线免费观看| 国产拍欧美日韩视频二区| 日韩精品――色哟哟| 日韩精品电影在线| 国产一线二线三线女| 日韩精品2区| 看欧美日韩国产| 99久久婷婷国产综合精品青牛牛 | 77成人影视| 91精品久久久久久久久久入口| 国产精品论坛| 久精品免费视频| av在线之家电影网站| 亚洲风情亚aⅴ在线发布| 亚洲一级av毛片| 日本高清不卡视频| 国产对白videos麻豆高潮| 亚洲图片你懂的| 亚洲欧美va天堂人熟伦| 91蝌蚪porny九色| 亚洲色图欧美日韩| 国产福利视频一区二区三区| 无限资源日本好片| 久久久久久婷| 国产精品第12页| 一区二区三区福利| 国产毛片久久久久久国产毛片| 99精品视频在线观看播放| 午夜视频久久久| 少妇精品久久久| 久久久久高清| 色吊丝一区二区| 国语精品免费视频| 极品束缚调教一区二区网站| 亚洲综合在线播放| 国产日韩在线观看视频| 国产在线精品成人一区二区三区| 91精品美女| 国产精品久久久久久久久免费看| 欲香欲色天天天综合和网| 97国产精品视频| 国产精品一区二区日韩| 性欧美长视频免费观看不卡| 白白色在线观看| 欧美激情视频三区| 国产在线xxx| 久久久久久久久久久亚洲| 亚洲资源一区| 欧美激情国产高清| 黄毛片在线观看| 欧美亚洲激情视频| 三上悠亚国产精品一区二区三区| 欧美在线性爱视频| 欧美成人黑人| 国产精品嫩草影院久久久| 精品成人免费一区二区在线播放| 国产成人一区二区三区小说 | av播放在线| 欧美成人aa大片| 好吊视频一二三区| 精品久久久久久久人人人人传媒 | 亚洲欧美日韩天堂| 韩国免费在线视频| 中文字幕亚洲欧美一区二区三区| 日本激情视频在线观看| 久久亚洲国产成人| 欧洲在线视频| 91国内精品久久| 成人免费网站视频| 国产精品三级网站| 国产一区二区视频在线看 | 网友自拍区视频精品| 欧美一区1区三区3区公司| 日韩大片在线播放| 成年丰满熟妇午夜免费视频| 在线综合亚洲| www.精品在线| 成人高清在线视频| 国产黄色大片免费看| 亚洲精品日产精品乱码不卡| 国产香蕉视频在线| 欧美自拍丝袜亚洲| 国产成人久久精品77777综合 | 日本免费视频在线观看| 欧美激情国内偷拍| 69堂免费精品视频在线播放| 亚洲va码欧洲m码| 蜜臀久久99精品久久一区二区| 四虎影院一区二区| 亚洲欧美成人| 亚洲国产日韩在线一区| 久久综合久久鬼色| 亚洲波多野结衣| 欧美日韩亚洲一区二区| 97成人免费视频| 国产视频综合在线| 日本一级理论片在线大全| 日本精品免费一区二区三区| 在线观看亚洲精品福利片| 精品综合在线| 欧美精品二区| 男人添女人下面免费视频| av动漫一区二区| 一区二区视频免费看| 色av一区二区| 韩国中文字幕hd久久精品| 搡老女人一区二区三区视频tv| 欧美gv在线观看| 痴汉一区二区三区| 999国产精品视频| 毛片av免费在线观看| 国产成人激情av| 国产在线观看免费视频软件| 福利视频导航一区| 好男人www在线视频| 久久精品国产亚洲7777| 桃子视频成人app| 国产视频不卡| 欧美日本一区二区高清播放视频| 国产欧美一区二| 国产免费成人在线视频| 国产精品男女视频| 精品国产伦一区二区三区观看体验| 国产最新在线| 91精品国产综合久久香蕉| 成人3d动漫在线观看| 一本大道熟女人妻中文字幕在线 | 美女视频黄 久久| 波多野结衣 在线| 欧美日韩国产精品| 亚洲乱色熟女一区二区三区| 欧美成人国产va精品日本一级| 福利一区二区免费视频| 欧洲精品久久| 久久精品九九| 精品无码人妻一区| 无码av免费一区二区三区试看| 亚洲精品无码专区| 久久91亚洲人成电影网站| 玖玖玖视频精品| 男人天堂网站在线| 国产一区在线不卡| 日韩欧美综合视频| 7777精品久久久大香线蕉| 香蕉视频在线播放| 成人做爰www免费看视频网站| 久久国产亚洲精品| 狠狠干狠狠操视频| 亚洲天堂福利av| 国产aⅴ一区二区三区| 久久中文精品视频| 亚洲精品影片| 久艹在线免费观看| www.亚洲国产| 欧美精品二区三区| 亚洲欧洲中文天堂| 欧美暴力调教| 中文字幕精品—区二区日日骚| 韩国三级中文字幕hd久久精品| 99自拍视频在线| 欧美xfplay| 天堂√8在线中文| 亚洲bbw性色大片| 国产一区二区三区四区在线观看| 国产va在线播放| 亚洲黄页视频免费观看| 欧美一区久久久| 亚洲国产日韩美| 国产91精品一区二区麻豆网站| 国产网友自拍视频| 亚洲精品少妇网址| 另类一区二区| 欧美亚洲色图视频| 91在线云播放| 91精品人妻一区二区三区果冻| 九色91av视频| 曰本一区二区三区视频| 污网站免费在线| 亚洲综合一区二区| 青青青手机在线视频观看| 国产精品自产拍在线观看| 黄色成人精品网站| 99久久人妻无码精品系列| 欧美另类videos死尸| 草草视频在线观看| 亚洲精品二区| 成人毛片视频在线观看| 成人免费视频国产免费| 欧美成人久久久| 欧美日韩国产传媒| 日本人添下边视频免费| 在线看不卡av| 麻豆蜜桃在线| 神马影院一区二区三区| 成人在线视频一区| 中文字幕在线日亚洲9| 午夜精品久久久久久久久久久久 | 久久91亚洲精品中文字幕奶水| 国产乱码精品一区二区三区四区| 特级黄色片视频| 欧美色男人天堂|