Esempio n. 1
0
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);
	}
}
Esempio n. 2
0
/*
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;
}