static PRESULT map_display_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2) { PRESULT ret = PROC_PASS; //UINT8 focusID = OSD_GetFocusID( pObj); UINT8 back_saved; OSD_RECT rect = {PREVIEW_L, PREVIEW_T, PREVIEW_W, PREVIEW_H}; struct YCbCrColor bgcolor; switch(event) { case EVN_PRE_OPEN: vdec_stop((struct vdec_device *)dev_get_by_type(NULL, HLD_DEV_TYPE_DECV), 0, 0); OSD_ClearScreen();//-a by wangyang 2011-09-20 win_media_player_init_ex(mp_apcallback, 1); bMapDownloading = FALSE; zoom_level = 12; //api_set_preview_vpo_color(TRUE); bgcolor.uY = 16; bgcolor.uCb = 128; bgcolor.uCr = 128; api_set_vpo_bgcolor(&bgcolor); image_restore_vpo_rect();//TODO #if 0 vpo_aspect_mode((struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS,0), TV_4_3, NORMAL_SCALE); #ifdef DUAL_VIDEO_OUTPUT vpo_aspect_mode((struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS,1), TV_4_3, NORMAL_SCALE); #endif osal_task_sleep(30); if(is_cur_decoder_avc()) { h264_decoder_select(0, hde_get_mode() == VIEW_MODE_PREVIEW); } #endif // system_state = SYS_STATE_USB_MP; //osal_cache_flush_all(); image_abort(); //map_show(rect); break; case EVN_POST_OPEN: //wincom_open_subtitle(pObj,RS_MAP,0); wincom_open_help_trans(pObj, map_display_helpinfo, 2); map_show(rect, param2); break; case EVN_POST_CLOSE: map_download_abort(s_mapdisp_dl_handle); s_mapdisp_dl_handle = 0; media_player_release_ex(); #ifdef LOGO_IN_RAM api_show_Test_logo_2(internet_osd4,get_logo_h_file_size(6)); #else api_show_Test_logo( LOGO_ID_TYPE|0X0200|7); #endif wincom_close_subtitle(); break; case EVN_MSG_GOT: if (param1 == CTRL_MSG_SUBTYPE_STATUS_DOWNLOAD_FINISH) { bMapDownloading = FALSE; map_download_abort(s_mapdisp_dl_handle); s_mapdisp_dl_handle = 0; if ((int)param2 >= 0) { win_compopup_smsg_restoreback(); map_show(rect, param2); } } break; default: break; } return ret; }
static PRESULT map_display_callback(POBJECT_HEAD pObj, VEVENT event, UINT32 param1, UINT32 param2) { PRESULT ret = PROC_PASS; UINT8 back_saved; OSD_RECT rect = {PREVIEW_L, PREVIEW_T, PREVIEW_W, PREVIEW_H}; struct YCbCrColor bgcolor; switch(event) { case EVN_PRE_OPEN: OSD_ClearScreen();//-a by wangyang 2011-09-20 win_media_player_init_ex(mp_apcallback, 1); bMapDownloading = FALSE; zoom_level = 12; //api_set_preview_vpo_color(TRUE); bgcolor.uY = 16; bgcolor.uCb = 128; bgcolor.uCr = 128; api_set_vpo_bgcolor(&bgcolor); image_restore_vpo_rect();//TODO #if 0 vpo_aspect_mode((struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS,0), TV_4_3, NORMAL_SCALE); #ifdef DUAL_VIDEO_OUTPUT vpo_aspect_mode((struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS,1), TV_4_3, NORMAL_SCALE); #endif osal_task_sleep(30); if(is_cur_decoder_avc()) { h264_decoder_select(0, hde_get_mode() == VIEW_MODE_PREVIEW); } #endif // system_state = SYS_STATE_USB_MP; //osal_cache_flush_all(); image_abort(); //map_show(rect); break; case EVN_POST_OPEN: //wincom_open_subtitle(pObj,RS_MAP,0); wincom_open_help_OK_list_small(pObj, map_display_helpinfo, 2); //wincom_open_help(pObj, map_display_helpinfo, 2); libc_printf("map_dl_param2 = %d\n", param2); map_show(rect, param2); break; case EVN_PRE_CLOSE://-a by wangyang 2011-09-20 map_download_abort(s_mapdisp_dl_handle); s_mapdisp_dl_handle = 0; media_player_release_ex(); imagedec_ioctl(1, IMAGEDEC_IO_CMD_CLEAN_FRM, TRUE); //when quit win_slide, clean 2 frm buffer image_abort(); break; case EVN_POST_CLOSE: wincom_close_subtitle(); image_restore_vpo_rect();//-a by wangyang 2011-09-20 break; case EVN_MSG_GOT: if (param1 == CTRL_MSG_SUBTYPE_STATUS_DOWNLOAD_FINISH) { bMapDownloading = FALSE; map_download_abort(s_mapdisp_dl_handle); s_mapdisp_dl_handle = 0; if ((int)param2 >= 0) { win_compopup_smsg_restoreback(); map_show(rect, param2); } } break; default: break; } 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; } }
void power_off_process(void) { struct YCbCrColor bgcolor; extern struct rfm_device* g_rfm_dev; extern struct scart_device* g_scart_dev; #ifdef DVR_PVR_SUPPORT api_pvr_clear_up_all(); #endif // SE: Mute before scart power off to avoid noise api_audio_set_mute(TRUE); #if defined(HW_SS830C)||defined(HW_SS830C2) //Wirte GPIO#5 to high to avoid noise (used on SS830C) HAL_GPIO_BIT_DIR_SET(5, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(5, 1); #endif api_Scart_TVSAT_Switch(0); api_Scart_Power_OnOff(0); api_Scart_RGB_OnOff(0);/*CVBS mode*/ #ifdef VDAC_USE_SVIDEO_TYPE api_Svideo_OnOff(0); #endif api_Scart_OutPut_Switch(0); SetLNBShortDetect(0); Set12VShortDetect(0); api_LNB_power(0); #if(SYS_12V_SWITCH == SYS_FUNC_ON) api_diseqc_set_12v(g_nim_dev, 0); #endif #ifdef USB_MP_SUPPORT if(system_state == SYS_STATE_USB_MP) { ap_udisk_close(); } #endif #ifndef NEW_DEMO_FRAME if(hde_get_mode() != VIEW_MODE_MULTI) UIChChgStopProg(TRUE); #endif #if (TTX_ON == 1) ttx_enable(FALSE); #endif #if (SUBTITLE_ON == 1) subt_enable(FALSE); #endif sie_close(); OSD_ShowOnOff(OSDDRV_OFF); #ifdef NEW_DEMO_FRAME sim_close_monitor(0); #else si_monitor_off(0xFFFFFFFF); #endif stop_tdt(); epg_off(); vpo_win_onoff(g_vpo_dev, FALSE); #ifdef DUAL_VIDEO_OUTPUT if(g_sd_vpo_dev != NULL) vpo_win_onoff(g_sd_vpo_dev,TRUE); #endif dm_set_onoff(0); bgcolor.uY = 16; bgcolor.uCb = 128; bgcolor.uCr = 128; vpo_ioctl(g_vpo_dev,VPO_IO_SET_BG_COLOR,(UINT32)&bgcolor); //close drivers dmx_stop( g_dmx_dev); dmx_close( g_dmx_dev); if (g_dmx_dev2) { dmx_stop(g_dmx_dev2); dmx_close(g_dmx_dev2); } deca_stop(g_deca_dev,0,ADEC_STOP_IMM); deca_close(g_deca_dev); vdec_close(g_decv_dev); // Power HDMI phy at standby mode. #ifdef HDTV_SUPPORT struct hdmi_device *hdmi_dev; hdmi_dev = (struct hdmi_device *)dev_get_by_id(HLD_DEV_TYPE_HDMI, 0); if (hdmi_dev != NULL) { if (SUCCESS != hdmi_dev->close(hdmi_dev)) { PRINTF("hdmi_close failed!!\n"); ASSERT(0); } } #endif vpo_close(g_vpo_dev); #ifdef DUAL_VIDEO_OUTPUT if(RET_SUCCESS!=vpo_close((struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS, 1))) ASSERT(0); #endif snd_close(g_snd_dev); nim_close(g_nim_dev); if(g_nim_dev2) nim_close(g_nim_dev2); if(g_rfm_dev) rfm_close(g_rfm_dev); #if (SYS_MAIN_BOARD == BOARD_M3329E_DEMO01V01 || SYS_MAIN_BOARD == BOARD_DB_M3602_02V01 || SYS_MAIN_BOARD == BOARD_DB_M3602_04V01) if(g_scart_dev) scart_close(g_scart_dev); #endif led_display_flag = 0; #if (SYS_MAIN_BOARD == BOARD_S3602_DEMO) // Power off HAL_GPIO_BIT_DIR_SET(25, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(25, 0); #elif (SYS_MAIN_BOARD == BOARD_DB_M3602_02V01 || SYS_MAIN_BOARD == BOARD_DB_M3602_04V01) // Power off /*alfred.wu 不允许ali的power off*/ /* HAL_GPIO_BIT_DIR_SET(61, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(61, 1); // Tuner LNB power off HAL_GPIO_BIT_DIR_SET(73, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(73, 1); *//*end*/ #endif }