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

📄 osdss.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 2 页
字号:
//  Arguments   :   bType: OSD_TRIGGER_CONTROL/OSD_TRIGGER_TIME
//              :   wTime: It's valid only when OSD_TRIGGER_TIME
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
// LLY2.53, expand time value unit from WORD to DWORD
// Since, we will use [23:16]:hour, [15:8]: min, [7:0]: sec
//void OSDSS_Trigger(BYTE bType, WORD wTime)
void OSDSS_Trigger(BYTE bType, DWORD dwTime)
{
#ifndef NO_SCREEN_SAVER

    _OSDSS_Move();

#endif
}

//CoCo2.60
void OSDSS_InternalExit(void)
{
#ifndef NO_SCREEN_SAVER

    _bOSDSSScreenSaverMode = FALSE;

    GDI_DeactivateRegion();
    GDI_InitialRegion(0); //Use region 0

    GDI_ClearRegion(0); //clear region 0

    GDI_ActivateRegion(0);

    OSD_AdjustOSDPos();

    //Enable the main video.
    DISP_DisplayCtrl(DISP_MAINVIDEO, TRUE);
    HAL_Display(HAL_DISPLAY_SPST_DEC, TRUE);

    //Tell OSD that Media Manager exits.
    OSD_ChangeUI(OSD_UI_SCREEN_SAVER, OSD_EXIT_UI);

#ifdef  SUPPORT_ENCODE_JPG_PICTURE
    // LLY2.55, Switch source to previous source index
    __SF_SourceGBL[0].bSourceIndex = __bOldSrcIdx;
#endif  // #ifdef  SUPPORT_ENCODE_JPG_PICTURE


#endif
}

//********************************************************************************************************
//  Function    :   OSDSS_Exit
//  Abstract    :   Call this function to exit screen saver.
//  Arguments   :   bExitMode: OSD_UI_EXIT_ALL/OSD_UI_EXIT_CONTROL_ONLY.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void OSDSS_Exit(BYTE bExitMode) //CoCo2.60
{
#ifndef NO_SCREEN_SAVER

    _bOSDSSScreenSaverMode = FALSE;

    if (bExitMode == OSD_UI_EXIT_ALL)
    {
    GDI_DeactivateRegion();
    GDI_InitialRegion(0); //Use region 0

    GDI_ClearRegion(0); //clear region 0

    GDI_ActivateRegion(0);

    OSD_AdjustOSDPos();

    //Enable the main video.
    DISP_DisplayCtrl(DISP_MAINVIDEO, TRUE);
    HAL_Display(HAL_DISPLAY_SPST_DEC, TRUE);
    }

#ifdef  SUPPORT_ENCODE_JPG_PICTURE
    // LLY2.55, Switch source to previous source index
    __SF_SourceGBL[0].bSourceIndex = __bOldSrcIdx;
#endif  // #ifdef  SUPPORT_ENCODE_JPG_PICTURE


#endif
}


//********************************************************************************************************
//  Function    :   OSDSS_Reset
//  Abstract    :   Reset the time for wakeing up screen saver. This function will be called when receiving
//              :   IR key.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void OSDSS_Reset(void)
{
#ifndef NO_SCREEN_SAVER
    __dwOSDSSCheckTime = OS_GetSysTimer();
#endif

    __dwOSDServoCheckTime = OS_GetSysTimer();

#ifndef NO_SCREEN_SAVER
    if (_bOSDSSScreenSaverMode)
    {
#ifdef OSDSS_JPEG_SCREEN_SAVER //CoCo2.38
        CC_KeyCommand(KEY_STOP);
        // LLY2.51, don't clear __bLOGO as nono by yourself, since it will be clear while non-show LOGO
        // And, remove __bLOGOIndex since nobody reference it.
        //__bLOGO = 0;

        if (__bKey != KEY_FUNCTION)
        {
            if (_bOSDSSBackupCurrentUI == OSD_UI_NONE)
            {
                __bKey = KEY_FUNCTION;
            }
            else
            {
                __bKey = KEY_NO_KEY;
            }
        }

        //__bLOGOIndex = 0;
        UTL_ShowLogo();
        OSDSS_InternalExit(); //CoCo2.60
#else
        if (__SetupInfo.bSCRControl == SETUP_SCREEN_SAVER_ON)
        {
            OSDSS_InternalExit(); //CoCo2.60
        }
#endif //OSDSS_JPEG_SCREEN_SAVER

        // wyc1.06-909, don't spin SERVO when exit screen saver
        //UTL_PreStartServo( __dwTimeNow);
    }
#endif //NO_SCREEN_SAVER
}

//********************************************************************************************************
//  Function    :   _OSDSS_Move
//  Abstract    :   This function will move DVD LOGO.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void _OSDSS_Move(void)
{
#ifndef NO_SCREEN_SAVER

#ifndef OSDSS_JPEG_SCREEN_SAVER
    WORD wDownBoundary;
#endif //OSDSS_JPEG_SCREEN_SAVER

#ifdef OSDSS_JPEG_SCREEN_SAVER

    if ((OS_GetSysTimer() - _dwOSDSSMoveTime) < COUNT_5_SEC)
        return;

    _dwOSDSSMoveTime = OS_GetSysTimer();

#ifndef SUPPORT_ENCODE_JPG_PICTURE
    if (__bOSDSSPicIdx == (OSDSS_MAX_PICTURE_NUM-1))
#else
    if (__bOSDSSPicIdx == (__bMMJPGEncodeNum-1))
#endif //SUPPORT_ENCODE_JPG_PICTURE
    {
        __bOSDSSPicIdx = 0;
    }
    else
    {
        __bOSDSSPicIdx++;
    }

    //To prevent the screen saver will flash for the same picture.
#ifdef SUPPORT_ENCODE_JPG_PICTURE
    if (__bMMJPGEncodeNum > 1)
#endif //SUPPORT_ENCODE_JPG_PICTURE
    {
        _OSDSS_PictureUpdate(__bOSDSSPicIdx);
    }

#else

    if ((OS_GetSysTimer() - _dwOSDSSMoveTime) < OSDSS_DVDLOGO_MOVE_SPEED)
        return;

    _dwOSDSSMoveTime = OS_GetSysTimer();

    if ((OS_GetSysTimer() - _dwOSDSSColorChangeTime) > OSDSS_DVDLOGO_COLOR_CHANGE_SPEED)
    {
        _OSDSS_ColorChange();

        _dwOSDSSColorChangeTime = OS_GetSysTimer();
    }

    if ((OS_GetSysTimer() - _dwOSDSSMixRatioChangeTime) > OSDSS_DVDLOGO_MIX_RATIO_CHANGE_SPEED)
    {
        _OSDSS_MixRatioChange();

        _dwOSDSSMixRatioChangeTime = OS_GetSysTimer();
    }


    if (_bOSDSSInvertH)
    {
        if (_bOSDSSCurrentPos.nHPos < OSDSS_DVDLOGO_BOUNDARY_LEFT)
        {
            _bOSDSSCurrentPos.nHPos = OSDSS_DVDLOGO_BOUNDARY_LEFT;
            _bOSDSSInvertH = FALSE;
        }
        else
            _bOSDSSCurrentPos.nHPos -= OSDSS_DVDLOGO_POS_UPDATE_H;
    }
    else
    {
        if ((_bOSDSSCurrentPos.nHPos + OSDSS_DVDLOGO_POS_UPDATE_H+OSDSS_DVDLOGO_BITMAP_WIDTH) >= OSDSS_DVDLOGO_BOUNDARY_RIGHT)
        {
            _bOSDSSCurrentPos.nHPos = OSDSS_DVDLOGO_BOUNDARY_RIGHT-OSDSS_DVDLOGO_BITMAP_WIDTH;
            _bOSDSSInvertH = TRUE;
        }
        else
            _bOSDSSCurrentPos.nHPos += OSDSS_DVDLOGO_POS_UPDATE_H;
    }

    if (_bOSDSSInvertV)
    {
        if (_bOSDSSCurrentPos.nVPos < OSDSS_DVDLOGO_BOUNDARY_UP)
        {
            _bOSDSSCurrentPos.nVPos = OSDSS_DVDLOGO_BOUNDARY_UP;
            _bOSDSSInvertV = FALSE;
        }
        else
            _bOSDSSCurrentPos.nVPos -= OSDSS_DVDLOGO_POS_UPDATE_V;
    }
    else
    {
        if ((__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC) || (__bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M))
            wDownBoundary = OSDSS_DVDLOGO_BOUNDARY_DOWN_NTSC;
        else
            wDownBoundary = OSDSS_DVDLOGO_BOUNDARY_DOWN_PAL;

        if ((_bOSDSSCurrentPos.nVPos + OSDSS_DVDLOGO_POS_UPDATE_V+OSDSS_DVDLOGO_BITMAP_HEIGHT) >= wDownBoundary)
        {
            _bOSDSSCurrentPos.nVPos = wDownBoundary-OSDSS_DVDLOGO_BITMAP_HEIGHT;
            _bOSDSSInvertV = TRUE;
        }
        else
            _bOSDSSCurrentPos.nVPos += OSDSS_DVDLOGO_POS_UPDATE_V;
    }

    if ((__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC) || (__bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M))
        GDI_MoveRegion(1, REGION_X_NTSC+_bOSDSSCurrentPos.nHPos, REGION_Y_NTSC+_bOSDSSCurrentPos.nVPos);
    else
        GDI_MoveRegion(1, REGION_X_PAL+_bOSDSSCurrentPos.nHPos, REGION_Y_PAL+_bOSDSSCurrentPos.nVPos);

#endif //#ifdef OSDSS_JPEG_SCREEN_SAVER

#endif
}

//********************************************************************************************************
//  Function    :   _OSDSS_DVDLOGO_Initial
//  Abstract    :   This function will initialize the action of DVD LOGO.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void _OSDSS_DVDLOGO_Initial(void)
{
#ifndef NO_SCREEN_SAVER
    _bOSDSSCurrentPos.nHPos = OSDSS_DVDLOGO_BITMAP_START_H;
    _bOSDSSCurrentPos.nVPos = OSDSS_DVDLOGO_BITMAP_START_V;

    //Initialize the time to move the DVD LOGO
    _dwOSDSSMoveTime = OS_GetSysTimer();
    _dwOSDSSColorChangeTime = OS_GetSysTimer();
    _dwOSDSSMixRatioChangeTime = OS_GetSysTimer();

    _bOSDSSInvertH = FALSE;
    _bOSDSSInvertV = FALSE;
    _bOSDSSMixRatioInvert = FALSE;
    _bSDSSColorChange = 0;

    _bOSDSSMixRatio = OSDSS_DVDLOGO_DEFAULT_MIX_RATIO;

    GDI_ClearRegion(1); //clear region 1
    GDI_ChangePALEntry(OSDSS_PALETTE_ENTRY_DVD_LOGO, aOSDSSDVDLOGOPalette[_bSDSSColorChange], TRUE);
    GDI_SetMixRatio(_bOSDSSMixRatio); //The mix ration just effects the background
    if ((__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC) || (__bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M))
        GDI_MoveRegion(1, REGION_X_NTSC, REGION_Y_NTSC);
    else
        GDI_MoveRegion(1, REGION_X_PAL, REGION_Y_PAL);

    GDI_ActivateRegion(1); //open GDI

    /*
    _OSDSSStringAttr.bBackground = PAL_ENTRY_COLOR_TRANSPARENT;
    _OSDSSStringAttr.bShadow1 = PAL_ENTRY_COLOR_TRANSPARENT;
    _OSDSSStringAttr.bShadow2 = PAL_ENTRY_COLOR_TRANSPARENT;
    _OSDSSStringAttr.bTextColor = OSDSS_PALETTE_ENTRY_DVD_LOGO;
    _OSDSSStringAttr.bColorKey = 0;
    _OSDSSStringAttr.wX = _bOSDSSCurrentPos.nHPos;
    _OSDSSStringAttr.wY = _bOSDSSCurrentPos.nVPos;

    GDI_DrawString_909(1, &_OSDSSStringAttr, aSSDVDLOGOTest);
    */

    _OSDSSDrawBitmap.bBitmapID = OSDSS_BMP_SCREEN_SAVER;
    _OSDSSDrawBitmap.wDestX = _bOSDSSCurrentPos.nHPos;
    _OSDSSDrawBitmap.wDestY = _bOSDSSCurrentPos.nVPos;
    _OSDSSDrawBitmap.bDestRegion = 1;
	/*
    GDI_LoadPalette(GDI_PAL_SCREEN_SAVER);
    GDI_LoadBMP(GDI_OSD_BMP); // load other BMP used by Display mode (this including screen saver BMP)
    GDI_DrawBitmap(&_OSDSSDrawBitmap);
	*/
	//CoCo1.06, for new GDI libray
	GDI_LoadPalette(&__PaletteInfo_ScreenSaver);
	GDI_LoadBMP(_aScrrenSaverBMPArray, 1); // load other BMP used by Display mode (this including screen saver BMP)
	GDI_DrawBitmap(&_OSDSSDrawBitmap, _aScrrenSaverBMPArray);
#endif
}

//********************************************************************************************************
//  Function    :   _OSDSS_ColorChange
//  Abstract    :   This function will change the color and mix ratio of the DVD LOGO
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void _OSDSS_ColorChange(void)
{
#ifndef NO_SCREEN_SAVER
    _bSDSSColorChange++;
    if (_bSDSSColorChange >= (sizeof(aOSDSSDVDLOGOPalette)/4))
        _bSDSSColorChange = 0;

    GDI_ChangePALEntry(OSDSS_PALETTE_ENTRY_DVD_LOGO, aOSDSSDVDLOGOPalette[_bSDSSColorChange], TRUE);
    GDI_ActivateRegion(1); //open GDI
#endif
}

//********************************************************************************************************
//  Function    :   _OSDSS_MixRatioChange
//  Abstract    :   This function will change the mix ratio of the DVD LOGO
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void _OSDSS_MixRatioChange(void)
{
#ifndef NO_SCREEN_SAVER

    if (_bOSDSSMixRatioInvert)
    {
        if ((_bOSDSSMixRatio-OSDSS_DVDLOGO_MIX_RATIO_UPDATE) < OSDSS_DVDLOGO_MIN_MIX_RATIO)
        {
            _bOSDSSMixRatioInvert = FALSE;
            _bOSDSSMixRatio = OSDSS_DVDLOGO_MIN_MIX_RATIO;
        }
        else
        {
            _bOSDSSMixRatio -= OSDSS_DVDLOGO_MIX_RATIO_UPDATE;
        }
    }
    else
    {
        _bOSDSSMixRatio += OSDSS_DVDLOGO_MIX_RATIO_UPDATE;
        if ((_bOSDSSMixRatio+OSDSS_DVDLOGO_MIX_RATIO_UPDATE) > OSDSS_DVDLOGO_MAX_MIX_RATIO)
        {
            _bOSDSSMixRatioInvert = TRUE;
            _bOSDSSMixRatio = OSDSS_DVDLOGO_MAX_MIX_RATIO;
        }
    }

    GDI_SetMixRatio(_bOSDSSMixRatio);
    GDI_ActivateRegion(1); //open GDI

#endif
}

void OSDSS_ResetTime(void)
{
    __dwOSDSSCheckNOData = __dwTimeNow;
    __dwOSDSSCheckTime=OS_GetSysTimer();
}

⌨️ 快捷键说明

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