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

鴻蒙輕內核M核源碼分析系列十二事件Event

開發 前端
本文帶領大家一起剖析鴻蒙輕內核的事件模塊的源代碼,包含事件的結構體、事件初始化、事件創建刪除、申請釋放等。

[[403496]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

事件(Event)是一種任務間通信的機制,可用于任務間的同步。多任務環境下,任務之間往往需要同步操作,一個等待即是一個同步。事件可以提供一對多、多對多的同步操作。本文通過分析鴻蒙輕內核事件模塊的源碼,深入掌握事件的使用。

接下來,我們看下事件的結構體,事件初始化,事件常用操作的源代碼。

1、事件結構體定義和常用宏定義

1.1 事件結構體定義

在文件kernel\include\los_event.h定義的事件控制塊結構體為EVENT_CB_S,結構體源代碼如下,結構體成員的解釋見注釋部分。

  1. typedef struct tagEvent { 
  2.     UINT32 uwEventID;        /**< 事件ID,每一位標識一種事件類型 */ 
  3.     LOS_DL_LIST stEventList; /**< 讀取事件的任務鏈表 */ 
  4. } EVENT_CB_S, *PEVENT_CB_S; 

 1.2 事件常用宏定義

在讀事件時,可以選擇讀取模式。讀取模式由如下幾個宏定義:

所有事件(LOS_WAITMODE_AND):

邏輯與,基于接口傳入的事件類型掩碼eventMask,只有這些事件都已經發生才能讀取成功,否則該任務將阻塞等待或者返回錯誤碼。

任一事件(LOS_WAITMODE_OR):

邏輯或,基于接口傳入的事件類型掩碼eventMask,只要這些事件中有任一種事件發生就可以讀取成功,否則該任務將阻塞等待或者返回錯誤碼。

清除事件(LOS_WAITMODE_CLR):

這是一種附加讀取模式,需要與所有事件模式或任一事件模式結合使用(LOS_WAITMODE_AND | LOS_WAITMODE_CLR或 LOS_WAITMODE_OR | LOS_WAITMODE_CLR)。在這種模式下,當設置的所有事件模式或任一事件模式讀取成功后,會自動清除事件控制塊中對應的事件類型位。

  1. #define LOS_WAITMODE_AND                   (4) 
  2.  
  3.   #define LOS_WAITMODE_OR                    (2) 
  4.  
  5.   #define LOS_WAITMODE_CLR                   (1) 

 2、事件常用操作

2.1 初始化事件

在使用事件前,必須使用函數UINT32 LOS_EventInit(PEVENT_CB_S eventCB)來初始化事件,需要的參數是結構體指針變量PEVENT_CB_S eventCB。分析下代碼,⑴處表示傳入的參數不能為空,否則返回錯誤碼。⑵處把事件編碼.uwEventID初始化為0,然后初始化雙向循環鏈表.stEventList,用于掛載讀取事件的任務。

  1. LITE_OS_SEC_TEXT_INIT UINT32 LOS_EventInit(PEVENT_CB_S eventCB) 
  2. ⑴  if (eventCB == NULL) { 
  3.         return LOS_ERRNO_EVENT_PTR_NULL; 
  4.     } 
  5. ⑵  eventCB->uwEventID = 0; 
  6.     LOS_ListInit(&eventCB->stEventList); 
  7.     OsHookCall(LOS_HOOK_TYPE_EVENT_INIT); 
  8.     return LOS_OK; 

 2.2 校驗事件掩碼

我們可以使用函數UINT32 LOS_EventPoll(UINT32 *eventId, UINT32 eventMask, UINT32 mode)來校驗事件掩碼,需要的參數為事件結構體的事件編碼eventId、用戶傳入的待校驗的事件掩碼eventMask及讀取模式mode,返回用戶傳入的事件是否發生: 返回值為0時,表示用戶預期的事件沒有發生,否則表示用戶期望的事件發生。

我們看下源碼,⑴處先檢查傳入參數的合法性,事件編碼不能為空。然后執行⑵處的代碼進行校驗。如果是任一事件讀取模式,接下來的判斷不等于表示至少有一個事件發生了,返回值ret就表示哪些事件發生了。⑶如果是所有事情讀取模式,當邏輯與運算*eventId & eventMask還等于eventMask時,表示期望的事件全部發生了,返回值ret就表示哪些事件發生了。⑷處當ret不為0,期望的事件發生,并且是清除事件讀取模式時,需要把已經發生的事情進行清除。看來,這個函數不僅僅是查詢事件有沒有發生,還會有更新事件編碼的動作。

  1. LITE_OS_SEC_TEXT UINT32 LOS_EventPoll(UINT32 *eventID, UINT32 eventMask, UINT32 mode) 
  2.     UINT32 ret = 0; 
  3.     UINT32 intSave; 
  4.  
  5. ⑴  if (eventID == NULL) { 
  6.         return LOS_ERRNO_EVENT_PTR_NULL; 
  7.     } 
  8.     intSave = LOS_IntLock(); 
  9. ⑵  if (mode & LOS_WAITMODE_OR) { 
  10.         if ((*eventID & eventMask) != 0) { 
  11.             ret = *eventID & eventMask; 
  12.         } 
  13.     } else { 
  14. ⑶      if ((eventMask != 0) && (eventMask == (*eventID & eventMask))) { 
  15.             ret = *eventID & eventMask; 
  16.         } 
  17.     } 
  18. ⑷  if (ret && (mode & LOS_WAITMODE_CLR)) { 
  19.         *eventID = *eventID & ~(ret); 
  20.     } 
  21.     LOS_IntRestore(intSave); 
  22.     return ret; 

2.3 讀/寫事件

2.3.1 讀取指定事件類型

我們可以使用函數LOS_EventRead()來讀取事件,需要4個參數。eventCB是初始化好的事件結構體,eventMask表示需要讀取的事件掩碼,mode是上文說明過的讀取模式,timeout是讀取超時,單位是Tick。函數返回0時,表示期望的事件沒有發生,讀取事件失敗,進入阻塞。返回非0時表示期望的事件發生了,成功讀取事件。下面我們分析下函數的源碼來看看如何讀取事件的。

⑴處調用函數OsEventReadParamCheck()進行基礎的校驗,比如第25位保留不能使用,事件掩碼eventMask不能為零,讀取模式組合是否合法。⑵處表示不能中斷中讀取事件。⑶處調用校驗函數OsEventPoll()檢查事件eventMask是否發生。如果事件發生ret不為0,成功讀取直接返回。ret為0,事件沒有發生時,執行⑷,如果超時時間timeout為0,調用者不能等待時,直接返回。⑸如果鎖任務調度時,不能讀取事件,返回錯誤碼。

⑹更新當前任務的阻塞的事件掩碼.eventMask和事件讀取模式.eventMode。執行⑺調用函數OsSchedTaskWait更改當前任務的狀態為阻塞狀態,掛載到事件的任務阻塞鏈表上。如果timeout不是永久等待,還會把任務設置為OS_TASK_STATUS_PEND_TIME狀態并設置等待時間。⑻處觸發任務調度,后續程序需要等到讀取到事件才會繼續執行。

⑼如果等待時間超時,事件還不可讀,本任務讀取不到指定的事件時,返回錯誤碼。如果可以讀取到指定的事件時,執行⑽,檢查事件eventMask是否發生,然后返回結果值。

  1. LITE_OS_SEC_TEXT UINT32 LOS_EventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeOut) 
  2.     UINT32 ret; 
  3.     UINT32 intSave; 
  4.     LosTaskCB *runTsk = NULL
  5.  
  6. ⑴  ret = OsEventReadParamCheck(eventCB, eventMask, mode); 
  7.     if (ret != LOS_OK) { 
  8.         return ret; 
  9.     } 
  10.  
  11. ⑵  if (OS_INT_ACTIVE) { 
  12.         return LOS_ERRNO_EVENT_READ_IN_INTERRUPT; 
  13.     } 
  14.     intSave = LOS_IntLock(); 
  15. ⑶  ret = LOS_EventPoll(&(eventCB->uwEventID), eventMask, mode); 
  16.     OsHookCall(LOS_HOOK_TYPE_EVENT_READ, eventCB, eventMask, mode); 
  17.     if (ret == 0) { 
  18. ⑷      if (timeOut == 0) { 
  19.             LOS_IntRestore(intSave); 
  20.             return ret; 
  21.         } 
  22.  
  23. ⑸      if (g_losTaskLock) { 
  24.             LOS_IntRestore(intSave); 
  25.             return LOS_ERRNO_EVENT_READ_IN_LOCK; 
  26.         } 
  27.         runTsk = g_losTask.runTask; 
  28. ⑹      runTsk->eventMask = eventMask; 
  29.         runTsk->eventMode = mode; 
  30. ⑺      OsSchedTaskWait(&eventCB->stEventList, timeOut); 
  31.         LOS_IntRestore(intSave); 
  32. ⑻      LOS_Schedule(); 
  33.  
  34. ⑼      intSave = LOS_IntLock(); 
  35.         if (runTsk->taskStatus & OS_TASK_STATUS_TIMEOUT) { 
  36.             runTsk->taskStatus &= ~OS_TASK_STATUS_TIMEOUT; 
  37.             LOS_IntRestore(intSave); 
  38.             return LOS_ERRNO_EVENT_READ_TIMEOUT; 
  39.         } 
  40.  
  41. ⑽      ret = LOS_EventPoll(&eventCB->uwEventID, eventMask, mode); 
  42.     } 
  43.  
  44.     LOS_IntRestore(intSave); 
  45.     return ret; 

 2.3.2 寫入指定的事件類型

我們可以使用函數UINT32 LOS_EventWrite(PEVENT_CB_S eventCB, UINT32 events)來寫入指定的事件類型。代碼如下所示:

下面通過分析源碼來看看如何寫入事件類型的。⑴處代碼把事件結構體的事件掩碼和要寫入的事件類型events進行邏輯或計算,來完成事件的寫入。⑵如果等待事件的任務鏈表不為空,需要處理寫入事件后是否有任務能讀取到相應的事件。⑶處for循環依次遍歷事件阻塞鏈表上的任務,⑷獲取下一個任務nextTask。⑸處

分不同的讀取模式判斷事件是否符合任務resumedTask讀取事件的要求,如果滿足讀取事件,執行⑹設置退出標記exitFlag,然后調用函數OsSchedTaskWake()把讀取事件的任務更改狀態并放入就緒隊列,繼續執行⑺,遍歷事件的阻塞任務鏈表中的每一個任務。⑻如果有任務讀取到事件,需要觸發任務調度。

  1. LITE_OS_SEC_TEXT UINT32 LOS_EventWrite(PEVENT_CB_S eventCB, UINT32 events) 
  2.     LosTaskCB *resumedTask = NULL
  3.     LosTaskCB *nextTask = (LosTaskCB *)NULL
  4.     UINT32 intSave; 
  5.     UINT8 exitFlag = 0; 
  6.     if (eventCB == NULL) { 
  7.         return LOS_ERRNO_EVENT_PTR_NULL; 
  8.     } 
  9.     if ((eventCB->stEventList.pstNext == NULL) || (eventCB->stEventList.pstPrev == NULL)) { 
  10.         return LOS_ERRNO_EVENT_NOT_INITIALIZED; 
  11.     } 
  12.     if (events & LOS_ERRTYPE_ERROR) { 
  13.         return LOS_ERRNO_EVENT_SETBIT_INVALID; 
  14.     } 
  15.     intSave = LOS_IntLock(); 
  16. ⑴  eventCB->uwEventID |= events; 
  17.     OsHookCall(LOS_HOOK_TYPE_EVENT_WRITE, eventCB); 
  18. ⑵  if (!LOS_ListEmpty(&eventCB->stEventList)) { 
  19. ⑶      for (resumedTask = LOS_DL_LIST_ENTRY((&eventCB->stEventList)->pstNext, LosTaskCB, pendList); 
  20.              &resumedTask->pendList != (&eventCB->stEventList);) { 
  21. ⑷          nextTask = LOS_DL_LIST_ENTRY(resumedTask->pendList.pstNext, LosTaskCB, pendList); 
  22.  
  23. ⑸          if (((resumedTask->eventMode & LOS_WAITMODE_OR) && (resumedTask->eventMask & events) != 0) || 
  24.                 ((resumedTask->eventMode & LOS_WAITMODE_AND) && 
  25.                  ((resumedTask->eventMask & eventCB->uwEventID) == resumedTask->eventMask))) { 
  26. ⑹              exitFlag = 1; 
  27.  
  28.                 OsSchedTaskWake(resumedTask); 
  29.             } 
  30. ⑺          resumedTask = nextTask; 
  31.         } 
  32.  
  33.         if (exitFlag == 1) { 
  34.             LOS_IntRestore(intSave); 
  35. ⑻          LOS_Schedule(); 
  36.             return LOS_OK; 
  37.         } 
  38.     } 
  39.  
  40.     LOS_IntRestore(intSave); 
  41.     return LOS_OK; 

2.4 清除事件

我們可以使用函數UINT32 LOS_EventClear(PEVENT_CB_S eventCB, UINT32 eventMask)來清除指定的事件類型,下面通過分析源碼看看如何清除事件類型的。

函數參數為事件結構體eventCB和要清除的事件類型eventMask。清除事件時首先會進行結構體參數是否為空的校驗,這些比較簡單。⑴處把事件結構體的事件掩碼和要清除的事件類型eventMask進行邏輯與計算,來完成事件的清理。

  1. LITE_OS_SEC_TEXT_MINOR UINT32 LOS_EventClear(PEVENT_CB_S eventCB, UINT32 eventMask) 
  2.     UINT32 intSave; 
  3.     if (eventCB == NULL) { 
  4.         return LOS_ERRNO_EVENT_PTR_NULL; 
  5.     } 
  6.     intSave = LOS_IntLock(); 
  7. ⑴  eventCB->uwEventID &= eventMask; 
  8.     LOS_IntRestore(intSave); 
  9.     OsHookCall(LOS_HOOK_TYPE_EVENT_CLEAR, eventCB); 
  10.     return LOS_OK; 

 2.5 銷毀事件

我們可以使用函數UINT32 LOS_EventDestroy(PEVENT_CB_S eventCB)來銷毀指定的事件控制塊,下面通過分析源碼看看如何銷毀事件的。

函數參數為事件結構體,銷毀事件時首先會進行結構體參數是否為空的校驗,這些比較簡單。⑴處如果事件的任務阻塞鏈表不為空,則不能銷毀事件。⑵把事件結構體的讀取事件的任務鏈表stEventList設置為空,完成事件的銷毀。

  1. LITE_OS_SEC_TEXT_INIT UINT32 LOS_EventDestroy(PEVENT_CB_S eventCB) 
  2.     UINT32 intSave; 
  3.     if (eventCB == NULL) { 
  4.         return LOS_ERRNO_EVENT_PTR_NULL; 
  5.     } 
  6.     intSave = LOS_IntLock(); 
  7.  
  8. ⑴  if (!LOS_ListEmpty(&eventCB->stEventList)) { 
  9.         LOS_IntRestore(intSave); 
  10.         return LOS_ERRNO_EVENT_SHOULD_NOT_DESTORY; 
  11.     } 
  12. ⑵  eventCB->stEventList.pstNext = (LOS_DL_LIST *)NULL
  13.     eventCB->stEventList.pstPrev = (LOS_DL_LIST *)NULL
  14.     LOS_IntRestore(intSave); 
  15.     OsHookCall(LOS_HOOK_TYPE_EVENT_DESTROY); 
  16.     return LOS_OK; 

 小結

本文帶領大家一起剖析了鴻蒙輕內核的事件模塊的源代碼,包含事件的結構體、事件初始化、事件創建刪除、申請釋放等。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2022-01-12 10:50:23

鴻蒙HarmonyOS應用

2022-01-10 15:31:44

鴻蒙HarmonyOS應用

2021-10-20 16:08:57

鴻蒙HarmonyOS應用

2021-05-25 09:28:34

鴻蒙HarmonyOS應用

2021-06-04 14:15:10

鴻蒙HarmonyOS應用

2021-05-17 09:28:59

鴻蒙HarmonyOS應用

2021-05-08 15:14:50

鴻蒙HarmonyOS應用

2021-05-31 20:30:55

鴻蒙HarmonyOS應用

2022-03-03 18:28:28

Harmony進程任務管理模塊

2022-03-11 20:23:14

鴻蒙源碼分析進程管理

2021-05-11 09:54:55

鴻蒙HarmonyOS應用

2021-05-21 09:25:11

鴻蒙HarmonyOS應用

2021-06-09 09:48:01

鴻蒙HarmonyOS應用

2021-05-27 09:43:56

鴻蒙HarmonyOS應用

2021-09-22 14:36:32

鴻蒙HarmonyOS應用

2021-07-06 09:45:03

鴻蒙HarmonyOS應用

2021-05-12 09:45:20

鴻蒙HarmonyOS應用

2022-01-14 08:39:47

鴻蒙HarmonyOS應用

2021-05-10 15:05:56

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

性欧美videoshd高清| 国产精品一区二区免费视频| 日韩成人av在线资源| 岛国av在线不卡| 手机成人在线| 成人黄色免费视频| 国产美女精品| 久久综合免费视频影院| 无码任你躁久久久久久老妇| 日本黄色一区| 亚洲国产cao| 色综合电影网| 亚洲av无码国产精品永久一区| 亚洲一区二区成人| 美女视频久久黄| 免费a级黄色片| 欧美日本三级| 欧美少妇性性性| 黄色一级在线视频| 尤物网在线观看| 97久久超碰国产精品电影| 国产在线视频2019最新视频| 免费看日批视频| 欧美日韩一视频区二区| 日韩在线免费观看视频| 亚洲欧美日本一区| a级日韩大片| 欧美精品高清视频| xxxx一级片| 超碰国产一区| 午夜国产不卡在线观看视频| 少妇高潮大叫好爽喷水| yourporn在线观看中文站| a亚洲天堂av| 成人资源av| 国产精品久久免费| 久久国产精品99久久人人澡| 日本一区二区三区在线播放| 一级片免费网址| 激情丁香综合| 欧美激情啊啊啊| 国精品无码一区二区三区| 日韩一区三区| 这里只有视频精品| 五月激情四射婷婷| 欧美丝袜一区| 中文字幕av日韩| 国产91丝袜美女在线播放| 久久99蜜桃| 国产亚洲精品高潮| 男女做爰猛烈刺激| 深爱激情综合| 亚洲美女视频网| 一本加勒比北条麻妃| 婷婷综合电影| 亚洲欧美激情另类校园| 自拍偷拍亚洲天堂| 久久a级毛片毛片免费观看| 精品99一区二区| 午夜不卡久久精品无码免费| 日本福利一区| 亚洲人成毛片在线播放| 欧美人妻一区二区三区| 国产精品美女久久久久久不卡 | 黄色a级片免费| 欲香欲色天天天综合和网| 好吊成人免视频| 中文字幕乱码人妻综合二区三区 | 91精品福利| 欧美成人免费观看| 男人天堂中文字幕| 久久国产一二区| 国产精品久久久久秋霞鲁丝| 91theporn国产在线观看| 国产一区二区在线免费观看| 91久久国产综合久久蜜月精品 | 国产激情视频一区二区在线观看 | 欧美激情一区二区三区成人| 久久久久久久久久久久国产| 伊人精品视频| 国产成人精品一区二区| 亚洲一级在线播放| 国产精品一二三区| 久久青青草原| 天堂中文а√在线| 亚洲动漫第一页| 精品视频无码一区二区三区| 3d动漫一区二区三区在线观看| 日韩手机在线导航| 亚洲第九十七页| 99久久视频| 91国产视频在线| 中文字幕在线观看免费| 高清不卡一区二区在线| 秋霞毛片久久久久久久久| 国产精品扒开做爽爽爽的视频| 一区二区在线观看视频在线观看| 午夜肉伦伦影院| 自拍偷拍亚洲| 亚洲人午夜精品| 久久国产美女视频| 美女精品网站| 99视频免费观看蜜桃视频| 黄色的视频在线免费观看| 亚洲人成伊人成综合网小说| 欧洲av无码放荡人妇网站| 韩国一区二区三区视频| 国产丝袜高跟一区| 久久久精品一区二区涩爱| 日本欧美一区二区三区乱码| 高清不卡日本v二区在线| 国产在线中文字幕| 亚洲一本大道在线| 欧美日韩精品区别| 日韩av不卡一区| 久久国产精品视频| 亚洲视屏在线观看| 99久久精品久久久久久清纯| 黄色网络在线观看| 国产精品毛片久久久久久久久久99999999| 欧美mv日韩mv国产网站| 任我爽在线视频| 日韩精品乱码免费| 国产日韩欧美精品| 最新国产露脸在线观看| 欧美日韩一区二区三区不卡| 国产男女猛烈无遮挡a片漫画| 亚洲手机在线| 亚洲综合在线做性| 老司机午夜在线| 欧美日韩三级一区二区| 免费黄色在线视频| 国产一区二区你懂的| 黑人中文字幕一区二区三区| 午夜成年人在线免费视频| 欧美精品第1页| 日韩免费av一区| 蜜臀久久99精品久久久久久9| 欧美一区二区三区成人久久片| 24小时免费看片在线观看| 日韩精品一区二区三区老鸭窝| 性生交大片免费全黄| 美日韩一区二区三区| 日韩欧美精品在线不卡 | 欧美视频不卡中文| 超碰97在线资源站| 国产日韩欧美三区| 久久久精彩视频| 中文字幕乱码中文乱码51精品| 亚洲白虎美女被爆操| 国产午夜精品无码| 99久久婷婷国产综合精品| 99久久国产综合精品五月天喷水| 亚洲一二三区视频| 隔壁老王国产在线精品| 欧美熟妇交换久久久久久分类| 午夜欧美视频在线观看| 中文字幕影片免费在线观看| 亚洲综合社区| 日本一区二区三区免费观看| 成人亚洲网站| 久久精品国产91精品亚洲| 国产高清在线免费| 午夜一区二区三区在线观看| 欧美bbbbb性bbbbb视频| 久久国产日韩| 夜夜爽99久久国产综合精品女不卡 | 69av在线视频| 黄色片在线播放| 欧美精品视频www在线观看 | 欧美丝袜一区二区三区| 法国空姐电影在线观看| 久久精品国产一区二区三| 看一级黄色录像| 精品成人自拍视频| 国产精品v日韩精品| 成人在线免费看片| 亚洲成人精品久久| 无码aⅴ精品一区二区三区| 中文字幕在线不卡视频| av不卡中文字幕| 久久伊人亚洲| 99re8这里只有精品| 欧美1区二区| 国产欧美一区二区三区四区| 金瓶狂野欧美性猛交xxxx| 亚洲男女性事视频| 国产精品人人爽| 五月婷婷欧美视频| 一级黄色毛毛片| 成人动漫精品一区二区| 免费激情视频在线观看| 欧美日韩1080p| 老牛影视免费一区二区| 95精品视频| 欧美洲成人男女午夜视频| 男人天堂久久久| 日韩经典一区二区三区| 国产精品乱码一区二区| 精品国产91久久久久久老师| 午夜国产小视频| 91美女片黄在线| 亚洲一级片免费观看| 久久美女性网| av无码久久久久久不卡网站| 成人影视亚洲图片在线| 国产精品裸体一区二区三区| 欧美一区二区三区婷婷| 热re99久久精品国产66热| а√中文在线8| 国产亚洲精品一区二555| 黑人乱码一区二区三区av| 欧美伦理视频网站| 欧产日产国产69| 亚洲一区二区三区在线看| 国产精品69久久久久孕妇欧美| 91丨九色丨尤物| yjizz视频| 国产高清亚洲一区| 黄色手机在线视频| 久久久噜噜噜| 成人一对一视频| 欧美日一区二区在线观看| 亚洲午夜精品久久久中文影院av| 国产成人ay| 久久久久九九九| 国产劲爆久久| 99九九电视剧免费观看| 4438五月综合| 成人午夜在线视频一区| 久久久久黄色| 国产精品偷伦视频免费观看国产| 色老太综合网| 日本a级片电影一区二区| 免费看男女www网站入口在线 | 免费一级全黄少妇性色生活片| 中文字幕制服丝袜一区二区三区| 国产肥白大熟妇bbbb视频| 久久综合九色综合97婷婷| www.免费av| www日韩大片| 尤物视频最新网址| 国产欧美日韩亚州综合| www.黄色在线| 国产精品女同互慰在线看| 在线观看天堂av| 中文字幕一区二区三区乱码在线| 中文字幕美女视频| 亚洲四区在线观看| 久久r这里只有精品| 亚洲精品成人a在线观看| 538精品在线视频| 一二三区精品视频| 国产性70yerg老太| 午夜精品一区二区三区免费视频 | 亚洲精品1区| 少妇av一区二区三区无码| 国产精品一卡| www.xxx亚洲| 久久国产三级精品| 人妻换人妻仑乱| 成人午夜av电影| 北岛玲一区二区| 国产午夜亚洲精品羞羞网站| 五月天婷婷丁香网| 亚洲人吸女人奶水| 91精品国产高潮对白| 欧美日在线观看| 91国产免费视频| 日韩欧美在线网站| 天堂中文在线资| 最近2019年手机中文字幕| 超碰在线观看免费版| 久久露脸国产精品| 欧美香蕉视频| 成人免费观看a| 日韩三区视频| 亚洲一区二三| 在线看片一区| wwww.国产| 丁香激情综合国产| 亚洲精品乱码久久久久久久久久久久| 国产精品麻豆久久久| 欧美日韩在线观看成人| 欧美性猛交xxxx乱大交3| 中文字幕无码乱码人妻日韩精品| 欧美一区二区三区色| 精品电影在线| 欧美国产日本在线| 成人看片网页| 国产精品免费一区二区三区四区| 精品国产99| 久久久久久久香蕉| 三级影片在线观看欧美日韩一区二区 | 久久99精品久久久久久三级 | 国产日产欧美一区二区| 久久大逼视频| 伊人影院在线观看视频| 国产亚洲欧美中文| 精品在线免费观看视频| 欧美日韩一区二区三区免费看| 午夜福利一区二区三区| 久久久成人av| 欧美日韩在线精品一区二区三区激情综合| 99视频免费观看蜜桃视频| 日韩一区自拍| 久久精品国产精品亚洲色婷婷| 国产精品99久久久久久有的能看| 成年人网站免费看| 亚洲最新视频在线观看| 最近中文字幕免费观看| 日韩精品极品视频免费观看| 日本在线免费| 国产精品电影网站| 亚洲精品国产setv| 日韩黄色片在线| 激情综合一区二区三区| 成人免费无遮挡无码黄漫视频| 亚洲国产精品一区二区久久恐怖片| 一级爱爱免费视频| 国产一区二区三区视频免费| 极品美鲍一区| 国产精品久久久久久久久久直播| 久久久久久免费视频| 91女神在线观看| 久久久国产一区二区三区四区小说| 日本学生初尝黑人巨免费视频| 日韩欧美一级片| 黄色成人影院| 91人成网站www| 99久久久久国产精品| 国产小视频精品| 中文字幕av一区 二区| 国产情侣免费视频| 亚洲欧美自拍一区| **欧美日韩在线观看| 美脚丝袜一区二区三区在线观看| 在线电影一区| 国产黑丝在线观看| 亚洲成av人片观看| 乱精品一区字幕二区| 欧美激情国产精品| 91综合久久爱com| 日韩 欧美 视频| 成人夜色视频网站在线观看| 国产一级特黄毛片| 精品99一区二区三区| 爱啪啪综合导航| 精品国产一区二区三区麻豆小说 | 亚洲视频一二三| 国产三级视频在线播放| 色综合久久88| 久久综合五月婷婷| 人妻精品无码一区二区三区| 久久久亚洲欧洲日产国码αv| 午夜婷婷在线观看| 国产一区二区三区在线观看网站| 三上悠亚激情av一区二区三区 | 国产精品久久无码| 偷拍与自拍一区| 男人久久精品| 国产美女高潮久久白浆| 欧美1区免费| 菠萝菠萝蜜网站| 欧美性极品少妇| 福利视频在线| 国产在线一区二区三区四区| 中文高清一区| 四季av中文字幕| 日韩欧美电影在线| 中文在线资源| 一区二区三区久久网| 国产91对白在线观看九色| 国产性xxxx高清| 在线播放日韩欧美| 久久一级大片| 99精品视频在线看| 中文字幕一区二区三区乱码在线 | 国产午夜精品全部视频在线播放| 欧洲成人一区| 少妇大叫太大太粗太爽了a片小说| 99精品久久只有精品| 欧美性受xxx黑人xyx性爽| 美女黄色丝袜一区| 久久综合色占| 下面一进一出好爽视频| 欧美日韩亚洲精品一区二区三区| 成人不用播放器| 成人精品水蜜桃| 日韩一区精品视频| 免费在线观看亚洲| 亚洲最新视频在线| 大奶一区二区三区| 国产精品久久a| 五月婷婷另类国产| 黄色的网站在线观看| 欧洲精品在线一区| 从欧美一区二区三区| 在线观看免费观看在线| 97视频在线观看免费|