📄 osd_manager.c
字号:
/******************************************************************************
* Filename : OSD_manager.c
* Start : 2002. 11. 19
* By : Taejin Kwon
* Contact : tj1kwon@samsung.co.kr
* Description :
******************************************************************************
*/
/******************************************************
* INCLUDES
*****************************************************/
#include <string.h>
#include <stdio.h>
#include "Basic_typedefs.h"
#include "CUSTOM/Custom_option.h"
#include "OS/OS_abstract.h"
#include "API/SH_types.h"
#include "API/SH_api.h"
#include "COMMON/Common.h"
#include "MAIN/Global_state.h"
#include "MAIN/Appl_types.h"
#include "MAIN/Uop_msg.h"
#include "DRIVER/FS/Fs_api.h"
#include "CUSTOM/Osd_types.h"
#include "CUSTOM/Osd_if.h"
#include "CUSTOM/Key_handler_setup.h"
#include "MAIN/DVD/Dvd_predef.h"
#include "MAIN/DVD/Dvd_common.h"
#include "MAIN/MMP/Mmp_common.h"
#include "CUSTOM/Key_receive.h"
#include "CUSTOM/FP_handle.h"
#include "CUSTOM/Key_defs.h"
#include "MAIN/SVCD/Svcd_types.h"
#include "MAIN/SVCD/Svcd_ext.h"
#include "MAIN/SVCD/Svcd_show.h"
#include "Osd_util.h"
#include "Osd_draw.h"
#include "Osd_timer.h"
#include "CUSTOM/Strings_ext.h"
#include "Osd_data.h"
#include "Osd_draw_explore.h"
#include "Osd_draw_setup.h"
#include "Osd_draw_program.h"
/******************************************************
* Global variables / functions
*****************************************************/
#define STACK_SIZE_OSD_MGR_TASK 5000//10000
SysQueue_t gQ_osd;
SysTask_t gTask_osd;
SysSema_t gSema_osd;
extern OSD_State_st gOSD_state;
VOID OsdHandlerCtrlMsg( OsdCtrl_st ctrl );
VOID OsdHandlerExpCtrlMsg( OsdCtrl_st ctrl );
VOID OsdHandlerIconMsg( IconState_et icon, OsdIconCtrl_st *ctrl);
VOID OsdHandlerNormalMsg( OsdDisp_st disp );
VOID OsdHandlerPgmCtrlMsg(OsdCtrl_st ctrl );
VOID OsdHandlerSetupCtrlMsg( OsdCtrl_st ctrl );
VOID OsdHandlerTimerSet(OsdTimerSet_st value);
/******************************************************************************
* Function name : OsdInitStateInfo
* Arguments :
* IN VOID
*
* OUT
* I/O
* Return : VOID
*
* By : Taejin Kwon
* Description :
* Revision : 1.0
******************************************************************************
*/
STATIC VOID OsdInitStateInfo( VOID )
{
gOSD_state.ebOnoff = TOGGLE_OFF;
gOSD_state.etCur_dsp= DISPLAY_OFF;
gOSD_state.etPrev_dsp = DISPLAY_OFF;
gOSD_state.etRc_dsp = RC_DUMMY;
gOSD_state.etCur_icon = ICON_NONE;
gOSD_state.etPrev_icon = ICON_NONE;
gOSD_state.etRedraw_dsp = DISPLAY_OFF;
gOSD_state.eiBookmark_pos = 0;
gOSD_state.ebFirmup_sel = FALSE;
gOSD_state.etSetup_dsp.depth = MENU_DOM_DEPTH_0;
gOSD_state.etSetup_dsp.pass_step = PASSWD_SUB_NONE;
gOSD_state.etInfo_dsp = INFO_OFF;
gOSD_state.etInfo_sub = INFO_SUB_NONE;
#if _APP_CAP_AUD_FUNCTION_KEY
gOSD_state.etVolume_type = VOL_TYPE_NULL;
#endif
}
/******************************************************************************
* Function name : Gfx_Initialize
* Arguments :
* IN VOID
*
* OUT
* I/O
* Return : VOID
*
* By : Kim Do Yeon
* Description : Initialize the graphic api referece information
* Revision : V1.0
******************************************************************************
*/
VOID Gfx_Initialize(VOID)
{
SH_Gfx_base_st set_value;
BYTE1 index;
/* Canvas Set */
for(index = 0; index < MAX_CANVAS ; index++)
{
set_value.canvas[index].x_pos = 0;
set_value.canvas[index].y_pos = 0;
set_value.canvas[index].width = 0;
set_value.canvas[index].height = 0;
#if _APP_CAP_OSD_RGB_CLUT//clina 060729
set_value.canvas[index].color_format = CF_INDEX_RGB4;
#else
set_value.canvas[index].color_format = CF_INDEX_YCBCR4;
#endif
}
set_value.canvas_bg_color = COLOR_TRANS;
/* Image Set */
#if _API_CAP_RLC_FUNCTION
set_value.img_src_address = (BYTE1 *)gOsd_rld_img_data_buffer;
set_value.img_crop_info = (SH_Gfx_Img_Size_info_st *)gGfx_img_size;
#else
set_value.img_src_address = (BYTE1 *)gOsd_data_img;
set_value.img_crop_info = (SH_Gfx_Img_info_st *)gGfx_img;
#endif
set_value.img_src_width = IMAGE_WIDTH;
set_value.img_color_fortmat = IMAGE_COLORFORMAT;
/* Font Set */
set_value.font_src_address = (BYTE1 *)gOsd_data_font;
set_value.font_src_width = FONT_WIDTH;
set_value.font_color_fortmat = FONT_COLORFORMAT;
set_value.font_height = FONT_HEIGHT;
set_value.font_color_default = _DEFAULT_FONT_COLOR;
set_value.font_code_group = SH_FONT_G1;
set_value.font_info = (SH_Gfx_font_pos_st *)gGfx_font_pos_info;
set_value.font_trans_table = (SH_Gfx_trans_info_st *)gGfx_font_trans_table;
/* Color Lookup Table Set */
set_value.gfx_clut = (BYTE4 *)gpGfx_clut;
#if _APP_CAP_FUNC_DVD_DIGEST
set_value.ga_clut = (BYTE4 *)gpGa_clut;
#endif
set_value.clut_num = OSD_MAX_NUM_CLUT;
#if !(_USE_5005 || _USE_5009 )
set_value.cursor_clut = (BYTE2 *)gpCursor_clut;
#endif /* (_USE_5005 || _USE_5009 ) */
SH_GfxInit(&set_value);
}
/******************************************************************************
* Function name : OSD_ManagerMain
* Arguments :
* IN argc -> count arguments
* *argv -> arguments list
* OUT
* INOUT
* Return : VOID
* By : Taejin Kwon
* Description : OSD manager main
* Revisions :
******************************************************************************
*/
VOID OSD_ManagerMain( ULONG argc, VOID *argv )
{
SysSize_t realsize;
SysPrintf("\nOsdManager task Created");
while(1)
{
OsdMsg_st rx;
if( SysReceiveMsg( &gQ_osd, &rx, sizeof( OsdMsg_st ), &realsize, SYS_WAIT, 0 )
== SYS_RETURN_SUCCESS )
{
switch( rx.type )
{
case OSD_MSG_NORMAL:
OsdHandlerNormalMsg(rx.p.image);
if( rx.p.image.disp != gOSD_state.etCur_dsp )
{
gOSD_state.etPrev_dsp = gOSD_state.etCur_dsp;
gOSD_state.etCur_dsp = rx.p.image.disp;
}
break;
case OSD_MSG_ICON:
OsdHandlerIconMsg(rx.icon,&(rx.p.icon_ctrl));
gOSD_state.etPrev_icon = gOSD_state.etCur_icon;
if( rx.icon == ICON_CLEAR)
{
gOSD_state.etCur_icon = ICON_NONE;
} else
{
gOSD_state.etCur_icon = rx.icon;
}
break;
case OSD_MSG_CTRL:
OsdHandlerCtrlMsg(rx.p.ctrl);
break;
case OSD_MSG_CTRL_SETUP:
OsdHandlerSetupCtrlMsg(rx.p.ctrl);
break;
case OSD_MSG_CTRL_EXP:
OsdHandlerExpCtrlMsg(rx.p.ctrl);
break;
case OSD_MSG_CTRL_PGM:
OsdHandlerPgmCtrlMsg(rx.p.ctrl);
break;
case OSD_MSG_SET_TIMER:
OsdHandlerTimerSet(rx.p.timer);
break;
}
if( rx.etWait )
{
SysReleaseSema(&gSema_osd, NULL);
}
}
}
}
/******************************************************************************
* Function name : OsdInit
* Arguments :
* IN
* OUT
* INOUT
* Return : VOID
* By : Taejin Kwon
* Description : OSD manager main
******************************************************************************
*/
VOID OSD_Init( VOID )
{
SYS_RETURN status;
Gfx_Initialize();
OsdTimerInit();
OsdInitStateInfo();
status = SysCreateSema( &gSema_osd, "OSD_SEMA", 1, SYS_FIFO, NULL );
ASSERT(status == SYS_RETURN_SUCCESS);
status = SysCreateMsgQ( &gQ_osd, "OSDQ", 20, MSG_FIXED_SIZE,
sizeof( OsdMsg_st ), SYS_FIFO, SYS_SYSTEM_POOL );
if( status == SYS_RETURN_FAIL )
{
ASSERT( 0 );
}
/* It is necessary to guarantee to handle OSD message prior to any other messages,
we have to set the priority of OSD manager task higher than other tasks.
For example, OSD manager displays the logo screen first and then the navigator
handles the UOP message when we press PLAY button in Setup menu. */
status = SysCreateTask( &gTask_osd, "OSDMGR", OSD_ManagerMain, 0, 0,
STACK_SIZE_OSD_MGR_TASK, 2, 1, TASK_PREEMPT, TASK_START, SYS_SYSTEM_POOL );
if( status == SYS_RETURN_FAIL )
{
ASSERT( 0 );
}
}
/******************************************************************************
* Function name : OsdDeinit
* Arguments :
* IN
* OUT
* INOUT
* Return : VOID
* By : Taejin Kwon
* Description : OSD manager main
******************************************************************************
*/
VOID OSD_Deinit( VOID )
{
OsdTimerDeinit();
/* The task should be finished and deleted before deleting the waiting queue */
SysDeleteTask( &gTask_osd, 0 );
SysDeleteMsgQ( &gQ_osd, 0 );
SysDeleteSema( &gSema_osd, NULL );
gOSD_state.etCur_dsp = DISPLAY_OFF;
gOSD_state.etCur_icon = ICON_NONE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -