⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmiectimedate.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
        currclock.min = tempclock.min;
        //zgz,2002.8.15 ClockSet(&currclock);
        if( updateRtcClock(tempclock)<0 )
            return -1;
    }
    else if( DateTimeEntryMode == WEEKLY_ALARM )
    {
        if( tmpSwitch != FFS_flashData.weeklyAlarm_switch )
            FFS_flashData.weeklyAlarm_switch = tmpSwitch;

        FFS_flashData.weeklyAlarm_hour= tempclock.hour;     
        FFS_flashData.weeklyAlarm_min= tempclock.min;
        flash_write();  
        iconsSetState(iconIdAlarm);
    }
    set_latest_alarm();

    return TRUE;
}


static int check_date1(T_MFW_HND win, void * edt_dat)
{
    U8 i;
    T_tida_edt * edt_data = (T_tida_edt *)edt_dat;
    T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
    T_tida * tida_data = (T_tida *)win_data->user;
    Date tempdate;

    char internday[3];
    char internmonth[3];
    char internyear[5];

    char debug[20];

    TRACE_FUNCTION ("MmiTimeDate:check_date1");
    TRACE_EVENT(edt_data->edtbuf1);

    memset(internday, '\0', sizeof(internday));/* initial string  */
    memset(internmonth, '\0', sizeof(internmonth));
    memset(internyear, '\0', sizeof(internyear));

    internday[0] = edt_data->edtbuf1[0];
    internday[1] = edt_data->edtbuf1[1];
    internmonth[0] = edt_data->edtbuf1[3];
    internmonth[1] = edt_data->edtbuf1[4];
    for( i = 0;i<4;i++ )
    {
        internyear[i] = edt_data->edtbuf1[6+i];
    }

    tempdate.month = atoi(internmonth);
    if( (tempdate.month > 12) || (tempdate.month < 1) )
        return FALSE;

    tempdate.day = atoi(internday);
    if( (tempdate.day > 30) || (tempdate.day < 1) )
    {
        if( tempdate.day EQ 31 )
        {
            switch( tempdate.month )
            {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                break;
            default:
                return FALSE;
            }
        }
        else
            return FALSE;
    }

    tempdate.year = atoi(internyear);

    if( (tempdate.year) < 2000 || (tempdate.year > 2099) )  //zgz,2002.8.16 revise it
        return FALSE;

    if( (tempdate.month EQ 2) && (tempdate.day EQ 29) )
    {
        if( !(tempdate.year%4)&&(tempdate.year%100)||!(tempdate.year%400) )  // zgz,if the year is runnian.
        {
            if( DateTimeEntryMode == DAILY_ALARM )
            {
                FFS_flashData.alarm_day = tempdate.day;
                FFS_flashData.alarm_month = tempdate.month;
                FFS_flashData.alarm_year = tempdate.year;
                flash_write();  // zgz, 2002.8.15 just only write alarm setting to flash
            }
            else
            {
                FFS_flashData.current_day = tempdate.day;
                FFS_flashData.current_month = tempdate.month;
                FFS_flashData.current_year = tempdate.year;
                currdate.day = tempdate.day;
                currdate.month = tempdate.month;
                currdate.year = tempdate.year;
            }
            //flash_write();
            if( updateRtcDate(tempdate)<0 )
                return -1;
            set_latest_alarm();
            return TRUE;
        }
        else
            return FALSE;
    }
    else if( !((tempdate.month EQ 2) && (tempdate.day EQ 30)) )
    {
        if( DateTimeEntryMode == DAILY_ALARM )
        {
            FFS_flashData.alarm_day = tempdate.day;
            FFS_flashData.alarm_month = tempdate.month;
            FFS_flashData.alarm_year = tempdate.year;
            if( flash_write() )  // zgz, 2002.8.15 just only write alarm setting to flash
                return FALSE;
        }
        else
        {
            FFS_flashData.current_day = tempdate.day;
            FFS_flashData.current_month = tempdate.month;
            FFS_flashData.current_year = tempdate.year;             
            currdate.day = tempdate.day;
            currdate.month = tempdate.month;
            currdate.year = tempdate.year;
        }
        //flash_write();
        updateRtcDate(tempdate);
        set_latest_alarm();     

        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
/*******************************************************************************

 $Function:  reset_edt_attr_sett  

 $Description:	 initialize editor buffer for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
static void reset_edt_attr_sett(U16 winPx,U16 winPy,U16 winSx,U16 winSy,U8 fgColor,U8 font,U8 mode,
                                U8 *controls, char *text,U16 size,MfwEdtAttr* attr)
{

    attr->win.px = winPx;
    attr->win.py = winPy;
    attr->win.sx = winSx;
    attr->win.sy = winSy;
    attr->fgColor = fgColor;
    attr->font = font;
    attr->mode = mode;
    attr->controls = controls;
    attr->text = text;
    attr->size = size;
}

static int updateRtcDate(Date newDate)  // zgz,2002.8.15 Mobile Innovation
{
    T_RTC_DATE_TIME rtcTime;

    RTC_GetDateTime(&rtcTime);
    if( rtcTime.hour>23 )
        rtcTime.hour=23;
    if( rtcTime.hour<0 )
        rtcTime.hour=0;
    if( rtcTime.minute>59 )
        rtcTime.minute=59;
    if( rtcTime.minute<0 )
        rtcTime.minute=0;
    if( rtcTime.second>59 )
        rtcTime.second=59;
    if( rtcTime.second<0 )
        rtcTime.second=0;
    rtcTime.mode_12_hour=FALSE;
    rtcTime.day = newDate.day;
    rtcTime.month = newDate.month;
    rtcTime.year = newDate.year - 2000; 

    return RTC_SetDateTime(rtcTime);
}

static int updateRtcClock(CLOCK newClock)  // zgz,2002.8.15 Mobile Innovation
{
    T_RTC_DATE_TIME rtcTime;

    TRACE_EVENT("updateRtcClock");
    RTC_GetDateTime(&rtcTime);

    if( rtcTime.year>99 )
        rtcTime.year=99;
    if( rtcTime.year<0 )
        rtcTime.year=0;
    if( rtcTime.month>12 )
        rtcTime.month=12;
    if( rtcTime.month<1 )
        rtcTime.month=1;
    switch( rtcTime.month )
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        if( rtcTime.day>31 )
            rtcTime.day=31;
        if( rtcTime.day<1 )
            rtcTime.day=1;
        break;
    case 2:
        /*talcon 2004.05.26,talcon modify*/
        //if(!((rtcTime.year+2000)%4)&&((rtcTime.year+2000)%100)&&!((rtcTime.year+2000)%400))
        if( ( (rtcTime.year+2000)%4 ==0 && (rtcTime.year+2000)%100 !=0 )
            ||( (rtcTime.year+2000)%400 == 0) )
        {
            if( rtcTime.day>29 )
                rtcTime.day=29;
            if( rtcTime.day<1 )
                rtcTime.day=1;
        }
        else
        {
            if( rtcTime.day>28 )
                rtcTime.day=28;
            if( rtcTime.day<1 )
                rtcTime.day=1;
        }
        break;      
    case 4:
    case 6:
    case 9:
    case 11:
        if( rtcTime.day>30 )
            rtcTime.day=30;
        if( rtcTime.day<1 )
            rtcTime.day=1;
        break;
    }   
    rtcTime.mode_12_hour=FALSE;
    rtcTime.hour= newClock.hour;
    rtcTime.minute= newClock.min;
    rtcTime.second= newClock.sec;   

    return RTC_SetDateTime(rtcTime);    
}

int setSystemDate(MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND parent = mfwParent( mfw_header());
    T_MFW_HND win = timedate_create(parent);

    DateTimeEntryMode =SETTING;

    if( win NEQ NULL )
    {
        SEND_EVENT(win, DATE_ENTRY_EC, 0, 0);
    }

    return 1;
}

int setSystemTime(MfwMnu* m, MfwMnuItem* i)
{
    T_MFW_HND parent = mfwParent( mfw_header());
    T_MFW_HND win = timedate_create(parent);

    DateTimeEntryMode =SETTING;

    if( win NEQ NULL )
    {
        SEND_EVENT(win, TIME_ENTRY_EC, 0, 0);
    }

    return 1;
}


static T_MFW_HND timedate_create(T_MFW_HND parent_window)
{
    T_MFW_WIN     * win;

    tidaData * data = (tidaData *)ALLOC_MEMORY (sizeof (tidaData));
    data->win = win_create(parent_window, 0, MfwWinVisible, (T_MFW_CB)timeDate_win_cb);

    TRACE_FUNCTION("MmiTimeDate:timedate_create");

    if( data->win EQ 0 )
        return 0;

    /*
    * Create window handler
*/
    data->mmi_control.dialog    = (T_DIALOG_FUNC)tida_DialogCB;/* dialog main function    */
    data->mmi_control.data      = data;
    data->parent_win = parent_window;
    win                         = ((T_MFW_HDR *)data->win)->data;
    win->user                   = (void *) data;

    /*
    * return window handle
    */

    //mfwSetSignallingMethod(1);
    //winShow(data->win);
    tida_win=data->win;

    return data->win;
}
/* 2003.10.28 wyj AM/PM修正 */
static void tida_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
    T_MFW_WIN           *win_data   = ( (T_MFW_HDR *) win )->data;
    tidaData* data = (tidaData *) win_data->user; 
    T_RTC_DATE_TIME rtcTime;

    RTC_GetDateTime(&rtcTime);

    TRACE_EVENT("tida_DialogCB");

    if( FFS_flashData.time_format==TWELVE_HOUR )
    {
        data->AMPM_index    = 0;//'0' indicates AM,'1' indecates PM
        data->tmode_flag    = 1;    
    }
    else
    {
        data->tmode_flag     = 2;   
    }
    data->position_flag = 1;
    data->index=0;
    data->id=event;
    data->kbd_win=kbd_create(win,KEY_ALL,(T_MFW_CB)timedate_kbd_cb);
    switch( event )
    {
    case DATE_ENTRY_EC:
        memset(data->date_string,0,sizeof(data->date_string));
        sprintf(data->date_string,"%d/%02d/%02d",rtcTime.year+2000,rtcTime.month,rtcTime.day);
        winShow(win);
        break;
    case TIME_ENTRY_EC:
        //data->tim_win=timCreate(data->win,1000,(T_MFW_CB)timedate_tim_cb);
        data->temp_time.hour=rtcTime.hour;
        data->temp_time.min=rtcTime.minute;
        data->temp_time.sec=rtcTime.second;
        memset(data->time_string,0,sizeof(data->time_string));
        /* 2003.10.28 wyj AM/PM修正 */
        if( FFS_flashData.time_format == TWELVE_HOUR )
        {
            if( data->temp_time.hour > 11 )   //PM
            {
                data->AMPM_index = 1;
                if( data->temp_time.hour != 12 )
                    data->temp_time.hour %= 12;
            }
            else                            //AM
                data->AMPM_index=0;

            sprintf(data->time_string,"%02d:%02d:%02d",data->temp_time.hour,data->temp_time.min,data->temp_time.sec);
        }
        else
        {
            sprintf(data->time_string,"%02d:%02d:%02d",data->temp_time.hour,data->temp_time.min,data->temp_time.sec);
        }
        //timStart(data->tim_win);
        winShow(win);
        break;
    default:
        break;
    }
}

/* 时间日期设置显示回调函数 */
static int timeDate_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    tidaData       *data = (tidaData *)win->user;  
    int             old_color;
    UINT32          oldColor,oldFontColor;
    game_Line       line;
    TD_Line         l;  
    game_Rectangle  recta

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -