예제 #1
0
파일: sfu_test.c 프로젝트: alkap007/ali3606
static int GetLock(unsigned int argc, unsigned char *argv[])
{
    INT32 ret;
    UINT8 lock;

    if (argc != 1)
    {
        SH_PRINTF("Usage: GetLock\n");
        return -1;
    }	
	
    struct nim_device *nim_dev = dev_get_by_id(HLD_DEV_TYPE_NIM, nim_id);

    if ((ret = nim_get_lock(nim_dev, &lock)) != SUCCESS)
    {
        SH_PRINTF("api_nim_get_lock: operation error! %d\n", ret);
        return -1;
    }

    //LIB_ASH_OC('\r'); 
    //LIB_ASH_OC('\n'); 	
	
    if(!lock)
    {
         LIB_ASH_OC('U');
         LIB_ASH_OC('N');        
    }
         LIB_ASH_OC('L');
         LIB_ASH_OC('O');        
         LIB_ASH_OC('C');
         LIB_ASH_OC('K');       

    LIB_ASH_OC('\r'); 
    LIB_ASH_OC('\n'); 			 
}
예제 #2
0
void new_win_signal_open(POBJECT_HEAD w)
{
	POBJECT_HEAD pObj;
	UINT8 level, quality, lock;
	struct nim_device *nim_dev;
	if (cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;

	if (w->bType != OT_CONTAINER)
		return ;

	pObj = (POBJECT_HEAD) &g_new_signal_test;//g_win_signal;
	pObj->pRoot = w;

	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);

	new_dem_signal_to_display(lock, &level, &quality);
	new_win_signal_set_level_quality(level, quality, lock);
	new_win_signal_update();

}
예제 #3
0
void win_signal_refresh(void)
{
	UINT8 level,quality,lock;
	struct nim_device* nim_dev;
	
  	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	
	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);
	
	dem_signal_to_display(lock,&level,&quality);
	win_signal_set_level_quality(level,quality,lock);
	win_signal_update();
}
예제 #4
0
void win_signal_refresh(void)
{
	UINT8 level,quality,lock;
	struct nim_device* nim_dev;
	
  	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	
	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);
	api_Signal_Lock_LED_OnOff(lock);//-a by wangyang for Signal Lock LED onoff 2011-10-25
	
	dem_signal_to_display(lock,&level,&quality);
	win_signal_set_level_quality(level,quality,lock);
	win_signal_update();
}
예제 #5
0
void win_signal_open(POBJECT_HEAD w)
{
	POBJECT_HEAD pObj;
	UINT8 level,quality,lock;
	struct nim_device* nim_dev;
  	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	

	if(w->bType != OT_CONTAINER)
		return ;
	
	pObj = (POBJECT_HEAD)&g_win_signal;
	pObj->pRoot = w;
	
	pObj = (POBJECT_HEAD)&sig_bar_level;
	pObj->frame.uLeft = W_L + B_L_OF;
	pObj->frame.uWidth = B_W;
	
	pObj = (POBJECT_HEAD)& sig_bar_quality;
	pObj->frame.uLeft = W_L + B_L_OF;
	pObj->frame.uWidth = B_W;
	
	pObj = (POBJECT_HEAD)&sig_txt_level;
	pObj->frame.uLeft = W_L + TXTL_L_OF;
		
	pObj = (POBJECT_HEAD)&sig_txt_quality;
	pObj->frame.uLeft = W_L + TXTL_L_OF;
	
	
	pObj = (POBJECT_HEAD)&g_win_signal;
	pObj->frame.uLeft = W_L;
	pObj->frame.uWidth = W_W;
	
   	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);
	api_Signal_Lock_LED_OnOff(lock);//-a by wangyang for Signal Lock LED onoff 2011-10-25

	dem_signal_to_display(lock,&level,&quality);	
	win_signal_set_level_quality(level,quality,lock);	
}
예제 #6
0
void win_signal_open_tplist(POBJECT_HEAD w)
{
	POBJECT_HEAD pObj;
	UINT8 level,quality,lock;
	struct nim_device* nim_dev;
  	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	

	if(w->bType != OT_CONTAINER)
		return ;

	pObj = (POBJECT_HEAD)&sig_bar_level;
	pObj->frame.uLeft = W_L + B_L_OF_B;
	pObj->frame.uWidth = B_W_B;
	
	pObj = (POBJECT_HEAD)& sig_bar_quality;
	pObj->frame.uLeft = W_L + B_L_OF_B;
	pObj->frame.uWidth = B_W_B;
	
	pObj = (POBJECT_HEAD)&sig_txt_level;
	pObj->frame.uLeft = W_L + TXTL_L_OF_B;
		
	pObj = (POBJECT_HEAD)&sig_txt_quality;
	pObj->frame.uLeft = W_L + TXTL_L_OF_B;
	
	
	pObj = (POBJECT_HEAD)&g_win_signal;
	pObj->frame.uLeft = W_L_B;
	pObj->frame.uWidth = W_W_B;

	pObj->pRoot = w;
	
   	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);

	dem_signal_to_display(lock,&level,&quality);	
	win_signal_set_level_quality(level,quality,lock);	
}
예제 #7
0
/*this interface is nor used yet, can delete it???*/
void new_win_signal_open_tplist(POBJECT_HEAD w)
{
	//POBJECT_HEAD pObj;
	UINT8 level, quality, lock;
	struct nim_device *nim_dev;
	if (cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;

	if (w->bType != OT_CONTAINER)
		return ;

	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);

	new_dem_signal_to_display(lock, &level, &quality);
	new_win_signal_set_level_quality(level, quality, lock);

}
예제 #8
0
void win_minisignal_open_ex(POBJECT_HEAD w,UINT32 x, UINT32 y)
{
	POBJECT_HEAD pObj;
    PPROGRESS_BAR pBar;
	UINT8 level,quality,lock;
	struct nim_device* nim_dev;
  	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	

	if(w->bType != OT_CONTAINER)
		return ;
	
	pObj = (POBJECT_HEAD)&g_win_signal;
	pObj->pRoot = w;
    //OSD_SetColor(pObj,WIN_SH_IDX,WIN_SH_IDX,WIN_SH_IDX,WIN_SH_IDX);
    
	pObj = (POBJECT_HEAD)&sig_bar_level;
	//pObj->frame.uLeft = W_L + B_L_OF;
	pObj->frame.uWidth = B_W;
    OSD_SetColor(pObj,B_BG_SH_IDX,B_BG_SH_IDX,B_BG_SH_IDX,B_BG_SH_IDX);
    pBar = (PPROGRESS_BAR)&sig_bar_level;
    pBar->wTickBg = B_MID_SH_IDX;

    
	pObj = (POBJECT_HEAD)& sig_bar_quality;
	//pObj->frame.uLeft = W_L + B_L_OF;
	pObj->frame.uWidth = B_W;
    OSD_SetColor(pObj,B_BG_SH_IDX,B_BG_SH_IDX,B_BG_SH_IDX,B_BG_SH_IDX);
    pBar = (PPROGRESS_BAR)&sig_bar_quality;
    pBar->wTickBg = B_MID_SH_IDX;

    
	pObj = (POBJECT_HEAD)&sig_txt_level;
	//pObj->frame.uLeft = W_L + TXTL_L_OF;
    OSD_SetColor(pObj, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX);
    
	pObj = (POBJECT_HEAD)&sig_txt_quality;
	//pObj->frame.uLeft = W_L + TXTL_L_OF;
    OSD_SetColor(pObj, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX);
    
	pObj = (POBJECT_HEAD)&sig_txt_level_per;
    OSD_SetColor(pObj, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX);
    
	pObj = (POBJECT_HEAD)&sig_txt_quality_per;
    OSD_SetColor(pObj, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX);
    
	pObj = (POBJECT_HEAD)&g_win_signal;
	//pObj->frame.uLeft = W_L;
	//pObj->frame.uWidth = W_W;
	OSD_SetColor(pObj, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX, TXT_SH_IDX);

    
	//OSD_MoveObject(pObj,MINI_SIGNAL_L, MINI_SIGNAL_T,FALSE);
    OSD_MoveObject(pObj,x,y,FALSE);
   	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);
	api_Signal_Lock_LED_OnOff(lock);//-a by wangyang for Signal Lock LED onoff 2011-10-25

	dem_signal_to_display(lock,&level,&quality);	
	win_signal_set_level_quality(level,quality,lock);	
}
예제 #9
0
/* Set the View Mode of VPO Window */
void hde_set_mode(UINT32 mode)
{
    struct MPSource_CallBack MPCallBack;
    struct PIPSource_CallBack PIPCallBack;
    struct VDec_StatusInfo vdec_info;
    struct VDecPIPInfo tInitInfo;
    UINT32 waittime=0, wait_total_time = 0;
    struct vdec_device *pDecvDevice = (struct vdec_device *)get_selected_decoder();
    BOOL need_to_wait = FALSE;
    BOOL need_to_set_output = FALSE;
    UINT8 ulock = 0;
    struct nim_device *nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, 0);
    struct vpo_device *pDisDevice = (struct vpo_device *)dev_get_by_type(NULL, HLD_DEV_TYPE_DIS);
#ifdef DUAL_VIDEO_OUTPUT
    struct vpo_device *pDisDevice_O = (struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS, 1);
#endif
    struct vpo_io_get_info dis_info;

    switch(mode)
    {
    case VIEW_MODE_PREVIEW:
        if ((l_hde_mode != mode) || (l_hde_uIsPreviewResize == 1))
        {
            ENTER_CCHDE_API();
#if(	VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_VE_SCALE)

#ifdef HDTV_SUPPORT
            /* Check Frame Size, If Input Frame is HD, Set VE to Dview Mode */
            vpo_ioctl(pDisDevice, VPO_IO_GET_INFO, (UINT32) &dis_info);
#ifdef DUAL_VIDEO_OUTPUT
            vpo_ioctl(pDisDevice_O, VPO_IO_GET_INFO, (UINT32) &dis_info);
#endif
            if(is_cur_decoder_avc())
            {
                vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                if(vdec_info.pic_width > 720 || vdec_info.pic_height > 576)
                {
                    need_to_wait = TRUE;
                }
                else
                    need_to_wait = FALSE;
            }
            else
            {
                need_to_wait = TRUE;
                vdec_stop(pDecvDevice,TRUE,TRUE);
            }
            if(need_to_wait)
            {
                tInitInfo.adv_setting.init_mode = 1;
                tInitInfo.adv_setting.out_sys = dis_info.tvsys;
                tInitInfo.adv_setting.bprogressive = dis_info.bprogressive;
#ifdef DUAL_VIDEO_OUTPUT
                if(is_cur_decoder_avc())
#else
                if(0)
#endif
                {
                    vdec_set_output(pDecvDevice,DUAL_PREVIEW_MODE, &tInitInfo, &MPCallBack, &PIPCallBack);
                }
                else
                {
                    vdec_set_output(pDecvDevice,	DUAL_PREVIEW_MODE, &tInitInfo, &MPCallBack, &PIPCallBack);
                }
            }
            if(!is_cur_decoder_avc())
            {
                vdec_start(pDecvDevice);
            }
            if(is_cur_decoder_avc() && need_to_wait)
            {
                struct dmx_device *dmx = (struct dmx_device *)dev_get_by_id(HLD_DEV_TYPE_DMX, 0);

                //For H264, we have to wait for 1st picture decoded, then call vpo_zoom, otherwise, it could cause below issue:
                //1. DE under run, because DE can scale down HD full size picture to preview size
                //2. In full screen mode, VE mapping is H264 mapping mode, in preview mode, VE mapping is MPEG2 mapping mode
                //--Michael Xie 2007/8/29
                wait_total_time = VE_MODE_SWITCH_TIME;
                while(waittime<wait_total_time)
                {
                    nim_get_lock(nim, &ulock);
                    if(!ulock)
                        break;
                    if(RET_SUCCESS == dmx_io_control(dmx, IS_AV_SCRAMBLED, 0))
                        break;
                    vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                    if(vdec_info.uFirstPicShowed)
                    {
                        wait_total_time = H264_VE_MODE_SWITCH_TIME;
                    }

                    if(vdec_info.output_mode == PREVIEW_MODE)
                    {
                        osal_task_sleep(100);
                        break;
                    }
                    osal_task_sleep(1);
                    waittime++;
                }
            }

            vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview);
#ifdef DUAL_VIDEO_OUTPUT
            vpo_zoom(pDisDevice_O, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview);
#endif

#else
            //Set Video Decoder Output Mode (PREVIEW_MODE)
            tInitInfo.src_rect.uStartX = l_hde_rectSrcFull_adjusted.uStartX>>1;
            tInitInfo.src_rect.uStartY= l_hde_rectSrcFull_adjusted.uStartY>>1;
            tInitInfo.src_rect.uWidth = PICTURE_WIDTH - 2*tInitInfo.src_rect.uStartX;
            tInitInfo.src_rect.uHeight = PICTURE_HEIGHT - 2*tInitInfo.src_rect.uStartY;
            tInitInfo.dst_rect.uStartX = l_hde_rectScrnPreview.uStartX;
            tInitInfo.dst_rect.uStartY= l_hde_rectScrnPreview.uStartY;
            tInitInfo.dst_rect.uWidth = l_hde_rectScrnPreview.uWidth;
            tInitInfo.dst_rect.uHeight = l_hde_rectScrnPreview.uHeight;
            vdec_set_output(pDecvDevice,PREVIEW_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);

            //Wait Video Decoder Output Mode Switch to PREVIEW_MODE
            vdec_info.output_mode = VIEW_MODE_FULL;
            while((vdec_info.output_mode != PREVIEW_MODE)&&(waittime<VE_MODE_SWITCH_TIME))
            {
                nim_get_lock(nim, &ulock);
                if(!ulock)
                    break;
                osal_task_sleep(1);
                waittime++;
                vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
            }

            //Switch Video Decoder Output Mode to PREVIEW_MODE Forcely
            if(vdec_info.output_mode != PREVIEW_MODE)
            {
                PRINTF("switch to preview forcely\n");

                vdec_stop(pDecvDevice,sys_data_get_cur_chan_mode() == PROG_TV_MODE,FALSE);
                vdec_set_output(pDecvDevice,PREVIEW_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);
                vdec_start(pDecvDevice);
            }
#endif
#elif(VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_DE_SCALE)
            //If is DE Scale Operation, then adjust VPO Full Srceen to Preview Screen directly
            if(0 == l_hde_preview_method)
                vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview);
            //If is VE Scale Operation, first set Video Decoder Output Mode(PIP_MODE),
            //then adjust VPO Full Srceen to Preview Screen
            else if(1 == l_hde_preview_method)
            {
                if(l_hde_mode == VIEW_MODE_PREVIEW)
                {
                    vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview);
                }
                else
                {
                    //Set Video Decoder Output Mode (IND_PIP_MODE)
                    tInitInfo.src_rect.uStartX = l_hde_rectSrcFull_adjusted.uStartX>>1;
                    tInitInfo.src_rect.uStartY= l_hde_rectSrcFull_adjusted.uStartY>>1;
                    tInitInfo.src_rect.uWidth = PICTURE_WIDTH - 2*tInitInfo.src_rect.uStartX;
                    tInitInfo.src_rect.uHeight = PICTURE_HEIGHT - 2*tInitInfo.src_rect.uStartY;
                    tInitInfo.dst_rect.uStartX = l_hde_rectScrnPreview.uStartX;
                    tInitInfo.dst_rect.uStartY= l_hde_rectScrnPreview.uStartY;
                    tInitInfo.dst_rect.uWidth = l_hde_rectScrnPreview.uWidth;
                    tInitInfo.dst_rect.uHeight = l_hde_rectScrnPreview.uHeight;
                    tInitInfo.pipSize.uWidth=l_hde_rectScrnPreview.uWidth;
                    tInitInfo.pipSize.uHeight=l_hde_rectScrnPreview.uHeight/5;
                    vdec_set_output(pDecvDevice,IND_PIP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);

                    //After Video Decoder Output Mode switch to PIP_MODE, then adjust VPO
                    vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                    if(VDEC27_STOPPED == vdec_info.uCurStatus)
                    {
                        vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview);
                    }
                    else
                    {
                        waittime = 0;
                        while((vdec_info.output_mode != PIP_MODE)&&(waittime<VE_MODE_SWITCH_TIME_29E))
                        {
                            nim_get_lock(nim, &ulock);
                            if(!ulock)
                                break;
                            osal_task_sleep(20);
                            waittime += 20;
                            vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                        }
                        if(vdec_info.output_mode != PIP_MODE)
                        {
                            vdec_stop(pDecvDevice,TRUE,FALSE);
                            vdec_set_output(pDecvDevice,IND_PIP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);
                            vdec_start(pDecvDevice);
                            vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview);
                        }
                        else
                        {
                            vpo_zoom(pDisDevice, &l_hde_rectSrcFull_adjusted, &l_hde_rectScrnPreview);
                        }
                    }
                    vpo_ioctl(pDisDevice, VPO_IO_ADJUST_LM_IN_PREVIEW, 1);

                }
            }
#endif
        }
        l_hde_uIsPreviewResize = 0;
        LEAVE_CCHDE_API();
        break;
    case VIEW_MODE_MULTI:
        break;
    case VIEW_MODE_FULL:
    default:
        if (l_hde_mode != mode)
        {
            ENTER_CCHDE_API();
#if(	VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_VE_SCALE)
#ifdef HDTV_SUPPORT
            // convert VE to MP mode
            vpo_ioctl(pDisDevice, VPO_IO_GET_INFO, (UINT32) &dis_info);
#ifdef DUAL_VIDEO_OUTPUT
            vpo_ioctl(pDisDevice_O, VPO_IO_GET_INFO, (UINT32) &dis_info);
#endif
            need_to_set_output = FALSE;
            if(is_cur_decoder_avc())
            {
                vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                if(vdec_info.pic_width > 720 || vdec_info.pic_height > 576)
                {
                    need_to_wait = TRUE;
                }
                else if(vdec_info.pic_width == 0 || vdec_info.pic_height == 0)
                {
                    need_to_set_output = TRUE;
                }
                else
                    need_to_wait = FALSE;
            }
            else
            {
                need_to_wait = TRUE;
                vdec_stop(pDecvDevice,TRUE,TRUE);
            }

            if(need_to_wait || need_to_set_output)
            {
                tInitInfo.adv_setting.init_mode = 0;
                tInitInfo.adv_setting.out_sys = dis_info.tvsys;
                tInitInfo.adv_setting.bprogressive = dis_info.bprogressive;
#ifdef DUAL_VIDEO_OUTPUT
                if(is_cur_decoder_avc())
#else
                if(0)
#endif
                {
                    vdec_set_output(pDecvDevice,DUAL_MODE, &tInitInfo, &MPCallBack, &PIPCallBack);
                }
                else
                {
                    vdec_set_output(pDecvDevice,DUAL_MODE, &tInitInfo, &MPCallBack, &PIPCallBack);
                }
            }
            if(!is_cur_decoder_avc())
            {
                vdec_start(pDecvDevice);
            }

            vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull);
#ifdef DUAL_VIDEO_OUTPUT
            vpo_zoom(pDisDevice_O, &l_hde_rectSrcFull, &l_hde_rectScrnFull);
#endif
            osal_task_sleep(50);
            if(is_cur_decoder_avc() && need_to_wait)
            {
                struct dmx_device *dmx = (struct dmx_device *)dev_get_by_id(HLD_DEV_TYPE_DMX, 0);

                wait_total_time = VE_MODE_SWITCH_TIME;
                while(waittime<wait_total_time)
                {
                    nim_get_lock(nim, &ulock);
                    if(!ulock)
                        break;
                    if(RET_SUCCESS == dmx_io_control(dmx, IS_AV_SCRAMBLED, 0))
                        break;
                    vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                    if(vdec_info.uFirstPicShowed)
                    {
                        wait_total_time = H264_VE_MODE_SWITCH_TIME;
                    }

                    if(vdec_info.output_mode == MP_MODE)
                    {
                        break;
                    }
                    osal_task_sleep(1);
                    waittime++;
                }
            }

#else
            //Set Video Decoder Output Mode (MP_MODE)
            tInitInfo.buse_sml_buf = FALSE;
            tInitInfo.src_rect.uStartX = l_hde_rectSrcFull.uStartX;
            tInitInfo.src_rect.uStartY= l_hde_rectSrcFull.uStartY;
            tInitInfo.src_rect.uWidth = l_hde_rectSrcFull.uWidth;
            tInitInfo.src_rect.uHeight = l_hde_rectSrcFull.uHeight;
            tInitInfo.dst_rect.uStartX = l_hde_rectScrnFull.uStartX;
            tInitInfo.dst_rect.uStartY= l_hde_rectScrnFull.uStartY;
            tInitInfo.dst_rect.uWidth = l_hde_rectScrnFull.uWidth;
            tInitInfo.dst_rect.uHeight = l_hde_rectScrnFull.uHeight;
            vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);

            //Wait Video Decoder Output Mode Switch to MP_MODE
            vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
            while(((vdec_info.output_mode != MP_MODE)||(vdec_info.use_sml_buf))&&(waittime<VE_MODE_SWITCH_TIME))
            {
                nim_get_lock(nim, &ulock);
                if(!ulock)
                    break;
                osal_task_sleep(1);
                waittime++;
                vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
            }
            //Switch Video Decoder Output Mode to MP_MODE Forcely
            if((vdec_info.output_mode != MP_MODE)||(vdec_info.use_sml_buf))
            {
                PRINTF("switch to mp forcely\n");

                vdec_stop(pDecvDevice,TRUE,FALSE);
                vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);
                vdec_start(pDecvDevice);
            }
#endif
#elif(VDEC27_PREVIEW_SOLUTION == VDEC27_PREVIEW_DE_SCALE)
            //If is DE Scale Operation, then adjust VPO to Full Srceen directly
            if(0 == l_hde_preview_method)
                vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull);
            //If is VE Scale Operation, first set Video Decoder Output Mode(MP_MODE),
            //then adjust VPO to Full Srceen
            else if(1 == l_hde_preview_method)
            {
                //Set Video Decoder Output Mode (MP_MODE)
                tInitInfo.src_rect.uStartX = l_hde_rectSrcFull.uStartX;
                tInitInfo.src_rect.uStartY= l_hde_rectSrcFull.uStartY;
                tInitInfo.src_rect.uWidth = l_hde_rectSrcFull.uWidth;
                tInitInfo.src_rect.uHeight = l_hde_rectSrcFull.uHeight;
                tInitInfo.dst_rect.uStartX = l_hde_rectScrnFull.uStartX;
                tInitInfo.dst_rect.uStartY= l_hde_rectScrnFull.uStartY;
                tInitInfo.dst_rect.uWidth = l_hde_rectScrnFull.uWidth;
                tInitInfo.dst_rect.uHeight = l_hde_rectScrnFull.uHeight;
                vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);

                //After Video Decoder Output Mode switch to MP_MODE, then adjust VPO
                vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                if(VDEC27_STOPPED == vdec_info.uCurStatus)
                {
                    vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull);
                }
                else
                {
                    waittime = 0;
                    while((vdec_info.output_mode != MP_MODE)&&(waittime<VE_MODE_SWITCH_TIME_29E))
                    {
                        nim_get_lock(nim, &ulock);
                        if(!ulock)
                            break;
                        osal_task_sleep(20);
                        waittime += 20;
                        vdec_io_control(pDecvDevice, VDEC_IO_GET_STATUS, (UINT32)&vdec_info);
                    }
                    if(vdec_info.output_mode != MP_MODE)
                    {
                        vdec_stop(pDecvDevice,TRUE,FALSE);
                        vdec_set_output(pDecvDevice,MP_MODE, &tInitInfo, &MPCallBack,&PIPCallBack);
                        vdec_start(pDecvDevice);
                        vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull);
                    }
                    else
                    {
                        vpo_zoom(pDisDevice, &l_hde_rectSrcFull, &l_hde_rectScrnFull);
                    }
                }

                vpo_ioctl(pDisDevice, VPO_IO_ADJUST_LM_IN_PREVIEW, 0);
            }
#endif
            LEAVE_CCHDE_API();
        }
    }
예제 #10
0
static PRESULT subtitle_con_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2)
{
	PRESULT ret = PROC_PASS;
	SYSTEM_DATA * sys;
	struct nim_device* nim_dev;	
	UINT8 i,lock;
	UINT8 unact;
	
	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;
    	nim_get_lock(nim_dev,&lock);

	switch(event)
	{
	case EVN_PRE_OPEN:
        api_set_deo_layer(0);
        api_inc_wnd_count();

		for(i=0;i<SUBTITLE_ITEM_NUMBER;i++)
		{
			p_subtitle_track_str[i]=Subtitle_track_str[i];
			p_subtitle_track_idx[i]=Subtitle_track_idx[i];
		}
		win_subtitle_init_data();
		if(((0 == g_win_subtitle_count ) && (0 == g_win_ttx_subtitle_count)) || (!lock))
#if (DVR_PVR_SUPPORT_SUBTITLE)//temp disable
		if(((0 == g_win_subtitle_count ) && (0 == g_win_ttx_subtitle_count)) 
#ifdef DVR_PVR_SUPPORT
			|| ((!lock) && !api_pvr_is_playing())
#else
			|| (!lock)
#endif
			)
#endif
		{
			win_com_popup_open(WIN_POPUP_TYPE_SMSG,NULL, RS_DISPLAY_NO_DATA);			
			osal_task_sleep(1000);
			win_compopup_close();
            api_dec_wnd_count();
			return PROC_LEAVE;
		}
		break;		
	case EVN_UNKNOWN_ACTION:
		unact = (VACTION)(param1>>16);
		if(VACT_ENTER == unact)
		{
			UINT16	cur_sel = OSD_GetListCurPoint(&g_ls_subtitle);
			sys = sys_data_get();
			if(g_win_subtitle_count + g_win_ttx_subtitle_count==cur_sel)
			{
				sys->osd_set.subtitle_display = 0;/*select off option*/
				sys->osd_set.subtitle_lang = 0xFF;
			}
			else if(cur_sel < g_win_ttx_subtitle_count)
			{
				sys->osd_set.subtitle_display = 1;/*subtitle on*/
				sys->osd_set.subtitle_lang = cur_sel;/*set_sub_lang_idx is used in api_osd_mode_change function*/
			}
			else if(cur_sel < g_win_subtitle_count + g_win_ttx_subtitle_count)
			{/*ttx_subtitle on the top then normal subtitle*/
				sys->osd_set.subtitle_display = 1;
				sys->osd_set.subtitle_lang = cur_sel;/*set_sub_lang_idx is used in api_osd_mode_change function*/
			}
			ret = PROC_LEAVE;
			api_osd_mode_change(OSD_NO_SHOW);
			//api_osd_mode_change(OSD_SUBTITLE);
		}
		break;
	case EVN_PRE_CLOSE:
		unact = (VACTION)(param1>>16);
		ret = PROC_PASS;
        break;

	case EVN_POST_CLOSE:
        api_set_deo_layer(1);
        api_dec_wnd_count();
        break;
	default:
		break;
	}

	return ret;
}
예제 #11
0
BOOL new_win_signal_update()
{
	POBJECT_HEAD pObj;
	PROGRESS_BAR *bar;
	TEXT_FIELD *txt;

	UINT16 cn_noise, level;
	UINT32 ber;
	INT32 temp = 0;
	UINT32 dot = 0;
	char str[20];
	struct nim_device *nim_dev;
	UINT8 lock, cn_noise_maped = 0, level_maped = 0;
	UINT16 level_shIdx,quality_shIdx,ber_idx;
    
	pObj = (POBJECT_HEAD) &g_new_signal_test;//lin
	if (pObj->pRoot == NULL)
		return FALSE;

	if (cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;

	nim_get_lock(nim_dev, &lock);
    nim_ioctl_ext(nim_dev, NIM_DRIVER_GET_RF_LEVEL, (void*) &level);
        
	if (lock)
	{
		level_shIdx = PROGRESS_COLOR_GREEN;
		quality_shIdx = LOCK_IDX;
		ber_idx = PROGRESS_COLOR_BLUE;
        nim_ioctl_ext(nim_dev, NIM_DRIVER_GET_CN_VALUE, (void*) &cn_noise);    
		nim_ioctl_ext(nim_dev, NIM_DRIVER_GET_BER_VALUE, (void*) &ber);
	}
	else
	{
		level_shIdx = UNLOCK_IDX;
		quality_shIdx = UNLOCK_IDX;
		ber_idx = UNLOCK_IDX;
		cn_noise = 0;
		ber = 0;
	}

	//update the text value & uint for each item
	if(lock)
	{
		sprintf(str, "%d.%d ", cn_noise / 10, cn_noise % 10);
	}
	else
	{
		sprintf(str, "0");
	}
	txt = &new_sig_txt_CN0;//sig_txt_CN_uint;
	OSD_SetTextFieldContent(txt, STRING_ANSI, (UINT32)str);


	sprintf(str, "%d ", ber);
	txt = &new_sig_txt_BER0;//sig_txt_BER_uint;
	OSD_SetTextFieldContent(txt, STRING_ANSI, (UINT32)str);
            
    if (level % 10)
    {
		temp = (107-level / 10) - 1; //107
		dot = 10-level % 10;
	}
	else
	{
		temp = 107-level / 10; //107
		dot = 0;
	}

    if(temp<0)
        temp= -temp;  //temp=0; //avoid the negative value

	sprintf(str, "%d.%d", temp, dot);
	txt = &new_sig_txt_level0;//sig_txt_level_uint;
	OSD_SetTextFieldContent(txt, STRING_ANSI, (UINT32)str);

//draw SNR bar
	nim_get_SNR(nim_dev, &cn_noise_maped);
	bar = &new_sig_bar_CN;//sig_bar_CN;  
    if(0==cn_noise)
    {
        OSD_SetProgressBarPos(bar, cn_noise_maped);
        bar->wTickFg = quality_shIdx;
    }
    else
    {
	    OSD_SetProgressBarPos(bar, cn_noise_maped); //OSD_SetProgressBarPos(bar, cn_noise_maped);
	    bar->wTickFg = quality_shIdx;
    }


//Draw the signal error bar
	bar = &new_sig_bar_BER;//sig_bar_BER;
	ber = new_map_ber_value(&ber);
	OSD_SetProgressBarPos(bar, ber);
	bar->wTickFg = ber_idx;

//Draw the signal intensity bar
    level_maped = temp *100 / 107;  
//    if((level_maped>=0)&&(level_maped<30))
    if(level_maped<30)
    {
        level_maped = 5*level_maped/2;  
    }
    else if((level_maped>=30)&&(level_maped<60))
    {
        level_maped = 75 + (level_maped - 30)/3; 
    }
    else
    {
        level_maped = 95 + (level_maped - 60)/20;
    }
    
	if (level_maped > 100)
	{
		level_maped = 100;
//        osal_task_sleep(10);
    } 
    
	bar = &new_sig_bar_level;//sig_bar_level; 
	OSD_SetProgressBarPos(bar, level_maped);
	bar->wTickFg = level_shIdx;

//draw them all
	OSD_DrawObject(pObj, C_UPDATE_ALL);

	return TRUE;
}
예제 #12
0
파일: sfu_test.c 프로젝트: alkap007/ali3606
static int SetSSIGap(unsigned int argc, unsigned char *argv[])
{
	UINT32 gap;
	struct nim_device *nim_dev = dev_get_by_id(HLD_DEV_TYPE_NIM, nim_id);
	
	if (argc != 2)
	{
	    SH_PRINTF("Usage: SetPara <clk>\n");
	    return -1;
	}
	else if(nim_dev == NULL)
	{
	    SH_PRINTF("Nim1 status error\n");
	    return -1;
	}

	if(strcasecmp("gap",argv[1]))
	{
		gap = ATOI(&(argv[1][3]));
		nim_io_control(nim_dev, NIM_DRIVER_CHANGE_TS_GAP, gap);
	}
	else
	{
		SH_PRINTF("parameter error\n");
		return -3;
	}

#if 1//path for lock delay
	UINT8	lock;
	UINT32 pre_tick = osal_get_tick();

	while((osal_get_tick()-pre_tick)>=SSI_GAP_TIMEOUT)
	{
		nim_get_lock(nim_dev,&lock);
		if(lock)
			break;

		osal_delay(30);
	}
#endif
	
	LIB_ASH_OC('S');
	LIB_ASH_OC('e');        
	LIB_ASH_OC('t');
	LIB_ASH_OC(' ');        
	LIB_ASH_OC('S');        
	LIB_ASH_OC('S');        	
	LIB_ASH_OC('I');       
	LIB_ASH_OC(' ');           	
	LIB_ASH_OC('G');          	
	LIB_ASH_OC('a');          	
	LIB_ASH_OC('p');          	
	LIB_ASH_OC(' ');          	
	LIB_ASH_OC('t');          	
	LIB_ASH_OC('o');          	
	LIB_ASH_OC(' ');          	
	LIB_ASH_OC('g');          	
	LIB_ASH_OC('a');          	
	LIB_ASH_OC('p');
	if(gap<10)
	{
		LIB_ASH_OC((gap + '0'));	
	}
	else
	{
		LIB_ASH_OC(((UINT8)gap/10 + '0'));	
		LIB_ASH_OC(((UINT8)gap%10 + '0'));	
	}

	LIB_ASH_OC('\r'); 
	LIB_ASH_OC('\n'); 	

	reset_perflag();
	return 0;    
}
예제 #13
0
static INT32 as_enum_scan(UINT16 sat_id, UINT16 type, psi_tuning_t tuning_fn)
{
    BOOL db_ret = TRUE;
    INT32 ret = 0;
    INT32 func_ret = 0;
    UINT32 search_scheme;
    UINT8 lock_stat;
    struct as_tuning_param *atp = &as_info->atp;
    as_update_event_t update_event = as_info->param.as_handler;

    AS_PRINTF("start at %d\n", osal_get_tick());
    	
    	if(update_event != NULL)
    	{
        	update_event(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANSTART+1);
    	}

	//Set First TP Info
    	if(tuning_fn != NULL)
    	{
        	tuning_fn(atp);
    	}

	//TP Scan Loop
    	while((atp->finish == FALSE) && (ret == 0))
    	{
    		//Set Search Scheme, that is whether Search NIT or not
        	search_scheme = as_info->param.as_prog_attr;
        	if (atp->nit_enable)
        	{            		
                     if (atp->si_enable)
                     {
                        search_scheme |= P_SEARCH_NIT;
                     }
                     else
                     {
                        search_scheme = P_SEARCH_NIT;
                     }
        	}

        	AS_PRINTF("id=%d, t_nr=%d\n",atp->tp_id, as_info->tp_nr);
        	lock_stat = 0;

		//Show New TP for DVB-S by Upper Layer
       	if ((tuning_fn == as_dvbs_preset_tuning) && (update_event))
        	{
            		update_event(ASM_TYPE_ADD_TRANSPONDER, atp->tp_id);
        	}

		//Try to Lock Signal
       	do
       	{
            		nim_get_lock(as_info->nim, &lock_stat);
            		if((lock_stat) || (as_info->stop_scan_signal))
            		{
                		break;
            		}
            		osal_task_sleep(1);
        	} while((INT32)osal_get_tick() < (INT32)atp->timeout);

        	AS_PRINTF("lock stat = %d\n", lock_stat);
        	if (!as_info->stop_scan_signal)
        	{
        		//If Lock Signal, then Search Prog in this TP
            		if (lock_stat)
            		{
                		//Scan from Start Frq to End Frq for DVB-C and DVB-T
                		if (type == ATP_TYPE_STEP)
                		{
                			//For DVB-C, Set TP Info according to as_info
                    			if(as_info->param.as_frontend_type == FRONTEND_TYPE_C)
                    			{
                        			db_ret = dvbc_alloc_transponder(as_info, atp, &as_info->xp, sat_id);
                    			}
								if (db_ret != TRUE)
                    			{
                        			ret = 1;
                        			break;
                    			}
					//Show New TP for DVB-C and DVB-T by Upper Layer
                    			if(update_event)
                    			{
                        			update_event(ASM_TYPE_ADD_TRANSPONDER, atp->tp_id);//notify ap show tp
                    			}
                		}

				//Prog Search in this TP
#if (defined(SUPPORT_MTILINGUAL_SERVICE_NAME))
                		psi_module_init(as_info->dmx, as_info->nim, (void *)__MM_PSI_START_ADDR, 400*1024);
#else
                		psi_module_init(as_info->dmx, as_info->nim, (void *)__MM_PSI_START_ADDR, 180*1024);
#endif
				func_ret = psi_search_start(sat_id, atp->tp_id, search_scheme, as_info->param.as_p_add_cfg, psi_callback, tuning_fn, atp);
                		if (SI_STOFULL == func_ret)
                		{
                    			ret= 1;
                		}
            		}
			//Not Lock Signal, then Switch to next TP
            		else
            		{
						#ifdef NIT_AUTO_SEARCH_SUPPORT
						if(tuning_fn== as_dvbc_blind_tuning && b_found_nit_tp)
						{// because doing auto scan,so atp->pos must > AS_MIN_CAB_FREQUENCY and we need to change to nit search.
							if(atp->pos > AS_MIN_CAB_FREQUENCY)
								atp->pos = 0;
							tuning_fn = as_dvbs_preset_tuning;
						}
						#endif
                		tuning_fn(atp);
            		}
        	}
			
        	if (as_info->stop_scan_signal || ret)
        	{
            		break;
        	}

		//Show Scan Progress by Upper Layer
        	if ((!as_info->tp_nit[0]) && (type == ATP_TYPE_DBASE) && (update_event))
        	{
            		update_event(ASM_TYPE_PROGRESS, atp->pos*99/(as_info->tp_nr+2));
        	}
    }
#ifdef NIT_AUTO_SEARCH_SUPPORT		
	b_found_nit_tp = FALSE; // nit search done
#endif	
    AS_PRINTF("end at %d\n", osal_get_tick());
    return ret;
}
예제 #14
0
BOOL GetSignalStatus(  signal_lock_status* lock_flag,
                        signal_scramble_status* scramble_flag,
                        signal_lnbshort_status* lnbshort_flag,
                        signal_parentlock_status* parrentlock_flag)
{
    UINT8 lock;
    struct dmx_device * dmx_dev;
    signal_lnbshort_status lnbshort;
    SYSTEM_DATA* sys_data;
    sys_data = sys_data_get();    
    UINT8 scrabled,scrable_typ;
    P_NODE p_node;
    UINT16 cur_channel;
    struct VDec_StatusInfo curStatus;
    static UINT16 prechan;
    static UINT32 descDetTime = 0;
	struct nim_device* nim_dev;
#ifdef NEW_DEMO_FRAME
    static UINT32 unlock_times;
	INT32 ts_route_id;
	struct ts_route_info ts_route;
    struct nim_config nim_config;
#endif

	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	
    
#ifdef NEW_DEMO_FRAME
	MEMSET(&ts_route, 0, sizeof(struct ts_route_info));
	if(ts_route_get_by_type(TS_ROUTE_MAIN_PLAY, &ts_route_id, &ts_route) != RET_FAILURE)
	{
		nim_dev = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, ts_route.nim_id);
	}
	else
	{
		nim_dev = (cur_tuner_idx == 0) ? g_nim_dev : g_nim_dev2;
	}
#endif

    
    lnbshort = SIGNAL_STATUS_LNBNORMAL;

#if(SYS_LNB_SHORT_DET == SYS_FUNC_ON)

    /*  
    if(sys_data->bLNB_power == LNB_POWER_ON)
    {
        if(LNB_state() == 1)//short
        {
            lnbshort = SIGNAL_STATUS_LNBSHORT;
        }
    }
    */
    lnbshort = lnb_power_short;    
#elif(SYS_12V_SHORT_DET == SYS_FUNC_ON)
	lnbshort = v12_power_short;
#endif

    if(lnbshort_flag != NULL)
        *lnbshort_flag = lnbshort;    
    SetSignalLNBShortStatus(lnbshort);

//    if(*lnbshort_flag  == SIGNAL_STATUS_LNBSHORT)
//        return TRUE;    
    
#ifdef NEW_DEMO_FRAME
	dmx_dev = (struct dmx_device *)dev_get_by_id(HLD_DEV_TYPE_DMX, ts_route.dmx_id);
#else
	dmx_dev = g_dmx_dev;
#endif

#ifdef DVR_PVR_SUPPORT
	if(singal_play_chan_nim_busy)
		lock = SIGNAL_STATUS_UNLOCK;
	else
#endif
    		nim_get_lock(nim_dev,&lock);
#if 0//def NEW_DEMO_FRAME  //reset diseqc, but it may hold this process, if attached to UI flow maybe cause bug!
	if(!lock)
		unlock_times++;
	else 
		unlock_times = 0;
	if((unlock_times > 10)&& sys_data->bLNB_power)
	{
		dev_get_nim_config(nim_dev, FRONTEND_TYPE_S, &nim_config);
		frontend_set_antenna(nim_dev, &nim_config.antenna, &nim_config.xpond, 1); 
		if(frontend_lnb_22k_ctl(&nim_config.antenna) || (nim_dev == g_nim_dev2))
			frontend_set_nim(nim_dev, &nim_config.antenna,&nim_config.xpond,1);
		
		nim_get_lock(nim_dev,&lock);
		unlock_times = 0;  
	}
#endif

    if (parrentlock_flag == NULL)
        lv_lock_status = lock? SIGNAL_STATUS_LOCK : SIGNAL_STATUS_UNLOCK;
    else
	    SetSignalLockStatus( lock? SIGNAL_STATUS_LOCK : SIGNAL_STATUS_UNLOCK);

	cur_channel = sys_data_get_cur_group_cur_mode_channel();
	get_prog_at(cur_channel,&p_node);

#if 0
	scrabled = 0;
	if(dmx_io_control(dmx_dev,IS_AV_SCRAMBLED,(UINT32)(&scrable_typ)) == RET_SUCCESS )
	{
		if(scrable_typ & (VDE_TS_SCRBL|VDE_PES_SCRBL))
			scrabled = 1;
		else
		{
			scrabled = 0;			
		}
	}
#else
    scrabled = key_get_dmx0_scramble(NULL);
#endif

#ifdef CI_SUPPORT2
	if ((parrentlock_flag == NULL) && (p_node.ca_mode) && (!scrabled) && lock && (screen_back_state == SCREEN_BACK_VIDEO) && (VIEW_MODE_FULL == hde_get_mode()) 
#ifdef DVR_PVR_SUPPORT
		&& !freeze_for_pvr //black screen result in pvr state trans!
		&& api_pvr_is_live_playing()
#endif
		)
	{
	    vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus);
		UINT32 freeze_flag = curStatus.display_idx;
		if((curStatus.uFirstPicShowed)  && (curStatus.uCurStatus == VDEC_DECODING)) //for scramble prog and freeze screen (show black screen and scramble osd) 
		{
			osal_task_sleep(100);
			//vdec_io_control(g_decv_dev, VDEC_IO_GET_STATUS, (UINT32)&curStatus);
			vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus);
			if(freeze_flag == curStatus.display_idx)
			{
				osal_task_sleep(100);
				//vdec_io_control(g_decv_dev, VDEC_IO_GET_STATUS, (UINT32)&curStatus);
				vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus);
				if(freeze_flag == curStatus.display_idx) // freeze screen state!
				{
					scrabled = 1;	
#ifdef DVR_PVR_SUPPORT //add to simulate monitor's function for video hold state because monitor is off under DVR project!
					if((!last_ca_pmt_cmd_time) || (last_ca_pmt_cmd_time && (osal_get_tick() > last_ca_pmt_cmd_time + 6000)))
					{
						if(ca_pmt_cmd_cnt >= 2)
						{
							UIChChgPlayProg(0,CC_CMD_RESET_CRNT_CH);
							ca_pmt_cmd_cnt = 0;
						}
						else
						{
							//cc_send_ca_pmt();
							cc_send_ca_pmt(p_node.prog_id);
							ca_pmt_cmd_cnt++;
						}
						last_ca_pmt_cmd_time = osal_get_tick();
					}
#endif
				}
                else
                {
                    ca_pmt_cmd_cnt = 0;
                }
			}
            else
            {
                ca_pmt_cmd_cnt = 0;
            }
		}
		else if(!curStatus.uFirstPicShowed) //for scramble prog and black screen
		{
			scrabled = 1;
            ca_pmt_cmd_cnt = 0;
		}
	}
#endif


#ifdef CTI_CA
{
	UINT32 freeze_flag = curStatus.display_idx;
	
    vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus);
	freeze_flag = curStatus.display_idx;
	if((curStatus.uFirstPicShowed)  && (curStatus.uCurStatus == VDEC_DECODING)) //for scramble prog and freeze screen (show black screen and scramble osd) 
	{
		osal_task_sleep(100);

		vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus);
		if(freeze_flag == curStatus.display_idx)
		{
			osal_task_sleep(100);

			vdec_io_control(get_selected_decoder(), VDEC_IO_GET_STATUS, (UINT32)&curStatus);
			if(freeze_flag == curStatus.display_idx) // freeze screen state!
			{
				scrabled = 1;	
			}
		}
	}
	else if(!curStatus.uFirstPicShowed) //for scramble prog and black screen
	{
		scrabled = 1;
	}

/*qjzheng 2010.5.7 BUG2003 不能播放加锁节目时, 有时提示是CA错误*/
	if( !lv_lock_status )
	{
		scrabled = 0;
	}
}
#endif


    if (parrentlock_flag)
    {
        if (scrabled)
        {
            if (lv_scramble_fake)
                scrabled = 0;
        }
    	SetSignalScrambleStatus(scrabled? SIGNAL_STATUS_SCRAMBLED : SIGNAL_STATUS_UNSCRAMBLED);
    }
    else
    {
        lv_scramble_status = scrabled? SIGNAL_STATUS_SCRAMBLED : SIGNAL_STATUS_UNSCRAMBLED;
    }

    /*Never in In multi-view mode*/
    if(lock && !scrabled && hde_get_mode()!=VIEW_MODE_MULTI)
    {
        if(p_node.ca_mode && sys_data_get_cur_chan_mode() == TV_CHAN)
        {
            if(!curStatus.uFirstPicShowed && curStatus.uCurStatus!=VDEC_PAUSED)
            {
                descDetTime ++;
                if(descDetTime == 1)
                    prechan = cur_channel;
                if(descDetTime >=3 && prechan == cur_channel)
                    scrabled = 1;
                else
                    descDetTime = 0;                    
            }
            else
                descDetTime = 0;
        }
    }   

    if(lock_flag != NULL)
        *lock_flag = lv_lock_status;
    if(scramble_flag != NULL)
        *scramble_flag = lv_scramble_status;
    if(parrentlock_flag != NULL)
        *parrentlock_flag = lv_parrentlock_status;
	
    if(lv_lock_status == SIGNAL_STATUS_LOCK 
        && lv_scramble_status == SIGNAL_STATUS_UNSCRAMBLED
        && lv_lnbshort_status == SIGNAL_STATUS_LNBNORMAL
        && lv_parrentlock_status == SIGNAL_STATUS_PARENT_UNLOCK)
        return FALSE;
    else
    	{	
	    	 return TRUE;        
    	}
       
}
예제 #15
0
static INT32 as_enum_scan(UINT16 sat_id, UINT16 type, psi_tuning_t tuning_fn)
{
    BOOL db_ret = TRUE;
    INT32 ret = 0;
    UINT32 search_scheme;
    UINT8 lock_stat;
    struct as_tuning_param *atp = &as_info->atp;
    as_update_event_t update_event = as_info->param.as_handler;

    AS_PRINTF("start at %d\n", osal_get_tick());
    	
    	if(update_event != NULL)
    	{
        	update_event(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANSTART+1);
    	}

	//Set First TP Info
    	if(tuning_fn != NULL)
    	{
        	tuning_fn(atp);
    	}

	//TP Scan Loop
    	while((atp->finish == FALSE) && (ret == 0))
    	{
    		//Set Search Scheme, that is whether Search NIT or not
        	search_scheme = as_info->param.as_prog_attr;
        	if (atp->nit_enable)
        	{
            		search_scheme |= P_SEARCH_NIT;
        	}

        	AS_PRINTF("id=%d, t_nr=%d\n",atp->tp_id, as_info->tp_nr);
        	lock_stat = 0;

		//Show New TP for DVB-S by Upper Layer
        	if ((tuning_fn == as_dvbs_preset_tuning) && (update_event))
        	{
            		update_event(ASM_TYPE_ADD_TRANSPONDER, atp->tp_id);
        	}

		//Try to Lock Signal
       	do
       	{
            		nim_get_lock(as_info->nim, &lock_stat);
            		if((lock_stat) || (as_info->stop_scan_signal))
            		{
                		break;
            		}
            		osal_task_sleep(1);
        	} while((INT32)osal_get_tick() < (INT32)atp->timeout);

			// fix a bug of 3501B tp scan, it need more time. (3501 SSI to SPI 8bit mode, for some coderate).
			if(atp->ft_type == FRONTEND_TYPE_S)
			{
				osal_task_sleep(1200);
			}

        	AS_PRINTF("lock stat = %d\n", lock_stat);
        	if (!as_info->stop_scan_signal)
        	{
        		//If Lock Signal, then Search Prog in this TP
            		if (lock_stat)
            		{
                		//Scan from Start Frq to End Frq for DVB-C and DVB-T
                		if (type == ATP_TYPE_STEP)
                		{
                			//For DVB-C, Set TP Info according to as_info
                    			if(as_info->param.as_frontend_type == FRONTEND_TYPE_C)
                    			{
                        			db_ret = dvbc_alloc_transponder(as_info, atp, &as_info->xp, sat_id);
                    			}
					else if(as_info->param.as_frontend_type == FRONTEND_TYPE_T)
					{
						
					}

					if (db_ret != TRUE)
                    			{
                        			ret = 1;
                        			break;
                    			}
					//Show New TP for DVB-C and DVB-T by Upper Layer
                    			if(update_event)
                    			{
                        			update_event(ASM_TYPE_ADD_TRANSPONDER, atp->tp_id);
                    			}
                		}

				//Prog Search in this TP
                		psi_module_init(as_info->dmx, as_info->nim, (void *)__MM_PSI_START_ADDR, 180*1024);
                		if (SI_STOFULL == psi_search_start(sat_id, atp->tp_id, search_scheme, 
                    			as_info->param.as_p_add_cfg, psi_callback, tuning_fn, atp))
                		{
                    			ret= 1;
                		}

            		}
			//Not Lock Signal, then Switch to next TP
            		else
            		{
                		tuning_fn(atp);
            		}
        	}
			
        	if (as_info->stop_scan_signal || ret)
        	{
            		break;
        	}

		//Show Scan Progress by Upper Layer
        	if ((!as_info->tp_nit[0]) && (type == ATP_TYPE_DBASE) && (update_event))
        	{
            		update_event(ASM_TYPE_PROGRESS, atp->pos*99/(as_info->tp_nr+2));
        	}
    }
	
    AS_PRINTF("end at %d\n", osal_get_tick());
    return ret;
}
예제 #16
0
static INT32 as_enum_scan(UINT16 sat_id, UINT16 type)
{
    INT32 db_ret;
    INT32 ret=0;
    UINT32 search_scheme;
    UINT8 lock_stat;
    struct as_tuning_param *atp = &as_info->atp;
    UINT8 i,j;
    psi_tuning_t tuning_fn = NULL;
    as_update_event_t update_event = as_info->param.as_handler;

    AS_PRINTF("start at %d\n", osal_get_tick());
    update_event(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANSTART+1);

    MEMSET(atp, 0, sizeof(as_info->atp));
    if (type == ATP_TYPE_DBASE)
    {
        if (as_info->tp_nr<=0)
        {
            AS_PRINTF("no preset transponder on this satellite!\n");
            return ret;
        }
        tuning_fn = as_preset_tuning;
    } 
    else if (type == ATP_TYPE_STEP)
    {
    #if (SYS_PROJECT_FE == PROJECT_FE_DVBC)	
        if (dvbc_init_search_param(atp, as_info->param.as_from,as_info->param.as_to) == FALSE)
            return ret;
    #endif		
        tuning_fn = as_blind_tuning;
    }
#ifndef DVBC_AUTOSCAN_MULTI_SYMBOL_QAM
    tuning_fn(atp);
#else
    if(type == ATP_TYPE_DBASE)
        tuning_fn(atp); 
	autoscan_symbol[0]=as_info->param.as_sym;
	autoscan_symbol[1]=as_info->param.as_sym2;
	autoscan_symbol[2]=as_info->param.as_sym3;
#endif

    	
    while((atp->finish==FALSE)&&(ret==0))
    {
        search_scheme = as_info->param.as_prog_attr;
        if (atp->nit_enable)
            search_scheme |= P_SEARCH_NIT;

        AS_PRINTF("id=%d, t_nr=%d\n",atp->tp_id, as_info->tp_nr);
        lock_stat = 0;
        if (tuning_fn == as_preset_tuning)
            update_event(ASM_TYPE_ADD_TRANSPONDER, atp->tp_id);
#ifdef DVBC_AUTOSCAN_MULTI_SYMBOL_QAM
        if(type == ATP_TYPE_STEP)
        {            
		for(i = 0; i < SCAN_SYMBOL_NUM; i++)
		{
			for(j=0;j<SCAN_QAM_NUM;j++)
			{
				as_info->param.as_sym = autoscan_symbol[i]; 
				as_info->param.as_constellation=autoscan_qam[j];
				if(as_info->param.as_sym==0&&((i != SCAN_SYMBOL_NUM-1)||(j!=SCAN_QAM_NUM-1)))
					continue;
				as_blind_tuning_multisym_multiqam(atp,i,j);
				lock_stat = 0;		
				do 
				{
					nim_get_lock(as_info->nim, &lock_stat);
					if((lock_stat)||(as_info->stop_scan_signal)) {
					break;
					}
					osal_task_sleep(1);
				}while((INT32)osal_get_tick()<(INT32)atp->timeout);
				AS_PRINTF("lock stat = %d\n", lock_stat);
				if (!as_info->stop_scan_signal)
				{
					if (lock_stat)
					{				
						db_ret = dvbc_alloc_transponder(as_info,
						atp, &as_info->xp, sat_id);
						if (db_ret != TRUE) 
						{
							ret = 1;
							break;
						}
						update_event(ASM_TYPE_ADD_TRANSPONDER, atp->tp_id);				
#ifdef BASE_TP_HALF_SCAN_SUPPORT

        psi_module_init(as_info->dmx, as_info->nim,(void *)__MM_PSI_START_ADDR, 280*1024);
#else
        psi_module_init(as_info->dmx, as_info->nim,(void *)__MM_PSI_START_ADDR, 180*1024);
#endif
						if (SI_STOFULL == psi_search_start(sat_id, 
										atp->tp_id, search_scheme, 
										as_info->param.as_p_add_cfg, 
										psi_callback, tuning_fn, atp)) 
							{ret= 1;}
							
						break;
					}
				}
			}
			if(lock_stat)
				break;
	        }
		if((i < SCAN_SYMBOL_NUM-1||j<SCAN_QAM_NUM-1))
		{
			if(atp->pos < atp->limit)
				as_blind_tuning_multisym_multiqam(atp,SCAN_SYMBOL_NUM-1,SCAN_QAM_NUM-1);
			else if(atp->pos >= atp->limit)
				atp->finish=TRUE;
		}
        }
        else
#endif  
	{
	        do {
	            nim_get_lock(as_info->nim, &lock_stat);
	            if((lock_stat)||(as_info->stop_scan_signal))
	            break;
	            osal_task_sleep(1);
	        } while((INT32)osal_get_tick()<(INT32)atp->timeout);

	        AS_PRINTF("lock stat = %d\n", lock_stat);
	        if (!as_info->stop_scan_signal)
	        {
	            if (lock_stat)
	            {
	                #if (SYS_PROJECT_FE == PROJECT_FE_DVBC)
	                if (type == ATP_TYPE_STEP)
	                {
	                    db_ret = dvbc_alloc_transponder(as_info,atp, &as_info->xp, sat_id);
	                    if (db_ret != TRUE)
	                    {
	                        ret = 1;
	                        break;
	                    }
	                    update_event(ASM_TYPE_ADD_TRANSPONDER, atp->tp_id);
	                }
	                #endif
#ifdef BASE_TP_HALF_SCAN_SUPPORT

        psi_module_init(as_info->dmx, as_info->nim,(void *)__MM_PSI_START_ADDR, 280*1024);
#else
        psi_module_init(as_info->dmx, as_info->nim,(void *)__MM_PSI_START_ADDR, 180*1024);
#endif
	                if (SI_STOFULL == psi_search_start(sat_id,atp->tp_id, search_scheme, 
	                    as_info->param.as_p_add_cfg,psi_callback, tuning_fn, atp))
	                {
	                    ret= 1;
	                }

	            }
	            else
	                tuning_fn(atp);
	        }
	}
        if (as_info->stop_scan_signal||ret)
            break;
        if ((!as_info->tp_nit[0])&&(type == ATP_TYPE_DBASE))
            update_event(ASM_TYPE_PROGRESS,atp->pos*99/(as_info->tp_nr+2));

    }
	
    AS_PRINTF("end at %d\n", osal_get_tick());
    return ret;
}
예제 #17
0
void win_ci_on_transport_connect(UINT8 slot) 
{
	UINT8 i;
	struct nim_device *nim_dev;
	struct dmx_device *dmx_dev;
	struct vdec_device *vdec_dev;
	UINT32 scrm_flag;
	UINT8 dmx_id, nim_id, slot_id;

#ifdef CI_BYPASS_ENABLE
	BOOL ci_bypass = FALSE;
	UINT8 lock = 0;
#endif

#ifdef NEW_DEMO_FRAME
	struct ts_route_info ts_route;
	INT32 ts_route_id;
#endif

    static UINT8 m_ci_inited;
    if (!m_ci_inited)
    {
    	api_ci_set_mode(SYS_CI_MODE);

		api_ci_set_dev(g_nim_dev, g_dmx_dev, 0);
#if (CI_SLOT_NS > 1)
		api_ci_set_dev(g_nim_dev, g_dmx_dev, 1);
#endif
		api_set_nim_ts_type(2, 0xff);
        
        m_ci_inited = 1;
    }

	if (CAM_STACK_ATTACH == api_ci_check_status(slot))
	{
#ifdef DVR_PVR_SUPPORT
#ifdef CI_SLOT_DYNAMIC_DETECT
        api_set_ci_slot_attached(slot, TRUE);
#endif
#endif
        extern UINT8 g_ca_prog_reset_flag;
        g_ca_prog_reset_flag = 0;

		nim_id = 0;
		dmx_id = 0;
#ifdef NEW_DEMO_FRAME
		ts_route_id = ts_route_check_ci(slot);
		if((ts_route_id >= 0) && (ts_route_get_by_id(ts_route_id, &ts_route) != RET_FAILURE))
		{
			nim_id = ts_route.nim_id;
			dmx_id = ts_route.dmx_id;
		}
#endif
		nim_dev = (struct nim_device*)dev_get_by_id(HLD_DEV_TYPE_NIM, nim_id);
		dmx_dev = (struct dmx_device*)dev_get_by_id(HLD_DEV_TYPE_DMX, dmx_id);

		api_ci_set_mode(sys_data_get_ci_mode());
		api_ci_set_dev(nim_dev, dmx_dev, slot);


#ifdef CI_BYPASS_ENABLE
//for not scrambled program, bypass cam!

		if ((screen_back_state != SCREEN_BACK_MENU/*play tv/radio*/)
#ifdef DVR_PVR_SUPPORT
			|| (api_pvr_check_tsg_state()/*tsg*/)
#endif
			)
		{
#ifdef DVR_PVR_SUPPORT
			if (api_pvr_check_tsg_state())
			{
				;
			}
			else
#endif
			{
				nim_get_lock(nim_dev, &lock);

				//!scrambled program
				if (lock
					&& dmx_dev != NULL
					&& SUCCESS != dmx_io_control(dmx_dev, IS_AV_SCRAMBLED, (UINT32)&scrm_flag))
				{
					ci_bypass = TRUE;
				}
			}
		}

		if (!ci_bypass)
		{
			api_set_nim_ts_type(3, 1<<slot);
			api_send_ca_pmt(slot);
		}

#else //CI_BYPASS_ENABLE
		//always pass cam!
		api_set_nim_ts_type(3, 1<<slot);

		//fix BUG15594
		api_send_ca_pmt(slot);

#endif //CI_BYPASS_ENABLE

#ifdef NEW_DEMO_FRAME
		if((1)
#else
		if((get_cc_crnt_state() != 0)
#endif
#ifdef DVR_PVR_SUPPORT
			|| (api_pvr_check_tsg_state())
#endif
			) // CC_STATE_STOP
		{
			//when card in, need stop vdec to avoid masic.
			vdec_dev = (struct vdec_device*)dev_get_by_id(HLD_DEV_TYPE_DECV, 0);
			if (vdec_dev != NULL
				&& dmx_dev != NULL
				&& SUCCESS == dmx_io_control(dmx_dev, IS_AV_SCRAMBLED, (UINT32)&scrm_flag))
			{
				//libc_printf("%s: reset vdec!!!\n",__FUNCTION__);
//to avoid mosaic
#ifdef NEW_DEMO_FRAME
				vdec_io_control(vdec_dev,VDEC_IO_REST_VBV_BUF,0);
#else
				vdec_stop(vdec_dev, FALSE, FALSE);
				vdec_start(vdec_dev);
#endif
			}
		}
	}
예제 #18
0
void win_signal_open_ex(POBJECT_HEAD w , UINT32 x, UINT32 y)
{
	POBJECT_HEAD pObj;
    PPROGRESS_BAR pBar;
	UINT8 level,quality,lock;
	struct nim_device* nim_dev;
  	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	

	if(w->bType != OT_CONTAINER)
		return ;
	
	pObj = (POBJECT_HEAD)&g_win_signal;
	pObj->pRoot = w;    
    OSD_SetColor(pObj,WIN_SH_IDX_HD,WIN_SH_IDX_HD,WIN_SH_IDX_HD,WIN_SH_IDX_HD);
    
	pObj = (POBJECT_HEAD)&sig_bar_level;
	//pObj->frame.uLeft = x+B_L_OF;//W_L + B_L_OF;
	pObj->frame.uWidth = B_W;
    OSD_SetColor(pObj,B_BG_SH_IDX_HD,B_BG_SH_IDX_HD,B_BG_SH_IDX_HD,B_BG_SH_IDX_HD);
    pBar = (PPROGRESS_BAR)&sig_bar_level;
    pBar->wTickBg = B_MID_SH_IDX_HD;
    //libc_printf("bar:%d,%d\n",B_BG_SH_IDX_HD,B_MID_SH_IDX_HD);
    
	pObj = (POBJECT_HEAD)& sig_bar_quality;
	//pObj->frame.uLeft = x+ B_L_OF;//W_L + B_L_OF;
	pObj->frame.uWidth = B_W;
    OSD_SetColor(pObj,B_BG_SH_IDX_HD,B_BG_SH_IDX_HD,B_BG_SH_IDX_HD,B_BG_SH_IDX_HD);
    pBar = (PPROGRESS_BAR)&sig_bar_quality;
    pBar->wTickBg = B_MID_SH_IDX_HD;
    
	pObj = (POBJECT_HEAD)&sig_txt_level;
	//pObj->frame.uLeft = x+TXTL_L_OF;//W_L + TXTL_L_OF;
    OSD_SetColor(pObj,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD);
    //libc_printf("txt:%d\n",TXT_SH_IDX_HD);
       
	pObj = (POBJECT_HEAD)&sig_txt_quality;
	//pObj->frame.uLeft = x + TXTL_L_OF;//W_L + TXTL_L_OF;
	OSD_SetColor(pObj,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD);

    pObj = (POBJECT_HEAD)&sig_txt_level_per;
    //pObj->frame.uLeft = x + TXTR_L_OF;//W_L + TXTL_L_OF;
    //pObj->frame.uTop = y + TXTRL_T_OF;
	OSD_SetColor(pObj,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD);

    pObj = (POBJECT_HEAD)&sig_txt_quality_per;
    //pObj->frame.uLeft = x + TXTR_L_OF;//W_L + TXTL_L_OF;
    //pObj->frame.uTop = y + TXTRQ_T_OF;
	OSD_SetColor(pObj,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD,TXT_SH_IDX_HD);
    
    
	pObj = (POBJECT_HEAD)&g_win_signal;
	//pObj->frame.uLeft = W_L;
    //pObj->frame.uTop = W_T;
	//pObj->frame.uTop = y;
	pObj->frame.uWidth = W_W;
	OSD_MoveObject(pObj,x,y,0);
   	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);

	dem_signal_to_display(lock,&level,&quality);	
	win_signal_set_level_quality(level,quality,lock);	    
}
예제 #19
0
static void progname_signal_refresh(BOOL update)
{
	UINT8 level,quality,lock;
	struct nim_device* nim_dev;
	char stringTemp[50];

	PROGRESS_BAR* bar;
	POBJECT_HEAD pObj;
	UINT16 level_shIdx;
    UINT16 quality_shIdx;

	
  	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;	
	nim_get_lock(nim_dev, &lock);
	nim_get_AGC(nim_dev, &level);
	nim_get_SNR(nim_dev, &quality);
	
	dem_signal_to_display(lock,&level,&quality);

	memset(stringTemp,0,sizeof(stringTemp));
	sprintf(stringTemp,"%d%%",level);
	OSD_SetTextFieldContent(&progname_progress_S_value, STRING_ANSI, (UINT32)stringTemp);
	sprintf(stringTemp,"%d%%",quality);
	OSD_SetTextFieldContent(&progname_progress_Q_value, STRING_ANSI, (UINT32)stringTemp);

    if(api_is_sd_color_mode())
    {
        if(lock)
        {
        	level_shIdx  = WSTL_BAR_04_8BIT;	
            quality_shIdx = WSTL_BAR_02_8BIT;
        }
        else
        {
        	level_shIdx = WSTL_BAR_03_8BIT;
            quality_shIdx = WSTL_BAR_03_8BIT;
        }	
        if(level < 4)
		    level_shIdx = WSTL_NOSHOW_IDX;
	    if(quality < 4)
		   quality_shIdx = WSTL_NOSHOW_IDX;
    }
    else
    {
         if(lock)
        {
        	level_shIdx  = WSTL_BAR_01_HD;	
            quality_shIdx = WSTL_BAR_02_HD;
        }
        else
        {
        	level_shIdx = WSTL_BAR_03_HD;
            quality_shIdx = WSTL_BAR_03_HD;
        } 
        if(level < 4)
		    level_shIdx = WSTL_NOSHOW_IDX;
	    if(quality < 4)
		   quality_shIdx = WSTL_NOSHOW_IDX;        
    }

	bar = &progname_progress_bar_S;
	OSD_SetProgressBarPos(bar,level);
	bar->wTickFg = level_shIdx;
	
	bar = &progname_progress_bar_Q;
    if(quality < 10)
    {
        quality = 10;
    }
	OSD_SetProgressBarPos(bar,quality);
	bar->wTickFg = quality_shIdx;

	if(update)
	{
		memset(stringTemp,0,sizeof(stringTemp));
		sprintf(stringTemp,"Intensity");
		OSD_SetTextFieldContent(&progname_progress_S_name, STRING_ANSI, (UINT32)stringTemp);
		OSD_DrawObject((POBJECT_HEAD)&progname_progress_S_name,C_DRAW_SIGN_EVN_FLG |C_UPDATE_ALL);
		
		memset(stringTemp,0,sizeof(stringTemp));
		sprintf(stringTemp,"Quality");
		OSD_SetTextFieldContent(&progname_progress_Q_name, STRING_ANSI, (UINT32)stringTemp);
		OSD_DrawObject((POBJECT_HEAD)&progname_progress_Q_name,C_DRAW_SIGN_EVN_FLG |C_UPDATE_ALL);

		OSD_DrawObject((POBJECT_HEAD)&progname_progress_bar_S,C_DRAW_SIGN_EVN_FLG |C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&progname_progress_S_value,C_DRAW_SIGN_EVN_FLG |C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&progname_progress_bar_Q,C_DRAW_SIGN_EVN_FLG |C_UPDATE_ALL);
		OSD_DrawObject((POBJECT_HEAD)&progname_progress_Q_value,C_DRAW_SIGN_EVN_FLG |C_UPDATE_ALL);
	}
}
예제 #20
0
static PRESULT subtitle_con_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2)
{
	PRESULT ret = PROC_PASS;
	SYSTEM_DATA * sys;
	struct nim_device* nim_dev;	
	UINT8 i,lock;
	UINT8 unact;
	
	if(cur_tuner_idx == 0)
		nim_dev = g_nim_dev;
	else
		nim_dev = g_nim_dev2;
    	nim_get_lock(nim_dev,&lock);

	switch(event)
	{
	case EVN_PRE_OPEN:
        #ifdef SUPPORT_CAS9
			if(0==get_mmi_showed())
				ShowSignalStatusOSDOnOff(0);
        #endif
        api_set_deo_layer(0);
        api_inc_wnd_count();

		for(i=0;i<SUBTITLE_ITEM_NUMBER;i++)
		{
			p_subtitle_track_str[i]=Subtitle_track_str[i];
			p_subtitle_track_idx[i]=Subtitle_track_idx[i];
		}

		if(system_state != SYS_STATE_USB_MP)//vic100507#1	
		{
			win_subtitle_init_data();
			if(((0 == g_win_subtitle_count ) && (0 == g_win_ttx_subtitle_count)) || (!lock))
			#if (DVR_PVR_SUPPORT_SUBTITLE)//temp disable
			if(((0 == g_win_subtitle_count ) && (0 == g_win_ttx_subtitle_count)) 
			#ifdef DVR_PVR_SUPPORT
				|| ((!lock) && !api_pvr_is_playing())
			#else
				|| (!lock)
			#endif
				)
			#endif
			{
				win_com_popup_open(WIN_POPUP_TYPE_SMSG,NULL, RS_DISPLAY_NO_DATA);			
				osal_task_sleep(1000);
				win_compopup_close();
	            api_dec_wnd_count();
				return PROC_LEAVE;
			}
		}
		else
		{
		#ifdef MP_SUBTITLE_SUPPORT	//vic100507#1			
			//TODO:
			//such like win_subtitle_init_data
			long resut;
			resut = win_mp_subtitle_init_data();
			if (resut < 0)
			{						
				return PROC_LEAVE;				
			}
			
		#endif				
		}
		break;		
	case EVN_UNKNOWN_ACTION:
		unact = (VACTION)(param1>>16);

		if(system_state != SYS_STATE_USB_MP)//vic100507#1 
		{

			if(VACT_ENTER == unact)
			{
				UINT16	cur_sel = OSD_GetListCurPoint(&g_ls_subtitle);
				sys = sys_data_get();
				if(g_win_subtitle_count + g_win_ttx_subtitle_count==cur_sel)
				{
					sys->osd_set.subtitle_display = 0;/*select off option*/
					sys->osd_set.subtitle_lang = 0xFF;
				}
				else if(cur_sel < g_win_ttx_subtitle_count)
				{
					sys->osd_set.subtitle_display = 1;/*subtitle on*/
					sys->osd_set.subtitle_lang = cur_sel;/*set_sub_lang_idx is used in api_osd_mode_change function*/
				}
				else if(cur_sel < g_win_subtitle_count + g_win_ttx_subtitle_count)
				{/*ttx_subtitle on the top then normal subtitle*/
					sys->osd_set.subtitle_display = 1;
					sys->osd_set.subtitle_lang = cur_sel;/*set_sub_lang_idx is used in api_osd_mode_change function*/
				}
				ret = PROC_LEAVE;
				api_osd_mode_change(OSD_NO_SHOW);
				//api_osd_mode_change(OSD_SUBTITLE);
			}
		}
		else if(VACT_ENTER == unact)
		{
		//vic100507#1 begin
		#ifdef MP_SUBTITLE_SUPPORT	
			//TODO:
			//select language index
			if (!subtitle_handle)
			{
				return PROC_LEAVE;
			}
			long resut;
			UINT16	cur_sel = OSD_GetListCurPoint(&g_ls_subtitle);

			if(g_ext_subtitle_plugin)
				g_ext_subtitle_plugin->mps_change_language(subtitle_handle,cur_sel);
			
			OSD_ObjClose(pObj,C_CLOSE_CLRBACK_FLG);
			//if (resut < 0)
			{
				return PROC_LEAVE;
			}			
		#endif					
		//vic100507#1 end
		}
		break;
	case EVN_PRE_CLOSE:
		unact = (VACTION)(param1>>16);
		ret = PROC_PASS;
        break;

	case EVN_POST_CLOSE:
        #ifdef SUPPORT_CAS9
            restore_ca_msg_when_exit_win();
        #endif
        api_set_deo_layer(1);
        api_dec_wnd_count();
        break;
	default:
		break;
	}

	return ret;
}