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

📄 osd_manager.c

📁 SAMSUNG 5009的源代码
💻 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 + -