亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cdio.cpp

?? WinCE5.0BSP for Renesas SH7770
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    SGX_BUF SgBuf;
    DWORD dwRet;

    memset((void *)&CmdPkt, 0, sizeof(CmdPkt));
    CmdPkt.Opcode = ATAPI_PACKET_CMD_INQUIRY;                     
    CmdPkt.Byte_4 = sizeof(INQUIRY_DATA);
    
    SgBuf.sb_len = sizeof(INQUIRY_DATA);
    SgBuf.sb_buf = (PBYTE) pInqData;

    if (AtapiSendCommand(&CmdPkt)) {
        if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
            DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("AtapiIssueInquriy Failed\r\n")));
            return FALSE;
        }
    } else {
       return FALSE;
    }    
    return TRUE;
 }


//---------------------------------------------------------------------------   
//
//  Function: AtapiLoadMedia
//
//  synopsis: Process a IOCTL_CDROM_LOAD_MEDIA/IOCTL_CDROM_EJECT_MEDIA request
//
//  ENTRY
//      Nothing    
//  EXIT
//      Extended error set on failure
//
//-----------------------------------------------------------------------------


DWORD CSHXDiskAndCD::AtapiLoadMedia(BOOL bEject)
{
    ATAPI_COMMAND_PACKET    CmdPkt;
    SGX_BUF SgBuf;
    DWORD dwRet;
    DWORD dwError = ERROR_SUCCESS;

    DEBUGMSG(ZONE_IOCTL, (TEXT("ATAPI:ATAPILoadMedia - Entered. Load=%s\r\n"), bEject ? L"TRUE": L"FALSE"));
    memset((void *)&CmdPkt, 0, sizeof(CmdPkt));
    CmdPkt.Opcode = ATAPI_PACKET_CMD_START_STOP;                     
    CmdPkt.Byte_4 = bEject ? 2 : 3;
    
    SgBuf.sb_len = 0;
    SgBuf.sb_buf = NULL;
 
    if (AtapiSendCommand(&CmdPkt)) {
        if (!AtapiReceiveData(&SgBuf, 0, &dwRet)) {
            DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::LoadMedia failed on receive\r\n")));
            dwError = ERROR_READ_FAULT;
        }
        if (!bEject) {
            Sleep(5000);
            AtapiIsUnitReadyEx();
        }
    } else {
       return ERROR_GEN_FAILURE;
    }    
    return dwError;
}

DWORD CSHXDiskAndCD::AtapiStartDisc()
{
    ATAPI_COMMAND_PACKET    CmdPkt;
    SGX_BUF SgBuf;
    DWORD dwRet;
    DWORD dwError = ERROR_SUCCESS;

    DEBUGMSG(ZONE_CDROM, (TEXT("ATAPI:AtapiStartDisc - Entered.\r\n")));
    memset((void *)&CmdPkt, 0, sizeof(CmdPkt));
    CmdPkt.Opcode = ATAPI_PACKET_CMD_START_STOP;                     
    CmdPkt.Byte_4 = 1;
    
    SgBuf.sb_len = 0;
    SgBuf.sb_buf = NULL;
 
    if (AtapiSendCommand(&CmdPkt)) {
        if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
            DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::LoadMedia failed on receive\r\n")));
            dwError = ERROR_READ_FAULT;
        }
    } else {
       return ERROR_GEN_FAILURE;
    }    
    return dwError;
}

DWORD CSHXDiskAndCD::AtapiReadQChannel(PIOREQ pIOReq)
{
    ATAPI_COMMAND_PACKET    CmdPkt;
    SGX_BUF SgBuf;
    DWORD dwRet;
    DWORD dwError = ERROR_SUCCESS;
    CDROM_SUB_Q_DATA_FORMAT *pcsqdf = (CDROM_SUB_Q_DATA_FORMAT *)pIOReq->pInBuf;
    SUB_Q_CHANNEL_DATA sqcd;
    DWORD dwDataSize = 0;

    if (!pcsqdf || !pIOReq->pOutBuf || (sizeof(CDROM_SUB_Q_DATA_FORMAT) != pIOReq->dwInBufSize)) {
        return ERROR_BAD_ARGUMENTS;
    }
    switch( pcsqdf->Format) {
        case IOCTL_CDROM_CURRENT_POSITION:
            dwDataSize = sizeof(SUB_Q_CURRENT_POSITION);
            break;
        case IOCTL_CDROM_MEDIA_CATALOG:
            dwDataSize = sizeof(SUB_Q_MEDIA_CATALOG_NUMBER);
            break;
        case IOCTL_CDROM_TRACK_ISRC:
            dwDataSize = sizeof(SUB_Q_TRACK_ISRC);
            break;
        default:
            dwError = ERROR_BAD_FORMAT;
    }
    if (pIOReq->dwOutBufSize < dwDataSize) {
        dwError = ERROR_BAD_ARGUMENTS;
    }    

    if (dwError == ERROR_SUCCESS) {
        memset((void *)&CmdPkt, 0, sizeof(CmdPkt));
        CmdPkt.Opcode = ATAPI_PACKET_CMD_READ_SUB_CHAN;
            CmdPkt.Byte_1 = 0x00;
            CmdPkt.Byte_2 = 0x40;               // Header + data required
            CmdPkt.Byte_3 = (BYTE)(pcsqdf->Format);                  
            CmdPkt.Byte_8 = (BYTE)dwDataSize;         
        
        SgBuf.sb_len = dwDataSize;
        SgBuf.sb_buf = (PBYTE) &sqcd;

        if (AtapiSendCommand(&CmdPkt)) {
            if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
                DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::ReadQChannel failed on receive\r\n")));
                dwError = ERROR_READ_FAULT;
            } else {
                memcpy( pIOReq->pOutBuf, (LPBYTE)&sqcd, dwDataSize);
            }
        } else {
            DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::ReadQChannel failed on SendCommand\r\n")));
            dwError = ERROR_GEN_FAILURE;
        }    
    }    

    return dwError;
}

//---------------------------------------------------------------------------   
//
//  Function: AtapiGetToc
//
//  synopsis: Gets the table of contents from the media
//
//  ENTRY
//      Nothing    
//  EXIT
//      Extended error set on failure
//
//-----------------------------------------------------------------------------
BOOL CSHXDiskAndCD::AtapiGetToc(CDROM_TOC * pTOC)
{
    ATAPI_COMMAND_PACKET    CmdPkt;
    SGX_BUF SgBuf;
    DWORD dwRet;
    BOOL fRet = TRUE;

    memset((void *)&CmdPkt, 0, sizeof(CmdPkt));
    CmdPkt.Opcode = ATAPI_PACKET_CMD_READ_TOC;
    CmdPkt.Byte_1 = 0x02;           // Use MSF Address Format 
    CmdPkt.Byte_7 = (BYTE)((sizeof(CDROM_TOC)>> 8) &0x0FF);    //3
    CmdPkt.Byte_8 = (BYTE)(sizeof(CDROM_TOC) &0x0FF);          // 24
    
    SgBuf.sb_len = sizeof(CDROM_TOC);
    SgBuf.sb_buf = (PBYTE) pTOC;

    if (AtapiSendCommand(&CmdPkt)) {
        if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
            DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::GetToc failed on receive\r\n")));
            fRet = FALSE;
        } else {
            WORD wTOCDataLen = (MAKEWORD(pTOC->Length[1], pTOC->Length[0]) - 2);
    
            //
            //      Minus 4 for the the entire header
            //
    
            if (wTOCDataLen != (dwRet - 4))
            {
                DEBUGMSG(ZONE_ERROR, (TEXT("ATAPI:AtapiGetToc - Bad Length in TOC Header = %d, Expecting = %d\r\n"), wTOCDataLen, dwRet - 4));
                fRet = FALSE;
            }
    
            if ((wTOCDataLen % sizeof(TRACK_DATA)) != 0)
            {
                DEBUGMSG( ZONE_ERROR, (TEXT("ATAPI:AtapiGetToc - Data length  = %d which is not a multiple of CDREADTOC_MSFINFO size\r\n"), wTOCDataLen));
                fRet = FALSE;
            }
        }
    } else {
         DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::GetToc failed on SendCommand\r\n")));
        fRet = FALSE;
    }    

    return fRet;
}

//---------------------------------------------------------------------------
//
//      Function: AtapiGetDiscInfo
//
//      Synopsis: implements CDROM_IOCTL_DISC_INFO - Get Disc Information
//
//              This function returns the TOC (table of contents) information
//              from the Q-channel in the lead-in track of the disc, which
//              indicates the starting and ending tracks and the start of
//              the lead-out track.
//
//              The first and last track number are binary values, not BCD.
//
//              It is recommended that the information from the TOC be read
//              in and cached on drive initialization so that when this function
//              is called, there is not need to interrupt drive play to get this
//              information.  Note that the first and last track numbers do not
//              include the lead-in and lead-out tracks of the session.
//
//              The SessionIndex is used to get TOC information from disks
//              with more than one recorded session.  Sessions are the same
//              as OrangeBook Volumes.  The first session has a SessionIndex
//              of zero, and the second session has a SessionIndex of one.
//              A SessionIndex of DISC_INFO_LAST_SESSION (-1) requests the disc
//              info for the last session recorded on the disc.
//
//              The LogicStartAddr is the logical sector address of the first
//              data sector of the first track in this session.
//
//              For standard Redbook and Yellowbook CD-ROMs, zero (0) is the
//              only valid SessionIndex value.  In this case, LogicStartAddr
//              should be returned as zero (0).
//
//              Note: The LogicStartAddr is normally used to locate the first
//              sector of the Volume Recognition Sequence for the indicated
//              session. The Volume Recognition Sequence for the session is
//              expected to start at Sector (LogicStartAddr + 16).
//
//      ENTRY
//              IOCTL Packet format specified by CDROM_DISCINFO structure.
//              Reserved - Reserved Zero
//              SessionIndex - Set to desired session number to query.
//              SessionIndex = 0 indicates a query for the first session
//              SessionIndex = 0xFFFFFFFF indicates a query for the last
//              session on the disc
//
//      EXIT
//              Success
//                      Returns NO_ERROR
//                      CDROM_DISCINFO structure filled in for indicated session
//
//                      If SessionIndex was passed in as 0xFFFFFFFF, it may be
//                      modified to contain the index of the last session on the
//                      disc.  Because not all device drivers must scan through
//                      all the sessions on the disc, this update may or may not
//                      actually take place.
//
//              Failure
//                      Returns an extended error code.
//                      ERROR_UNKNOWN_COMMAND - The command is not supported
//                      ERROR_INVALID_PARAMETER - The session number is invalid
//                      Other Extended Errors may also be returned
//-----------------------------------------------------------------------------

DWORD CSHXDiskAndCD::AtapiGetDiscInfo(PIOREQ pIOReq)
{
// TODO: Support multiple sessions
    CDROM_DISCINFO *pDiscInfo = (CDROM_DISCINFO *)pIOReq->pOutBuf;
    CDROM_TOC Toc;
    DWORD dwError = ERROR_SUCCESS;

    return ERROR_SUCCESS; // Bypass for now !!!

    if ((pDiscInfo == NULL) || 
        (pIOReq->dwOutBufSize< sizeof(CDROM_DISCINFO))) {
        return(ERROR_INVALID_PARAMETER);
    }    
    if (AtapiGetToc(&Toc)) {

        TRACK_DATA *pTrack = &(Toc.TrackData[0]);
    
        WORD wStartTrack = 0, wLastTrack = 0;
        // Find the first & last track of the requested session using the LeadOutTrack to detect
        // the session changes
        WORD wTrackIndex;

        //
        //      The size or the array is the indicated size minus two bytes. One byte
        //      for the first track number and one for the last
        //
    
        WORD wTOCDataLen = (MAKEWORD(Toc.Length[1], Toc.Length[0]) - 2);
        
        // If there is already a TOC buffer alloacted then see if it is big enough to hold the
        // newly read TOC, else allocate a buffer to cache the TOC track info here
    
        WORD wTrackCount = wTOCDataLen/sizeof(TRACK_DATA);
    
        for (wTrackIndex = 0; wTrackIndex < wTrackCount; wTrackIndex++) {
            if (pTrack[wTrackIndex].TrackNumber == 0xaa) { // CDATAPI_SESSION_LEADOUT_TRACK = 0xaa
                break;
            } else {
                if( pTrack[wTrackIndex].TrackNumber < wStartTrack)
                {
                    wStartTrack = pTrack[wTrackIndex].TrackNumber;
                    wStartTrack = wTrackIndex;
                }
                if( pTrack[wTrackIndex].TrackNumber > wLastTrack)
                {
                    wLastTrack = pTrack[wTrackIndex].TrackNumber;
                }                        
            }
        }
    
        if (wTrackIndex == wTrackCount)  {
            dwError = ERROR_IO_DEVICE;
            return FALSE;
        }
    
        pDiscInfo->FirstTrack = pTrack[wStartTrack].TrackNumber;
        pDiscInfo->LastTrack =  pTrack[wLastTrack].TrackNumber;
    
        pDiscInfo->LogicStartAddr = CDROM_MSFCOMP_TO_LBA(pTrack[wStartTrack].Address[1], pTrack[wStartTrack].Address[2], pTrack[wStartTrack].Address[3]);
    
        pDiscInfo->LeadOutTrackAddr.msf_Frame = pTrack[wTrackIndex].Address[3];
        pDiscInfo->LeadOutTrackAddr.msf_Second = pTrack[wTrackIndex].Address[2];
        pDiscInfo->LeadOutTrackAddr.msf_Minute = pTrack[wTrackIndex].Address[1];
        pDiscInfo->LeadOutTrackAddr.msf_Filler = 0;
        
        pDiscInfo->FirstSession = 1;
        pDiscInfo->LastSession = 1;
        pDiscInfo->RetSession = 1;
     
    }
    return dwError;
}


BOOL CSHXDiskAndCD::AtapiDetectDVD()
{
    CDMODE_SENSE_INFO SenseInfo;
    ATAPI_COMMAND_PACKET    CmdPkt;
    SGX_BUF SgBuf;
    DWORD dwRet;

   
    memset(&CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
    CmdPkt.Opcode = ATAPI_PACKET_CMD_MODE_SENSE;        
    CmdPkt.Byte_2 = 0x2a;                      // Get the mech status page
    CmdPkt.Byte_7 = 2;                      // Say 512 bytes, expect only 18
    
    SgBuf.sb_len = sizeof(CDMODE_SENSE_INFO);
    SgBuf.sb_buf = (PBYTE) &SenseInfo;
    
    if (AtapiSendCommand(&CmdPkt)) {
        if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
            DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("AtaGetSenseInfo Failed!!!\r\n")));
            return FALSE;
        }
    } else {
         return FALSE;
    }
    return (SenseInfo.cap.cdvdc_readbits & READCAPS_DVD);
}

void CSHXDiskAndCD::AtapiDumpSenseData()
{
    CD_SENSE_DATA SenseData;
    if (AtapiGetSenseInfo(&SenseData)) {
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("Sense Info\r\n")));
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("   Error Code = 0x%2.2X, Segment Number = %d, Sense Key = 0x%2.2X\r\n"), SenseData.sd_ErrCode, SenseData.sd_SegNum, SenseData.sd_ILI_Key));
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("   Information = 0x%2.2X 0x%2.2X 0x%2.2X 0x%2.2X\r\n"), SenseData.sd_Info[0], SenseData.sd_Info[1], SenseData.sd_Info[2], SenseData.sd_Info[3]));
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("   Additional Sense Length = %d\r\n"), SenseData.sd_Length));
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("   Command Specific Information = 0x%2.2X 0x%2.2X 0x%2.2X 0x%2.2X\r\n"),SenseData.sd_CmdInfo[0], SenseData.sd_CmdInfo[1], SenseData.sd_CmdInfo[2], SenseData.sd_CmdInfo[3]));
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("   ASC = 0x%2.2X, ASCQ = 0x%2.2X, FRUC = 0x%2.2X\r\n"), SenseData.sd_SenseCode, SenseData.sd_Qualifier, SenseData.sd_UnitCode));
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("   Sense Key Specfic = 0x%2.2X 0x%2.2X 0x%2.2X\r\n"), SenseData.sd_Key1, SenseData.sd_Key2, SenseData.sd_Key3));
    } else {
        DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT(" Unable to get CD Sense info\r\n")));
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国女主播一区二区三区| 精品久久久久香蕉网| 亚洲精品伦理在线| 99精品1区2区| 亚洲乱码国产乱码精品精98午夜 | 欧美性淫爽ww久久久久无| 亚洲精品国产一区二区精华液| 色综合久久久网| 午夜国产精品一区| 精品免费99久久| 成人国产精品免费观看视频| 亚洲欧洲一区二区三区| 99在线视频精品| 亚洲永久免费视频| 欧美xxx久久| 成人小视频免费观看| 一区二区三区色| 日韩丝袜情趣美女图片| 成人免费高清视频| 亚洲一级电影视频| 久久综合九色综合欧美98| 成人免费av网站| 秋霞午夜鲁丝一区二区老狼| 中文字幕av一区 二区| 精品视频999| 国产精品综合一区二区| 综合久久综合久久| 日韩视频免费观看高清完整版| 国产成人一区在线| 亚洲国产日韩a在线播放性色| 欧美xxxxxxxxx| 日本乱码高清不卡字幕| 精品一区二区综合| 亚洲美女视频在线| 精品久久一二三区| 欧美日韩性生活| 成人午夜激情在线| 视频一区中文字幕| 亚洲视频图片小说| 亚洲精品一线二线三线无人区| 一本色道久久综合精品竹菊| 精品综合免费视频观看| 亚洲综合激情另类小说区| 久久五月婷婷丁香社区| 欧美人体做爰大胆视频| 99久久精品一区二区| 九九热在线视频观看这里只有精品| 一区二区三区高清不卡| 亚洲国产激情av| 日韩欧美国产一二三区| 欧美色精品在线视频| 99视频有精品| 国产高清久久久| 美女视频一区在线观看| 亚洲国产综合人成综合网站| 国产精品免费免费| 久久久久久久久久久99999| 欧美久久久久中文字幕| 91蝌蚪porny九色| 风间由美性色一区二区三区| 黄色日韩三级电影| 男男成人高潮片免费网站| 亚洲一区二区在线免费观看视频 | 国产精品影视在线| 久久91精品久久久久久秒播 | 精品一区二区三区久久| 丝袜美腿亚洲一区二区图片| 一区二区三区在线免费| 亚洲视频你懂的| 亚洲视频电影在线| 18涩涩午夜精品.www| 中文字幕亚洲综合久久菠萝蜜| 久久日韩粉嫩一区二区三区| 久久这里只有精品首页| www国产成人| 久久久综合精品| 久久久亚洲精品石原莉奈 | 国产成人自拍高清视频在线免费播放| 青青草国产精品亚洲专区无| 免费成人在线网站| 久久99久久精品| 韩国av一区二区三区四区 | 日韩av网站在线观看| 日本伊人午夜精品| 麻豆精品一二三| 精品午夜久久福利影院| 黄一区二区三区| 成人免费电影视频| 一道本成人在线| 欧美人动与zoxxxx乱| 欧美一区午夜精品| 久久先锋资源网| 国产精品欧美极品| 亚洲综合网站在线观看| 日韩国产高清影视| 久久精品国产99国产| 国产夫妻精品视频| 91最新地址在线播放| 欧美亚洲综合色| 日韩欧美在线影院| 日本一区二区三区四区在线视频| 中文字幕亚洲视频| 亚欧色一区w666天堂| 久久91精品国产91久久小草| 不卡在线视频中文字幕| 欧美日韩黄视频| 久久久久久久久久久电影| 亚洲色图.com| 蜜乳av一区二区| 懂色av一区二区在线播放| 在线观看网站黄不卡| 欧美变态口味重另类| 国产精品久久久久一区二区三区共| 亚洲一区电影777| 国产精品99久久久久久似苏梦涵| 99re这里都是精品| 日韩美女一区二区三区四区| 国产精品久久久一本精品 | 欧美日韩专区在线| 久久久国产一区二区三区四区小说| 亚洲欧美成aⅴ人在线观看| 美国毛片一区二区| 91麻豆6部合集magnet| 亚洲精品在线电影| 亚洲第一电影网| 丁香天五香天堂综合| 欧美日韩国产天堂| 国产精品欧美一区二区三区| 麻豆视频一区二区| 欧洲色大大久久| 中文字幕av不卡| 另类欧美日韩国产在线| 欧美最猛黑人xxxxx猛交| 久久久亚洲精品一区二区三区| 亚洲电影欧美电影有声小说| 成人在线视频首页| 日韩美一区二区三区| 午夜精品视频在线观看| 99久久国产综合色|国产精品| 精品日韩一区二区| 日日欢夜夜爽一区| 在线观看日韩电影| 亚洲国产精品精华液ab| 国精产品一区一区三区mba视频| 欧美视频精品在线| 国产精品国产三级国产普通话蜜臀| 狠狠狠色丁香婷婷综合激情| 欧美嫩在线观看| 亚洲综合成人在线视频| 91在线精品一区二区三区| 日本一区二区三级电影在线观看 | 国产乱码精品一区二区三区av| 欧美精品自拍偷拍| 亚洲一二三区在线观看| 色狠狠一区二区| 亚洲麻豆国产自偷在线| aaa欧美大片| 1区2区3区国产精品| www.66久久| 亚洲欧洲国产日韩| 97久久人人超碰| 国产精品美女久久久久aⅴ| 丰满少妇久久久久久久| 91久久免费观看| 亚洲愉拍自拍另类高清精品| 欧美三区在线观看| 尤物视频一区二区| 色噜噜狠狠色综合中国| 一区二区在线观看av| 色天使久久综合网天天| 亚洲综合一区在线| 欧美日韩国产免费| 免费在线一区观看| 26uuu精品一区二区三区四区在线| 韩国精品久久久| 亚洲国产精品精华液ab| 99国内精品久久| 亚洲夂夂婷婷色拍ww47| 欧美日韩卡一卡二| 蜜桃一区二区三区在线观看| 精品噜噜噜噜久久久久久久久试看 | 久久99精品久久久久久久久久久久| 日韩女优电影在线观看| 国产福利91精品一区| 亚洲欧洲精品一区二区三区| 色一情一乱一乱一91av| 五月天网站亚洲| 精品久久免费看| 99re视频精品| 男男成人高潮片免费网站| 精品成人在线观看| av在线不卡免费看| 亚洲国产精品一区二区久久| 日韩精品一区二区三区中文不卡| 国产成人精品综合在线观看| 中文字幕中文字幕在线一区| 欧美亚洲高清一区| 国产一区二区免费视频| 亚洲欧洲色图综合| 日韩欧美美女一区二区三区|