/****************************************************************************** *_Copyright (c) 2009 Digital Stream Technology Inc. All Rights Reserved. * * Module: dstdddisp.c * * Description * This file includes platform/vendor specific APIs. * * @author Junku Park (hwatk@dstreamtech.com) * @version $Revision: 1.1 $ * ******************************************************************************/ #include #include #include #include #include #include #include #include "dsthalcommon.h" #include "dstoslayer.h" #include "dstdddtv.h" #include "dstddcap.h" #include "dstdddisp.h" #include "dstddsys.h" #include "panel_data.h" #ifdef DMALLOC #include #endif /****************************************************************************** * Global variable declaration ******************************************************************************/ /****************************************************************************** * Imported variable declaration ******************************************************************************/ /****************************************************************************** * Imported function declaration ******************************************************************************/ /****************************************************************************** * Local definitions ******************************************************************************/ #define CONV_TO_BASE(r,v,b) do { (v) *= (b)*100; (v) /= (100); (v) = (((v)%(b)) >= (b>>1)) ? (v)-((v)%(b))+(b) : (v)-((v)%(b)); (r) = (v)/100; } while(0); #define CONV_TO_100(r,v,b) do { (v) *= 10000; (v) /= (b); (v) = (((v)%100) >= 50) ? (v)-((v)%100)+100 : (v)-((v)%100); (r) = (v)/100; } while(0); #define PANELPOWER_TASK_PRIORITY 90 #define PANELPOWER_TASK_STACKSIZE 16384 #define MAX_PP_MESSAGES 120 /****************************************************************************** * Local typedefs ******************************************************************************/ /****************************************************************************** * Local variables declaration ******************************************************************************/ static PanelConfig_t *CurrentPanel = 0; static OS_MESSAGEQUEUE_ID PanelPowerQ; static OS_TASK_ID PanelPowerTaskId; static int tPanelPowerStarted = 0; /****************************************************************************** * Local function prototypes ******************************************************************************/ static int PanelPowerReq(int Arg); DHL_RESULT DD_DISP_SetVideoMuteColor(DS_U8 red, DS_U8 green, DS_U8 blue); #if 0 ___General_Display_Functions___() #endif DHL_RESULT DD_DISP_Init(void) { DHL_RESULT dhlResult = DHL_OK; dhlResult = DD_DISP_SetVideoMuteColor(0x80, 0x00, 0x80); SysASSERT( dhlResult == DHL_OK ); CurrentPanel = &PanelData_LC420W01; return dhlResult; } DHL_RESULT DD_DISP_ChangeVideoFormat(DHL_VIDEO_FORMAT UserVidFormat) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_SetAspectRatio(int Aspect) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_SetPIPLocation(DHL_PIP_t PipLocation) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_SetPIPStyle(DHL_PIPMode_t PipMode, DHL_PIP_t PipLocation) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } void DD_DISP_ResetOutput(void) { /* * Display Output RESET. * Just for special cases such as HDMI output reset. */ } #if 0 ___MUTE_APIs___() #endif static DS_U8 muteColorRed=0x00; static DS_U8 muteColorGreen=0x00; static DS_U8 muteColorBlue=0x00; DHL_RESULT DD_DISP_SetVideoMuteColor(DS_U8 red, DS_U8 green, DS_U8 blue) { muteColorRed=red; muteColorGreen=green; muteColorBlue=blue; return DHL_OK; } #if MUTE_DEBUG DHL_RESULT DD_DISP_VideoMute_Internal(DS_BOOL uMute, const char *Fname, int Line) #else DHL_RESULT DD_DISP_VideoMute(DS_BOOL uMute) #endif { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_VideoMutePIP(DS_BOOL uMute) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_VideoMuteCVBS(DS_BOOL uMute) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } #if 0 ___PANEL_Functions___() #endif DHL_RESULT DD_DISP_SetLCDBacklight(DS_U16 uiDeg) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } void DD_DISP_SetPanelPower_Internal( DS_BOOL OnOff ); static int tPanelPower(DS_U32 *arg) { static DS_U32 Msg[2]; DS_U32 msgLen; DS_U32 ret; while(1) { if ( tPanelPowerStarted == 0 ) { OS_mDelay(100); continue; } ret = OS_ReceiveMessage(PanelPowerQ, Msg, sizeof(DS_U32), &msgLen); if ( ret ) { DHL_DbgPrintf(0,DDDBG_AV,"ERROR, LINE=%d\n", __LINE__); continue; } DD_DISP_SetPanelPower_Internal(Msg[0]); OS_mDelay(100); } } static DHL_RESULT PanelPowerStart(void) { DHL_RESULT dhlResult = DHL_OK; if ( tPanelPowerStarted == 1 ) return dhlResult; tPanelPowerStarted = 1; return dhlResult; } static DHL_RESULT PanelPowerInit(void) { DHL_RESULT dhlResult = DHL_OK; static int init = 0; if ( init == 1 ) return dhlResult; init = 1; PanelPowerQ = OS_CreateMessageQueue("q_PanelPower", 0, MAX_PP_MESSAGES, sizeof(DS_U32)); if ( PanelPowerQ == (DS_U32)NULL ) { dhlResult = DHL_FAIL_OUT_OF_RESOURCE; goto done; } PanelPowerTaskId = OS_SpawnTask( (void (*) (DS_U32))tPanelPower, "tPanelPowerTask", PANELPOWER_TASK_PRIORITY, PANELPOWER_TASK_STACKSIZE, 0 ); if ( PanelPowerTaskId == (DS_U32)NULL ) { dhlResult = DHL_FAIL_OUT_OF_RESOURCE; goto done; } PanelPowerStart(); done: return dhlResult; } static int PanelPowerReq(int Arg) { DS_U32 Msg[2]; Msg[0] = Arg; if ( OS_SendMessage(PanelPowerQ, (DS_U32 *)Msg, sizeof(DS_U32)) ) { DHL_DbgPrintf(0,DDDBG_AV,"Cannot send msg AudioMute Thread.\n"); DstCore_QueueReset(PanelPowerQ); return -1; } return 0; } DHL_RESULT DD_DISP_SetPanelPower( DS_BOOL OnOff ) { DHL_RESULT dhlResult = DHL_OK; if (tPanelPowerStarted != 1) { PanelPowerInit(); } if ( PanelPowerReq( OnOff ) < 0 ) dhlResult = DHL_FAIL; return dhlResult; } void DD_DISP_SetPanelPower_Internal( DS_BOOL OnOff ) { } DHL_RESULT DD_DISP_GetPanelPowerStatus(void) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_GetDimmingDelay(DS_BOOL onoff, DS_S32 *Delay, DS_S32 *Delay2) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_GetBacklightOnOffStatus(void) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } #if 0 ___LVDS_APIs___() #endif void DD_DISP_SetLVDSClockFreq(int Offset) { } void DD_DISP_SetLVDSClockPhase(int Offset) { } int DD_DISP_GetLVDSClockFreq(void) { return 0; } int DD_DISP_GetLVDSClockPhase(void) { return 0; } #if 0 ___SIDE_COLOR_APIs___() #endif DHL_RESULT DD_DISP_SetSideColorEnable(int En) { return DHL_OK; } DHL_RESULT DD_DISP_GetSideColorEnable(int *pEn) { return DHL_OK; } DHL_RESULT DD_DISP_SetSideColor(DS_U8 R, DS_U8 G, DS_U8 B) { return DHL_OK; } DHL_RESULT DD_DISP_GetSideColor(DS_U8 *pR, DS_U8 *pG, DS_U8 *pB) { return DHL_OK; } #if 0 ___CVBS_OUTPUT_APIs___() #endif DHL_RESULT DD_DISP_EmbedCC(int nField, DS_U32 data0, DS_U32 data1) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_InitAuxCC(void) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; } DHL_RESULT DD_DISP_EnableAuxCC(int Enable) { DHL_RESULT dhlResult = DHL_OK; return dhlResult; }