📄 hal.c
字号:
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 + -