⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitor.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
            while( (UTL_GetSysTimer()-_dwMONTemp2) < COUNT_50_MSEC )            {                //COMDEC_Command query later                HAL_ReadInfo(HAL_INFO_DECCMD_ACK, &_dwMONTemp1);                if (_dwMONTemp1 == MODE_STOPPED)                    break;                //release CPU resource to other threads                 cyg_thread_yield();                        }                            _dwMONTemp1 = REG_MCU_DCR01;            HAL_DISABLE_INTERRUPTS(_dwMONTemp2);            // Chuan0.66, Use PLAT_RESET_VDEC instead of REG_VLD_INFO             MACRO_PLAT_KEY_LOCK( );            REG_PLAT_RESET_CONTROL &= ~(PLAT_RESET_VDEC);   // disable the VDEC            MACRO_PLAT_KEY_UNLOCK( );            //MACRO_PLAT_RESET_WAITSTABLE( );            //REG_VLD_INFO = 0;            MACRO_MCU_RESET_VIDEO_FIFO;   // Clear video Fifo            HAL_RESTORE_INTERRUPTS(_dwMONTemp2);            REG_MCU_DCR00 = _dwMONTemp1;            COMDEC_Command(MODE_FORCE_IP, 0);            COMDEC_Command(MODE_PLAY, 0);*/            /*HAL_PlayCommand(COMMAND_STOP,0);            HAL_Reset(HAL_RESET_VIDEO);            HAL_PlayCommand(COMMAND_PLAY,0);*/            _dwMONRecoverCnt--;            if (_dwMONRecoverCnt == 0)            {                _dwMONRecoverCnt = MONITOR_RETRY_COUNT;                // When read / write sector is same and not reach end sector, mean SERVO don't read data any more and just issue JUMP sector to read another position data.                if (1)//(__SF_SourceGBL[0].dwWriteSector == __SF_SourceGBL[0].dwReadSector) && (__SF_SourceGBL[0].dwWriteSector <= __SF_SourceGBL[0].dwEndSector))                    _dwMONNextStage = RECOVER_STAGE_JUMP_SECTOR;                else                    _dwMONNextStage = RECOVER_STAGE_HW_RESET;            }            else                _dwMONNextStage = RECOVER_STAGE_SW_RESET;            __dwMONRecoverStage = RECOVER_STAGE_IDLE;            break;        case    RECOVER_STAGE_JUMP_SECTOR:            DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_ASSERTION,"\nR_S Jump Sectors!");#ifndef NO_DISC_MODE //CoCo2.37p            if (__wDiscType & BOOK_DVD)            {                if (__dwMONJumpTime == 0)                {                    _dwMONTemp1 = CELL_QueryTime();                    __dwMONJumpTime = __wTimeChapterBegin + (WORD)_dwMONTemp1 + 20;                    if (((__dwMONJumpTime > __dwMONPreJumpTime) && ((__dwMONJumpTime - __dwMONPreJumpTime) < 100)) ||                         ((__dwMONPreJumpTime > __dwMONJumpTime) && ((__dwMONPreJumpTime - __dwMONJumpTime) < 100)))                    {                        // when this time jump position and last time is same, mean CELL return wrong position or F/W enter infinite                        // loop, so monitor will break it here to avoid infinite loop.                        _dwMONRecoverCnt = 1;                        DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_ASSERTION,"\nJump Same Position!");                    }                    __dwMONPreJumpTime = __dwMONJumpTime;                }                else                {                    __dwMONJumpTime += (50*(MONITOR_RETRY_COUNT - _dwMONRecoverCnt + 1));                }                if (__dwMONJumpTime >= __wTimeTitle )                    __dwMONJumpTime = __wTimeTitle;                if (__dwMONJumpTime <= _dwMONJumpChkTime)                {                    _dwMONRecoverCnt = MONITOR_RETRY_COUNT;                    _dwMONNextStage = RECOVER_STAGE_NEXT_ITEM;                    __dwMONRecoverStage = RECOVER_STAGE_IDLE;                    break;                }                else                {                    _dwMONPreARemain = (__dwMONJumpTime / 3600);                    _dwMONPreAFrmCnt = ((__dwMONJumpTime % 3600) / 60);                    _dwMONPreVRemain = ((__dwMONJumpTime % 3600) % 60);                    _dwMONTemp1=MAKE_TMSF(_dwMONPreARemain, (BYTE)_dwMONPreAFrmCnt, (BYTE)_dwMONPreVRemain, 0x0);                    DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_ASSERTION,"\nDVD Jump Time: %lx!",_dwMONTemp1);                    // wyc1.08, CSC suggested to issue source stop and parser stop before gototime, otherwise parser easily show                    // parser stop failed and abnormal.                    SrcFilter_Stop(__dwSFStreamID);                                HAL_ControlParser(HAL_PARSER_STOP, 0);                    NV_TimePlay(__bTitle, _dwMONTemp1);                    HAL_Reset(HAL_RESET_VIDEO); //CoCo.050                    // DVD_103Micky, fix GoToTime will hang issue                    // need restore the pla command                    UTL_TransferCommandID(__bModeCmd);                    // Micky1.07_909 // wyc1.07-909                    _bJumpTime = TRUE;                }                _dwMONJumpChkTime = __dwMONJumpTime;            }            else#endif //#ifndef NO_DVD //CoCo2.37p            {                SrcFilter_Stop(__dwSFStreamID);                            HAL_ControlParser(HAL_PARSER_STOP, 0);                CHIPS_SoftMute();                                HAL_Reset(HAL_RESET_AUDIO);                              HAL_WriteAM(HAL_AM_PLAY_COMMAND, 1);                HAL_Reset(HAL_RESET_VIDEO);                HAL_PlayCommand(COMMAND_PLAY,0);                CHIPS_OpenAudio(TRUE);                // LLY2.35, give start and end time for UTL_PlayFromTime() since the API is updated                UTL_PlayFromTime(__dwTimeNow+(75*5*(MONITOR_RETRY_COUNT - _dwMONRecoverCnt + 1)), __dwTimeEnd);            }            _dwMONRecoverCnt--;            if (_dwMONRecoverCnt == 0)            {                _dwMONRecoverCnt = MONITOR_RETRY_COUNT;                _dwMONNextStage = RECOVER_STAGE_HW_RESET;            }            else                _dwMONNextStage = RECOVER_STAGE_JUMP_SECTOR;            __dwMONRecoverStage = RECOVER_STAGE_IDLE;            break;        case    RECOVER_STAGE_HW_RESET:            DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_ASSERTION,"\nR_S H/W Reset!");            _dwMONNextStage = RECOVER_STAGE_RESET_SERVO;            __dwMONRecoverStage = RECOVER_STAGE_IDLE;            break;        case    RECOVER_STAGE_RESET_SERVO:            DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_ASSERTION,"\nR_S Reset Servo!");            SrcFilter_Reset(TRUE);            HAL_ControlParser(HAL_PARSER_STOP, 0);            PARSER_Command(0, PARSER_CMD_START, 0);            _dwMONNextStage = RECOVER_STAGE_NEXT_ITEM;            __dwMONRecoverStage = RECOVER_STAGE_IDLE;            break;        case    RECOVER_STAGE_NEXT_ITEM:            DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_ASSERTION,"\nR_S Next Item!");#ifndef NO_DISC_MODE //CoCo2.37p            if (__wDiscType & BOOK_DVD)            {                if ( !NV_Action ( ACTION_NEXT, (WORD)NULL) )    // don't allow next                {                    // ** 2.76-TCHM; begin...                    // DVD-Title, 1/16(PBC) KEY_NEXT inhibit. Just go MENU_ROOT. If can't, do STOP.                    if ( __bNVPlayMode )                                            {                        if ( ! NV_MenuCall ( MENU_ROOT ) )                        {                            // LLY2.37p, assign KEY_STOP from F/W                             // To avoid IR and F/W key conflict issue                            //__bISRKey= KEY_STOP;                            __bFWKey=KEY_STOP;                        }                    }                    else                        {   // Non-NV mode, just jump to TT/CC= 1/1                        NV_TitlePlay ( 1, 1 );                    }                    // ** 2.76-TCHM; end...                 }                else                {                    _bMaxNextTimes++;                    if (_bMaxNextTimes >= MONITOR_NEXT_TIMES)                    {                        _bMaxNextTimes = 0;#if (ERROR_RECOVER_MODE == GO_LONGEST_TITLE)                        if ( __bSmartPB_ABLE )                        {                            if ( NV_TitlePlay(__bMaxPBT_TT, 1))                            {                                SMAN_PushStateInfo ( STATE_PG, STATUS_READY );                            }                            else                            {                                __bFWKey = KEY_STOP;                            }                        }                        #elif (ERROR_RECOVER_MODE == GO_TT_CC_1_1)                        if ( NV_TitlePlay(1, 1))                        {                            SMAN_PushStateInfo ( STATE_PG, STATUS_READY );                        }                        else                        {                            __bFWKey = KEY_STOP;                        }#endif //                    }                }            }            else#endif// #ifndef NO_DVD //CoCo2.37p            {                // ** TCH1.61-1; begin... If VCD 2.0 and PBC mode. Check the valid of LIST_NEXT                // If invalid, let's to LINEAR mode#ifndef NO_DISC_MODE //++CoCo2.37p                if ( __wDiscType & VCD_2_0 )                {                    if ( __btPBC )                    {                        if ( ! VCD20_IsValid_Command ( LIST_NEXT ) )                        {                            __bFWKey=KEY_PBC;                            break;                        }                    }                }#endif //#ifndef NO_VCD20 //++CoCo2.37p                // wyc2.36-909S, power doen servo when next to end of fuss scratched VCD to avoid SERVO abnormal.                if ((__bRepeat == REPEAT_NONE) && ( __wPlayItem == __wTrackEnd ))                {                    SrcFilter_PowerMode (SERVO_POWER_STOP);                    __bFWKey=KEY_STOP;                }                else                {                    __bFWKey=KEY_NEXT;                    // elmer2.36, for parser stop fail issue                    if ( !HAL_ControlParser(HAL_PARSER_STOP, 0))                    {                        OS_SuspendThread(ThreadPARSER.handle);                        OS_KillThread(ThreadPARSER.handle);                        INITIAL_ThreadInit(THREAD_PARSER);                        printf("===========delete parser thread============");                    }                }                // wyc2.36-909S, power doen servo when next to end of fuss scratched VCD to avoid SERVO abnormal.                __dwMONRecoverStage = RECOVER_STAGE_PREPARE;                break;            }    }#if 0//def ERROR_CONCEAL    // Don't allow entering error concealment mode when still picture.    HAL_ReadInfo(HAL_INFO_STILL,&_dwMONTemp1);    if (__bStillTime || __bVOBUStill || _dwMONTemp1 == TRUE || __bModeCmd == KEY_SCF || __bModeCmd == KEY_SCB)        return;    switch (__dwMONRecoverStage)    {        case    RECOVER_STAGE_PREPARE:            PRINTF("\nR_S Prepare!");            _dwMONNextStage = RECOVER_STAGE_CHECK;            __dwMONRecoverStage = _dwMONNextStage;            _dwMONCheckTime = UTL_GetSysTimer();            _dwMONFailCounter = 0;            _dwMONCheckVCounter = 0;            _dwMONRecoverCnt = 0;            _dwMONJumpCnt = 0;            __dwMONJumpTime = 0;            _MONITOR_ReadAudioRem(&_dwMONPreARemain);            // _dwMONPreVRemain = ( (REG_MCU_VREM+1) &0xffffff )*2;            _dwMONPreVRemain = MCU_VIDEO_BS_BUF_REMAINDER / 4;            break;        case    RECOVER_STAGE_CHECK:            if (_dwMONNextStage == RECOVER_STAGE_CHECK)            {                if ((__SF_SourceGBL[0].dwWriteSector == __SF_SourceGBL[0].dwReadSector) && (__SF_SourceGBL[0].dwWriteSector <= __SF_SourceGBL[0].dwEndSector))                    _dwMONNextStage = RECOVER_STAGE_JUMP_SECTOR;                else                    _dwMONNextStage = RECOVER_STAGE_SW_RESET;            }            if ((UTL_GetSysTimer() - _dwMONCheckTime) >= COUNT_300_MSEC)            {                _MONITOR_ReadAudioRem(&_dwMONTemp1);                if (_dwMONPreARemain == _dwMONTemp1)                {                    _dwMONFailCounter++;                    PRINTF("\nR_S A_Rem Don't Update, Check Cnt: %lx!",_dwMONFailCounter);                }                else                {                    _dwMONFailCounter = 0;                    _dwMONCheckVCounter = 0;                    _dwMONPreARemain = _dwMONTemp1;                }                // _dwMONTemp1 = ( (REG_MCU_VREM+1) &0xffffff )*2;                _dwMONTemp1 = MCU_VIDEO_BS_BUF_REMAINDER / 4;                if (_dwMONPreVRemain == _dwMONTemp1)                {                    _dwMONCheckVCounter++;                    PRINTF("\nR_S V_Rem Don't Update, Check Cnt: %lx!",_dwMONCheckVCounter);                }                else                {                    _dwMONFailCounter = 0;                    _dwMONCheckVCounter = 0;                    _dwMONPreVRemain = _dwMONTemp1;                }                _dwMONCheckTime = UTL_GetSysTimer();            }            if ((_dwMONFailCounter + _dwMONCheckVCounter) >= MONITOR_FAIL_CHECT_TIMES)            {                __dwMONRecoverStage = _dwMONNextStage;            }            break;        case    RECOVER_STAGE_SW_RESET:            PRINTF("\nR_S S/W Reset A/V!");            HAL_Reset(HAL_RESET_AUDIO);            HAL_WriteAM(HAL_AM_PLAY_COMMAND, 1);            HAL_Reset(HAL_RESET_VIDEO);            HAL_PlayCommand(COMMAND_PLAY,0);            _MONITOR_CheckStageInitVars(6);            _dwMONRecoverCnt++;            if (_dwMONRecoverCnt > 3)                _dwMONNextStage = RECOVER_STAGE_JUMP_SECTOR;            else                _dwMONNextStage = RECOVER_STAGE_SW_RESET;            break;        case    RECOVER_STAGE_JUMP_SECTOR:            PRINTF("\nR_S Jump Sectors!");#ifndef NO_DISC_MODE //CoCo2.37p            if (__wDiscType & BOOK_DVD)            {                if (__dwMONJumpTime == 0)                {                    _dwMONTemp1 = CELL_QueryTime();                    __dwMONJumpTime = __wTimeChapterBegin + (WORD)_dwMONTemp1 + 10;                    if (((__dwMONJumpTime > __dwMONPreJumpTime) && ((__dwMONJumpTime - __dwMONPreJumpTime) > 100)) ||                         ((__dwMONPreJumpTime > __dwMONJumpTime) && ((__dwMONPreJumpTime - __dwMONJumpTime) > 100)))                    {                        // when this time jump position and last time is same, mean CELL return wrong position or F/W enter infinite                        // loop, so monitor will break it here to avoid infinite loop.                        _dwMONJumpCnt = 6;                        PRINTF("\nJump Same Position!");                    }                    __dwMONPreJumpTime = __dwMONJumpTime;                }                else                {                    __dwMONJumpTime += (10*(_dwMONJumpCnt+1));                }                if (__dwMONJumpTime >= __wTimeTitle )                    __dwMONJumpTime = __wTimeTitle;                _dwMONPreARemain = (__dwMONJumpTime / 3600);                _dwMONPreAFrmCnt = ((__dwMONJumpTime % 3600) / 60);                _dwMONPreVRemain = ((__dwMONJumpTime % 3600) % 60);                _dwMONTemp1=MAKE_TMSF(_dwMONPreARemain, (BYTE)_dwMONPreAFrmCnt, (BYTE)_dwMONPreVRemain, 0x0);                NV_TimePlay(__bTitle, _dwMONTemp1);                HAL_Reset(HAL_RESET_VIDEO); //CoCo.050                // DVD_103Micky, fix GoToTime will hang issue                // need restore the pla command                UTL_TransferCommandID(__bModeCmd);            }            else#endif //#ifndef NO_DVD //CoCo2.37p            {                SrcFilter_Stop();                            HAL_ControlParser(HAL_PARSER_STOP, 0);                CHIPS_SoftMute();                

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -