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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? servo.c

?? 車載電子影音系統(tǒng)dvd播放系統(tǒng)原程序代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
//  Function    :   SERVO_SetSectors    // ** TCH0.27;
//  Description :   Record the play range
//  Arguments   :   dwStartPos  : the starting sector
//                  dwEndPos    : the ending sector
//  Return      :   FALSE if ( End < Start )
//  Side Effect :   It may set (End<Start) conscious sometime. In this condition,
//                  Servo will stop to send anything except re-set the range.
//  *********************************************************************
BIT SERVO_SetSectors (DWORD dwStartPos, DWORD dwEndPos)
{
    // Always record the LBA, If the wrong of LBA can inhibit the process of SERVO
    gdwEndLBA=dwEndPos;
    gdwNextLBA = dwStartPos ;
    if (dwEndPos < dwStartPos)
    {
        return FALSE;
    }

#ifdef   _DUMP_INFO     // ** TCH0.95; 
    printf ( "\nRange [%ld-%ld],", gdwNextLBA, gdwEndLBA );
    _bSRV_Debug= NULL;
#endif	// _DUMP_INFO

    // TCC050, move to here since UTL_PlayFromTime won't call SERVO_ReadSectors
    gbServoRunning = TRUE ;

    if (__wW99AVPCRLow | 0x0800)
    {
        __wW99AVPCRLow &= ~0x0800 ;
        // TCC173-2, vcd/mp3->dvd PCR will be in CDIF reset state
        W99AV_WriteRegDW (PCR, __wW99AVPCRLow, __wW99AVPCRHigh) ;
    }
    //REQ enable & disable EDC
    W99AV_WriteRegDW(DCR, 0x1, 0x0);    // TCC276, this register seems will be reset

#ifdef ENABLE_SCMS
    // Process SCMS
    if (!(__wDiscType & BOOK_DVD))
    {
        extern STATUS    gcShowStatus;

        // TCC1.00, if < 1, might be doing cdrom decode.
        if (gcShowStatus.wCurrentTrack < 1)
            return TRUE ;

        if (_trk_TOC [gcShowStatus.wCurrentTrack-1].Ctl & 0x40) // Data Track
            return TRUE ;

        ATAPI_ReadSubQ () ;

        switch ((_trk_TOC [gcShowStatus.wCurrentTrack-1].Ctl & 0x0F))
        {
            case 0: // May not be audio track
            case 1: // Without copy restriction
                W99AV_WriteDM (W99AV_DM_SCMS, 1) ;
                break ;
            case 2: // One copy permitted
                W99AV_WriteDM (W99AV_DM_SCMS, 0) ;
                break ;
            case 3: // No copy permitted
                W99AV_WriteDM (W99AV_DM_SCMS, 2) ;
                break ;
        }
    }
#endif

    // TCC172.
    if (!__bServoAutoCtrl)
        SERVO_ReadData (dwStartPos, 0xFFFFFFFF) ;
        
    return TRUE;
}
// ** TCH0.27; end...

// ***********************************************************************
//  Function    :   SERVO_GetCurrentPos
//  Description :   Used to get the last sent sector number
//  Arguments   :   None.
//  Return      :   TRUE/FALSE
//  Side Effect :
// ***********************************************************************
BIT SERVO_GetCurrentPos(PDWORD pCurrentPos)
{
#if 1   // TCC172, CDDA 4X needn't read q-code
    // TCC171, CDDA should get Q-Code to know current position.
    // TCC274, check playing mode method has updated
    //if ( __bModePlay == MODE_PLAYCDDA )
    //if (__bAttrPlay == ATTR_CDDA)
    // TCC274, VCD/SVCD/MP3 need to do q-channel torelence check.
    if (!__bServoAutoCtrl)
    {
        *pCurrentPos = 0 ;
        // TCC171, this command has been modified that will return 4 bytes(Ctl/ADR, Min, Sec, Frm) instead of 12 bytes as UDE's spec.
        //UDE_ClearPacket () ; //LJY2.31, remove UDE_ClearPacket
        aPacket[0] = 0x00;  // paramater length is 0
        aPacket[1] = UDE_COMMAND_GETQSUBCHANNEL ;     //UDE : GetQSubchannel Command

        if (!UDE_SendUDECmd (aPacket))
            return ERROR ;          
///        *pCurrentPos = _MSFtoHSG (_bUDEData[1], _bUDEData[2], _bUDEData[3]) ;
        *pCurrentPos = COMUTL_MSFtoHSG ( MAKE_MSF(_bUDEData[1], _bUDEData[2], _bUDEData[3])) ;
        return TRUE ;
    }
#endif
    // TCC022, must minus 1 to return the current position, or VCD playing not smooth
    // TCC040, add protection if next position is 0, then current position will become -1
    if (gdwNextLBA <= 0)
        *pCurrentPos = 0 ;
    else
        *pCurrentPos = gdwNextLBA - 1 ;

    return TRUE;
}

// **********************************************************
//DVD020LLY, because scan function will call this function to jump to another position
// ***********************************************************************
//  Function    :   SERVO_JumpGroove
//  Description :   Used to get the position for scan function
//  Arguments   :   None.
//  Return      :   The next scan position
//  Side Effect :
// ***********************************************************************
DWORD SERVO_JumpGroove(BYTE bForward, DWORD dwTime)
{
    extern WORD    __wScanGap;
    if ( bForward )   // KEY_SCF
    {
        // the jump time range
        dwTime+= __wScanGap;
    }
    else
    {
        if ( dwTime > (__wScanGap+ SCB_EXTRA) )
            dwTime-= (__wScanGap+ SCB_EXTRA);
        else
            dwTime= (DWORD) NULL;
    }
    // the time need jump to
    return dwTime;

}

// ***********************************************************************
//  Function    :   SERVO_GetDiscInfo
//  Description :   Used to get some the following informations from disc (not for DVD)
//  Arguments   :   pMinTrack : the minimum track number
//                  pMaxTrack : the maximum track number
//                  pMaxSector : the maximum sector number of the disc
//  Return      :   TRUE/FALSE
//  Side Effect :
// ***********************************************************************
BIT SERVO_GetDiscInfo(PBYTE pMinTrack, PBYTE pMaxTrack, PDWORD pMaxSector)
{
    *pMinTrack = _bFirstTrack;
    // TCC104, for "CD Extra" cd type, remove the last few tracks that's not audio track
    if ((__wDiscType == BOOK_CDDA) && (_dwDiscKey [0]==0))
    {
        // TCC161, only do this once is enough
        _dwDiscKey [0] = 1 ;
        _bSERVOTmp1 = _bLastTrack ;
        while (_bSERVOTmp1 > _bFirstTrack)
        {
            if (_trk_TOC[_bSERVOTmp1-1].Ctl & 0x40)  // Data Track
                _bSERVOTmp1 -- ;
            else
                break ;
        }
        _bLastTrack = _bSERVOTmp1 ;
    }
    *pMaxTrack = _bLastTrack;
    *pMaxSector = _sessioninfo_TOC [_bLastSession-1].dwLeadOutPos; // LJY275
    return TRUE;
}

// ***********************************************************************
//  Function    :   SERVO_GetDiscLength
//  Description  :   Used to get length for the disc (not for DVD)
//                  It will take session information into consideration.
//  Arguments   :   pLength : length of the disc
//  Return      :   TRUE/FALSE
//  Side Effect  :
// ***********************************************************************
BIT SERVO_GetDiscLength(PDWORD pLength)
{
    if (__wDiscType & BOOK_DVD)
    {
#ifdef SUPPORT_PRINTF        
        printf ("SERVO_GetDiscLength is not supported for DVD title\n") ;
#endif
        return TRUE ;
    }
    //LJY0.87, fix the wrong total disc time bug of Abex 721 CDDA test title
    *pLength = _sessioninfo_TOC [_bLastSession-1].dwLeadOutPos + TRACK_GAP;
    //LJY1.25, WYC1.25, fix CDDA gototime issue. Leadout should be the discend.
    *pLength = _sessioninfo_TOC [_bLastSession-1].dwLeadOutPos;// + TRACK_GAP;
    return TRUE;   
}

// ***********************************************************************
//  Function    :   SERVO_GetTrackEnd
//  Description  :   Used to get length for the track (not for DVD)
//  Arguments   :   bTrackNum : the track number you want to get the length
//                  pLength : length of the track
//  Return      :   TRUE/FALSE
//  Side Effect  :
// ***********************************************************************
BIT SERVO_GetTrackEnd(BYTE bTrackNum, PDWORD pLength)
{
    if (__wDiscType & BOOK_DVD)
    {
#ifdef SUPPORT_PRINTF        
        printf ("SERVO_GetTrackLength is not supported for DVD title\n") ;
#endif
        return FALSE ;
    }
    // LJY275, for multi-session 2002/6/28
    for (_bSERVOTmp2=0; _bSERVOTmp2<_bLastSession; _bSERVOTmp2++)
    {
        if ((bTrackNum >= _sessioninfo_TOC [_bSERVOTmp2].bFirstTrack) && (bTrackNum <= _sessioninfo_TOC [_bSERVOTmp2].bLastTrack))
            break ;
    }
    if (_bSERVOTmp2 >= _bLastSession)
    {
//LJY0.87, the track end of last track should be the sector of (leadout - 1)
        *pLength = _sessioninfo_TOC [_bLastSession-1].dwLeadOutPos - 1; //real track end
//      *pLength = _sessioninfo_TOC [_bLastSession-1].dwLeadOutPos;
        return FALSE ;
    }
    if (bTrackNum == _sessioninfo_TOC [_bSERVOTmp2].bLastTrack)
    {
//LJY0.87, the track end of last track should be the sector of (leadout - 1)
        *pLength = _sessioninfo_TOC [_bSERVOTmp2].dwLeadOutPos - 1; //real track end        
//        *pLength = _sessioninfo_TOC [_bSERVOTmp2].dwLeadOutPos;
    }
    else
    {
///        *pLength = _MSFtoHSG (_trk_TOC[bTrackNum].Min, _trk_TOC[bTrackNum].Sec, _trk_TOC[bTrackNum].Frm)- 1 ;
        *pLength = COMUTL_MSFtoHSG ( MAKE_MSF(_trk_TOC[bTrackNum].Min, _trk_TOC[bTrackNum].Sec, _trk_TOC[bTrackNum].Frm))- 1 ;
    }
   
    return TRUE ;
}

// ***********************************************************************
//  Function    :   SERVO_GetTrackInfo
//  Description :   Used to get informations from the track (not for DVD)
//  Arguments   :   bTrackNum : the track number you want to get information
//                  pTrackCtl : used to distinguish if the track is data or CDDA
//                  pStartPos : the starting sector number of the track
//  Return      :   TRUE/FALSE
//  Side Effect :
// ***********************************************************************
BIT SERVO_GetTrackInfo(BYTE bTrackNum, PBYTE pTrackCtl, PDWORD pStartPos)
{
    BYTE bIndex = bTrackNum - _bFirstTrack;

    // TCC172, except DVD & CDDA, all other types are not auto-control
    __bServoAutoCtrl=FALSE;
    //__dwTimeTorelence = 5 ;           // TCC171
    // TCC040, Set track type to DATA TRACK if disc type is DVD.
    // prevent stop->play fast/slow become invalid problem
    if (_bSERVODiscType == DISC_TYPE_DVD)
    {
        *pTrackCtl = DATA_TRACK ;
        __bServoAutoCtrl=TRUE;
        //__dwTimeTorelence = 0 ;               // TCC171
        return TRUE ;
    }
    else if (_bSERVODiscType == DISC_TYPE_CDI)
#if 0   // TCC276-2nd, don't use this variable.
    if (_btCDROM_CDI)   // CDI Disc
#endif
    {
        *pTrackCtl = 0x40 ;
        return FALSE ;
    }

    *pTrackCtl = _trk_TOC[bIndex].Ctl ;
    // TCC, ADR/Ctl read from ude dvdrom
    // cdda   -> 1
    // vcd    -> 41
    // MP3 m1 -> 61
    // MP3 m2 -> 41
    //if (*pTrackCtl & 40)
    if (*pTrackCtl & 0x40)      // TCC173
        *pTrackCtl = DATA_TRACK;        // ** DVD-TCH0.19;
    else    // Audio Track
    {
        *pTrackCtl = 0x0 ;
        __bServoAutoCtrl=TRUE;
        //__dwTimeTorelence = 0 ;               // TCC171
//LJY0.87b, servo can support interpolation for CT908.
#if 0 
        // TCC274, check Abex Title 721R/725B and enable interpolation by DSP.
        if ((_bLastTrack==15 && _sessioninfo_TOC [_bLastSession-1].dwLeadOutPos == 0x2f4bd)     //0x2f4bd
            // TCC276, add PHILIPS SBC 444A
            || (_bLastTrack==24 && _sessioninfo_TOC [_bLastSession-1].dwLeadOutPos == 0x41906))
            W99AV_WriteDM (0x518, 1) ;  // Enable dsp interpolation, only dbb dsp code support
        else
            W99AV_WriteDM (0x518, 0) ;  // Disable dsp interpolation
        W99AV_WriteDM (0x511, 30000) ;  // Threshold for dsp to do interpolation
#endif        
    }


///    *pStartPos = _MSFtoHSG (_trk_TOC[bIndex].Min, _trk_TOC[bIndex].Sec, _trk_TOC[bIndex].Frm) ;
    *pStartPos = COMUTL_MSFtoHSG( MAKE_MSF(_trk_TOC[bIndex].Min, _trk_TOC[bIndex].Sec, _trk_TOC[bIndex].Frm)) ;
    return TRUE;
}

//LJY278, for pre-start servo
BYTE SERVO_Seek (DWORD dwSeekLBA, BYTE  bWaitBusy)
{
    //UDE_ClearPacket () ; //LJY2.31, remove UDE_ClearPacket

    aPacket[1] = UDE_COMMAND_PRESTART_SERVO;   
    if (_bSERVODiscType == DISC_TYPE_DVD)
    {
        aPacket[0] = 4;       // command paramater length is 4
        aPacket[2] = HIBYTE(HIWORD(dwSeekLBA));
        aPacket[3] = LOBYTE(HIWORD(dwSeekLBA));
        aPacket[4] = HIBYTE(LOWORD(dwSeekLBA));
        aPacket[5] = LOBYTE(LOWORD(dwSeekLBA));
    }
    else 
    {
        aPacket[0] = 3;       // command paramater length is 3
        dwSeekLBA = COMUTL_HSGtoMSF (dwSeekLBA) ;
        aPacket[2] = MSF_MINUTE (dwSeekLBA) ;
        aPacket[3] = MSF_SECOND (dwSeekLBA) ;
        aPacket[4] = MSF_FRAME (dwSeekLBA) ;
    }
    
    if (UDE_SendUDECmd(aPacket) != TRUE)
         return ERROR;
    
    return TRUE ;
}


// ***********************************************************************
//  Function    :   SERVO_Monitor
//  Description :   Used to monitor the dma process
//                  1. Will check gbServoRunning to see if servo is running.
//                  2. Calculate number of sector for DMA
//                  3. Check if buffer is full (Won't check if only 1 sector (Maybe NV))
//                  4. Call SERVO_ReadData to really transfer bitstream
//                  5. Check if playing end
//  Arguments   :   None

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品在线视频观看| 久久亚洲捆绑美女| 日本一区二区三区高清不卡| 一区二区三区在线观看视频| 国产精品原创巨作av| 欧美性大战久久久| 国产精品人人做人人爽人人添| 日韩黄色片在线观看| 色一区在线观看| 中文字幕乱码亚洲精品一区| 精品一区二区日韩| 欧美精品视频www在线观看 | 一区二区三区在线观看欧美| 精品在线免费观看| 欧美精品视频www在线观看| 亚洲四区在线观看| 大桥未久av一区二区三区中文| 日韩一区二区影院| 视频在线观看一区二区三区| 91免费版pro下载短视频| 国产欧美日韩亚州综合 | 精品剧情v国产在线观看在线| 一区二区三区国产精品| 成人不卡免费av| 国产日韩精品一区二区三区| 国产一区二区日韩精品| 精品精品国产高清a毛片牛牛 | 精品在线视频一区| 日韩免费视频一区| 极品美女销魂一区二区三区| 日韩欧美专区在线| 美女视频黄免费的久久| 日韩一区二区精品在线观看| 日本视频免费一区| 欧美变态凌虐bdsm| 九色|91porny| 国产日韩欧美麻豆| 福利视频网站一区二区三区| 国产精品日产欧美久久久久| 欧美高清视频在线高清观看mv色露露十八| 国产欧美1区2区3区| 国产999精品久久久久久 | 欧美精品丝袜久久久中文字幕| 香蕉久久夜色精品国产使用方法| 色94色欧美sute亚洲线路一ni| 亚洲女同一区二区| 在线观看欧美日本| 日韩国产精品久久久久久亚洲| 日韩一区二区影院| 国产福利精品一区| 国产精品高潮久久久久无| 91视频com| 亚洲成av人片| 精品久久久三级丝袜| 成人理论电影网| 亚洲主播在线播放| 欧美变态tickle挠乳网站| 国产精品系列在线播放| 亚洲桃色在线一区| 欧美人xxxx| 国产福利一区二区三区视频在线| 中文字幕亚洲区| 91麻豆精品91久久久久久清纯| 久久国产精品露脸对白| 国产精品的网站| 欧美日韩二区三区| 国产成人在线色| 亚洲自拍偷拍综合| 久久综合999| 91成人网在线| 国产在线视频不卡二| 亚洲精品v日韩精品| 日韩一级在线观看| 91在线小视频| 国内精品伊人久久久久av一坑| 综合电影一区二区三区 | 国产农村妇女毛片精品久久麻豆| 91久久国产最好的精华液| 狠狠色丁香九九婷婷综合五月| 综合欧美亚洲日本| 精品日韩av一区二区| 91麻豆产精品久久久久久| 精品一区二区免费| 亚洲成av人片在线| 综合色中文字幕| 久久久久国产精品厨房| 欧美日韩精品欧美日韩精品| 本田岬高潮一区二区三区| 麻豆视频一区二区| 午夜av一区二区| 国产精品久久久久久久久免费桃花 | 亚洲国产一区二区a毛片| 精品国免费一区二区三区| 欧美日韩一本到| 一本在线高清不卡dvd| 国产成人av电影在线| 另类综合日韩欧美亚洲| 亚洲超碰97人人做人人爱| 国产精品高潮呻吟久久| 久久久.com| 26uuu亚洲| 欧美大片拔萝卜| 欧美日韩不卡视频| 欧美性色黄大片手机版| 91免费看视频| 99精品欧美一区二区蜜桃免费| 久久99国产精品久久| 轻轻草成人在线| 日韩高清在线电影| 天天综合网 天天综合色| 韩国成人在线视频| 国产精一品亚洲二区在线视频| 免费成人你懂的| 免费成人结看片| 午夜精品福利一区二区三区蜜桃| 一区二区在线看| 亚洲精品你懂的| 亚洲视频 欧洲视频| 欧美国产成人精品| 国产日产精品一区| 国产精品高潮呻吟| 亚洲视频中文字幕| 亚洲一区二区三区美女| 亚洲一区二区三区四区在线| 午夜精品成人在线视频| 日韩福利电影在线观看| 日日摸夜夜添夜夜添国产精品| 视频在线在亚洲| 美女脱光内衣内裤视频久久影院| 伦理电影国产精品| 国产福利91精品一区| av网站免费线看精品| 在线国产亚洲欧美| 欧美区一区二区三区| 精品免费视频.| 欧美经典一区二区| 亚洲精品中文字幕乱码三区| 亚洲小少妇裸体bbw| 欧美aaaaaa午夜精品| 国产一区二区看久久| 91毛片在线观看| 欧美精品乱码久久久久久按摩| 欧美mv日韩mv国产网站app| 国产性做久久久久久| 亚洲精品写真福利| 喷白浆一区二区| 高清国产一区二区三区| 色婷婷综合久久久久中文| 91精品国产福利在线观看| 国产午夜精品一区二区| 亚洲三级在线免费| 经典三级视频一区| 91麻豆产精品久久久久久| 91.xcao| 亚洲天堂网中文字| 日韩精品色哟哟| 色综合亚洲欧洲| 久久伊人蜜桃av一区二区| 一区二区三区国产| 国产一区二区三区四区五区美女| 91香蕉视频污在线| 久久久久久久久久久久久女国产乱 | 亚洲色图色小说| 久久99九九99精品| 91亚洲精品久久久蜜桃网站| 欧美一区二区三区在线看| 国产精品乱人伦中文| 日韩不卡一区二区| 在线国产电影不卡| 欧美激情综合五月色丁香 | 亚洲成人中文在线| 高清国产一区二区| 麻豆国产欧美一区二区三区| www.欧美.com| 久久久综合激的五月天| 亚洲精品一区二区三区四区高清| |精品福利一区二区三区| 黄色小说综合网站| 91麻豆精品国产91久久久久久久久 | 国产一区二区精品久久| 欧美日韩国产在线播放网站| 亚洲欧洲日韩综合一区二区| 国产精品一区2区| 日韩欧美123| 日韩av一级电影| 欧美日韩免费视频| 亚洲人成网站影音先锋播放| 成人午夜电影久久影院| 欧美精品一区二区三区蜜臀| 日韩精品欧美精品| 制服视频三区第一页精品| 亚洲高清免费视频| 欧美午夜宅男影院| 一区二区日韩av| 欧美亚洲一区二区在线| 欧美中文字幕一区二区三区| 免费观看一级特黄欧美大片| 成人久久久精品乱码一区二区三区| 久久婷婷国产综合精品青草| 久久精品国产99国产精品|