色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CanIf發(fā)送邏輯CanIf_Transmit機制及CanIf發(fā)送配置解析

冬至子 ? 來源:汽車電子過山車 ? 作者:歡樂皮皮峰 ? 2023-07-17 15:51 ? 次閱讀

一.前言:

整個的AUTOSAR的CAN通信模塊的層次如圖:

圖片

通信模塊可以大致分為三大功能:數(shù)據(jù)發(fā)送功能,數(shù)據(jù)接收功能,狀態(tài)切換和管理功能。

我們的系列按照這樣的功能排序和自底向上的模塊排序,每次只介紹其中的一個模塊的其中一個功能的實現(xiàn),所以在每篇文章中對于模塊不會事無巨細(xì)的介紹所有它所具備的功能,而是選擇性的介紹三大功能中的其中一個。BSW往上的所有模塊示例,為最大程度了解其設(shè)計思路以及避免侵權(quán)風(fēng)險,將會采用遵循AUTOSAR架構(gòu)的非商業(yè)代碼作為示例,其部分細(xì)節(jié)不保證完全遵循AUTOSAR最新的標(biāo)準(zhǔn),不保證所有功能的具備,敬請理解。

二.Canif模塊及其發(fā)送函數(shù)CanIf_Transmit

在上節(jié)的文章中介紹了CAN模塊的發(fā)送底層邏輯,Can_Write函數(shù)的介紹。Can_Write函數(shù)已經(jīng)對CAN驅(qū)動進(jìn)行了抽象。抽象為了HOH供上層使用。而它的上層就是CanIf層.在CanIf模塊中,主要實現(xiàn)的功能如下:

1.傳輸請求(Transmit request)

傳輸請求功能的實現(xiàn)主體函數(shù)是CanIf_Transmit,這個函數(shù)內(nèi)部調(diào)用Can_Write進(jìn)行報文的發(fā)送

2.傳輸確認(rèn)(Transmit confirmation)

傳輸確認(rèn)功能的實現(xiàn)主體函數(shù)是CanIf_TxConfirmation,這個函數(shù)在CAN發(fā)送完成后被調(diào)用,作用是調(diào)用更上層的發(fā)送確認(rèn)回調(diào)函數(shù)通知更上層的各個模塊對應(yīng)的PDU已發(fā)送成功。

3.接收提示(Reception indication)

傳輸確認(rèn)功能的實現(xiàn)主體函數(shù)是CanIf_RxIndication,這個函數(shù)在CAN發(fā)送完成后被調(diào)用,作用是調(diào)用更上層的發(fā)送確認(rèn)回調(diào)函數(shù)通知更上層的各個模塊對應(yīng)的PDU已發(fā)送成功。

4.CAN控制器模式切換(Controller mode control)

controller模式切換的功能實現(xiàn)主體函數(shù)是CanIf_SetControllerMode,涉及到模式切換的功能后面專題詳解

5.PDU模式切換(PDU mode control)

PDU模式切換的功能實現(xiàn)主體函數(shù)是CanIf_SetPduMode,涉及到模式切換的功能后面專題詳解

整個CanIf模塊實現(xiàn)的基本函數(shù)如下:

1.jpg

本文側(cè)重介紹CanIf模塊的發(fā)送功能。CanIf的報文發(fā)送功能由CanIf_Transmit函數(shù)實現(xiàn),此函數(shù)原型如下:

Std_ReturnType CanIf_Transmit(PduIdType CanTxPduId,
                        const PduInfoType *PduInfoPtr)

此函數(shù)會調(diào)用MCAL的Can模塊中的Can_Write函數(shù)進(jìn)行報文的發(fā)送。在上節(jié)介紹Can_Write函數(shù)的時候,說過其傳入的參數(shù)是以下:

  1. HOH
  2. CAN id:報文ID
  3. length:報文長度
  4. sdu:報文數(shù)據(jù)
  5. swPduHandle :tx_confirm的ID

而CanIf層的傳入?yún)?shù)變?yōu)榱耍?/p>

  1. CanTxPduId,
  2. PduInfoPtr這個參數(shù)包括了SduDataPtr和SduLength

所以CanTxPduId對Can_Write函數(shù)所需的HOH,CAN ID,swPduHandle做了抽象。我們基本也可以推斷出CanIf的TxPDU所需要配置的主要內(nèi)容了。

三.Canif模塊的發(fā)送配置解析

以下例子用于說明CanIf層的tx配置。

Canif涉及到發(fā)送報文的主要配置結(jié)構(gòu)體如下:

const CanIf_InitConfigType CanIfInitConfig =
{
  .CanIfConfigSet = 0, 
  .CanIfNumberOfCanRxPduIds = sizeof(CanIfRxPduConfigData)/sizeof(CanIf_RxPduConfigType),
  .CanIfNumberOfCanTXPduIds = sizeof(CanIfTxPduConfigData)/sizeof(CanIf_TxPduConfigType),
  .CanIfNumberOfDynamicCanTXPduIds = 0, 


  // Containers
  .CanIfHohConfigPtr = CanIfHohConfigData,
  .CanIfRxPduConfigPtr = CanIfRxPduConfigData,
  .CanIfTxPduConfigPtr = CanIfTxPduConfigData,
};

我們以下主要關(guān)注:

1.HOH的配置結(jié)構(gòu)體CanIfHohConfigData,

2.發(fā)送PDU配置結(jié)構(gòu)體CanIfTxPduConfigData

1.HOH的配置結(jié)構(gòu)體CanIfHohConfigData,

對于HOH的配置結(jié)構(gòu)體CanIfHohConfigData的結(jié)構(gòu)如下:

const CanIf_InitHohConfigType CanIfHohConfigData[] = {


  {
        #if(CANIF_CONTROL_CAN_DRIVER ==STD_ON)
    .CanConfigSet = &CanConfigSetData,
    #endif
    .CanIfHrhConfig = CanIfHrhConfigData_Hoh_1,
      .CanIfHthConfig = CanIfHthConfigData_Hoh_1,
  },
};

其中配置了發(fā)送的HTH和接收的HRH。對于發(fā)送的HTH配置如下:

const CanIf_HthConfigType CanIfHthConfigData_Hoh_1[] =
{
  {
  .CanIfHthType = CAN_BASIC,
  .CanIfCanControllerIdRef = CANIF_Channel_1,
  .CanIfHthIdSymRef = HOH_3_UDSTX_Node,
  },
  {
    .CanIfHthType = CAN_BASIC,
    .CanIfCanControllerIdRef = CANIF_Channel_1,
    .CanIfHthIdSymRef = HOH_3_NMTX_Node,
  },
  {
  .CanIfHthType = CAN_BASIC,
  .CanIfCanControllerIdRef = CANIF_Channel_1,
  .CanIfHthIdSymRef = HOH_3_XCPTX_Node,
  },
  {
    .CanIfHthType = CAN_BASIC,
    .CanIfCanControllerIdRef = CANIF_Channel_1,
    .CanIfHthIdSymRef = HOH_3_EcuTestNode_CanCluster,
  },
};

主要就是引用了上節(jié)文章例子中介紹的CAN模塊配置的四個HOH。

2.發(fā)送PDU配置結(jié)構(gòu)體數(shù)組CanIfTxPduConfigData

這個結(jié)構(gòu)體數(shù)組有所有的發(fā)送PDU配置,每個PDU都是一個結(jié)構(gòu)體成員,其中的一個成員配置示例如下:

const CanIf_TxPduConfigType CanIfTxPduConfigData[] = {
 {
  .CanIfTxConfrimPduId = CANTP_PDU_ID_UDS_PHYS_TX,
  .CanIfCanTxPduIdCanId = 0x7ea,
  .CanIfCanTxPduIdDlc = 8,
  .CanIfCanTxPduType = CANIF_PDU_TYPE_STATIC,
#if ( CANIF_READTXPDU_NOTIFY_STATUS_API == STD_ON )
  .CanIfReadTxPduNotifyStatus = false,
#endif
  .CanIfTxPduIdCanIdType = CANIF_CAN_ID_TYPE_11,
  .CanIfUserTxConfirmation = CanTp_TxConfirmation,
  .CanIfCanTxPduHthRef = &CanIfHthConfigData_Hoh_1[0],
  .PduIdRef = NULL,
  },
  .....
  }

關(guān)鍵的參數(shù)解釋如下:

  • CanIfTxConfrimPduId :用于為swPduHandle 復(fù)值,向?qū)?yīng)的TxConfirm函數(shù)傳入?yún)?shù)。
  • CanIfCanTxPduIdCanId:對應(yīng)PDU的報文ID
  • CanIfCanTxPduIdDlc:對應(yīng)PDU的報文長度
  • CanIfUserTxConfirmation:發(fā)送確認(rèn)回調(diào)函數(shù)
  • CanIfCanTxPduHthRef:發(fā)送此PDU要使用的HOH

類似上節(jié)的結(jié)尾說到的抽象。這些配置元素打包成一個結(jié)構(gòu)體數(shù)組元素,

CanIf_Transmit需要傳入的CanTxPduId,即代表這個配置結(jié)構(gòu)體數(shù)組的數(shù)組下標(biāo)。用來索引到其抽象的對象屬性。說起來比較枯燥,以下是CanIf_Transmit的實現(xiàn)函數(shù):

Std_ReturnType CanIf_Transmit(PduIdType CanTxPduId,
    const PduInfoType *PduInfoPtr)
{
  Can_PduType canPdu;
  const CanIf_TxPduConfigType *txEntry;
  CanIf_ControllerModeType csMode;
  CanIf_ChannelGetModeType pduMode;


  VALIDATE(CanIf_Global.initRun, CANIF_TRANSMIT_ID, CANIF_E_UNINIT );
  VALIDATE((PduInfoPtr != 0), CANIF_TRANSMIT_ID, CANIF_E_PARAM_POINTER );


  // Get the controller from L-PDU handle
  txEntry = CanIf_FindTxPduEntry(CanTxPduId);


  if (txEntry == 0)
  {
    VALIDATE(FALSE, CANIF_TRANSMIT_ID, CANIF_E_INVALID_TXPDUID);
    return E_NOT_OK;
  }


  CanIf_Arc_ChannelIdType channel = txEntry- >CanIfCanTxPduHthRef- >CanIfCanControllerIdRef;


  // Get and verify the controller mode
  if (CanIf_GetControllerMode(channel, &csMode) == E_NOT_OK){
    return E_NOT_OK;
  }


  if (csMode != CANIF_CS_STARTED){  // CANIF_161
    return E_NOT_OK;
  }


  // Get and verify the PDU channel mode control
  if (CanIf_GetPduMode(channel, &pduMode) == E_NOT_OK){
    return E_NOT_OK;
  }


  if ((pduMode != CANIF_GET_TX_ONLINE) && (pduMode != CANIF_GET_ONLINE)){
    return E_NOT_OK;
  }


  canPdu.id = txEntry- >CanIfCanTxPduIdCanId;
  canPdu.length = PduInfoPtr- >SduLength;
  canPdu.sdu = PduInfoPtr- >SduDataPtr;
  canPdu.swPduHandle = CanTxPduId;


  Can_ReturnType rVal = Can_Write(txEntry- >CanIfCanTxPduHthRef- >CanIfHthIdSymRef, &canPdu);


  if (rVal == CAN_NOT_OK){
    return E_NOT_OK;
  }
  if (rVal == CAN_BUSY)  // CANIF 082, CANIF 161
  {
    // Tx buffering not supported so just return.
    return E_NOT_OK;
  }

  return E_OK;
}

注意到其中CanIf_Transmit的傳入?yún)?shù)CanTxPduId的使用方式:

txEntry = CanIf_FindTxPduEntry(CanTxPduId);

CanIf_FindTxPduEntry的函數(shù)原型如下

static const CanIf_TxPduConfigType * CanIf_FindTxPduEntry(PduIdType id)
{
  if (id >= CanIf_ConfigPtr- >InitConfig- >CanIfNumberOfCanTXPduIds) {
    return NULL;
  } else {
    return &CanIf_ConfigPtr- >InitConfig- >CanIfTxPduConfigPtr[id];
  }
}

就是以CanIf_Transmit的傳入?yún)?shù)CanTxPduId為下標(biāo),找到對應(yīng)的CanIfTxPduConfigData的數(shù)組成員。并獲取其屬性,對Can_Write函數(shù)的傳入?yún)?shù)進(jìn)行配置。調(diào)用Can_Write函數(shù)進(jìn)行發(fā)送。

四.發(fā)送確認(rèn)函數(shù):CanIf_TxConfirmation

CanIf_TxConfirmation是由Can模塊底層驅(qū)動在PDU傳輸完成后調(diào)用的。之前講到Can_Write函數(shù)的其中一個傳入?yún)?shù):swPduHandle是用來在底層標(biāo)記傳輸?shù)腜DU ID,在更新MessageBuffer前記住PDU對應(yīng)的swPduHandle參數(shù),在對應(yīng)的PDU發(fā)出去后,底層驅(qū)動函數(shù)調(diào)用CanIf_TxConfirmation傳入swPduHandle。

而我們的CanIf_TxConfirmation實現(xiàn)如下:

void CanIf_TxConfirmation(PduIdType canTxPduId)
{
  VALIDATE_NO_RV(CanIf_Global.initRun, CANIF_TXCONFIRMATION_ID, CANIF_E_UNINIT)
  VALIDATE_NO_RV(canTxPduId < CanIf_ConfigPtr- >InitConfig- >CanIfNumberOfCanTXPduIds, CANIF_TXCONFIRMATION_ID, CANIF_E_PARAM_LPDU);


  const CanIf_TxPduConfigType* entry =
    &CanIf_ConfigPtr- >InitConfig- >CanIfTxPduConfigPtr[canTxPduId];


      if (entry- >CanIfUserTxConfirmation != NULL)
      {
        CanIf_ChannelGetModeType mode;
        CanIf_GetPduMode(entry- >CanIfCanTxPduHthRef- >CanIfCanControllerIdRef, &mode);
        if ((mode == CANIF_GET_TX_ONLINE) || (mode == CANIF_GET_ONLINE)
            || (mode == CANIF_GET_OFFLINE_ACTIVE) || (mode == CANIF_GET_OFFLINE_ACTIVE_RX_ONLINE) )
        {
          entry- >CanIfUserTxConfirmation(entry- >CanIfTxPduId);  /* CANIF053 */
        }
      }
      return;
}

在這個函數(shù)中,會直接向上文CanIfTxPduConfigData配置的CanIfUserTxConfirmation中傳入swPduHandle。

而在CanIf_Transmit中,swPduHandle又是由CanIfTxPduConfigData配置的CanIfTxConfrimPduId決定的。所以CanIfTxConfrimPduId會作為參數(shù)傳入對應(yīng)的CanIfUserTxConfirmation。

這期的介紹就到這,本期介紹了CanIf主要實現(xiàn)的功能,主要函數(shù),主要的發(fā)送配置以及CanIf_Transmit,CanIf_TxConfirmation的機制,可以了解CanIf做了更進(jìn)一步的抽象,將HOH進(jìn)一步抽象為了PDU。各個AUTOSAR架構(gòu)的代碼實現(xiàn)并不一致,文中所有的函數(shù)實現(xiàn)和配置思路僅作參考。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CAN通信
    +關(guān)注

    關(guān)注

    5

    文章

    94

    瀏覽量

    17932
  • 接收機
    +關(guān)注

    關(guān)注

    8

    文章

    1184

    瀏覽量

    53586
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    363

    瀏覽量

    21733
  • PDU
    PDU
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    17013
  • CAN控制器
    +關(guān)注

    關(guān)注

    3

    文章

    74

    瀏覽量

    15081
收藏 人收藏

    評論

    相關(guān)推薦

    ZYNQ進(jìn)階:PL端UART 發(fā)送設(shè)計案例

    主要是uart發(fā)送模塊的編碼講述,uart發(fā)送模塊設(shè)計主要分為波特率控制計數(shù)邏輯和按位發(fā)送邏輯,其具體編碼如下所示: 波特率控制計數(shù)
    的頭像 發(fā)表于 11-25 17:26 ?3639次閱讀
    ZYNQ進(jìn)階:PL端UART <b class='flag-5'>發(fā)送</b>設(shè)計案例

    cubemx配置的串口中斷發(fā)送HAL_UART_Transmit_IT不行

    為何HAL_UART_Transmit發(fā)送,改成HAL_UART_Transmit_IT就不行了cube配置的stm32f407系統(tǒng)其他代碼均一樣while(HAL_OK
    發(fā)表于 12-10 08:39

    請問怎么用HAL_UART_Transmit發(fā)送數(shù)值型數(shù)據(jù)?

    如何用HAL_UART_Transmit 發(fā)送數(shù)值型數(shù)據(jù)?我看例程,都是發(fā)送字符型數(shù)據(jù)的uint8_t TxData[10]= "01234abcde"
    發(fā)表于 02-19 07:40

    AUTOSAR_MCAL_CAN_IM.pdf提示找不到 config/CanIf.xdm怎么解決?

    在 AUTOSAR_MCAL_CAN_IM.pdf 文件中聲明還需要 CanIf 插件來實現(xiàn) CAN 插件。但是,當(dāng)我嘗試在 Tresos 上添加 CanIf 模塊時,它給出了一個錯誤,提示找不到
    發(fā)表于 03-30 08:48

    在EB tresos 23.0.0中配置模塊時出錯怎么解決?

    在EB tresos 23.0.0中配置模塊時出錯模塊“CanIf_TS_T40D2M10I3R0”(在插件“CanIf_TS_T40D2M10I3R0”中定義)定義了無法找到的模式文件
    發(fā)表于 04-11 09:06

    Verilog實現(xiàn)UART之二:發(fā)送模塊

    波特率的16倍,因此對clk16x計數(shù)到16時,發(fā)送D0;計數(shù)到32時,發(fā)送D1……依此類推; 2.發(fā)送模塊代碼: module tx_module( inputclk16x,/*transm
    發(fā)表于 02-09 09:48 ?775次閱讀
    Verilog實現(xiàn)UART之二:<b class='flag-5'>發(fā)送</b>模塊

    發(fā)送隊列長度功率控制

    無線多跳網(wǎng)絡(luò)具有信道時變性強、拓?fù)鋭討B(tài)變化等特點,需要簡單高效的功率控制機制。發(fā)射功率影響數(shù)據(jù)發(fā)送速率,而基于發(fā)送隊列長度的功率控制機制存在可行解。為此,結(jié)合無線多跳網(wǎng)絡(luò)中間節(jié)點需要協(xié)
    發(fā)表于 03-20 15:07 ?0次下載
    <b class='flag-5'>發(fā)送</b>隊列長度功率控制

    如何讓接收端知道發(fā)送端將要發(fā)送的字節(jié)流長度?

    tcp會將數(shù)據(jù)量較小,且發(fā)送時間間隔較短的數(shù)據(jù)一起打包發(fā)送,那么這里所講的時間較短是相比網(wǎng)絡(luò)延遲來說的。比如我們兩次發(fā)送間隔為0.00001s,那么網(wǎng)絡(luò)延遲為0.001s,這個時候兩次的數(shù)據(jù)就會打包
    的頭像 發(fā)表于 08-19 09:33 ?1594次閱讀
    如何讓接收端知道<b class='flag-5'>發(fā)送</b>端將要<b class='flag-5'>發(fā)送</b>的字節(jié)流長度?

    基于CAN總線進(jìn)行網(wǎng)絡(luò)管理與Transceiver的關(guān)系梳理

    Transceiver1145在初始化或者h(yuǎn)andler程序中檢查喚醒源,判斷到上電或者CAN總線干擾事件時會通知EcuM有喚醒事件,之后EcuM通過CanIf模塊調(diào)用CanTrcv_CheckWakeup檢查喚醒源。
    發(fā)表于 08-23 11:19 ?3130次閱讀
    基于CAN總線進(jìn)行網(wǎng)絡(luò)管理與Transceiver的關(guān)系梳理

    AUTOSAR通信之CanIf模塊簡介1

    CAN接口模塊(下文簡“CanIf”)位于底層CAN驅(qū)動(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務(wù)層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層通信層的CAN驅(qū)動程序服務(wù)接口。
    的頭像 發(fā)表于 02-13 14:29 ?4199次閱讀
    AUTOSAR通信之<b class='flag-5'>CanIf</b>模塊簡介1

    AUTOSAR通信之CanIf模塊簡介2

    CAN接口模塊(下文簡“CanIf”)位于底層CAN驅(qū)動(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務(wù)層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層通信層的CAN驅(qū)動程序服務(wù)接口。
    的頭像 發(fā)表于 02-13 14:29 ?2565次閱讀
    AUTOSAR通信之<b class='flag-5'>CanIf</b>模塊簡介2

    AUTOSAR通信之CanIf模塊簡介3

    CAN接口模塊(下文簡“CanIf”)位于底層CAN驅(qū)動(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務(wù)層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層通信層的CAN驅(qū)動程序服務(wù)接口。
    的頭像 發(fā)表于 02-13 14:29 ?3618次閱讀
    AUTOSAR通信之<b class='flag-5'>CanIf</b>模塊簡介3

    EthIf模塊的主要作用是什么?Ethif的常見函數(shù)接口有哪些呢?

    正如我們了解的CanIf模塊一樣,作為CAN收發(fā)器,CAN控制器的統(tǒng)一上層ECU抽象,能夠讓我們實現(xiàn)CanIf上層的應(yīng)用模塊與底層硬件解耦,大大增加了軟件的可移植性。
    的頭像 發(fā)表于 03-23 11:27 ?1612次閱讀

    PduR模塊的發(fā)送機制 PduR這個模塊對什么進(jìn)行了抽象呢?

    前兩期,我們講了CAN模塊的發(fā)送邏輯,Canif模塊的發(fā)送邏輯發(fā)送確認(rèn)
    的頭像 發(fā)表于 07-17 15:54 ?3296次閱讀
    PduR模塊的<b class='flag-5'>發(fā)送機制</b> PduR這個模塊對什么進(jìn)行了抽象呢?

    云途正式發(fā)布量產(chǎn)版本AUTOSAR MCAL驅(qū)動軟件和配置工具

    云途MCAL軟件包RTM v1.1.0包含了YTM32B1ME05 和YTM32B1MD1兩個系列車規(guī)MCU的片上外設(shè)模塊的驅(qū)動程序代碼和MCAL驅(qū)動模塊所需的相應(yīng)樁模塊(stub module)的示例代碼,如Det、Dem、CanIf、LinIf、EcuC和EcuM等。
    的頭像 發(fā)表于 07-19 15:29 ?2804次閱讀
    云途正式發(fā)布量產(chǎn)版本AUTOSAR MCAL驅(qū)動軟件和<b class='flag-5'>配置</b>工具
    主站蜘蛛池模板: 伦理片飘花免费影院 | 国内精品自产拍在线少密芽 | 精品久久久久久久99热 | 秋霞在线看片无码免费 | 沈阳熟女露脸对白视频 | 伊人色综合久久天天 | 嘿嘿视频在线观看 成人 | 亚洲精品无码不卡在线播放he | 久久这里只有是精品23 | 亚洲欧洲日韩国产一区二区三区 | 99视频全部看免费观 | 妺妺窝人体色WWW偷窥女厕 | 日韩欧无码一区二区三区免费不卡 | 色狠狠色狠狠综合天天 | 手机毛片在线观看 | 亚洲AV无码影院在线播放 | 亚洲精品偷拍影视在线观看 | 免费高清在线影片一区 | 精品国产精品人妻久久无码五月天 | 国产精品久久久久久熟妇吹潮软件 | 农民工老头在出租屋嫖老熟女 | 美女xx00| 午夜伦4480yy妇女久久 | 91精品乱码一区二区三区 | 伊人久久精品99热超碰 | 国产精品你懂的在线播放 | 一区二区三区无码高清视频 | 试看做受120秒免费午夜剧场 | bl高h乱肉辣文 | 国产精品资源在线观看网站 | 国产亚洲精品黑人粗大精选 | 中国拍三a级的明星女 | 囚禁固定在调教椅上扩张H 秋霞最新高清无码鲁丝片 秋霞在线看片无码免费 | 越南女子杂交内射BBWXZ | 亚洲午夜精品A片久久WWW解说 | 欧美最猛黑人AAAAA片 | 国产AV精品白浆一区二 | 亚洲国产在线精品国自产拍五月 | www.av一区 | 蜜臀AV熟女人妻中文字幕 | 日韩精品免费在线观看 |