📄 mfw_td.c
字号:
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) $Workfile:: mfw_td.c $|
| $Author: root $ CONDAT GmbH $Revision: 1.1.1.1 $|
| CREATED: 21.09.98 $Modtime:: 2.03.00 11:49 $|
| STATE : code |
+--------------------------------------------------------------------+
MODULE : MFW_TD
PURPOSE : time and date functions
EXPORT :
TO DO :
$History:: mfw_td.c $
*
*/
#define ENTITY_MFW
#if defined (NEW_FRAME)
#include "typedefs.h"
#include "vsi.h"
#include "custom.h"
#include "gsm.h"
#else
#include "stddefs.h"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"
#endif
#include "mfw_mfw.h"
#include "mfw_sys.h"
#include "drv_tmr.h"
#include "mfw_tim.h"
#include "mfw_td.h"
#include "mfw_win.h"
#include "mfw_acie.h"
#include "dspl.h"
#define TD_STRING_LEN 15
#define ONE_MINUTE 60000
/***************************Prototypes****************************************
**/
void mfw_td_signal (MfwEvt event, void* para); // Used to send event to MMI.
int mfw_td_sign_exec (MfwHdr *cur_elem, MfwEvt event, T_MFW_TD_PARA *para); // Used by mfw_td_signal() function to send event to MMI.
GLOBAL BOOL mfw_td_response_cb (ULONG opc, void * data);
static int tdCommand (U32 cmd, void *h);
BOOL dates_match(T_MFW_DATE* date1, T_MFW_DATE* date2);//returns TRUE if date paarmeters are the same
BOOL times_match(T_MFW_TIME* time1, T_MFW_TIME* time2);//returns TRUE if time parameters are the same
void mfw_td_alarm_callback(void* para);
/***************************global variables****************************************
**/
EXTERN MfwHdr * current_mfw_elem;
T_MFW_TIME current_time;
T_MFW_DATE current_date;
//MfwHnd timer_handle= NULL;
char time_string[TD_STRING_LEN];
char date_string[TD_STRING_LEN];
static int pSlot; /* primitive handler slot */
/***************************Public methods****************************************
**/
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_init |
+--------------------------------------------------------------------+
PURPOSE : initialise time and date and create primitive handler
*/
void mfw_td_init()
{ T_MFW_TIME alarm_time;
T_MFW_DATE alarm_date;
TRACE_EVENT("mfw_td_init");
/*
* install prim handler
*/
pSlot = aci_create(mfw_td_response_cb,NULL);/*put in dummy callback handler*/
mfwCommand[MfwTypTd] = (MfwCb) tdCommand;
/*if clock not cleared*/
if(!rtc_clock_cleared())
{ /*get time/date from driver and initialise these*/
rtc_get_time_date(¤t_date, ¤t_time);
}
else
{
rtc_get_time_date(¤t_date, ¤t_time);
/*use a default time/date*/
current_time.second = 0;
current_time.minute = 0;
current_time.hour = 0;
current_date.year = 2000;
current_date.month = 1;
current_date.day = 1;
mfw_td_set_time(¤t_time);
mfw_td_set_date(¤t_date);
mfw_td_set_time_format(MFW_TIME_FORMAT_24HOUR);
mfw_td_cancel_alarm();
}
rtc_get_alarm(&alarm_date, &alarm_time);
if (dates_match(¤t_date, &alarm_date) && times_match(¤t_time, &alarm_time))
{ mfw_td_signal(MFW_TD_ALARM, NULL);}
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_create |
+--------------------------------------------------------------------+
PURPOSE : Link callback function with MFW+TD events
*/
T_MFW_HND mfw_td_create(MfwHnd hWin, MfwEvt event, MfwCb cbfunc)
{
MfwHdr *hdr;
T_MFW_TD *para;
TRACE_EVENT("mfw_td_timer_create");
hdr = (MfwHdr *) mfwAlloc(sizeof(MfwHdr));
para = (T_MFW_TD *) mfwAlloc(sizeof(T_MFW_TD));
if (!hdr || !para)
return 0;
para->emask = event;
para->handler = cbfunc;
hdr->data = para;
hdr->type = MfwTypTd;
return mfwInsert((MfwHdr *) hWin,hdr);
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_set_time |
+--------------------------------------------------------------------+
PURPOSE : set the current time
*/
MfwRes mfw_td_set_time(T_MFW_TIME* time)
{ int result;
TRACE_EVENT("mfw_td_set_time");
result = rtc_set_time_date(¤t_date, time);
if (result == 0)
{ memcpy(¤t_time, time, sizeof(T_MFW_TIME));
return MfwResOk;
}
TRACE_EVENT_P1("RTC driver Error:%d", result);
return MfwResErr;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_set_date |
+--------------------------------------------------------------------+
PURPOSE : set the current date
*/
MfwRes mfw_td_set_date(T_MFW_DATE* date)
{ int result;
TRACE_EVENT("mfw_td_set_date");
result = rtc_set_time_date(date, ¤t_time);
if (result == 0)
{
memcpy(¤t_date, date, sizeof(T_MFW_DATE));
return MfwResOk;
}
TRACE_EVENT_P1("RTC driver Error:%d", result);
return MfwResErr;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_get_clock_str |
+--------------------------------------------------------------------+
PURPOSE : returns an ASCII string containing the current time
*/
char* mfw_td_get_clock_str()
{ TRACE_EVENT("mfw_td_get_clock_str");
rtc_get_time_date(¤t_date, ¤t_time);
sprintf(time_string, "%02d:%02d", current_time.hour, current_time.minute);
return time_string;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_get_date_str |
+--------------------------------------------------------------------+
PURPOSE : returns an ASCII string containing the current date
*/
char* mfw_td_get_date_str()
{ TRACE_EVENT("mfw_td_get_date_str");
rtc_get_time_date(¤t_date, ¤t_time);
sprintf(date_string, "%02d/%02d/%04d", current_date.day, current_date.month, current_date.year);
return date_string;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_get_date |
+--------------------------------------------------------------------+
PURPOSE : returns the current date in a data structure
*/
T_MFW_DATE* mfw_td_get_date()
{ int result;
rtc_get_time_date(¤t_date, ¤t_time);
TRACE_EVENT("mfw_td_get_date");
return ¤t_date;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_get_time |
+--------------------------------------------------------------------+
PURPOSE : returns the current time in a data structure
*/
T_MFW_TIME* mfw_td_get_time()
{
TRACE_EVENT("mfw_td_get_time");
rtc_get_time_date(¤t_date, ¤t_time);
return ¤t_time;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_set_alarm |
+--------------------------------------------------------------------+
PURPOSE : set alarm to date and time passed to function
*/
MfwRes mfw_td_set_alarm(T_MFW_TIME* time, T_MFW_DATE* date)
{ char debug[50];
int result = rtc_set_alarm(date, time,mfw_td_alarm_callback);
TRACE_EVENT("mfw_td_set_alarm");
sprintf(debug, "alarm Time:%d:%d, date %d/%d%d", time->hour, time->minute, date->day, date->month, date->year);
TRACE_EVENT(debug);
if (result == 0)
return MfwResOk;
TRACE_EVENT_P1("RTC driver Error:%d", result);
return MfwResErr;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_TD |
| STATE : code ROUTINE: mfw_td_cancel_alarm |
+--------------------------------------------------------------------+
PURPOSE : Cancels the alarm setting
*/
MfwRes mfw_td_cancel_alarm()
{ int result = rtc_unset_alarm();
TRACE_EVENT("mfw_td_cancel_alarm");
if (!result)
return MfwResOk;
TRACE_EVENT_P1("RTC driver Error:%d", result);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -