void cti_chnchg_function() { UINT16 chn_idx=0xffff; date_time local_time; CTI_CHN_CHG_CONTENT chnchg_data; UINT8 save; BOOL need_change = TRUE,info_changed = FALSE; win_popup_choice_t sel; UINT16 string[CHANNEL_JUMP_STR_LEN_MAX/2+1]; INT sec = 0; if(pre_channel_index!=sys_data_get_cur_group_cur_mode_channel())//换台了 { cti_chnchg_para_reset(); } if(!get_cti_chnchg_flg()) { return; } MEMSET(&local_time,0,sizeof(date_time)); get_local_time(&local_time); MEMSET(&chnchg_data,0,sizeof(CTI_CHN_CHG_CONTENT)); get_cti_chnchg_data(&chnchg_data); //显示内容有没有变化 if(MEMCMP(pre_info,chnchg_data.pString,sizeof(chnchg_data.pString))==0) { info_changed = FALSE; } else { info_changed = TRUE; } chn_idx=GetPlayChannelID(chnchg_data.bType,chnchg_data.wPart1, chnchg_data.wPart2,chnchg_data.wPart3,chnchg_data.wPart4); if((chnchg_data.bStatus==0) ||(chnchg_data.bStatus==2))//立即跳转 { set_cti_chnchg_flg(FALSE); } else//时间跳转 { if(api_compare_day_time_ext(&(chnchg_data.stStartTime),&local_time)>=0) //跳转时间没有到 { need_change = FALSE; } else if(api_compare_day_time_ext(&(chnchg_data.stEndTime),&local_time)>=0) //正常跳转 { sec = cti_mktime(&(chnchg_data.stEndTime),&local_time); } else//控制时间已过 { need_change = FALSE; set_cti_chnchg_flg(FALSE); return; } } if((chn_idx!=0xffff) &&(chn_idx!=sys_data_get_cur_group_cur_mode_channel()) &&need_change) { if(chnchg_data.bStatus==0)//强制立即跳转 { BackToFullScrPlay(); win_compopup_init ( WIN_POPUP_TYPE_SMSG ); win_compopup_set_frame ( 100, 140, 400, 120); //win_compopup_set_frame(100, 180, 400, 80); win_compopup_set_msg_ext(NULL,NULL, RS_CTI_CHANNEL_JUMP); win_compopup_open_ext ( &save ); osal_task_sleep(3000); win_compopup_close(); } else if(chnchg_data.bStatus==1)//强制时间跳转 { if(!info_showed) { BackToFullScrPlay(); win_compopup_init ( WIN_POPUP_TYPE_SMSG ); win_compopup_set_frame ( 100, 140, 400, 120); //win_compopup_set_frame(100, 180, 400, 80); win_compopup_set_msg_ext(NULL,NULL, RS_CTI_CHANNEL_JUMP); win_compopup_open_ext ( &save ); osal_task_sleep(3000); win_compopup_close(); info_showed = TRUE; } } else if(chnchg_data.bStatus==2)//用户选择立即跳转 { if((sys_data_get_cur_group_cur_mode_channel()==chn_idx_sel_no) &&(!info_changed)) { return; } else { BackToFullScrPlay(); MEMSET(string,0,sizeof(string)); MEMSET(pre_info,0,sizeof(pre_info)); #ifdef GB2312_SUPPORT convert_gb2312_to_unicode(chnchg_data.pString, sizeof(chnchg_data.pString),string, CHANNEL_JUMP_STR_LEN_MAX/2); #else dvb_to_unicode(chnchg_data.pString, sizeof(chnchg_data.pString),string, CHANNEL_JUMP_STR_LEN_MAX/2, 0); #endif MEMCPY(pre_info,chnchg_data.pString,sizeof(chnchg_data.pString)); win_compopup_init ( WIN_POPUP_TYPE_OKNO); //win_compopup_set_frame ( 100, 120, 400, 160); win_compopup_set_frame ( 100, 100, 400, 160); win_compopup_set_msg_ext(NULL, string, 0); win_compopup_set_default_choice(WIN_POP_CHOICE_YES); sel = win_compopup_open_ext_timeout(&save, 5); if (sel == WIN_POP_CHOICE_NO) { chn_idx_sel_no = sys_data_get_cur_group_cur_mode_channel(); return;//do not change } //choice yes,so change channel } } else if(chnchg_data.bStatus==3)//用户选择按时间跳转 { if((!info_showed)||info_changed)//没有显示过或者字符变化了 { BackToFullScrPlay(); MEMSET(string,0,sizeof(string)); MEMSET(pre_info,0,sizeof(pre_info)); #ifdef GB2312_SUPPORT convert_gb2312_to_unicode(chnchg_data.pString, sizeof(chnchg_data.pString),string, CHANNEL_JUMP_STR_LEN_MAX/2); #else dvb_to_unicode(chnchg_data.pString, sizeof(chnchg_data.pString),string, CHANNEL_JUMP_STR_LEN_MAX/2, 0); #endif MEMCPY(pre_info,chnchg_data.pString,sizeof(chnchg_data.pString)); win_compopup_init ( WIN_POPUP_TYPE_OKNO); win_compopup_set_frame ( 100, 100, 400, 160); win_compopup_set_msg_ext(NULL, string, 0); win_compopup_set_default_choice(WIN_POP_CHOICE_YES); sel = win_compopup_open_ext_timeout(&save, sec); choiced_yes = FALSE; info_showed = TRUE; if ((sel == WIN_POP_CHOICE_NO) || (sel == WIN_POP_CHOICE_TIMEOUT)) { return;//do not change } choiced_yes = TRUE; } else if(choiced_yes==TRUE)//用户选择yes,则继续判断是否需要跳转 { } else { return;//提示过,不再提醒,也不换台 } } api_play_channel(chn_idx, TRUE, TRUE, FALSE); } }
/* return value: -1 : wakeup_year <= 2000 || wakeup_year>2100 -2 : wakeup_month<0 || wakeup_month>12 -3 : wakeup_day not valied in the wakeup_year & wakeup_month -4 : on time hour > 23 -5 : on timer minute > 59 -6 : duration minute > 59 -7 : add timer the wakeup date & time < current time -8: add timer conflict with other timers */ INT32 win_timerset_check_and_save(void) { EDIT_FIELD *edf; UINT16 ch_idx, ch_cnt; P_NODE p_node; date_time dt, wkdt; UINT32 val, duration; INT32 ret; TIMER_SET_CONTENT *timer; timer = &timer_set; timer->timer_mode = TIMER_MODE; timer->timer_service = TIMER_SERVICE_TYPE; if (timer->timer_service == TIMER_SERVICE_MESSAGE) timer->wakeup_message = TIMER_SERVICE_INFO; else { get_prog_at(TIMER_SERVICE_INFO, &p_node); timer->wakeup_channel = p_node.prog_id; } edf = &timer_edf_wakeupdate; OSD_GetEditFieldIntValue(edf, &val); wkdt.year = val / 10000; val -= wkdt.year * 10000; wkdt.month = val / 100; val -= wkdt.month * 100; wkdt.day = val; edf = &timer_edf_wakeuptime; OSD_GetEditFieldIntValue(edf, &val); wkdt.hour = val / 10000; val -= wkdt.hour * 10000; wkdt.min = val/100; wkdt.sec = timerSec; ret = api_check_valid_date(wkdt.year, wkdt.month, wkdt.day); if (ret != 0) return ret; if (wkdt.hour > 23) return - 4; if (wkdt.min > 59) return - 5; if (timer_set_check_starttime_flag) { if (timer->timer_mode != TIMER_MODE_OFF) { get_local_time(&dt); if (api_compare_day_time_ext(&wkdt, &dt) < 0) return - 7; } } else { if (timer->timer_mode != TIMER_MODE_OFF) { /* if(timer->wakeup_state == TIMER_STATE_RUNING) { } */ } } if (timer->timer_mode != TIMER_MODE_OFF) { timer->wakeup_year = wkdt.year; timer->wakeup_month = wkdt.month; timer->wakeup_day = wkdt.day; timer->wakeup_time = wkdt.hour * 3600+wkdt.min * 60+wkdt.sec; } edf = &timer_edf_duration; OSD_GetEditFieldIntValue(edf, &val); duration = val/10000*3600 + (val/100%100)*60 + val%100; if (timer->timer_service == TIMER_SERVICE_MESSAGE) timer->wakeup_duration_time = 0; else { if (val/100%100 > 59) return - 6; timer->wakeup_duration_time = duration; } ret = IsValidTimer(timer); if (ret != 0) return - 8; return 0; }