Exemple #1
0
static void win_tplist_tuner_frontend(void)
{
	S_NODE s_node;
	T_NODE t_node;
#ifdef NEW_DEMO_FRAME
	struct ft_antenna antenna;
	union ft_xpond	xpond_info;
	struct nim_device *nim = NULL;
#else
	struct cc_antenna_info antenna;
	struct cc_xpond_info	xpond_info;
#endif

	OBJLIST* ol;
	UINT32 tp_idx;
    UINT16 pre_sat_id,cur_sat_id;
	UINT8 back_saved;
    BOOL old_get_key;

    nim_io_control(g_nim_dev, NIM_DRIVER_STOP_CHANSCAN, 0);
    ap_set_key_notify_proc(win_tplist_key_notify_proc);
    old_get_key = ap_enable_key_task_get_key(TRUE);

    win_signal_set_level_quality(0, 0, 0);
    win_signal_update();
	OSD_UpdateVscr(OSD_GetTaskVscr(osal_task_get_current_id()));

	ol = &tplst_olist;

	tp_idx = OSD_GetObjListCurPoint(ol);
	
	get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx,&s_node);
	get_tp_at(s_node.sat_id,tp_idx,&t_node);

#ifdef SUPPORT_TWO_TUNER
#ifdef SUPPORT_SELECT_SAME_SAT
	cur_tuner_idx = s_node.reserve_1; //antset_cur_tuner;//s_node.tuner1_valid? 0 : 1;
#else
	cur_tuner_idx = s_node.tuner1_valid? 0 : 1;
#endif
#endif

#ifndef NEW_DEMO_FRAME
	struct cc_antenna_info antenna;
	struct cc_xpond_info	xpond_info;

	sat2antenna_ext(&s_node, &antenna,cur_tuner_idx);
	xpond_info.frq = t_node.frq;
	xpond_info.sym = t_node.sym;
	xpond_info.pol = t_node.pol;

	set_antenna(&antenna);
	set_xpond(&xpond_info);
#else
	MEMSET(&antenna, 0, sizeof(struct ft_antenna));
	MEMSET(&xpond_info, 0, sizeof(union ft_xpond));
	sat2antenna(&s_node, &antenna);	
	xpond_info.s_info.type = FRONTEND_TYPE_S;
	xpond_info.s_info.frq = t_node.frq;
	xpond_info.s_info.sym = t_node.sym;
	xpond_info.s_info.pol = t_node.pol;
	xpond_info.s_info.tp_id = t_node.tp_id;
#ifdef SUPPORT_SELECT_SAME_SAT
	nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, ((s_node.reserve_1 == 0)? 0 : ((s_node.reserve_1 == 1) ? 1 : 0)));
#else
	nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, (s_node.tuner1_valid ? 0 : (s_node.tuner2_valid ? 1 : 0)));
#endif
	
	frontend_tuning(nim, &antenna, &xpond_info, 1);
	
#endif
    
    if(pre_tp_sat_idx != cur_tp_sat_idx)
    {
		get_tuner_sat(TUNER_EITHER, pre_tp_sat_idx, &s_node);			
		pre_sat_id = s_node.sat_id;

		get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node);			
		cur_sat_id = s_node.sat_id;
    
		wincom_dish_move_popup_open(/*pre_sat_id*/0xFFFF,cur_sat_id,cur_tuner_idx,&back_saved);
        pre_tp_sat_idx = cur_tp_sat_idx;
    }

    ap_enable_key_task_get_key(old_get_key);
    ap_set_key_notify_proc(NULL);
    nim_io_control(g_nim_dev, NIM_DRIVER_STOP_CHANSCAN, 0);
}
Exemple #2
0
/* description	: auto scan main routine for command parsing and switching.*/
static void as_main(struct libpub_cmd *cmd)
{
    INT32 i, j;
    INT32 ret;
    INT32 method;
    INT32 tp_nr;
    INT32 as_method;
    UINT16 sat_id;
    UINT8 dmx_mode_need_resume = 0;
    UINT32 dmx_dma_mode;
    as_update_event_t event_handler;
    struct dmx_device *dmx = NULL;
    T_NODE *tp = &as_info->cur_tp;;
    S_NODE *sat = &as_info->cur_sat;
    struct ft_antenna *antenna = &as_info->antenna;	
    
    AS_PRINTF("start time stamp = %d\n", osal_get_tick());
    as_method = as_info->param.as_method;
	
    event_handler = as_info->param.as_handler;
    	if(event_handler!=NULL)
    	{
        	event_handler(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANSTART);
    	}

	//Select DMX
    	dmx = dev_get_by_id(HLD_DEV_TYPE_DMX, 0);
    	if(dmx == NULL)
    	{
        	AS_PRINTF("%s(): select dmx failed!\n");
        	return;
    	}
    	as_info->dmx = dmx;

	//fix BUG20874: init psi info to avoid dmx changed by video playing
	psi_info_init(as_info->dmx, as_info->nim, (void *)__MM_PSI_START_ADDR, 180*1024);
	
    	//Check and Switch Buffer Mode of Dmx (From Divided Buffer To Union Buffer)
    	dmx_io_control(as_info->dmx, DMX_CHK_BUF_MODE, (UINT32)&dmx_dma_mode);
    	if(dmx_dma_mode == DMX_DIVIDED_BUFF_MODE)
    	{
        	dmx_io_control(as_info->dmx, DMX_SWITCH_TO_UNI_BUF, 0);
        	dmx_mode_need_resume = 1;
    	}
    	
    	for(i = 0; i<as_info->sat_nr; i++)
    	{
        	//For Each Satellite, Create its TP View, Set Antenna
        	sat_id = as_info->sat_id[i];
        	db_search_create_tp_view(sat_id);
		
        	if(event_handler != NULL)
        	{
            		event_handler(ASM_TYPE_SATELLITE, sat_id);
        	}

		//Set Antenna Information according to Satellite Information
        	MEMSET(sat, 0, sizeof(S_NODE));
        	get_sat_by_id(sat_id, sat);
        	AS_DUMP_SAT(sat);
        	MEMSET(antenna, 0, sizeof(struct ft_antenna));
        	sat2antenna(sat, antenna);
		
        	as_info->dual_LNB = (antenna->lnb_high>0) && (antenna->lnb_low>0) && (antenna->lnb_high != antenna->lnb_low);
        as_info->voltage_ctrl = (antenna->pol==LNB_POL_H)||(antenna->pol==LNB_POL_V);
//>>> Unicable begin
        if(antenna->lnb_type == LNB_CTRL_UNICABLE)
        {
    	    as_info->nim_para.unicable = 1;
    	    as_info->nim_para.Fub = antenna->unicable_freq;
        } 
        else
    	    as_info->nim_para.unicable = 0; 
//<<< Unicable end
        //select right nim and dmx    
        as_select_nim(sat);
        if(as_info->nim ==NULL)
        {
            AS_PRINTF("%s(): select nim failed!\n");
            continue;
        }

	 //for 29E 2-Tuner the dmx path may not same as default!!
	 tsi_dmx_src_select(TSI_DMX_0, TSI_TS_A);
        
        //blind scan
        if((AS_METHOD_FFT==as_method)||(AS_METHOD_MULTI_FFT==as_method))
        {
            method = AS_METHOD_FFT;
        }
        else
        {
            as_info->tp_nr = 0;
            MEMSET(as_info->tp_nit, 0,AS_MODULE_MAX_T_NUM*sizeof(UINT8));
            //single tp scan
            if((AS_METHOD_TP==as_method)||(AS_METHOD_TP_PID==as_method)
                ||(AS_METHOD_NIT_TP==as_method)||(AS_METHOD_NVOD==as_method))
            {
                as_info->tp_nr = 1;
				
                as_info->tp_id[0] = as_info->param.as_from;
                if ((AS_METHOD_NIT_TP==as_method)&&(event_handler!=NULL))
                		{
                    			event_handler(ASM_TYPE_INC_TRANSPONDER, 0);
                		}
            }
            //multi tp scan
            else if((AS_METHOD_SAT_TP==as_method)||(AS_METHOD_NIT==as_method)
                ||(AS_METHOD_MULTI_TP==as_method)||(AS_METHOD_MULTI_NIT==as_method)
                ||(AS_METHOD_NVOD_MULTI_TP==as_method))
            {
                tp_nr = get_tp_num_sat(sat_id);
                for(j=0; j<tp_nr; j++)
                {
                    get_tp_at(sat_id, j, tp);
                    if(as_info->param.as_frontend_type==FRONTEND_TYPE_S)
                    {
                       if(dvbs_tp_sanity_check(as_info->voltage_ctrl,tp, sat)==FALSE)
                    			 	{
                            			continue;
                    			 	}
                    			}
                    			else if(as_info->param.as_frontend_type == FRONTEND_TYPE_C)
                    			{
                       			if(dvbc_tp_sanity_check(FALSE, tp, NULL) == FALSE)
                       			{
                            			continue;
                       			}
                    			}
                    
                    			AS_DUMP_TP(tp);
#ifdef NVOD_FEATURE
                    			if((AS_METHOD_NVOD_MULTI_TP == as_method) && (tp->nvod_flg == 1))
#endif
					{
                    				as_info->tp_id[as_info->tp_nr++] = tp->tp_id;
					}

                    			if (AS_MODULE_MAX_T_NUM == as_info->tp_nr)
                    			{
                        			AS_PRINTF("%s: tp exceed AS_MODULE_MAX_T_NUM!\n", __FUNCTION__);
                    			}
                		}
            }

	    if((AS_METHOD_NIT==as_method)||(AS_METHOD_NIT_TP==as_method)
                ||(AS_METHOD_MULTI_NIT==as_method))
            {
                MEMSET(as_info->tp_nit, 1, as_info->tp_nr);
            }
            	
            method = AS_METHOD_TP;
        }

        ret = as_scan(sat_id, sat, method, 0);
        
        update_data( );

        	if (ret || as_info->stop_scan_signal)
        	{
            		break;
        	}
    	}

	//Show Scan Over by Upper Layer
    	if(event_handler != NULL)
    	{
        	event_handler(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANOVER);
    	}

    	dmx_io_control(as_info->dmx, CLEAR_STOP_GET_SECTION, 0);
	//Switch Buffer Mode of Dmx (From Union Buffer to Divided Buffer)
    	if(dmx_mode_need_resume)
    	{
        	dmx_io_control(as_info->dmx, DMX_SWITCH_TO_DVI_BUF, 0);
    	}
    	sie_open(as_info->dmx, MAX_FILTER_NUMBER, NULL, 0);
     
    osal_task_dispatch_off();
    nim_io_control(as_info->nim, NIM_DRIVER_STOP_ATUOSCAN, 0);
    as_info = NULL;
    AS_PRINTF("end time stamp = %d\n", osal_get_tick());
    osal_task_dispatch_on();
}
Exemple #3
0
void win_otaset_turn_frntend(void)
{
	UINT8 back_saved;
	S_NODE s_node;
	T_NODE t_node;
	
	win_otaset_get_FreqSymbPid_display();

	cur_tuner_idx = OTA_TUNER_IDX;

#ifdef _BUILD_OTA_E_
	MEMCPY(&s_node, &m_ota_cfg.s_node, sizeof(s_node));
#else
	get_tuner_sat(OTA_TUNER_IDX, ota_satpos, &s_node);

	MEMCPY(&m_ota_cfg.s_node, &s_node, sizeof(s_node));
	t_node.frq = ota_freq;
	t_node.sym = ota_symb;
	t_node.pol = ota_pol;
	MEMCPY(&m_ota_cfg.t_node, &t_node, sizeof(t_node));
#endif	

#ifndef NEW_DEMO_FRAME
	struct xpond_antenna_info	xai;
	
	sat2antenna_ext(&s_node, &xai.antenna,OTA_TUNER_IDX);
	xai.xpond.frq = ota_freq;
	xai.xpond.sym = ota_symb;
	xai.xpond.pol = ota_pol;
	UIChChgSetAntennaXpond(&xai);
#else
	struct ft_antenna antenna;
	union ft_xpond xponder;
	struct nim_device *nim = NULL;

#ifdef SUPPORT_SELECT_SAME_SAT	
	cur_tuner_idx =s_node.reserve_1; //s_node.tuner1_valid ? 0 : 1;
#else
	cur_tuner_idx = s_node.tuner1_valid ? 0 : 1;
#endif

	MEMSET(&antenna, 0, sizeof(struct ft_antenna));
	MEMSET(&xponder, 0, sizeof(union ft_xpond));
	sat2antenna(&s_node, &antenna);	
	xponder.s_info.type = FRONTEND_TYPE_S;
	xponder.s_info.frq = ota_freq;
	xponder.s_info.sym = ota_symb;
	xponder.s_info.pol = ota_pol;
#ifdef SUPPORT_SELECT_SAME_SAT
	nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, ((s_node.reserve_1 == 0)? 0 : ((s_node.reserve_1 == 1) ? 1 : 0)));
#else
	nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, (s_node.tuner1_valid ? 0 : (s_node.tuner2_valid ? 1 : 0)));
#endif

	frontend_tuning(nim, &antenna, &xponder, 1);
    if(0 == cur_tuner_idx) //TUNER1 <--> TSI_TS_A <--> DMX0
    {
        tsi_dmx_src_select(TSI_DMX_0,TSI_TS_A);
        tsi_select(TSI_TS_A,TSI_SPI_0);
    }
    else//TUNER2 <--> TSI_TS_B <--> DMX0
    {
        tsi_dmx_src_select(TSI_DMX_0,TSI_TS_B);
        tsi_select(TSI_TS_B, TSI_SPI_1);
    }
#endif
	
	wincom_dish_move_popup_open(ota_presat_id,s_node.sat_id,cur_tuner_idx,&back_saved);
	ota_presat_id = s_node.sat_id;