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

📄 monitor.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
// The file "winav.h" must be included in first line#include "winav.h"#include "ctkav.h"#include "utl.h"#include "hal.h"#include "SrcFilter.h"#include "input.h"#include "chips.h"#include "infofilter.h"#include "digest.h"#include "navigate.h"#include "cc.h"#include "monitor.h"#include "osd.h"#include "linear.h"#include "cell.h"#include "comutl.h" #include "vcd20.h"#include "thumb.h"#include "setup.h"#include "gdi.h"#include "panel.h"#include "Disp.h"#include "Comdec.h"#include "parser.h"#include "debug.h"// wyc1.11-909#include "Subpict.h"// wyc2.16-909S#include "initial.h"#include "debug.h"#include "dvdinfo.h"#ifdef SUPPORT_STB#include "media.h"#include "db_defs.h"extern EN_SERVICE_TYPE ap_ch_get_current_srv_type(void);void _MONITOR_DVBRecover(void);#endif#undef PRINTF#undef printf// Micky2.17c#define PRINTF(x, y...)     DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_MM_INFOFTR, x, ## y)#define printf(x, y...)     DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_PRINTF, x, ## y)void    PRINTF_MONITOR(char *fmt, ...);void    printf_MONITOR(char *fmt, ...);//#define PRINTF  PRINTF_MONITOR//#define printf  printf_MONITOR/// ======================================================================// Define#define RECOVER_NORMAL              0#define RECOVER_ENTER_STOP          1#define RECOVER_GO_MENU_TITLE       2#define GO_LONGEST_TITLE            3#define GO_TT_CC_1_1                4#define ERROR_RECOVER_MODE      GO_TT_CC_1_1// #define _DEBUG_INFO#define MONITOR_NEXT_TIMES          3#define MONITOR_FAIL_CHECT_TIMES        24#define MONITOR_DVB_FAIL_CHECT_TIMES    20#define MONITOR_OK_CHECT_TIMES          4#define MONITOR_RETRY_COUNT             3#define MONITOR_RESET_PROC2_CNT         5// elmer 2.32#ifdef SUPPORT_NO_AUDIO_IO_MUTE#define MUTE_THRESHOLD                  10#ifndef ENABLE_READ_AUDIO_REM#define ENABLE_READ_AUDIO_REM#endif //#endif#ifdef STACK_OVERFLOW_DETECTION#define MONITOR_STACK_ERROR_NONE        (0x0000)#define MONITOR_STACK_ERROR_CTKDVD      (0x0001)#define MONITOR_STACK_ERROR_DECODER     (0x0002)#define MONITOR_STACK_ERROR_PARSER      (0x0004)#define MONITOR_STACK_ERROR_INFO        (0x0008)#define MONITOR_STACK_ERROR_ATAPI       (0x0010)#define MONITOR_STACK_ERROR_USBSRC      (0x0020)#define MONITOR_STACK_ERROR_SERVO       (0x0040)#define MONITOR_STACK_ERROR_SRV_BM      (0x0080)#endif#ifdef ERROR_CONCEAL#ifndef ENABLE_READ_AUDIO_REM#define ENABLE_READ_AUDIO_REM#endif //#ifdef SUPPORT_WATCH_DOG#define WATCHDOG_TIME_TO_ENABLE         (COUNT_5_SEC * 6)#define WATCHDOG_SINGAL_ENABLE          (1L<<28) //  REG_PLAT_SYSTEM_CONFIGURATION1 [28]#define WATCHDOG_DOWN_COUNT_VALUE       0xA00000#endif#endif // /// ======================================================================//#define ERROR_CONCEAL// Variables declareBYTE    __bResetRecover=0;DWORD   __dwMONRecoverStage;DWORD   _dwMONTemp1,_dwMONTemp2;DWORD   _dwMONTempRem,_dwMONTempRem1;DWORD   _dwMONPreARemain;DWORD   _dwMONPreAFrmCnt;DWORD   _dwMONPreVRemain;// elmer2.36, CVD issuesDWORD   _dwMONSPCounter;//DWORD   _dwMONPreVFrmCnt;DWORD   _dwMONParReadSec;DWORD   _dwMONFailCounter, _dwMONFailCounter2;DWORD   _dwMONOKCounter;DWORD   _dwMONParPlayCnt;DWORD   _dwMONParTotCnt;DWORD   _dwMONMDecChkHang;DWORD   _dwMONMDecHangCnt;// This variable only used in recover stage RECOVER_STAGE_CHECK, it is because all reset flow will go stage RECOVER_STAGE_CHECK to// check it. Then continue go next stage.DWORD   _dwMONNextStage;DWORD   _dwMONRecoverCnt;DWORD   __dwMONJumpTime,__dwMONPreJumpTime;DWORD   _dwMONGoNextStage;DWORD   _dwMONJumpChkTime;BYTE    _bMaxNextTimes;// elmer 2.32#ifdef SUPPORT_NO_AUDIO_IO_MUTEBYTE    _bMuteCount=0;BYTE    _bIOMuteMode=FALSE;DWORD   _dwMONChkTime;#endif// Micky_PORTING_OSWRAP/*// wyc0.95, move these variables from debug to monitor.cyg_handle_t    __AlarmHandle;cyg_alarm       __AlarmObj;*/#ifdef SUPPORT_STB#define MAXHANGCNT 3BYTE __bTVHang;BYTE __bRadioHang;BYTE __bNoService;BYTE __bHangCnt = 0;DWORD   _dwDVBMONChkTime;DWORD   _dwInterFailCnt;extern BYTE b8InstantReplayStatus;#endif#ifdef SUPPORT_WATCH_DOGDWORD _dwWatchdogPrevCounter;DWORD _dwWatchdogFailCount = 0;#ifdef SUPPORT_WATCHDOG_BURNINDWORD __dwWatchdogTime;BYTE  _bWatchdogData;#endif // SUPPORT_WATCHDOG_BURNIN#endif/// ======================================================================// Extern Variablesextern BYTE _bHALABuf2Def;/// ======================================================================// Function Prototypevoid _MONITOR_AudioRecover(void);void _MONITOR_ImageRecover(void);void _MONITOR_MotionRecover(void);void _MONITOR_ReadAudioRem(DWORD* pdata);WORD _MONITOR_StackStatus(VOID);void MONITOR_InitialValue(void);// elmer 2.32#ifdef SUPPORT_NO_AUDIO_IO_MUTEvoid    MONITOR_CheckMute(void);BYTE    _MONITOR_CheckMuteStatus(void);#endifvoid    PRINTF_MONITOR(char *fmt, ...){    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_MM_INFOFTR, fmt);}void    printf_MONITOR(char *fmt, ...){    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, fmt);}//  *************************************************************************//  Function    :   MONITOR_CheckHang//  Description :   This function will be executed every 100 ms by ARARM.//                  Purpose is to check the system state and trigger the //                  recover stage to recover system in MONITOR_RecoverSystem.//  Arguments   :   None//  Return      :   None//  Side Effect ://  *************************************************************************// Micky2.17c#ifdef ERROR_CONCEALvoid    MONITOR_CheckHang(void){    if ((__btPlaying) && (__dwMONRecoverStage == RECOVER_STAGE_IDLE))    {        if (__bModePlay == MODE_PLAYVIDEO)        {        }        else        {            HAL_ReadInfo(HAL_INFO_HLI_STATUS,&_dwMONTempRem);            // wyc1.11-909, don't call function HAL_ReadInfo because this function don't use mutex to lock it.            _dwMONTempRem = __blHLI_Status;#ifndef NO_DISC_MODE //CoCo2.37p            if ((__bModePlay == MODE_PLAYMOTION) && (((__wDiscType & BOOK_DVD) && (__bStillTime || __bVOBUStill || __bDomain == VMGM_DOM || __bDomain == VTSM_DOM || _dwMONTempRem == TRUE)) || __bModeCmd == KEY_SCF || __bModeCmd == KEY_SCB || __bModeCmd == KEY_SF || __bModeCmd==KEY_STEP || __bCellAction == VOBU_TIME))#else            if ((__bModePlay == MODE_PLAYMOTION) && (__bModeCmd == KEY_SCF || __bModeCmd == KEY_SCB || __bModeCmd == KEY_SF || __bModeCmd==KEY_STEP))#endif //#ifndef NO_DVD //CoCo2.37p                return;            _MONITOR_ReadAudioRem(&_dwMONTempRem);            if (_dwMONPreARemain == _dwMONTempRem)            {                _dwMONOKCounter = 0;                if (__bModePlay == MODE_PLAYAUDIO)                {                    _dwMONFailCounter+=2;                    // wyc1.07, don't show debug message to much.                    if ((_dwMONFailCounter % 10) == 2)                    {                        DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_MM_INFOFTR,"\nR_S A_Rem Hold, Cnt: %lx!",_dwMONFailCounter);                    }                }                else                {                    _dwMONFailCounter++;                    // elmer2.36, CVD issues                    _dwMONTempRem1 = MCU_SP1_BS_BUF_REMAINDER / 4;                    if (_dwMONTempRem1 >= 0x100)                        _dwMONSPCounter++;                    else                        _dwMONSPCounter = 0;                    if ((_dwMONFailCounter % 5) == 1)                    {                        DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_MM_INFOFTR,"\nR_S A_Rem Hold, Cnt: %lx!",_dwMONFailCounter);                    }                }            }            else            {                _dwMONOKCounter++;                _dwMONFailCounter = 0;                _dwMONPreARemain = _dwMONTempRem;                // elmer2.36, CVD issues                _dwMONSPCounter = 0;            }            // wyc0.95, temp disable it because need to add mutex protect in function HAL_ReadAM            /*<<<            HAL_ReadAM(HAL_AM_FRAME_SAMPLE_SEC_CNT, &_dwMONTempRem);             if (_dwMONPreAFrmCnt == _dwMONTempRem)            {                _dwMONOKCounter = 0;                _dwMONFailCounter++;                PRINTF("\nR_S Frm Cnt Don't Update, Check Cnt: %lx!",_dwMONFailCounter);            }            else            {                _dwMONOKCounter++;                _dwMONFailCounter = 0;                _dwMONPreAFrmCnt = _dwMONTempRem;            }            >>>*/            if (__bModePlay != MODE_PLAYAUDIO)            {                _dwMONTempRem = REG_VLD_MBINT_CTL;                if ((_dwMONMDecChkHang == _dwMONTempRem) && (((_dwMONTempRem & 0x00004000)==0x00004000) || ((_dwMONTempRem & 0x00001800)==0x00001800) || ((_dwMONTempRem & 0x00007800)==0x00007800) ))                    _dwMONMDecHangCnt++;                else                    _dwMONMDecHangCnt=0;                _dwMONMDecChkHang = REG_VLD_MBINT_CTL;                // wyc2.03-909S                                // _dwMONTempRem = ( (REG_MCU_VREM+1) &0xffffff )*2;                _dwMONTempRem = MCU_VIDEO_BS_BUF_REMAINDER / 4;                                if (_dwMONPreVRemain == _dwMONTempRem)                {                    _dwMONOKCounter = 0;                    _dwMONFailCounter++;                    // elmer2.36, CVD issues                    _dwMONTempRem1 = MCU_SP1_BS_BUF_REMAINDER / 4;                    if (_dwMONTempRem1 >= 0x100)                        _dwMONSPCounter++;                    else                        _dwMONSPCounter = 0;                    if ((_dwMONFailCounter % 5) == 1)                    {                        DBG_Printf(DBG_THREAD_MONITOR, DBG_INFO_MM_INFOFTR,"\nR_S V_Rem Hold, Cnt: %lx!",_dwMONFailCounter);                    }                }                else                {                    _dwMONOKCounter++;                    _dwMONFailCounter = 0;                    _dwMONPreVRemain = _dwMONTempRem;                    // elmer2.36, CVD issues                    _dwMONSPCounter = 0;                }                _dwMONTempRem = __SF_SourceGBL[__dwSFStreamID].dwReadSector;                if (_dwMONParReadSec == _dwMONTempRem)                {                    _dwMONParPlayCnt = 0;                }                else                {                    _dwMONParReadSec = _dwMONTempRem;                    _dwMONParPlayCnt++;                    _dwMONParTotCnt++;                }            }            // wyc1.08, comment it because ALARM can't read proc2 PC, otherwise proc2 PC will wrong and can't decode.            /*<<<            _dwMONTemp2 = REG_PLAT_PROC2_PC;            // wyc1.07, force enter recover stage 1 to H/W reset audio, because audio PC is out of valid range.            if ((_dwMONTemp2 > FW_DRAM_END) || (_dwMONTemp2 < FW_DRAM_ST))            {                printf("\nProc2 PC out of range, PC:%lx",_dwMONTemp2);                _dwMONProc2PCWrongCnt++;                // wyc1.08, because sometimes Proc2 PC will be wrong, so check 5 times to ensure Proc2 is really abnormal then reset it.

⌨️ 快捷键说明

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