/* 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; #ifdef DVR_PVR_SUPPORT if(timer->timer_service == TIMER_SERVICE_DVR_RECORD) { timer->wakeup_message = TIMER_REC_TYPE; } #endif } 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; wkdt.weekday = OSD_GetMultiselSel(&timer_msel_wakeupweekday); edf = &timer_edf_wakeuptime; OSD_GetEditFieldIntValue(edf,&val); wkdt.hour = val/100; val -= wkdt.hour*100; wkdt.min = val; wkdt.sec = 0; 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(&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*60 + wkdt.min; } edf = &timer_edf_duration; OSD_GetEditFieldIntValue(edf,&val); duration = val/100*60 + val%100; if(timer->timer_service == TIMER_SERVICE_MESSAGE) timer->wakeup_duration_time = 0; else { if(val % 100>59) return -6; timer->wakeup_duration_time = duration; } ret = IsValidTimer(timer); if(ret==0) return -8; return 0; }
static VACTION time_con_keymap(POBJECT_HEAD pObj, UINT32 key) { VACTION act; SYSTEM_DATA* p_sys_data=sys_data_get(); date_time dt; INT32 hoffset, moffset; UINT8 save; INT32 ret1,ret2; switch(key) { case V_KEY_UP: act = VACT_CURSOR_UP; break; case V_KEY_DOWN: act = VACT_CURSOR_DOWN; break; case V_KEY_EXIT: case V_KEY_MENU: act = VACT_CLOSE; win_time_get_input(); if(p_sys_data->local_time.buseGMT) { sys_data_gmtoffset_2_hmoffset(&hoffset, &moffset); set_STC_offset( hoffset, moffset, 0); get_UTC(&dt); set_STC_time(&dt); enable_time_parse(); } else { ret1 = api_check_valid_date(win_time_local_time.year,win_time_local_time.month,win_time_local_time.day); if(ret1 != 0 || win_time_local_time.hour>23 || win_time_local_time.min>=60) { win_compopup_init(WIN_POPUP_TYPE_OKNO); win_compopup_set_msg(NULL,NULL,RS_MSG_INVALID_INPUT_CONTINUE); win_compopup_set_frame(GET_MID_L(300),GET_MID_T(100),320,100); if(win_compopup_open_ext(&save) == WIN_POP_CHOICE_YES) act = VACT_PASS; else act = VACT_CLOSE; } else { set_STC_offset(0,0,0); set_STC_time(&win_time_local_time); p_sys_data->local_time.GMToffset_count = 23; disable_time_parse(); } } break; case V_KEY_ENTER: act = VACT_ENTER; break; default: act = VACT_PASS; break; } return act; }