void ap_cti_cas_routine(POBJECT_HEAD menu) { static UINT32 video_count=0; BOOL bSignalFlag=FALSE; signal_lock_status lock_flag; signal_scramble_status scramble_flag; signal_lnbshort_status lnbshort_flag; signal_parentlock_status parrentlock_flag; /*qjzheng 2010.4.28 BUG1009 增加判断条件(是否无法播放),若无法播放则调用ap_cti_clear_screen清理POPMENU*/ bSignalFlag = GetSignalStatus(&lock_flag, &scramble_flag,&lnbshort_flag,&parrentlock_flag); if( bSignalFlag) { video_count=0; } else { video_count++; } cti_chnchg_function(); cti_check_sc_status(); //ap_cas_mail_detitle_proc(); ap_cas_periodic_check(); /*alfred.wu 这里可以打开NIT的搜索*/ if(NULL == menu || CHANNEL_BAR_HANDLE == menu) { monitor_service_enable(); } else { monitor_service_disable(); } if(video_count>=3) { if( (menu == CHANNEL_BAR_HANDLE) || (menu == NULL) ||(menu == LIT_CHAN_LIST_HANDLE )) { if(GetScrollStopFlag()==SCROLL_HIDE) SetScrollStopFlag(SCROLL_PLAY); } if( (menu == CHANNEL_BAR_HANDLE) || (menu == NULL)) { ap_cas_fingerprint_proc(0); } } else if(video_count == 0) { if( (menu == CHANNEL_BAR_HANDLE) || (menu == NULL) ||(menu == LIT_CHAN_LIST_HANDLE )) { ap_cti_clear_screen((POBJECT_HEAD)&g_win_sigstatus); } } }
/************************************************************** *CAS Main message process entry. *msg_code has different meaning for different msg_type, check the *tf_catask.c for detailed info. **************************************************************/ PRESULT ap_cti_cas_message_proc ( UINT32 msg_type, UINT32 msg_code ) { UINT8 result = PROC_PASS; UINT8 scr_type = 0; UINT16 strid = 0; UINT16 tfmsg_type = 0; UINT16 tfmsg_code = 0; POBJECT_HEAD p_top_menu = NULL; //P_NODE p_node; tfmsg_type = ( UINT16)( msg_code>>16); tfmsg_code = ( UINT16)( msg_code&0xffff); p_top_menu = menu_stack_get_top(); switch ( tfmsg_type) { case CAS_DISP_CA_ERROR: libc_printf("CAS_DISP_CA_ERROR:%d\n",tfmsg_code); { //ap_cas_message_setid(tfmsg_code&0xff); //ap_cas_message_show(); } break; case CAS_DISP_SET_IRD_NUMBER_REPLY: case CAS_DISP_IRD_NUMBER_NOTIFY: case CAS_DISP_FINGERPRINT_QUERY_REPLY: finger_start_time = 0; ap_cas_fingerprint_proc(1); break; case CAS_DISP_SUBTITLE_NOTIFY: break; case CAS_DISP_BMAIL_NOTIFY: MAIL_ICON_STATUS = Email_New; if (SCREEN_BACK_VIDEO == screen_back_state) win_popup_msg("You have a new mail!",NULL,0); else ; ap_cas_mail_detitle_proc(); break; case CAS_DISP_IPPV_NOTIFY: ap_cas_IPPV_proc(); break; case CAS_DISP_SC_INFO: ap_cas_smc_info_proc( msg_type, msg_code); break; case CAS_DISP_CARD_IN: break; case CAS_DISP_CARD_OUT: break; default: libc_printf("!!!!%s: unknown message %d got!!", __FUNCTION__, tfmsg_type); break; } return result; }
/*--qjzheng 2010.3.18 clear cti msg on the sccreen*/ UINT32 ap_cti_clear_screen(POBJECT_HEAD pNewMenu) { UINT8 ucount=0; POBJECT_HEAD curTopMenu=menu_stack_get_top(); if( pNewMenu!=(POBJECT_HEAD)&g_win_progname && pNewMenu!=(POBJECT_HEAD)&g_win_volume && pNewMenu!=(POBJECT_HEAD)&g_win_light_chanlist && pNewMenu!=(POBJECT_HEAD)&g_win_proginput && pNewMenu!=(POBJECT_HEAD)&g_win_audio && pNewMenu != NULL ) { // if subtitle playing ,to pause if(GetScrollStopFlag()==SCROLL_PLAY) { SetScrollStopFlag(SCROLL_PAUSE); while(GetScrollStopFlag()==SCROLL_PAUSE && ucount<50) { ucount++;//防止死循环 osal_task_sleep(50); } } } if( pNewMenu != (POBJECT_HEAD)&g_win_progname && pNewMenu != (POBJECT_HEAD)&g_win_volume && pNewMenu != NULL) { //to pause display finger print ap_cas_fingerprint_proc(2); } if(pNewMenu != (POBJECT_HEAD)&g_win_chanlist && pNewMenu !=(POBJECT_HEAD)&g_win_volume && pNewMenu !=(POBJECT_HEAD)&g_win_light_chanlist && pNewMenu != (POBJECT_HEAD)&g_win_proginput && pNewMenu !=(POBJECT_HEAD)&g_win_audio && pNewMenu !=(POBJECT_HEAD)&g_win_sigstatus && pNewMenu !=(POBJECT_HEAD)&g_win_progname && pNewMenu != NULL) { // to clear mail icon ShowBMailOSDOnOff(0); } return 0; }
/************************************************************** *CAS Main message process entry. *msg_code has different meaning for different msg_type, check the *tf_catask.c for detailed info. **************************************************************/ PRESULT ap_cas_smc_info_proc( UINT32 msg_type, UINT32 msg_code) { cas_sc_t card_info; UINT16 cur_chan = 0; UINT8 scramble = 0; P_NODE p_node; POBJECT_HEAD p_top_menu = NULL,p_newtop_menu=NULL; PRESULT ret; p_top_menu = menu_stack_get_top(); if(p_top_menu == (POBJECT_HEAD)&g_win_cti_cardinfo || p_top_menu == (POBJECT_HEAD)&g_win_cti_set_maturity || p_top_menu == (POBJECT_HEAD)&g_win_cti_PPID || p_top_menu == (POBJECT_HEAD)&g_win_cti_PPID_info || p_top_menu == (POBJECT_HEAD)&g_win_cti_pin) { ret = OSD_ObjProc(p_top_menu, (MSG_TYPE_MSG << 16) | msg_type, msg_code, 0); while( ret == PROC_LEAVE) { menu_stack_pop(); p_newtop_menu = menu_stack_get_top(); if(NULL != p_newtop_menu) { ret = OSD_ObjOpen(p_newtop_menu, MENU_OPEN_TYPE_STACK) ; } } } cas_get_sc_info_req(&card_info); sys_data_get_cur_group_channel(&cur_chan, sys_data_get_cur_chan_mode()); get_prog_at(cur_chan, &p_node); //get_prog_scramble_type(p_node.prog_number, &scramble); if(card_info.sc_status==0) //smart card ok { //win_popup_msg("Smartcart is in!",NULL,0); } else if(card_info.sc_status==1) //smart card out { if(GetScrollStopFlag()!=SCROLL_STOP) { SetScrollStopFlag(SCROLL_STOP); } cas_sub_clear(); subtitle_clear_all_message(); //clean subtitle msg buffer when the card is out. ap_cas_fingerprint_proc(3);// to clear finger print buf and area if( p_top_menu == (POBJECT_HEAD)&g_win_ippv_popup) { OSD_ClearObject((POBJECT_HEAD)&g_win_ippv_popup, C_UPDATE_ALL); menu_stack_pop(); } //win_popup_msg("Smartcart is out!",NULL,0); } else if(card_info.sc_status==2||card_info.sc_status==3) { //win_popup_msg(NULL,NULL,RS_CTI_READ_SMC_ERROR); } }
static PRESULT win_progname_unkown_act_proc(VACTION act) { PRESULT ret = PROC_LOOP; INT32 shift; UINT8 av_mode, back_saved; UINT16 channel; UINT16 strID; #ifdef AD_SANZHOU P_NODE pnode; #endif api_stop_timer(&progname_timer); #ifdef MULTI_CAS #if(CAS_TYPE==CAS_IRDETO) if(getStopChannelChange()&&(act!=VACT_RECALL&&act!=VACT_SCHEDULE))//check whether stop channel change return ret; #endif #endif shift = - 1; switch (act) { case VACT_CH_UP: shift = 1; case VACT_CH_DOWN: change_channel(shift); #ifdef MIS_AD MIS_ShowEpgAdv(0); #endif break; case VACT_GRP_UP: shift = 1; case VACT_GRP_DOWN: change_group(shift); break; case VACT_FCH_UP: shift = 1; case VACT_FCH_DOWN: change_fav_channel(shift); break; case VACT_TV_RADIO_SW: av_mode = sys_data_get_cur_chan_mode(); av_mode = (av_mode == TV_CHAN) ? RADIO_CHAN : TV_CHAN; //sys_data_set_cur_intgroup_index(0); /*force to return all group*/ sys_data_get_group_channel(0, &channel, av_mode); if (channel == P_INVALID_ID) { /* If the opposite mode has no channel */ win_compopup_init(WIN_POPUP_TYPE_SMSG); if(av_mode == TV_CHAN) { win_compopup_set_msg(NULL, NULL, RS_MSG_NO_PROGRAM_TV); } else { win_compopup_set_msg(NULL, NULL, RS_MSG_NO_RADIO_CHANNEL); } win_compopup_open_ext(&back_saved); osal_task_sleep(1000); win_compopup_smsg_restoreback(); #ifdef MULTI_CAS #if(CAS_TYPE==CAS_CONAX) if(get_mmi_msg_cnt()>0) { ap_send_msg(CTRL_MSG_SUBTYPE_STATUS_MCAS, 0, FALSE); MMI_PRINTF("CTRL_MSG_SUBTYPE_STATUS_MCAS: tv/radio; code:%d\n",0); set_mmi_showed(10); } #endif #endif } else { sys_data_set_cur_chan_mode(av_mode); change_group(0); } break; case VACT_RECALL: channel = recall_play_channel(0); if (channel != P_INVALID_ID) { #ifdef MULTI_CAS #if(CAS_TYPE==CAS_CONAX) /*clean msg*/ clean_mmi_msg(1, TRUE); clean_mmi_msg(3, TRUE); clean_mmi_msg(4, TRUE); clean_mmi_msg(6, TRUE); if(get_mmi_showed()==1||get_mmi_showed()==6) win_mmipopup_close(); if(get_mmi_showed()!=5) set_mmi_showed(10); #endif #endif api_play_channel(channel, TRUE, TRUE, FALSE); #ifdef AD_SANZHOU if(get_prog_at(channel, &pnode) == SUCCESS) { szxc_ad_hide_txt(); szxc_ad_show_txt(pnode.prog_number); szxc_ad_hide_pic(AD_BANNER); szxc_ad_show_banner(pnode.prog_number,banner_pic_rt); } #endif } #ifdef MULTI_CAS #if(CAS_TYPE==CAS_CONAX) else if(get_mmi_msg_cnt()>0) { ap_send_msg(CTRL_MSG_SUBTYPE_STATUS_MCAS, 0, FALSE); MMI_PRINTF("CTRL_MSG_SUBTYPE_STATUS_MCAS: recall; code:%d\n",0); set_mmi_showed(10); } #endif #endif #ifdef MIS_AD MIS_ShowEpgAdv(0); #endif break; case VACT_SCHEDULE: api_stop_timer(&progname_timer); //close the mini_epg ap_send_msg(CTRL_MSG_SUBTYPE_CMD_EXIT, 1, TRUE); //open the schedule // ap_send_msg(CTRL_MSG_SUBTYPE_CMD_ENTER_ROOT, (UINT32)(POBJECT_HEAD)&g_win_schedule, TRUE); break; default: ; } #ifdef MULTI_CAS #if(CAS_TYPE==CAS_CDCA) show_finger_print(0, 0); #elif(CAS_TYPE==CAS_DVT) ap_cas_fingerprint_proc(0, 1); #endif #endif win_progname_redraw(TRUE); progname_timer = api_start_timer(PROGNAME_TIMER_NAME, PROGNAME_TIMER_TIME, progname_timer_func); #ifdef MIS_AD Mis_Set_SameChan_AdvShowOnce(TRUE); Mis_Set_EnterAutoShow(FALSE); #endif return ret; }