Пример #1
0
void win_timerset_timermode_change(BOOL update)
{
	UINT8 action;


	if (TIMER_MODE == TIMER_MODE_OFF)
		action = C_ATTR_INACTIVE;
	else
		action = C_ATTR_ACTIVE;

	if (OSD_CheckAttr(&timer_con_servicetype, action))
		return ;

	set_container_active(&timer_con_servicetype, action);
	set_container_active(&timer_con_serviceinfo, action);
	set_container_active(&timer_con_wakeupdate, action);
	set_container_active(&timer_con_wakeuptime, action);

	if (action == C_ATTR_ACTIVE && TIMER_SERVICE_TYPE == TIMER_SERVICE_MESSAGE)
		action = C_ATTR_INACTIVE;
	set_container_active(&timer_con_duration, action);
	if (update)
	{
		OSD_DrawObject((POBJECT_HEAD) &timer_con_servicetype, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD) &timer_con_serviceinfo, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD) &timer_con_wakeupdate, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD) &timer_con_wakeuptime, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD) &timer_con_duration, C_UPDATE_ALL);
	}
}
Пример #2
0
static void win_ad_load_setting(void)
{
    MULTISEL *msel;

    msel =&ad_sel0; // AD service
    OSD_SetMultiselSel(msel, sys_data_get_ad_service());

    msel =&ad_sel1; // Use AD as default
    OSD_SetMultiselSel(msel, sys_data_get_ad_default_mode());

    msel =&ad_sel2; // AD volume offset
    OSD_SetMultiselSel(msel, (sys_data_get_ad_volume_offset() + AD_VOLUME_NO_OFFSET_IDX));

    if (sys_data_get_ad_service() == 0)
    {
        set_container_active(&ad_item1, C_ATTR_INACTIVE);
        set_container_active(&ad_item2, C_ATTR_INACTIVE);
    }
    /*
    else if (sys_data_get_ad_default_mode() == 0)
    {
    	set_container_active(&ad_item2, C_ATTR_INACTIVE);
    }
    */

}
Пример #3
0
static PRESULT ad_item_sel_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2)
{
    PRESULT ret = PROC_PASS;
    UINT32 sel;
    UINT8 bID;
    UINT32 drawCmd = C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL;

    bID = OSD_GetObjID(pObj);

    switch(event)
    {
    case EVN_PRE_CHANGE:
        sel = *((UINT32*)param1);
        break;
    case EVN_POST_CHANGE:
        sel = param1;
        if (bID == AD_SERVICE_ID)
        {
            UINT8 action = sel ? C_ATTR_ACTIVE : C_ATTR_INACTIVE;
            sys_data_set_ad_service(sel);
            set_container_active(&ad_item1, action);
            set_container_active(&ad_item2, action);
            OSD_DrawObject((POBJECT_HEAD)&ad_item1, drawCmd);
            OSD_DrawObject((POBJECT_HEAD)&ad_item2, drawCmd);
        }
        else if (bID == AD_USING_ID)
        {
//				UINT8 action = sel ? C_ATTR_ACTIVE : C_ATTR_INACTIVE;
            sys_data_set_ad_default_mode(sel);
            sys_data_set_ad_mode(sel);
//				set_container_active(&ad_item2, action);
//				OSD_DrawObject((POBJECT_HEAD)&ad_item2, drawCmd);
        }
        else if (bID == AD_VOLUME_OFFSET_ID)
        {
            INT32 offset = (INT32)sel - AD_VOLUME_NO_OFFSET_IDX;
            sys_data_set_ad_volume_offset((signed char)offset);
            api_audio_set_ad_volume_offset(offset);
        }
        break;
    default:
        break;
    }
    return ret;
}
Пример #4
0
static void nc_item_sel_autouser(UINT8 active,UINT8 bAuto,BOOL update)
{
	UINT8 action= (  bAuto== 1 ||active==0) ? C_ATTR_INACTIVE : C_ATTR_ACTIVE;

	OSD_SetMultiselSel(&nc_item_selt3,bAuto);

	set_container_active(&nc_item_con4, action);
	set_container_active(&nc_item_con5, action);

	if(update)
	{
		OSD_DrawObject( (POBJECT_HEAD)&nc_item_con4, C_UPDATE_ALL);
		OSD_DrawObject( (POBJECT_HEAD)&nc_item_con5, C_UPDATE_ALL);

		//OSD_TrackObject( (POBJECT_HEAD)&nc_item_con9, C_UPDATE_ALL);
	}

}
Пример #5
0
static void tms_set_tms2rec_item_active(BOOL update)
{
	UINT8 action;
	
	action = sys_data_get_tms() ? C_ATTR_ACTIVE : C_ATTR_INACTIVE;
	set_container_active(&tms_item_con2, action);
	if(update)
		OSD_DrawObject( (POBJECT_HEAD)&tms_item_con2, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL);
}
Пример #6
0
void win_timerset_timerservice_change(BOOL update)
{
	UINT8 action;
	TEXT_FIELD *txt;
	MULTISEL *msel;
	UINT16 ch_idx, ch_cnt;
	TIMER_SET_CONTENT *settimer;
	P_NODE p_node;


	settimer = &timer_set;

	if (TIMER_MODE == TIMER_MODE_OFF)
		action = C_ATTR_INACTIVE;
	else
	{
		if (TIMER_SERVICE_TYPE == TIMER_SERVICE_MESSAGE)
			action = C_ATTR_INACTIVE;
		else
			action = C_ATTR_ACTIVE;
	}

	/* TIMER service information: message or channel */
	txt = &timer_txt_serviceinfo;
	msel = &timer_msel_serviceinfo;

	if (TIMER_SERVICE_TYPE == TIMER_SERVICE_MESSAGE)
	{
		/* TIMER_SERVICE_SMG */
		OSD_SetMultiselSelType(msel, STRING_ID);
		OSD_SetMultiselCount(msel, 3);
		OSD_SetMultiselSelTable(msel, (void*)WakeupMessageStr_id);
		if (settimer->wakeup_message >= 3)
			settimer->wakeup_message = 0;
		OSD_SetMultiselSel(msel, settimer->wakeup_message);
	}
	else
	{
		//modified by Robin

		if (get_prog_by_id(settimer->wakeup_channel, &p_node) == DB_SUCCES)
			ch_idx = get_prog_pos(settimer->wakeup_channel);
		else
			ch_idx = sys_data_get_cur_group_cur_mode_channel();
		ch_cnt = get_prog_num(VIEW_ALL | settimer->wakeup_chan_mode, 0);
		OSD_SetMultiselSelType(msel, STRING_PROC);
		OSD_SetMultiselCount(msel, ch_cnt);
		OSD_SetMultiselSel(msel, ch_idx);
	}
	OSD_SetTextFieldContent(txt, STRING_ID, (UINT32)TimerServiceTxtStr_id[TIMER_SERVICE_TYPE]);
	if (update)
		OSD_DrawObject((POBJECT_HEAD) &timer_con_serviceinfo, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL);

	set_container_active(&timer_con_duration, action);
	if (update)
		OSD_DrawObject((POBJECT_HEAD) &timer_con_duration, C_UPDATE_ALL);
}
Пример #7
0
static void win_satsrch_set_nitactive(BOOL update)
{
	UINT8 action;
	
	action = (SATSRCH_MODE_IDX == 0)? C_ATTR_INACTIVE : C_ATTR_ACTIVE;
	set_container_active(&satsrch_item4, action);
	if(update)
		OSD_DrawObject( (POBJECT_HEAD)&satsrch_item4, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL);
}
Пример #8
0
static void nc_item_sel_active(UINT8 active,UINT8 bAuto,BOOL update)
{
    UINT8 action ;

    UINT8 i;

    OSD_SetMultiselSel(&nc_item_selt1,active);

    action = (  active== 0) ? C_ATTR_INACTIVE : C_ATTR_ACTIVE;
    set_container_active(&nc_item_con1, action);
    set_container_active(&nc_item_con2, action);
    set_container_active(&nc_item_con3, action);
    set_container_active(&nc_item_con6, action);
#if ((defined(ORDER_GZ1006005))||(defined(ORDER_GZ1006006)))
    set_container_active(&nc_item_con_type, action);
#endif
    //set_container_active(&nc_item_con9, action);//auto user sel

//	action =(  bAuto== 0 ||active==0) ? C_ATTR_INACTIVE : C_ATTR_ACTIVE;
//	set_container_active(&nc_item_con4, action);//user
//	set_container_active(&nc_item_con5, action);//pwd

    nc_item_sel_autouser(active,bAuto,FALSE);

    if(update)
    {
        OSD_DrawObject( (POBJECT_HEAD)&nc_item_con1, C_UPDATE_ALL);
        OSD_DrawObject( (POBJECT_HEAD)&nc_item_con2, C_UPDATE_ALL);
        OSD_DrawObject( (POBJECT_HEAD)&nc_item_con3, C_UPDATE_ALL);
        OSD_DrawObject( (POBJECT_HEAD)&nc_item_con4, C_UPDATE_ALL);
        OSD_DrawObject( (POBJECT_HEAD)&nc_item_con5, C_UPDATE_ALL);
        OSD_DrawObject( (POBJECT_HEAD)&nc_item_con6, C_UPDATE_ALL);
#if ((defined(ORDER_GZ1006005))||(defined(ORDER_GZ1006006)))
        OSD_DrawObject( (POBJECT_HEAD)&nc_item_con_type, C_UPDATE_ALL);
#endif
        //OSD_DrawObject( (POBJECT_HEAD)&nc_item_con9, C_UPDATE_ALL);

        OSD_TrackObject( (POBJECT_HEAD)&nc_item_con7, C_UPDATE_ALL);
    }


}
Пример #9
0
static void win_satsrch_set_nitactive(BOOL update)
{
	UINT8 action;
	
#ifdef ORDER_GZ1011001   
	action = (SATSRCH_MODE_IDX == 1)? C_ATTR_INACTIVE : C_ATTR_ACTIVE;
#else
	action = (SATSRCH_MODE_IDX == IDX_SCAN_MODE_AUTO_SCAN)? C_ATTR_INACTIVE : C_ATTR_ACTIVE;
#endif
	set_container_active(&satsrch_item4, action);
	if(update)
		OSD_DrawObject( (POBJECT_HEAD)&satsrch_item4, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL);
}
Пример #10
0
static BOOL win_pvr_vol_init()
{
	m_volume_index = -1;
	m_pvr_vol_error = 0;
	storage_get_device_info(STORAGE_TYPE_SD);

	if(storage_get_volume_count() == 0)
	{
		set_container_active(&tms_item_con4, FALSE);
		m_pvr_vol_error = -1;
		return FALSE;
	}
	
	m_sto_device_type = sys_data_get_storage_type();
	m_sto_device_sub = sys_data_get_storage_sub_dev();
	m_sto_device_part = sys_data_get_storage_partition();

	// check the system data setting valid.
	m_volume_index = storage_find_volume(m_sto_device_type,m_sto_device_sub,m_sto_device_part);
	if(m_volume_index < 0)
	{
		m_pvr_vol_error = -2;
		libc_printf("cann't find the origial PVR partition(%d:%d:%d)\n",m_sto_device_type,m_sto_device_sub,m_sto_device_part);
		// invalid config, load current pvr setting.
		storage_get_cur_pvr_sto_info(&m_sto_device_type , &m_sto_device_sub, &m_sto_device_part);

		// check it again.
		m_volume_index = storage_find_volume(m_sto_device_type,m_sto_device_sub,m_sto_device_part);
		if(m_volume_index < 0)
		{
			ASSERT(0);
			m_sto_device_type = 0;
			m_sto_device_sub = 0;
			m_sto_device_part = 0;
			m_pvr_vol_error = -3;
			libc_printf("cann't find the new PVR partition(%d:%d:%d)\n",m_sto_device_type,m_sto_device_sub,m_sto_device_part);
			return FALSE;
		}
		libc_printf("find the new PVR partition(%d:%d:%d)\n",m_sto_device_type,m_sto_device_sub,m_sto_device_part);
	}
	return TRUE;
}
Пример #11
0
static void sp_item_sel_active(UINT8 active,UINT8 bAuto,BOOL update)
{
	UINT8 action ;

	UINT8 i;

	OSD_SetMultiselSel(&sp_item_selt1,active);

	action = (  active== 0) ? C_ATTR_INACTIVE : C_ATTR_ACTIVE;
	set_container_active(&sp_item_con6, action);


	if(update)
	{
		OSD_DrawObject( (POBJECT_HEAD)&sp_item_con6, C_UPDATE_ALL);
		
		OSD_TrackObject( (POBJECT_HEAD)&sp_item_con7, C_UPDATE_ALL);
	}


}
Пример #12
0
static void localset_hdcp_on(BOOL update, UINT32 on)
{
	UINT8 action;
	UINT8 i;
	
	action = on? C_ATTR_INACTIVE : C_ATTR_ACTIVE;

    if( action == C_ATTR_INACTIVE )
    {
        UINT8 bID = g_win_localsetting.FocusObjectID;
        if((bID != IDC_LOCALSET_APPLY) && (bID != IDC_LOCALSET_DHCP))
        {
            g_win_localsetting.FocusObjectID = IDC_LOCALSET_DHCP;
        }
    }

	for(i = 0; i < ARRAY_SIZE(localset_cons); i++)
	{
		set_container_active(localset_cons[i], action);
		if(update)
			OSD_DrawObject( (POBJECT_HEAD)localset_cons[i], C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL);
	}
}
Пример #13
0
void win_timerset_timermode_change(BOOL update)
{
	UINT8 action;
 	MULTISEL	*msel;
 	TIMER_SET_CONTENT* settimer;
 	P_NODE p_node;
       UINT8 ifpvr;
 	settimer = &timer_set;
	
	if(TIMER_MODE == TIMER_MODE_OFF)   //guop modify 20100629
		{
		 action = C_ATTR_INACTIVE;
                ifpvr = C_ATTR_INACTIVE;
		}
	else
		{
		 action = C_ATTR_ACTIVE;
             if(!pvr_info.hdd_valid) 
	               ifpvr = C_ATTR_INACTIVE;	
	      else 
	             	ifpvr = C_ATTR_ACTIVE;
		}
	
	//if(OSD_CheckAttr(&timer_con_servicetype, action))
	//	return;

	set_container_active(&timer_con_servicetype,ifpvr);
	set_container_active(&timer_con_serviceinfo,action);
	set_container_active(&timer_con_wakeupdate,action);
	set_container_active(&timer_con_wakeupweekday,action);
	set_container_active(&timer_con_wakeuptime,action);
	set_container_active(&timer_con_duration,ifpvr);	
 	set_container_active(&timer_con_rec_type,ifpvr);	

//	if(ifpvr == C_ATTR_ACTIVE && ((TIMER_SERVICE_TYPE == TIMER_SERVICE_MESSAGE) ||( TIMER_SERVICE_TYPE == TIMER_SERVICE_CHANNEL)))
//		ifpvr = C_ATTR_INACTIVE;
//	set_container_active(&timer_con_duration,ifpvr);	

 	msel = &timer_msel_rec_type;
 	get_prog_at(settimer->wakeup_channel, &p_node);
 	/*if((TIMER_MODE == TIMER_MODE_OFF) || (TIMER_SERVICE_TYPE != TIMER_SERVICE_DVR_RECORD) || (p_node.ca_mode == 1) )
 	{
 		ifpvr = C_ATTR_INACTIVE;
 		settimer->wakeup_message = 0;
 	}
	else if((TIMER_SERVICE_TYPE == TIMER_SERVICE_DVR_RECORD) && (!pvr_info.hdd_valid))
	          ifpvr = C_ATTR_INACTIVE;
 	else
 		  ifpvr = C_ATTR_ACTIVE;
	set_container_active(&timer_con_duration,ifpvr);	
 	set_container_active(&timer_con_rec_type,ifpvr);	*/
 	if(ifpvr == C_ATTR_ACTIVE)
 	{
 		if(settimer->wakeup_message > 2)
 			settimer->wakeup_message = 0;
 	}
 	OSD_SetMultiselSel(&timer_msel_rec_type, settimer->wakeup_message);

	if(update)
	{
		OSD_DrawObject((POBJECT_HEAD)&timer_con_servicetype, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&timer_con_serviceinfo, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&timer_con_wakeupdate, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&timer_con_wakeupweekday, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&timer_con_wakeuptime, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&timer_con_duration, C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&timer_con_rec_type, C_UPDATE_ALL);
	}
}
Пример #14
0
static PRESULT timerset_mselinfo_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2)
{
	PRESULT ret = PROC_PASS;
	UINT32 sel;
	VACTION unact;
	P_NODE p_node;
	UINT16* Uni_str;	
	TIMER_SET_CONTENT* settimer;
	COM_POP_LIST_PARAM_T param;
	OSD_RECT rect;

	
	settimer = &timer_set;
	
	
	switch(event)
	{
	case EVN_PRE_CHANGE:
		sel = *((UINT32*)param1);
		break;
	case EVN_POST_CHANGE:
		sel = param1;
		break;
	case EVN_UNKNOWN_ACTION:
		unact  = (VACTION)(param1>>16);
		if(unact == VACT_ENTER) // select channel 
		{
			OSD_SetRect2(&rect,&pObj->frame);
			rect.uTop -= 80;
			rect.uLeft -= 40;
			rect.uWidth += 40;
			rect.uHeight = 300;

			param.selecttype = POP_LIST_SINGLESELECT;
			param.cur = TIMER_SERVICE_INFO;		
			sel = win_com_open_sub_list(POP_LIST_TYPE_CHANLIST,&rect,&param);
			if(sel < (UINT32)TIMER_SERVICE_INFO_CNT)
			{
				get_prog_at(sel,&p_node);
				settimer->wakeup_channel = p_node.prog_id;
				TIMER_SERVICE_INFO = sel;
			}

			OSD_TrackObject( (POBJECT_HEAD )&timer_con_serviceinfo, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL);
		}
		break;
	case EVN_REQUEST_STRING:
		sel = param1;	
		Uni_str= (UINT16*)param2;
		get_prog_at(sel,&p_node);
		if(p_node.ca_mode)
			ComAscStr2Uni("$", Uni_str);
		ComUniStrCopyChar((UINT8*)&Uni_str[p_node.ca_mode], p_node.service_name);			
 		if((TIMER_MODE == TIMER_MODE_OFF) || (TIMER_SERVICE_TYPE != TIMER_SERVICE_DVR_RECORD) || (p_node.ca_mode == 1))
 		{
 			set_container_active(&timer_con_rec_type, C_ATTR_INACTIVE);
 			settimer->wakeup_message = 0;
 		}
		else if((TIMER_SERVICE_TYPE == TIMER_SERVICE_DVR_RECORD) && (!pvr_info.hdd_valid))  //guop add
 			set_container_active(&timer_con_rec_type, C_ATTR_INACTIVE);
 		else
 		{
 			set_container_active(&timer_con_rec_type, C_ATTR_ACTIVE);
 			if(settimer->wakeup_message > 2)
 				settimer->wakeup_message = 0;
 		}
 		OSD_SetMultiselSel(&timer_msel_rec_type, settimer->wakeup_message);
 		OSD_DrawObject((POBJECT_HEAD)&timer_con_rec_type, C_UPDATE_ALL);

		break;
		
	}

	return ret;
}
Пример #15
0
static PRESULT satsrch_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2)
{
	PRESULT ret = PROC_PASS;
	MULTISEL* msel;
	UINT16 title_id,sat_idx,sat_cnt;
	OSD_RECT rect;
	POBJECT_HEAD lastitem;
	SYSTEM_DATA* sys_data = sys_data_get();
	UINT16 i;
	UINT8 flag;
	S_NODE s_node;
	
	switch(event)
	{
	case EVN_PRE_OPEN:
		sat_idx = 0;
		if(!single_multi_srch_flag)
		{
			if(sys_data_get_cur_satidx() == (UINT16)(~0))
				sat_idx = win_load_default_satidx();
			else
				sat_idx = sys_data_get_cur_satidx();
		}
		
		recreate_sat_view(VIEW_ALL, 0);

#if (defined(SUPPORT_TWO_TUNER) || !defined(SELECT_SAT_ONLY))				
		for(i=0;i<get_sat_num(VIEW_ALL);i++)
		{
			get_sat_at((UINT16)i,VIEW_ALL,&s_node);

			flag = s_node.tuner1_valid | s_node.tuner2_valid;

			if(s_node.selected_flag != flag)
			{
				s_node.selected_flag = flag;
				modify_sat(s_node.sat_id, &s_node);
			}				
		}
#endif				
		
		msel = satsrch_sels[SAT_ID - 1];
		sat_cnt = get_tuner_sat_cnt(TUNER_EITHER_SELECT);
		OSD_SetMultiselCount(msel, sat_cnt);		
		if(sat_idx >= sat_cnt)
		{
			sat_idx = 0;
		}
		OSD_SetMultiselSel(msel,sat_idx);
		if(single_multi_srch_flag)
			title_id = RS_INSTALLATION_MULTI_SEARCH;
		else
			title_id = RS_INSTALLATION_SINGLE_SEARCH;
		wincom_open_subtitle(pObj,title_id,0);

		/*lastitem = (POBJECT_HEAD)&satsrch_item7;
		if(single_multi_srch_flag)
			OSD_SetObjpNext(lastitem, &satsrch_multisats_back);
			//OSD_SetObjpNext(lastitem, NULL);
		else
			OSD_SetObjpNext(lastitem, NULL);*/
		
		win_satsrch_set_nitactive(FALSE);
		set_container_active(&satsrch_item6, C_ATTR_INACTIVE);
		get_sat_at(sat_idx,SET_SELECTED,&s_node);
		if(sys_data->antenna_connect_type == ANTENNA_CONNECT_DUAL_DIFF)
		{
		#ifdef SUPPORT_SELECT_SAME_SAT
			OSD_SetTextFieldContent(&satsrch_txt6_note , STRING_ID, ((s_node.reserve_1 == 0)? RS_LNB1 : RS_LNB2));
		#else
			OSD_SetTextFieldContent(&satsrch_txt6_note , STRING_ID, (s_node.tuner1_valid ? RS_LNB1 : RS_LNB2));		
		#endif
		}
		else
		{
			OSD_SetTextFieldContent(&satsrch_txt6_note , STRING_ID, RS_LNB1);
		}
		OSD_DrawObject((POBJECT_HEAD)&satsrch_txt6_note, C_UPDATE_ALL);
#ifndef SUPPORT_TWO_TUNER
             remove_menu_item(&g_win_sat_srchset,(POBJECT_HEAD)&satsrch_item6,(CON_H + CON_GAP));     //guop add  
#endif
		break;
	case EVN_POST_OPEN:
	    if(single_multi_srch_flag == 1)
		{
			OSD_DrawObject((POBJECT_HEAD)&satsrch_split,C_UPDATE_ALL);
	    }
		win_satsrch_set_drawselectsats();
		break;
	case EVN_PRE_CLOSE:
		/* Make OSD not flickering */
		*((UINT32*)param2) &= ~C_CLOSE_CLRBACK_FLG;			
		break;
	case EVN_POST_CLOSE:
		wincom_close_subtitle();
		OSD_TrackObject( (POBJECT_HEAD) &g_win_mainmenu, C_UPDATE_ALL);
		break;			
			
	}

	return ret;
}
Пример #16
0
static PRESULT satsrch_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2)
{
    PRESULT ret = PROC_PASS;
    MULTISEL* msel;
    UINT16 title_id,sat_idx,sat_cnt;
    OSD_RECT rect;
    POBJECT_HEAD lastitem;
    SYSTEM_DATA* sys_data = sys_data_get();
    UINT16 i;
    UINT8 flag;
    S_NODE s_node;

    switch(event)
    {
    case EVN_PRE_OPEN:

#ifdef EXIT_KEY_EXIT_ALL_MENU
        exit_key_flag =  FALSE;
#endif

        sat_idx = 0;
        if(!single_multi_srch_flag)
        {
            if(sys_data_get_cur_satidx() == (UINT16)(~0))
                sat_idx = win_load_default_satidx();
            else
                sat_idx = sys_data_get_cur_satidx();
        }

        recreate_sat_view(VIEW_ALL, 0);

#if (defined(SUPPORT_TWO_TUNER) || !defined(SELECT_SAT_ONLY))
        for(i=0; i<get_sat_num(VIEW_ALL); i++)
        {
            get_sat_at((UINT16)i,VIEW_ALL,&s_node);

            flag = s_node.tuner1_valid | s_node.tuner2_valid;

            if(s_node.selected_flag != flag)
            {
                s_node.selected_flag = flag;
                modify_sat(s_node.sat_id, &s_node);
            }
        }
#endif

        msel = satsrch_sels[SAT_ID - 1];
        sat_cnt = get_tuner_sat_cnt(TUNER_EITHER_SELECT);
        OSD_SetMultiselCount(msel, sat_cnt);
        /*if(sat_idx >= sat_cnt)//albert.li del 2011.7.6
        {
        	sat_idx = 0;
        }
        OSD_SetMultiselSel(msel,sat_idx);*/
        sat_idx=get_sat_idx_in_selected_sats(sat_cnt);//albert.li add 2011.7.6
        OSD_SetMultiselSel(msel,sat_idx);

        if(single_multi_srch_flag)
            title_id = RS_INSTALLATION_MULTI_SEARCH;
        else
            title_id = RS_INSTALLATION_SINGLE_SEARCH;
        //wincom_open_subtitle(pObj,title_id,0);
        wincom_open_subtitle_ex(pObj,title_id,0,-15,0,-10);//albert.li add 2011.6.21

        /*lastitem = (POBJECT_HEAD)&satsrch_item7;
        if(single_multi_srch_flag)
        	OSD_SetObjpNext(lastitem, &satsrch_multisats_back);
        	//OSD_SetObjpNext(lastitem, NULL);
        else
        	OSD_SetObjpNext(lastitem, NULL);*/

        win_satsrch_set_nitactive(FALSE);
        set_container_active(&satsrch_item6, C_ATTR_INACTIVE);
        get_sat_at(sat_idx,SET_SELECTED,&s_node);
        if(sys_data->antenna_connect_type == ANTENNA_CONNECT_DUAL_DIFF)
        {
#ifdef SUPPORT_SELECT_SAME_SAT
            OSD_SetTextFieldContent(&satsrch_txt6_note , STRING_ID, ((s_node.reserve_1 == 0)? RS_LNB1 : RS_LNB2));
#else
            OSD_SetTextFieldContent(&satsrch_txt6_note , STRING_ID, (s_node.tuner1_valid ? RS_LNB1 : RS_LNB2));
#endif
        }
        else
        {
            OSD_SetTextFieldContent(&satsrch_txt6_note , STRING_ID, RS_LNB1);
        }
        OSD_DrawObject((POBJECT_HEAD)&satsrch_txt6_note, C_UPDATE_ALL);
#ifndef SUPPORT_TWO_TUNER
        remove_menu_item(&g_win_sat_srchset,(POBJECT_HEAD)&satsrch_item6,(CON_H + CON_GAP));     //guop add
#endif
        break;
    case EVN_POST_OPEN:
        //wincom_open_help(pObj,search_set_helpinfo, HELP_CNT);
        wincom_open_commen_help(pObj);

        if(single_multi_srch_flag == 1)
        {
            OSD_DrawObject((POBJECT_HEAD)&satsrch_split,C_UPDATE_ALL);
        }

        sat_cnt = get_tuner_sat_cnt(TUNER_EITHER_SELECT);

        if(sat_cnt <=(SELSAT_ROW_CNT*2))
            win_satsrch_set_fix_drawselectsats();
        else
        {
            start_scroll_sat_id=0;
            //api_stop_timer(&sat_display_scroll);
            sat_display_scroll = api_start_timer("SATDISP",500,(OSAL_T_TIMER_FUNC_PTR)sat_search_scroll_disp_handler);
        }

        break;
    case EVN_PRE_CLOSE:
        /* Make OSD not flickering */
        *((UINT32*)param2) &= ~C_CLOSE_CLRBACK_FLG;
        break;
    case EVN_POST_CLOSE:

        api_stop_timer(&sat_display_scroll);

        wincom_close_subtitle();
        OSD_ClearObject((POBJECT_HEAD)&g_win_sat_srchset,C_UPDATE_ALL);//albert.li add
        //OSD_TrackObject( (POBJECT_HEAD) &g_win_submenu/*g_win_mainmenu*/, C_UPDATE_ALL);

#ifdef EXIT_KEY_EXIT_ALL_MENU
        if( exit_key_flag == TRUE)
        {
            exit_key_flag =FALSE;
            mm_leave_all_menu();
        }
#endif
        break;
    case EVN_MSG_GOT:
        if(param1 == CTRL_MSG_SUBTYPE_CMD_SAT_SCROLL_DISP)
        {
            start_scroll_sat_id=win_satsrch_set_scroll_drawselectsats(start_scroll_sat_id);

            if(sat_display_scroll!=OSAL_INVALID_ID)
            {
                api_stop_timer(&sat_display_scroll);
                sat_display_scroll = api_start_timer("SATDISP",500,(OSAL_T_TIMER_FUNC_PTR)sat_search_scroll_disp_handler);
            }
        }
        break;
    }

    return ret;
}