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

📄 hal.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
        case HAL_SCART_POWER_ON:        // 4:3
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_SW, 1);
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_TV, 0);
            break ;
        case HAL_SCART_16_9:            // 16:9
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_SW, 0);
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_TV, 0);
            break ;
    }
#else   // #ifdef  SCART_USE_4_TRANSISTORS
// LLY2.61, add the procedure that SW_SCART selection using PWM pin
#ifdef SUPPORT_SCART_PWM_CTRL
    switch (bScartType)
    {
        case HAL_SCART_CVBS:
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_RGB, 1);
            //printf("CVBS");
            break ;
        case HAL_SCART_RGB:
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_RGB, 0);
            //printf("CVBS");
            break ;
        case HAL_SCART_POWER_STANDBY:   // TV mode
            HAL_SCART_PWM_Ctrl(PIN_SCART_PWM, 0xFF);
            //printf("TV Mode");
            break ;
        case HAL_SCART_POWER_ON:        // 4:3
            HAL_SCART_PWM_Ctrl(PIN_SCART_PWM, 0x0);
            //printf("4:3");
            break ;
        case HAL_SCART_16_9:            // 16:9
            HAL_SCART_PWM_Ctrl(PIN_SCART_PWM, 0x5A);
            //printf("16:9");
            break ;
    }

#else   // #ifdef SUPPORT_SCART_PWM_CTRL
    switch (bScartType)
    {
        case HAL_SCART_CVBS:
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_RGB, 1);
            break ;
        case HAL_SCART_RGB:
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_RGB, 0);
            break ;
        case HAL_SCART_POWER_STANDBY:
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_SW, 1);
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_TV, 1);
            break ;
        case HAL_SCART_POWER_ON:        // 4:3
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_SW, 0);
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_TV, 0);
            break ;
        case HAL_SCART_16_9:            // 16:9
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_SW, 0);
	        HAL_WriteGPIO( SCART_GPIO_GRP, PIN_SCART_TV, 1);
            break ;
    }
#endif  // #ifdef SUPPORT_SCART_PWM_CTRL
#endif  // #ifdef SCART_USE_4_TRANSISTORS

#endif //#ifdef  SUPPORT_SCART_IF
}



// LLY2.01. remove this API since nobody to implement the code
#if 0
//************************************************************************
// Description  :   Reset TVE, ADAC, ...
// Arguments    :   bType: peripheral type
//                  bAction: TRUE/FALSE: reset/unreset
// Return       :   None
//************************************************************************
void    HAL_ResetPeripheral(BYTE bType, BYTE bAction)
{
    switch(bType)
    {
    case    HAL_RESET_AUDIODAC:
#ifdef SUPPORT_AUDIODAC_RESET
        for(_bHALTemp2=0; _bHALTemp2<200; _bHALTemp2++)
        {
            if(bAction)
            {
                HAL_WriteGPIO(GPIO_A, ?,1); //IO pin not reserved for 909
            }
            else
            {
                HAL_WriteGPIO(GPIO_A, ?,0);
            }
        }
#endif
        break;
    }
}
#endif  // #if 0



//*************************************************************************
//  Function    :   HAL_TVEncoderInitial
//  Description :   Initialize TV Encoder base on setup default setting
//  Arguments   :   None
//  Return      :   None
//  Side Effect :
//*************************************************************************
void    HAL_TVEncoderInitial(void) //test OK
{
    BYTE bMode;

    // Step 1: Decide __bTVType value
    if(__SetupInfo.bTVSystem==SETUP_SCREEN_TV_SYSTEM_AUTO)
    {
        // LLY2.04, default set as NTSC mode while setup setting is AUTO
        // And, don't reference __wHALVCRLow, since nobody to set it.
        __bTVType = SETUP_SCREEN_TV_SYSTEM_NTSC;
#if 0
        if(__wHALVCRLow & 0x0400) // VCR[10]=1: PAL
        {
            __bTVType=SETUP_SCREEN_TV_SYSTEM_PAL;
        }
        else                        // VCR[10]=0: NTSC
        {
            __bTVType=SETUP_SCREEN_TV_SYSTEM_NTSC;
        }
#endif  // #if 0
    }
    else
    {
        __bTVType=__SetupInfo.bTVSystem;
    }

    // Step 2: Decide __bMPEGVideoMode value based on __bTVType
    switch(__bTVType)
    {
    case    SETUP_SCREEN_TV_SYSTEM_NTSC:
    case    SETUP_SCREEN_TV_SYSTEM_PAL_M:
        __bMPEGVideoMode = MPEG_VIDEO_MODE_NTSC;
        bMode = MODE_NTSC_NORMAL;
        // LLY2.22, porting Chuan's code to initial main video H/V start
        MainVideoInfo.sHStart = VIDEO_HSTART_NTSC;
        MainVideoInfo.sVStart = VIDEO_VSTART_NTSC;
        MainVideoInfo.wVWidth = 480;
        break;
    case    SETUP_SCREEN_TV_SYSTEM_PAL:
    case    SETUP_SCREEN_TV_SYSTEM_PAL_N:
    default :
        __bMPEGVideoMode = MPEG_VIDEO_MODE_PAL;
        bMode = MODE_PAL_NORMAL;
        // LLY2.22, porting Chuan's code to initial main video H/V start
        MainVideoInfo.sHStart = VIDEO_HSTART_PAL;
        MainVideoInfo.sVStart = VIDEO_VSTART_PAL;
        MainVideoInfo.wVWidth = 576;
        break;
    }

    // Step 3: Program TV encoder
    HAL_SetTVE();

#ifdef ECOS909
    bMode = TV_OUTPUT_MODE; // Chuan0.66, Check ..
#endif

    DISP_TVModeSet(bMode, (MainVideoInfo.sHStart + 22), MainVideoInfo.sVStart);

#ifdef SUPPORT_TFT_DIGITAL_MODE
    __bTFTMode = MODE_TFT_ANALOG;
    __bTVType = 0; //otherwise, hw power up if(bNewTarget!=__bTVType) will not hold in HAL_AdjustTVMode

    __bTFTOutput = TRUE;
#endif
    // wyc1.07, need to call this function to disable OSD, otherwise OSD will scramble after POWER on from power standy mode.
    DISP_DisplayCtrl(DISP_OSD, FALSE);

    //KC1.07, avoid HW/IR power on, logo flashes (it takes time for TV to sync w/ the TVE output signal)
    OS_DelayTime(COUNT_300_MSEC);
}


// LLY2.17 remove from HDEVICE module
//  ************************************************************************************
//  Function    :   HAL_ReadStorage
//  Description :   Readback information from used storage
//  Arguments   :   wAddr, specify the desired address
//                  pbVal, keep the readback data
//                  wCnt, specify the desired readback data number (BYTE unit)
//  Return      :   None
//  ************************************************************************************
// LLY2.53, modify the parameter unit to support > 256 byte setup info
//void    HAL_ReadStorage(BYTE bAddr, BYTE* pbVal, BYTE bCnt)
void    HAL_ReadStorage(WORD wAddr, BYTE* pbVal, WORD wCnt)
{
#if (STORAGE_TYPE == SERIAL_FLASH)
    HAL_ReadSerialFlash(wAddr, pbVal, wCnt);
#endif  // #if (STORAGE_TYPE == SERIAL_FLASH)
#if (STORAGE_TYPE == EEPROM)
    if(wAddr>256)
    {
        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "not support > 256 byte\n");
        return;
    }
    HAL_ReadEEPROM(wAddr, pbVal, wCnt);
#endif  // #if (STORAGE_TYPE == EEPROM)
}


// LLY2.17 remove from HDEVICE module
//  ************************************************************************************
//  Function    :   HAL_WriteStorage
//  Description :   Write information into used storage
//  Arguments   :   wAddr, specify the desired address
//                  pbVal, keep the desired data for writting
//                  wCnt, specify the desired writting data number (BYTE unit)
//  Return      :   None
//  ************************************************************************************
// LLY2.53, modify the parameter unit to support > 256 byte setup info
//void    HAL_WriteStorage(BYTE bAddr, BYTE* pbVal, BYTE bCnt)
void    HAL_WriteStorage(WORD wAddr, BYTE* pbVal, WORD wCnt)
{
#if (STORAGE_TYPE == SERIAL_FLASH)
    // LLY2.51, porting Wing's code since API name is updated.
    HAL_WriteSPF_BANK(wAddr, pbVal, wCnt);
#endif  // #if (STORAGE_TYPE == SERIAL_FLASH)
#if (STORAGE_TYPE == EEPROM)
    if(wAddr>256)
    {
        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "not support > 256 byte\n");
        return;
    }

    HAL_WriteEEPROM(wAddr, pbVal, wCnt);
#endif  // #if (STORAGE_TYPE == EEPROM)

}


//************************************************************************
// Description  :   Adjust the brightness of video output
// Arguments    :   bMode: brightness mode
// Return       :   None
// Side Effect  :   None
//************************************************************************
// LLY1.50, modify the procedure since DISP_AdjustBright() meaning is updated.
void    HAL_AdjustBrightness(BYTE bMode)
{
    switch(bMode)
    {
    case    HAL_BRIGHTNESS_NORMAL:
//        DISP_AdjustBright( 0, 1);
        DISP_AdjustBright(0);
        break;
    case    HAL_BRIGHTNESS_BRIGHT:
//        DISP_AdjustBright( 16, 0);
        DISP_AdjustBright(16);
        break;
    case    HAL_BRIGHTNESS_SOFT:
//        DISP_AdjustBright( 16, 1);
        DISP_AdjustBright(-16);
        break;
    }
}



//************************************************************************
// Description  :   Adjust the contrast of video output
// Argument     :   bLevel: contrast level
// Return       :   None
// Side Effect  :   None
//************************************************************************
// LLY1.50, modify the procedure since DISP_AdjustContrast() meaning is updated.
void    HAL_AdjustContrast(BYTE bLevel) //test OK
{
    if (bLevel>HAL_CONTRAST_LEVEL4)
    {
//        DISP_AdjustContrast( 1<<(bLevel-HAL_CONTRAST_LEVEL4), 0);
        DISP_AdjustContrast( 1<<(bLevel-HAL_CONTRAST_LEVEL4));
    }
    else
    {
//        DISP_AdjustContrast( 1<<(HAL_CONTRAST_LEVEL4-bLevel), 1);
        DISP_AdjustContrast( (1<<(HAL_CONTRAST_LEVEL4-bLevel)) * (-1) );
    }
}

// LLY2.00, collect the procedure of waiting decoder stop command ACK//  **************************************************************************//  Function    :   _Wait_Decoder_Stop_CMD_ACK//  Description :   Wait decoder stop command ACK//  Arguments   :   None//  Return      :   TRUE, ACK ok//                  FALSE, ACK fail//  Notice      :   Only used for decoder stop command ACK//  **************************************************************************BYTE    _Wait_Decoder_Stop_CMD_ACK(void){    DWORD   dwTime, dwTemp;

    //wait for ACK    dwTime = OS_GetSysTimer();
    // Chuan2.17, enlarge the waiting time from 100 --> 300 msec
    while( (OS_GetSysTimer()-dwTime) < COUNT_300_MSEC )
    {
        HAL_ReadInfo(HAL_INFO_DECCMD_ACK, &dwTemp);        if (dwTemp == MODE_STOPPED)        {            break;        }        //release CPU resource to other threads
        OS_YieldThread();
    }
    if(dwTemp != MODE_STOPPED)    {
        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, " MODE_STOP fail");
        return FALSE;    }
    return TRUE;
}

// LLY2.00, modify the procedure to merge the same control flow.
//  **************************************************************************************************************
//  Function    :   HAL_Reset
//  Description :   Reset the desired function block and caller must issue start command by itself.
//  Arguments   :   bType, the desired function block
//  Return      :   none
//  Side Effect :   [1] Decoder will stop after reset, caller must issue desired cmd by itself
//  Notice      :   [2] It's different between HAL_RESET_AVSPST and HAL_RESET_AUDIO + VIDEO + SPST
//                      Since, A/V/SPST will be release together after all thing done for HAL_RESET_AVSPST
//                      But, A/V/SPST will be release one by one after it done for HAL_RESET_XXX individual case
//  *************************************************************************************************************
void    HAL_Reset(BYTE bType)
{
    DWORD dwCurrentFrame;

    // Step 1: prepare stage before issue reset procedure, ex. stop decoder, parser, servo, or ...
    switch(bType)
    {
#ifndef NO_PROC2
    case    HAL_RESET_AUDIO:
#ifdef  SUPPORT_PRINTF
        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "\n# HAL_RESET_AUDIO!");
#endif  // #ifdef SUPPORT_PRINTF
        // issue stop command
        HAL_WriteAM(HAL_AM_PLAY_COMMAND, 0);

        // notify parser to throw audio bitstream.
        PARSER_ActionFilter( 0, PARSER_ENABLE_AUDIO, FALSE );
	    //release CPU resource to other threads
        OS_YieldThread();
        break;
#endif  // #ifndef NO_PROC2

    case    HAL_RESET_VIDEO:
#ifdef  SUPPORT_PRINTF
        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "\n# HAL_RESET_VIDEO!");
#endif
        break;

    case    HAL_RESET_SPST:
#ifdef  SUPPORT_PRINTF

⌨️ 快捷键说明

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