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'); }
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(); }
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(); }
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(); }
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); }
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); }
/*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); }
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); }
/* 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(); } }
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; }
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; }
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; }
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; }
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; } }
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; }
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; }
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 } } }
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); }
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); } }
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; }