static void win_otaset_load_tp_setting(UINT32 tp_idx, BOOL update) { S_NODE s_node; T_NODE t_node; CONTAINER* tp_item = &wota_con1; POBJECT_HEAD pObj; get_tuner_sat(OTA_TUNER_IDX, SAT_POS,&s_node); get_tp_at(s_node.sat_id,tp_idx,&t_node); ota_freq = t_node.frq; ota_symb = t_node.sym; ota_pol = t_node.pol; win_otaset_load_FreqSymbPid_display(); if(update) { pObj = (POBJECT_HEAD)tp_item; pObj = OSD_GetObjpNext(pObj); while(pObj) { OSD_DrawObject(pObj, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); pObj = OSD_GetObjpNext(pObj); } }
static void win_tpsrch_set_search_param(UINT32 fta_only,UINT32 srch_chan,UINT32 nit_flag) { S_NODE s_node; T_NODE t_node; struct as_service_param param; OBJLIST* ol; UINT16 tp_idx; struct vdec_device *vdec; struct vdec_io_get_frm_para vfrm_param; UINT32 addr, len; ol = &tplst_olist; tp_idx = OSD_GetObjListCurPoint(ol); get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node); get_tp_at(s_node.sat_id,tp_idx,&t_node); #ifdef NEW_DEMO_FRAME MEMSET(¶m, 0, sizeof(struct as_service_param)); param.as_frontend_type = FRONTEND_TYPE_S; param.as_prog_attr = fta_only |srch_chan; param.as_to = 0; param.as_sat_cnt = 1; param.sat_ids[0] = s_node.sat_id; param.as_from = t_node.tp_id; #else param.as_prog_attr = fta_only |srch_chan; param.as_to = 0; param.as_sat_id = s_node.sat_id; param.as_from = t_node.tp_id; #endif param.as_method = nit_flag? AS_METHOD_NIT_TP : AS_METHOD_TP; param.as_p_add_cfg = PROG_ADD_REPLACE_OLD; // set param win_search_set_param(¶m); update_data(); #if 0 vdec = (struct vdec_device *)dev_get_by_id(HLD_DEV_TYPE_DECV, 0); vfrm_param.ufrm_mode = VDEC_UN_DISPLAY; vdec_io_control(vdec, VDEC_IO_GET_FRM, (UINT32)&vfrm_param); addr = vfrm_param.tFrmInfo.uC_Addr; len = (vfrm_param.tFrmInfo.uHeight*vfrm_param.tFrmInfo.uWidth*3)/2; #else addr = __MM_AUTOSCAN_DB_BUFFER_ADDR; addr &= 0x8fffffff; len = __MM_AUTOSCAN_DB_BUFFER_LEN; #endif db_search_init((UINT8 *)addr, len); }
static UINT32 win_tpe_check_input(void) { EDIT_FIELD *edf; MULTISEL *msel; T_NODE t_node; UINT32 freq,symb,pol; UINT32 i,tp_cn; UINT8 back_saved; edit_tp_yesno = WIN_POP_CHOICE_NULL; edf = &tpe_edt1; OSD_GetEditFieldIntValue(edf, &freq); edf = &tpe_edt2; OSD_GetEditFieldIntValue(edf, &symb); msel = &tpe_msel3; pol = OSD_GetMultiselSel(msel); if(edit_tp_mode == EDIT_TP_MODE_EDIT) { get_tp_by_id(edit_tp_id, &t_node); if(t_node.frq == freq && t_node.sym == symb && t_node.pol == pol) return 0; else goto CHECK_DUPLICATE; } else goto CHECK_DUPLICATE; CHECK_DUPLICATE: tp_cn = get_tp_num_sat(edit_tp_sat_id); for(i=0;i<tp_cn;i++) { get_tp_at(edit_tp_sat_id, i, &t_node); if(edit_tp_mode == EDIT_TP_MODE_EDIT && t_node.tp_id == edit_tp_id) continue; if(t_node.frq == freq && t_node.sym == symb && t_node.pol == pol) { //win_compopup_init(WIN_POPUP_TYPE_OK); win_compopup_init(WIN_POPUP_TYPE_OKNO); //win_compopup_set_msg(NULL,NULL,RS_POPUP_TP_EXIST); win_compopup_set_msg(is_exist,NULL,0); edit_tp_yesno = win_compopup_open_ext(&back_saved); return (i+1);///1; } } return 0; }
/* * given sat_id, netword_id, ts_id * find the tp information in database */ static INT32 find_tp_in_db(UINT16 sat_id, UINT16 network_id, UINT16 ts_id, T_NODE *t_node) { INT32 i, tp_num; tp_num = get_tp_num_sat(sat_id); for( i = 0; i < tp_num; i++ ) { get_tp_at(sat_id, i, t_node); if( (ts_id == t_node->t_s_id) && (network_id == t_node->network_id)) return MULTIFEED_SUCCESS; } return MULTIFEED_FAILURE; }
static void win_otaset_load_sat_setting(UINT32 sat_idx, BOOL update) { MULTISEL* msel; S_NODE s_node; T_NODE t_node; UINT32 val = 0; CONTAINER* sat_item = &wota_con0; POBJECT_HEAD pObj; UINT32 i,tp_num; get_tuner_sat(OTA_TUNER_IDX, sat_idx,&s_node); tp_num = get_tp_num_sat(s_node.sat_id); msel = &wota_num1; OSD_SetMultiselCount(msel, tp_num); OSD_SetMultiselSel(msel, 0);/*First TP*/ if(s_node.sat_orbit == OTA_DATA_SAT_POS)/*If default Sat,set to default TP*/ { for(i=0;i<tp_num;i++) { get_tp_at(s_node.sat_id,i,&t_node); if( t_node.frq >= (OTA_DATA_TP_FREQ - 3) && t_node.frq <= (OTA_DATA_TP_FREQ + 3) && t_node.sym >= (OTA_DATA_TP_SYMB - 500) && t_node.sym <= (OTA_DATA_TP_SYMB + 500) && t_node.pol == OTA_DATA_TP_POL) { OSD_SetMultiselSel(msel,i);/*Default TP pos*/ break; } } } if(TP_NUM > 0) { get_tp_at(s_node.sat_id,TP_POS,&t_node); ota_freq = t_node.frq; ota_symb = t_node.sym; ota_pol = t_node.pol; } else { ota_freq = OTA_DATA_TP_FREQ; ota_symb = OTA_DATA_TP_SYMB; ota_pol = OTA_DATA_TP_POL; } win_otaset_load_FreqSymbPid_display(); if(update) { pObj = (POBJECT_HEAD)sat_item; pObj = OSD_GetObjpNext(pObj); while(pObj) { OSD_DrawObject(pObj, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); pObj = OSD_GetObjpNext(pObj); } }
void win_otaset_load_default_setting(BOOL checkonly) { UINT8 sat_pos; UINT32 sat_num; UINT32 tp_num; UINT32 tp_pos; UINT32 i,j; S_NODE s_node; T_NODE t_node; sat_num = get_tuner_sat_cnt(OTA_TUNER_IDX); // When enter tp list window, the tp view have been switch to VIEW_SINGLE_SAT. // switch it to VIEW_ALL. recreate_tp_view(VIEW_ALL ,0); SAT_NUM = sat_num; SAT_POS = 0; sat_pos = 0xFF; tp_pos = INVALID_POS_NUM; if(!checkonly) { for(i=0;i<sat_num;i++) { get_tuner_sat(OTA_TUNER_IDX, i, &s_node); if(s_node.sat_orbit == OTA_DATA_SAT_POS) { sat_pos = i; tp_num = get_tp_num_sat(s_node.sat_id); for(j=0;j<tp_num;j++) { get_tp_at(s_node.sat_id,j,&t_node); if( t_node.frq >= (OTA_DATA_TP_FREQ - 3) && t_node.frq <= (OTA_DATA_TP_FREQ + 3) && t_node.sym >= (OTA_DATA_TP_SYMB - 500) && t_node.sym <= (OTA_DATA_TP_SYMB + 500) && t_node.pol == OTA_DATA_TP_POL) { tp_pos = j; break; } } break; } } if(sat_pos == 0xFF) sat_pos = 0; } else { sat_pos = ota_satpos; if(sat_pos >= sat_num) sat_pos = 0; tp_pos = TP_POS ; } SAT_POS = sat_pos; ota_satpos = sat_pos; get_tuner_sat(OTA_TUNER_IDX, sat_pos, &s_node); tp_num = get_tp_num_sat(s_node.sat_id); TP_NUM = tp_num; if(tp_pos >= tp_num) tp_pos = 0; TP_POS = tp_pos; if(TP_NUM > 0) { get_tp_at(s_node.sat_id,tp_pos,&t_node); ota_freq = t_node.frq; ota_symb = t_node.sym; ota_pol = t_node.pol; } else { ota_freq = OTA_DATA_TP_FREQ; ota_symb = OTA_DATA_TP_SYMB; ota_pol = OTA_DATA_TP_POL; } ota_pid = OTA_DATA_PID;
/* description : auto scan main routine for command parsing and switching.*/ static void as_main(struct libpub_cmd *cmd) { INT32 i, j; INT32 ret; INT32 method; INT32 tp_nr; INT32 as_method; UINT16 sat_id; UINT8 dmx_mode_need_resume = 0; UINT32 dmx_dma_mode; as_update_event_t event_handler; struct dmx_device *dmx = NULL; T_NODE *tp = &as_info->cur_tp;; S_NODE *sat = &as_info->cur_sat; struct ft_antenna *antenna = &as_info->antenna; AS_PRINTF("start time stamp = %d\n", osal_get_tick()); as_method = as_info->param.as_method; event_handler = as_info->param.as_handler; if(event_handler!=NULL) { event_handler(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANSTART); } //Select DMX dmx = dev_get_by_id(HLD_DEV_TYPE_DMX, 0); if(dmx == NULL) { AS_PRINTF("%s(): select dmx failed!\n"); return; } as_info->dmx = dmx; //fix BUG20874: init psi info to avoid dmx changed by video playing psi_info_init(as_info->dmx, as_info->nim, (void *)__MM_PSI_START_ADDR, 180*1024); //Check and Switch Buffer Mode of Dmx (From Divided Buffer To Union Buffer) dmx_io_control(as_info->dmx, DMX_CHK_BUF_MODE, (UINT32)&dmx_dma_mode); if(dmx_dma_mode == DMX_DIVIDED_BUFF_MODE) { dmx_io_control(as_info->dmx, DMX_SWITCH_TO_UNI_BUF, 0); dmx_mode_need_resume = 1; } for(i = 0; i<as_info->sat_nr; i++) { //For Each Satellite, Create its TP View, Set Antenna sat_id = as_info->sat_id[i]; db_search_create_tp_view(sat_id); if(event_handler != NULL) { event_handler(ASM_TYPE_SATELLITE, sat_id); } //Set Antenna Information according to Satellite Information MEMSET(sat, 0, sizeof(S_NODE)); get_sat_by_id(sat_id, sat); AS_DUMP_SAT(sat); MEMSET(antenna, 0, sizeof(struct ft_antenna)); sat2antenna(sat, antenna); as_info->dual_LNB = (antenna->lnb_high>0) && (antenna->lnb_low>0) && (antenna->lnb_high != antenna->lnb_low); as_info->voltage_ctrl = (antenna->pol==LNB_POL_H)||(antenna->pol==LNB_POL_V); //>>> Unicable begin if(antenna->lnb_type == LNB_CTRL_UNICABLE) { as_info->nim_para.unicable = 1; as_info->nim_para.Fub = antenna->unicable_freq; } else as_info->nim_para.unicable = 0; //<<< Unicable end //select right nim and dmx as_select_nim(sat); if(as_info->nim ==NULL) { AS_PRINTF("%s(): select nim failed!\n"); continue; } //for 29E 2-Tuner the dmx path may not same as default!! tsi_dmx_src_select(TSI_DMX_0, TSI_TS_A); //blind scan if((AS_METHOD_FFT==as_method)||(AS_METHOD_MULTI_FFT==as_method)) { method = AS_METHOD_FFT; } else { as_info->tp_nr = 0; MEMSET(as_info->tp_nit, 0,AS_MODULE_MAX_T_NUM*sizeof(UINT8)); //single tp scan if((AS_METHOD_TP==as_method)||(AS_METHOD_TP_PID==as_method) ||(AS_METHOD_NIT_TP==as_method)||(AS_METHOD_NVOD==as_method)) { as_info->tp_nr = 1; as_info->tp_id[0] = as_info->param.as_from; if ((AS_METHOD_NIT_TP==as_method)&&(event_handler!=NULL)) { event_handler(ASM_TYPE_INC_TRANSPONDER, 0); } } //multi tp scan else if((AS_METHOD_SAT_TP==as_method)||(AS_METHOD_NIT==as_method) ||(AS_METHOD_MULTI_TP==as_method)||(AS_METHOD_MULTI_NIT==as_method) ||(AS_METHOD_NVOD_MULTI_TP==as_method)) { tp_nr = get_tp_num_sat(sat_id); for(j=0; j<tp_nr; j++) { get_tp_at(sat_id, j, tp); if(as_info->param.as_frontend_type==FRONTEND_TYPE_S) { if(dvbs_tp_sanity_check(as_info->voltage_ctrl,tp, sat)==FALSE) { continue; } } else if(as_info->param.as_frontend_type == FRONTEND_TYPE_C) { if(dvbc_tp_sanity_check(FALSE, tp, NULL) == FALSE) { continue; } } AS_DUMP_TP(tp); #ifdef NVOD_FEATURE if((AS_METHOD_NVOD_MULTI_TP == as_method) && (tp->nvod_flg == 1)) #endif { as_info->tp_id[as_info->tp_nr++] = tp->tp_id; } if (AS_MODULE_MAX_T_NUM == as_info->tp_nr) { AS_PRINTF("%s: tp exceed AS_MODULE_MAX_T_NUM!\n", __FUNCTION__); } } } if((AS_METHOD_NIT==as_method)||(AS_METHOD_NIT_TP==as_method) ||(AS_METHOD_MULTI_NIT==as_method)) { MEMSET(as_info->tp_nit, 1, as_info->tp_nr); } method = AS_METHOD_TP; } ret = as_scan(sat_id, sat, method, 0); update_data( ); if (ret || as_info->stop_scan_signal) { break; } } //Show Scan Over by Upper Layer if(event_handler != NULL) { event_handler(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANOVER); } dmx_io_control(as_info->dmx, CLEAR_STOP_GET_SECTION, 0); //Switch Buffer Mode of Dmx (From Union Buffer to Divided Buffer) if(dmx_mode_need_resume) { dmx_io_control(as_info->dmx, DMX_SWITCH_TO_DVI_BUF, 0); } sie_open(as_info->dmx, MAX_FILTER_NUMBER, NULL, 0); osal_task_dispatch_off(); nim_io_control(as_info->nim, NIM_DRIVER_STOP_ATUOSCAN, 0); as_info = NULL; AS_PRINTF("end time stamp = %d\n", osal_get_tick()); osal_task_dispatch_on(); }
static void win_tplist_load_sat(BOOL updatesat) { UINT16 i,tp_num,focus_pos,max_top; OBJLIST* ol; CONTAINER* item; TEXT_FIELD* txt; SCROLL_BAR* sb; S_NODE s_node; T_NODE prog_tp_node; if(cur_tp_sat_idx >= get_tuner_sat_cnt(TUNER_EITHER) ) cur_tp_sat_idx= 0; get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node); ol = &tplst_olist; txt = &tplst_sat; sb = &tplst_scb; recreate_tp_view(VIEW_SINGLE_SAT, s_node.sat_id); tp_num = get_tp_num_sat(s_node.sat_id); OSD_SetObjListCount(ol, tp_num); /* Set count */ focus_pos = tp_list_pos;//OSD_GetObjListCurPoint(ol); if (tp_num > OSD_GetObjListPage(ol)) max_top = tp_num - OSD_GetObjListPage(ol); else max_top = 0; if (focus_pos == 0xffff) { if(playing_pnode.sat_id == s_node.sat_id) { for(i = 0;i < tp_num;i++) { get_tp_at(playing_pnode.sat_id, i, &prog_tp_node); if(prog_tp_node.tp_id == playing_pnode.tp_id) { focus_pos = i; if (focus_pos > max_top) tp_list_top = max_top; else tp_list_top = focus_pos; break; } } } } if(focus_pos >= tp_num) { focus_pos = 0; tp_list_top = 0; } OSD_SetObjListCurPoint(ol, focus_pos); OSD_SetObjListNewPoint(ol, focus_pos); OSD_SetObjListTop(ol, tp_list_top); OSD_SetScrollBarMax(sb,tp_num); OSD_SetScrollBarPos(sb, focus_pos); win_tplist_set_sat_display(); if(updatesat) OSD_DrawObject( (POBJECT_HEAD)txt, C_UPDATE_ALL); }
static void win_tplist_set_display(void) { char str[20]; UINT16 pol_strID; UINT16 top,cnt,page,index,curitem; UINT32 i,n; UINT32 valid_idx; S_NODE s_node; T_NODE t_node; OBJLIST* ol; CONTAINER* item; TEXT_FIELD* txt; ol = &tplst_olist; cnt = OSD_GetObjListCount(ol); page = OSD_GetObjListPage(ol); top = OSD_GetObjListTop(ol); curitem = OSD_GetObjListNewPoint(ol); get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node); for(i=0;i<page;i++) { item = (CONTAINER*)tplist_items[i]; index = top + i; if(index< cnt) valid_idx = 1; else valid_idx = 0; if(valid_idx) get_tp_at(s_node.sat_id,index,&t_node); /* TP IDX */ txt = (PTEXT_FIELD)OSD_GetContainerNextObj(item); if(valid_idx) sprintf(str,"%d",index + 1); else STRCPY(str,""); OSD_SetTextFieldContent(txt, STRING_ANSI, (UINT32)str); /* Freq*/ txt = (PTEXT_FIELD)OSD_GetObjpNext(txt); if(valid_idx) sprintf(str,"%5dMHz",t_node.frq); else STRCPY(str,""); OSD_SetTextFieldContent(txt, STRING_ANSI, (UINT32)str); /* Symb */ txt = (PTEXT_FIELD)OSD_GetObjpNext(txt); if(valid_idx) sprintf(str,"%5dKs/s",t_node.sym); else STRCPY(str,""); OSD_SetTextFieldContent(txt, STRING_ANSI, (UINT32)str); /* pol */ txt = (PTEXT_FIELD)OSD_GetObjpNext(txt); if(!valid_idx) pol_strID = 0; else if(t_node.pol == 0) pol_strID = RS_INFO_POLARITY_H; else pol_strID = RS_INFO_POLARITY_V; OSD_SetTextFieldContent(txt, STRING_ID, (UINT32)pol_strID); } }
static PRESULT win_tplist_list_unkown_act_proc(VACTION act) { PRESULT ret = PROC_LOOP; UINT8 pre_sat_idx; UINT16 sel,sat_cnt; OSD_RECT rect; COM_POP_LIST_PARAM_T param; OBJLIST* ol; S_NODE s_node; T_NODE t_node; UINT32 freq,symb,pol; UINT8 back_saved; UINT32 ftaonly_VPid,srch_chan_APid,nit_PPid; UINT32 choice; POBJECT_HEAD sub_menu; INT32 iret; UINT16 pre_sat_id,cur_sat_id; sat_cnt = get_tuner_sat_cnt(TUNER_EITHER); get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node); ol = &tplst_olist; sel = OSD_GetObjListCurPoint(ol); pre_sat_idx = cur_tp_sat_idx; switch(act) { case VACT_SAT_PRE: if(cur_tp_sat_idx > 0) cur_tp_sat_idx --; else cur_tp_sat_idx = sat_cnt - 1; goto SAT_CHANGE; case VACT_SAT_NEXT: if(cur_tp_sat_idx < (sat_cnt - 1)) cur_tp_sat_idx ++; else cur_tp_sat_idx = 0; goto SAT_CHANGE; case VACT_SAT_SELECT: param.id = TUNER_EITHER; param.cur = cur_tp_sat_idx; param.selecttype = POP_LIST_SINGLESELECT; OSD_SetRect(&rect, LST_SAT_L - 20 , LST_SAT_T, LST_SAT_W + 40, 360); rect.uTop += LST_SAT_H; sel = win_com_open_sub_list(POP_LIST_TYPE_SAT,&rect,¶m); if(sel < sat_cnt) cur_tp_sat_idx = sel; goto SAT_CHANGE; SAT_CHANGE: tp_list_pos = 0; tp_list_top = 0; if(cur_tp_sat_idx != pre_sat_idx) { pre_tp_sat_idx = pre_sat_idx; get_tuner_sat(TUNER_EITHER, pre_sat_idx, &s_node); pre_sat_id = s_node.sat_id; get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node); cur_sat_id = s_node.sat_id; #ifdef SUPPORT_TWO_TUNER #ifdef SUPPORT_SELECT_SAME_SAT cur_tuner_idx = s_node.reserve_1; //s_node.tuner1_valid? 0 : 1; #else cur_tuner_idx = s_node.tuner1_valid? 0 : 1; #endif #endif if(win_tplist_check_change()) update_data(); win_tplist_load_sat(TRUE); //OSD_TrackObject( (POBJECT_HEAD)&tplst_olist, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); OSD_TrackObject( (POBJECT_HEAD)&g_win_tplist, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); api_stop_timer(&tpturn_timer_id); tpturn_timer_id = api_start_timer(TPTURN_TIMER_NAME, TPTURN_TIMER_TIME, win_tplist_tpturn_handler); } break; case VACT_TP_EDIT: /* If not TP, can't EDIT */ if(OSD_GetObjListCount(ol) == 0) break; get_tp_at(s_node.sat_id,sel, &t_node); choice = win_tpe_open(0, s_node.sat_id, t_node.tp_id); if( choice) { win_tpe_get_setting(&freq, &symb, &pol); if(freq != t_node.frq || symb != t_node.sym || pol != t_node.pol) { t_node.frq = freq; t_node.sym = symb; t_node.pol = pol; modify_tp(t_node.tp_id,&t_node); api_stop_timer(&tpturn_timer_id); tpturn_timer_id = api_start_timer(TPTURN_TIMER_NAME, TPTURN_TIMER_TIME, win_tplist_tpturn_handler); } } //OSD_TrackObject( (POBJECT_HEAD)ol, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); OSD_TrackObject( (POBJECT_HEAD)&g_win_tplist, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); break; case VACT_TP_ADD: if(OSD_GetObjListCount(ol) == MAX_TP_NUM) break; extern UINT32 edit_tp_exist; edit_tp_exist = 0; choice = win_tpe_open(1, s_node.sat_id, 0); if(choice) { win_tpe_get_setting(&freq, &symb, &pol); MEMSET(&t_node,0,sizeof(t_node) ); t_node.frq = freq; t_node.sym = symb; t_node.pol = pol; t_node.sat_id = s_node.sat_id; iret = add_node(TYPE_TP_NODE,s_node.sat_id,(void*)&t_node); if((iret == DBERR_MAX_LIMIT) || (iret == DBERR_FLASH_FULL)) { OSD_TrackObject( (POBJECT_HEAD)ol, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); win_compopup_init(WIN_POPUP_TYPE_OK); win_compopup_set_msg(NULL,NULL, RS_DISPLAY_TOO_MANY_TP); win_compopup_open_ext(&back_saved); break; } OSD_SetObjListCount(ol, OSD_GetObjListCount(ol) + 1); //OSD_TrackObject( (POBJECT_HEAD)ol, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); OSD_TrackObject( (POBJECT_HEAD)&g_win_tplist, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); OSD_ChangeFocus((POBJECT_HEAD)ol,OSD_GetObjListCount(ol) - 1, C_DRAW_SIGN_EVN_FLG | C_UPDATE_FOCUS); api_stop_timer(&tpturn_timer_id); tpturn_timer_id = api_start_timer(TPTURN_TIMER_NAME, TPTURN_TIMER_TIME, win_tplist_tpturn_handler); } else { OSD_TrackObject( (POBJECT_HEAD)&g_win_tplist, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); //OSD_TrackObject( (POBJECT_HEAD)ol, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); if( edit_tp_exist > 0) { OSD_ChangeFocus((POBJECT_HEAD)ol,edit_tp_exist - 1, C_DRAW_SIGN_EVN_FLG | C_UPDATE_FOCUS); edit_tp_exist = 0; } //OSD_TrackObject( (POBJECT_HEAD)ol, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); } break; case VACT_TP_DEL: /* If not TP, can't DEL */ if(OSD_GetObjListCount(ol) == 0) break; win_compopup_init(WIN_POPUP_TYPE_OKNO); win_compopup_set_msg(NULL, NULL,RS_DISPLAY_SURE_TO_DELETE); if(win_compopup_open_ext(&back_saved) != WIN_POP_CHOICE_YES) break; get_tp_at(s_node.sat_id,sel, &t_node); del_tp_by_id(t_node.tp_id); OSD_SetObjListCount(ol, OSD_GetObjListCount(ol) -1); OSD_TrackObject( (POBJECT_HEAD)ol, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); if( OSD_GetObjListCount(ol) > 0) { if(sel == OSD_GetObjListCount(ol)) /* Delete last TP */ OSD_ChangeFocus((POBJECT_HEAD)ol,OSD_GetObjListCount(ol) - 1, C_DRAW_SIGN_EVN_FLG | C_UPDATE_FOCUS); else tpturn_timer_id = api_start_timer(TPTURN_TIMER_NAME, TPTURN_TIMER_TIME, win_tplist_tpturn_handler); } break; case VACT_TP_SRCH: /* If not TP, can't SEARCH */ if(OSD_GetObjListCount(ol) == 0) break; sys_data_set_cur_satidx(cur_tp_sat_idx); tp_list_pos = OSD_GetObjListCurPoint(ol); tp_list_top = OSD_GetObjListTop(ol); choice = win_tpsrch_open(&ftaonly_VPid,&srch_chan_APid,&nit_PPid); if(choice==1) { win_tpsrch_set_search_param(ftaonly_VPid,srch_chan_APid,nit_PPid); sub_menu = (POBJECT_HEAD)&g_win_search; wincom_close_help(); if(OSD_ObjOpen(sub_menu, 0xFFFFFFFF) != PROC_LEAVE) { menu_stack_push(sub_menu); set_movedish_flag(TRUE);/*only tp search,need not moving dish when return*/ } } else if(choice==2) //pid search { tp_VPid = ftaonly_VPid; tp_APid = srch_chan_APid; tp_PPid = nit_PPid; prog_callback_register((prog_node_return)win_tplist_set_search_pid_callback); get_tp_at(s_node.sat_id,sel,&t_node); win_search_set_pid_param(t_node.tp_id, tp_VPid, tp_APid, tp_PPid); win_tpsrch_set_search_param(P_SEARCH_FTA|P_SEARCH_SCRAMBLED,P_SEARCH_TV|P_SEARCH_RADIO,0); sub_menu = (POBJECT_HEAD)&g_win_search; wincom_close_help(); if(OSD_ObjOpen(sub_menu, 0xFFFFFFFF) != PROC_LEAVE) menu_stack_push(sub_menu); } else { //OSD_TrackObject( (POBJECT_HEAD)ol, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); OSD_TrackObject( (POBJECT_HEAD)&g_win_tplist, C_DRAW_SIGN_EVN_FLG | C_UPDATE_ALL); } break; } return ret; }
static void win_tplist_tuner_frontend(void) { S_NODE s_node; T_NODE t_node; #ifdef NEW_DEMO_FRAME struct ft_antenna antenna; union ft_xpond xpond_info; struct nim_device *nim = NULL; #else struct cc_antenna_info antenna; struct cc_xpond_info xpond_info; #endif OBJLIST* ol; UINT32 tp_idx; UINT16 pre_sat_id,cur_sat_id; UINT8 back_saved; BOOL old_get_key; nim_io_control(g_nim_dev, NIM_DRIVER_STOP_CHANSCAN, 0); ap_set_key_notify_proc(win_tplist_key_notify_proc); old_get_key = ap_enable_key_task_get_key(TRUE); win_signal_set_level_quality(0, 0, 0); win_signal_update(); OSD_UpdateVscr(OSD_GetTaskVscr(osal_task_get_current_id())); ol = &tplst_olist; tp_idx = OSD_GetObjListCurPoint(ol); get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx,&s_node); get_tp_at(s_node.sat_id,tp_idx,&t_node); #ifdef SUPPORT_TWO_TUNER #ifdef SUPPORT_SELECT_SAME_SAT cur_tuner_idx = s_node.reserve_1; //antset_cur_tuner;//s_node.tuner1_valid? 0 : 1; #else cur_tuner_idx = s_node.tuner1_valid? 0 : 1; #endif #endif #ifndef NEW_DEMO_FRAME struct cc_antenna_info antenna; struct cc_xpond_info xpond_info; sat2antenna_ext(&s_node, &antenna,cur_tuner_idx); xpond_info.frq = t_node.frq; xpond_info.sym = t_node.sym; xpond_info.pol = t_node.pol; set_antenna(&antenna); set_xpond(&xpond_info); #else MEMSET(&antenna, 0, sizeof(struct ft_antenna)); MEMSET(&xpond_info, 0, sizeof(union ft_xpond)); sat2antenna(&s_node, &antenna); xpond_info.s_info.type = FRONTEND_TYPE_S; xpond_info.s_info.frq = t_node.frq; xpond_info.s_info.sym = t_node.sym; xpond_info.s_info.pol = t_node.pol; xpond_info.s_info.tp_id = t_node.tp_id; #ifdef SUPPORT_SELECT_SAME_SAT nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, ((s_node.reserve_1 == 0)? 0 : ((s_node.reserve_1 == 1) ? 1 : 0))); #else nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, (s_node.tuner1_valid ? 0 : (s_node.tuner2_valid ? 1 : 0))); #endif frontend_tuning(nim, &antenna, &xpond_info, 1); #endif if(pre_tp_sat_idx != cur_tp_sat_idx) { get_tuner_sat(TUNER_EITHER, pre_tp_sat_idx, &s_node); pre_sat_id = s_node.sat_id; get_tuner_sat(TUNER_EITHER, cur_tp_sat_idx, &s_node); cur_sat_id = s_node.sat_id; wincom_dish_move_popup_open(/*pre_sat_id*/0xFFFF,cur_sat_id,cur_tuner_idx,&back_saved); pre_tp_sat_idx = cur_tp_sat_idx; } ap_enable_key_task_get_key(old_get_key); ap_set_key_notify_proc(NULL); nim_io_control(g_nim_dev, NIM_DRIVER_STOP_CHANSCAN, 0); }
/* description : auto scan main routine for command parsing and switching.*/ static void as_main(struct mid27_cmd *cmd) { INT32 i; INT32 j; INT32 ret; INT32 method; INT32 tp_nr; INT32 as_method; UINT16 sat_id; T_NODE *tp; S_NODE *sat; UINT8 dmx_mode_need_resume = 0; UINT32 dmx_dma_mode; as_update_event_t event_handler; extern BOOL cc_stop_channel(BOOL, BOOL); #ifdef BASE_TP_HALF_SCAN_SUPPORT if(cmd->cmd_type == MID27_CMD_AS_HL_START) { as_bastp_halfscan(cmd); return; } #endif AS_PRINTF("start time stamp = %d\n", osal_get_tick()); cc_stop_channel(0, 0); /*get default nim, for dual nim projects, will get correct nim later below*/ as_info->nim = (struct nim_device *)dev_get_by_id(HLD_DEV_TYPE_NIM, 0); as_info->dmx = (struct dmx_device *)dev_get_by_id(HLD_DEV_TYPE_DMX, 0); //fix BUG20874: init psi info to avoid dmx changed by video playing #ifdef BASE_TP_HALF_SCAN_SUPPORT psi_info_init(as_info->dmx, as_info->nim, (void *)__MM_PSI_START_ADDR, 280*1024); #else psi_info_init(as_info->dmx, as_info->nim,(void *)__MM_PSI_START_ADDR, 180*1024); #endif dmx_io_control(as_info->dmx, DMX_CHK_BUF_MODE, (UINT32)&dmx_dma_mode); if(dmx_dma_mode == DMX_DIVIDED_BUFF_MODE) { dmx_io_control(as_info->dmx, DMX_SWITCH_TO_UNI_BUF, 0); dmx_mode_need_resume = 1; } tp = &as_info->cur_tp; sat = &as_info->cur_sat; as_method = as_info->param.as_method; event_handler = as_info->param.as_handler; event_handler(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANSTART); for(i = 0; i<as_info->sat_nr; i++) { sat_id = as_info->sat_id[i]; db_search_create_tp_view(sat_id); #if (SYS_PROJECT_FE == PROJECT_FE_DVBS||SYS_PROJECT_FE == PROJECT_FE_DVBS2) event_handler(ASM_TYPE_SATELLITE, sat_id); get_sat_by_id(sat_id, sat); /*get correct nim*/ as_select_nim(sat); #endif AS_DUMP_SAT(sat); if ((AS_METHOD_FFT == as_method)||(AS_METHOD_MULTI_FFT == as_method)) { method = AS_METHOD_FFT; } else { as_info->tp_nr = 0; MEMSET(as_info->tp_nit, 0,AS_MODULE_MAX_T_NUM*sizeof(UINT8)); if ((AS_METHOD_TP == as_method)||(AS_METHOD_TP_PID == as_method) ||(AS_METHOD_NIT_TP== as_method)||(AS_METHOD_NVOD == as_method)) { as_info->tp_nr = 1; as_info->tp_id[0] = as_info->param.as_from; if (AS_METHOD_NIT_TP == as_method) event_handler(ASM_TYPE_INC_TRANSPONDER, 0); } else if ((AS_METHOD_SAT_TP == as_method)||(AS_METHOD_NIT == as_method) ||(AS_METHOD_MULTI_TP == as_method)||(AS_METHOD_MULTI_NIT == as_method) ||(AS_METHOD_NVOD_MULTI_TP==as_method)) { tp_nr = get_tp_num_sat(sat_id); for(j=0; j<tp_nr; j++) { get_tp_at(sat_id, j, tp); if (FALSE == tp_sanity_check(as_info,tp, sat)) continue; AS_DUMP_TP(tp); #ifdef NVOD_FEATURE if(tp->nvod_flg==1) #endif as_info->tp_id[as_info->tp_nr++] = tp->tp_id; if (AS_MODULE_MAX_T_NUM == as_info->tp_nr) AS_PRINTF("%s: tp exceed AS_MODULE_MAX_T_NUM!\n", __FUNCTION__); } } if ((AS_METHOD_NIT == as_method)||(AS_METHOD_NIT_TP == as_method) ||(AS_METHOD_MULTI_NIT == as_method)) { MEMSET(as_info->tp_nit, 1, as_info->tp_nr); } method = AS_METHOD_TP; } ret = as_scan(sat_id, sat, method, as_method != AS_METHOD_NVOD); update_data( ); if (ret||as_info->stop_scan_signal) break; } #ifdef KAON_SAVE_USE event_handler(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANOVER|(prog_num << 16)); #else event_handler(ASM_TYPE_PROGRESS, AS_PROGRESS_SCANOVER); #endif dmx_io_control(as_info->dmx, CLEAR_STOP_GET_SECTION, 0); if(dmx_mode_need_resume) dmx_io_control(as_info->dmx, DMX_SWITCH_TO_DVI_BUF, 0); sie_open(as_info->dmx, MAX_FILTER_NUMBER, NULL, 0); osal_task_dispatch_off(); if ((as_info->param.as_method == AS_METHOD_NVOD) ||(as_info->param.as_method==AS_METHOD_NVOD_MULTI_TP)) { nim_io_control(as_info->nim, NIM_DRIVER_STOP_ATUOSCAN, 0); as_info = NULL; AS_PRINTF("end time stamp = %d\n", osal_get_tick()); mid27_declare_cmd_finish(MID27_FLG_AS_NVOD); } else { nim_io_control(as_info->nim, NIM_DRIVER_STOP_ATUOSCAN, 0); as_info = NULL; AS_PRINTF("end time stamp = %d\n", osal_get_tick()); } osal_task_dispatch_on(); }