FreeCalypso > hg > fc-magnetite
view src/ui3/mfw/mfw_td.c @ 516:1ed9de6c90bd
src/g23m-gsm/sms/sms_for.c: bogus malloc removed
The new error handling code that was not present in TCS211 blob version
contains a malloc call that is bogus for 3 reasons:
1) The memory allocation in question is not needed in the first place;
2) libc malloc is used instead of one of the firmware's proper ways;
3) The memory allocation is made inside a function and then never freed,
i.e., a memory leak.
This bug was caught in gcc-built FreeCalypso fw projects (Citrine
and Selenite) because our gcc environment does not allow any use of
libc malloc (any reference to malloc produces a link failure),
but this code from TCS3.2 is wrong even for Magnetite: if this code
path is executed repeatedly over a long time, the many small allocations
made by this malloc call without a subsequent free will eventually
exhaust the malloc heap provided by the TMS470 environment, malloc will
start returning NULL, and the bogus code will treat it as an error.
Because the memory allocation in question is not needed at all,
the fix entails simply removing it.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 22 Jul 2018 06:04:49 +0000 |
parents | 68c2f59a988a |
children |
line wrap: on
line source
/* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) $Workfile:: mfw_td.c $| | $Author:: Es $ CONDAT GmbH $Revision:: 12 $| | 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 Dec 05, 2006 REF:OMAPS00106887 Prabakar R(a0393213) Description:Compilation error when FF_POWER_MANAGEMENT is not defined Aug 02, 2006 REF:OMAPS00083404 Prabakar R (a0393213) Description: Removal of clone code: entity GDI Solution: Two similar functions(rtc_get_time_date() and rtc_get_alarm()) are made into one function rtc_get_time_date(). As a result interface of rtc_get_time_date() has been changed. The changes are only for locosto. Jan 06,2004 REF: CRR 27859 xkundadu Description: Clock: Alarm does not go off even if timer times out. Solution: Check whether FFS is formatted before writing into FFS. If it is not formatted, format it and create /mmi folder in FFS. Aug 16, 2004 REF: CRR 24323 Deepa M.D Bug:Clenup of sprintf used for tracing Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX $ * // Issue Number : SPR#12159 on 07/04/04 by Rashmi C N and Deepa M D */ #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" // Jan 06,2004 REF: CRR 27859 xkundadu // Description: Clock: Alarm does not go off even if timer times out. // Solution: Check whether FFS is formatted before writing into FFS. // If it is not formatted, format it and create /mmi folder in FFS. // Included this header file to call FFS related functions #include "Mfw_ffs.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);/*SPR 2639, alarm callback function no longer needed*/ int mfw_timer_cb(MfwEvt e, MfwTim *t); extern int flash_formatted(void); /***************************global variables**************************************** **/ EXTERN MfwHdr * current_mfw_elem; T_MFW_TIME current_time; T_MFW_DATE current_date; /*SPR 2639, added alarm time and date as well as a timer handle global*/ T_MFW_TIME alarm_time; T_MFW_DATE alarm_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_ALARM_INFO alarmInfo;/*SPR 2639*/ 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*/ #ifndef WIN32 if(!rtc_clock_cleared()) { /*get time/date from driver and initialise these*/ /* Aug 02, 2006 REF:OMAPS00083404 Prabakar R (a0393213) Description: Removal of clone code: entity GDI Solution: Two similar functions(rtc_get_time_date() and rtc_get_alarm()) are made into one function rtc_get_time_date(). As a result, interface for rtc_get_time_date() has been changed. Change has been done here to be consistent with the new interface. */ #if 0 rtc_get_time_date(¤t_date, ¤t_time,RTC_TIME_TYPE_CURRENT); #else rtc_get_time_date(¤t_date, ¤t_time); #endif } else { /* Aug 02, 2006 REF:OMAPS00083404 Prabakar R (a0393213) Description: Removal of clone code: entity GDI Solution: Two similar functions(rtc_get_time_date() and rtc_get_alarm()) are made into one function rtc_get_time_date(). As a result, interface for rtc_get_time_date() has been changed. Change has been done here to be consistent with the new interface. */ #if 0 rtc_get_time_date(¤t_date, ¤t_time,RTC_TIME_TYPE_CURRENT); #else rtc_get_time_date(¤t_date, ¤t_time); #endif /*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(); } /*SPR 2639, read alarm info from FFS rather than driver*/ ffs_fread("/mmi/alarminfo",&alarmInfo, sizeof(T_MFW_ALARM_INFO)); memcpy(&alarm_time, &alarmInfo.alarm_time, sizeof(T_MFW_TIME)); memcpy(&alarm_date, &alarmInfo.alarm_date, sizeof(T_MFW_DATE)); if (dates_match(¤t_date, &alarm_date) && times_match(¤t_time, &alarm_time)) { mfw_td_signal(MFW_TD_ALARM, NULL);} timer_handle = timCreate(0,ONE_MINUTE,(MfwCb)mfw_timer_cb); /*a0393213 power management - enabling/disabling lcd refresh*/ /*OMAPS00106887 - compilation error when FF_POWER_MANAGEMENT is not defined The if statement put under the flag*/ #ifdef FF_POWER_MANAGEMENT if(FFS_flashData.refresh==1) #endif timStart(timer_handle); /*SPR 2639, set to default values for simulation*/ #else current_time.second = 0; current_time.minute = 0; current_time.hour = 0; current_date.year = 2000; current_date.month = 1; current_date.day = 1; alarm_time.second = 0; alarm_time.minute = 0; alarm_time.hour = 0; alarm_date.year = 2000; alarm_date.month = 1; alarm_date.day = 1; #endif } /* +--------------------------------------------------------------------+ | 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"); #ifndef WIN32 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; #else/*SPR 2639*/ memcpy(¤t_time, time, sizeof(T_MFW_TIME)); return MfwResOk; #endif } /* +--------------------------------------------------------------------+ | 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"); #ifndef WIN32 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; #else/*SPR 2639*/ memcpy(¤t_date, date, sizeof(T_MFW_DATE)); return MfwResOk; #endif } /* +--------------------------------------------------------------------+ | 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"); /*SPR 2639, use global var, don't need to update time as it's already updated every minute*/ /* Aug 02, 2006 REF:OMAPS00083404 Prabakar R (a0393213) Description: Removal of clone code: entity GDI Solution: Two similar functions(rtc_get_time_date() and rtc_get_alarm()) are made into one function rtc_get_time_date(). As a result, interface for rtc_get_time_date() has been changed. Change has been done here to be consistent with the new interface. */ #if 0 rtc_get_time_date(¤t_date, ¤t_time,RTC_TIME_TYPE_CURRENT); #else rtc_get_time_date(¤t_date, ¤t_time); #endif // Issue Number : MMI-SPR-12159 on 07/04/04 by Rashmi C N and Deepa M D // change by Sasken ( Rashmi C N and Deepa M D) on April 07th 2004 // Bug : The AM PM for 12 hour fomrat was not being displayed, Also there were some bugs with the 12 hour fomat // Change 1: Uncommented the above line "rtc_get_time_date(¤t_date, ¤t_time); " // as the time was not getting refreshed when the time format was changed // Change 2 : To display the time in appropriate format in idle screen if(current_time.format==RTC_TIME_FORMAT_12HOUR) { if(current_time.PM_flag==1) sprintf(time_string, "%02d:%02d pm ", current_time.hour, current_time.minute); else sprintf(time_string, "%02d:%02d am ", current_time.hour, current_time.minute); } else 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"); /*SPR 2639, use global var, don't need to update time as it's already updated every minute*/ //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; // RAVI TRACE_EVENT("mfw_td_get_date"); /*SPR 2639*/ #ifndef WIN32 /* Aug 02, 2006 REF:OMAPS00083404 Prabakar R (a0393213) Description: Removal of clone code: entity GDI Solution: Two similar functions(rtc_get_time_date() and rtc_get_alarm()) are made into one function rtc_get_time_date(). As a result, interface for rtc_get_time_date() has been changed. Change has been done here to be consistent with the new interface. */ #if 0 rtc_get_time_date(¤t_date, ¤t_time,RTC_TIME_TYPE_CURRENT); #else rtc_get_time_date(¤t_date, ¤t_time); #endif #endif 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"); /*SPR 2639*/ #ifndef WIN32 /* Aug 02, 2006 REF:OMAPS00083404 Prabakar R (a0393213) Description: Removal of clone code: entity GDI Solution: Two similar functions(rtc_get_time_date() and rtc_get_alarm()) are made into one function rtc_get_time_date(). As a result, interface for rtc_get_time_date() has been changed. Change has been done here to be consistent with the new interface. */ #if 0 rtc_get_time_date(¤t_date, ¤t_time,RTC_TIME_TYPE_CURRENT); #else rtc_get_time_date(¤t_date, ¤t_time); #endif #endif 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) { /*SPR 2639*/ #ifndef WIN32 int result; T_MFW_ALARM_INFO alarmInfo; /*SPR 2639, save alarm info to FFS*/ /***************************Go-lite Optimization changes Start***********************/ //Aug 16, 2004 REF: CRR 24323 Deepa M.D TRACE_EVENT_P5("alarm Time:%d:%d, date %d/%d%d", time->hour, time->minute, date->day, date->month, date->year); /***************************Go-lite Optimization changes end***********************/ memcpy(&alarmInfo.alarm_time, time, sizeof(T_MFW_TIME)); memcpy(&alarmInfo.alarm_date, date, sizeof(T_MFW_DATE)); // Jan 06,2004 REF: CRR 27859 xkundadu // Description: Clock: Alarm does not go off even if timer times out. // Solution: Format FFS, if it is not formatted.Create mmi folder in FFS if it's not present. // Check whether FFS is formatted or not. if(flash_formatted() == FALSE) { TRACE_EVENT("FFS NOT formatted "); // If FFS is not formatted, format the /mmi volume. if(ffs_format("/mmi", 0x2BAD ) == EFFS_OK) { TRACE_EVENT("Format success"); } else { TRACE_EVENT("FFS NOT formatted "); //FFS Format failed return ERROR return MfwResErr; } } else { // Already formatted. TRACE_EVENT("FFS formatted "); } //Create 'mmi' folder in FFS. //If it is already there, ffs_mkdir() wont create it again. switch(ffs_mkdir("/mmi") ) { case EFFS_OK: TRACE_EVENT("Created mmi!!"); break; case EFFS_EXISTS: TRACE_EVENT("EFFS_EXISTS!"); break; case EFFS_NAMETOOLONG: TRACE_EVENT("EFFS_NAMETOOLONG!"); break; case EFFS_BADNAME: TRACE_EVENT("EFFS_BADNAME!"); break; case EFFS_NOSPACE: TRACE_EVENT("EFFS_NOSPACE!"); case EFFS_FSFULL: TRACE_EVENT("EFFS_FSFULL!"); break; case EFFS_MEMORY: TRACE_EVENT("EFFS_MEMORY!"); break; case EFFS_MSGSEND: TRACE_EVENT("EFFS_MSGSEND!"); break; default: TRACE_EVENT("default!"); break; } result =ffs_fwrite("/mmi/alarminfo",&alarmInfo, sizeof(T_MFW_ALARM_INFO)); if (result<0) { TRACE_EVENT("RTC alarm files not written"); return MfwResErr; } #endif TRACE_EVENT("mfw_td_set_alarm"); memcpy(&alarm_time, time, sizeof(T_MFW_TIME)); memcpy(&alarm_date, date, sizeof(T_MFW_DATE)); return MfwResOk; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_cancel_alarm | +--------------------------------------------------------------------+ PURPOSE : Cancels the alarm setting */ MfwRes mfw_td_cancel_alarm() { /*SPR 2639*/ #ifndef WIN32 int result; T_MFW_ALARM_INFO alarmInfo; /*SPR 2639*/ alarm_date.day = 0;/*Impossible date*/ alarm_date.month= 0; alarm_date.year=0; memcpy(&alarmInfo.alarm_time, &alarm_time, sizeof(T_MFW_TIME)); memcpy(&alarmInfo.alarm_date, &alarm_date, sizeof(T_MFW_DATE)); result =ffs_fwrite("/mmi/alarminfo",&alarmInfo, sizeof(T_MFW_ALARM_INFO)); if (result<0) { TRACE_EVENT("RTC alarm file not written"); return MfwResErr; } #endif TRACE_EVENT("mfw_td_cancel_alarm"); alarm_date.day = 0;/*Impossible date*/ alarm_date.month= 0; alarm_date.year=0; return MfwResOk; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_get_alarm | +--------------------------------------------------------------------+ PURPOSE : gets the current alarm settings */ MfwRes mfw_td_get_alarm(T_MFW_TIME* time, T_MFW_DATE* date) { /*SPR 2639*/ #ifndef WIN32 int result; // char debug[50]; // RAVI T_MFW_ALARM_INFO alarmInfo; /*SPR 2639 copy alarm info from FFS to memory*/ result =ffs_fread("/mmi/alarminfo",&alarmInfo, sizeof(T_MFW_ALARM_INFO)); memcpy( time,&alarmInfo.alarm_time, sizeof(T_MFW_TIME)); memcpy( date,&alarmInfo.alarm_date, sizeof(T_MFW_DATE)); /*if that failed set to default values*/ if (result<0) { TRACE_EVENT("Alarm files don't exist"); time->minute=0; time->second=0; time->hour=0; date->day = 0; date->month=0; date->year =0; } #endif TRACE_EVENT("mfw_td_get_alarm"); memcpy(&alarm_time, time, sizeof(T_MFW_TIME)); memcpy(&alarm_date, date, sizeof(T_MFW_DATE)); return MfwResOk; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_set_time_format | +--------------------------------------------------------------------+ PURPOSE : sets the time format of the clock */ MfwRes mfw_td_set_time_format(T_MFW_TIME_FORMAT format) { int result; TRACE_EVENT("mfw_td_time_format"); /*SPR 2639*/ #ifndef WIN32 result = rtc_set_time_format((T_RTC_TIME_FORMAT)format); if (result == 0) return MfwResOk; TRACE_EVENT_P1("RTC driver Error:%d", result); return MfwResErr; #else return MfwResOk; #endif } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_set_time_format | +--------------------------------------------------------------------+ PURPOSE : sets the time format of the clock */ void mfw_td_exit() { TRACE_FUNCTION("mfw_td_exit()"); /* * remove prim handler */ aci_delete(pSlot); timDelete(timer_handle); /*SPR 2639, delete time handle*/ } /***************************Private methods**************************************** **/ /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: dates_match | +--------------------------------------------------------------------+ PURPOSE : returns TRUE if the two dates passed match */ BOOL dates_match(T_MFW_DATE* date1, T_MFW_DATE* date2) { if (date1->year == date2->year) if (date1->month == date2->month) if (date1->day == date2->day) return TRUE; return FALSE; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_convert_to_24_hour | +--------------------------------------------------------------------+ PURPOSE : converts a time to 24-hour format */ UBYTE mfw_td_convert_to_24_hour(T_MFW_TIME* time) { if (time->format == RTC_TIME_FORMAT_24HOUR) { return time->hour; } /*SPR 2639, improved function*/ else { /*if after noon*/ if (time->PM_flag == TRUE) { return (time->hour + 12); } else { /*if midnight*/ if (time->hour == 12) return 0; else return time->hour; } } } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: times_match | +--------------------------------------------------------------------+ PURPOSE : returns TRUE if time data strcutures passed match */ BOOL times_match(T_MFW_TIME* time1, T_MFW_TIME* time2) { if (time1->minute == time2->minute) { if ( mfw_td_convert_to_24_hour(time1) == mfw_td_convert_to_24_hour(time2)) return TRUE; } return FALSE; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_signal | +--------------------------------------------------------------------+ PURPOSE : called to pass event to MMI layer */ void mfw_td_signal (MfwEvt event, void *para) { UBYTE temp = dspl_Enable(0); if (mfwSignallingMethod EQ 0) { if (mfwFocus) if (mfw_td_sign_exec(mfwFocus,event,para)) { dspl_Enable(temp); return; } if (mfwRoot) mfw_td_sign_exec(mfwRoot,event,para); } else { MfwHdr * h = 0; /* * Focus set, then start here */ if (mfwFocus) h = mfwFocus; /* * Focus not set, then start root */ if (!h) h = mfwRoot; /* * No elements available, return */ while (h) { /* * Signal consumed, then return */ if (mfw_td_sign_exec (h, event, para)) { dspl_Enable(temp); return; } /* * All windows tried inclusive root */ if (h == mfwRoot) { dspl_Enable(temp); return; } /* * get parent window */ h = mfwParent(mfwParent(h)); if(h) h = ((MfwWin * )(h->data))->elems; } mfw_td_sign_exec (mfwRoot, event, para); } dspl_Enable(temp); return; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_sign_exec | +--------------------------------------------------------------------+ PURPOSE : Used by mfw_td_signal() to pass event to MMI layer */ int mfw_td_sign_exec (MfwHdr *cur_elem, MfwEvt event, T_MFW_TD_PARA *para) { while (cur_elem) { if (cur_elem->type == MfwTypTd) { T_MFW_TD *td_data; td_data = (T_MFW_TD *) cur_elem->data; if (td_data->emask & event) { td_data->event = event; // Jan 06,2004 REF: CRR 27859 xkundadu // Description: Clock: Alarm does not go off even if timer times out. // Solution: Assign para to NULL, instead of *para = NULL which is not correct. // para = NULL; /*we're not passing any data to MMI*/ // RAVI if (td_data->handler) { // PATCH LE 06.06.00 // store current mfw elem current_mfw_elem = cur_elem; // END PATCH LE 06.06.00 if ((*(td_data->handler))(td_data->event, (void *) &td_data->para)) return TRUE; } } } cur_elem = cur_elem->next; } return FALSE; } /* +--------------------------------------------------------------------+ | PROJECT : MMI-Framework (8417) MODULE : MFW_TD | | STATE : code ROUTINE : td_delete | +--------------------------------------------------------------------+ PURPOSE : delete TD event handler */ MfwRes mfw_td_delete (MfwHnd h) { TRACE_FUNCTION("mfw_td_delete()"); if (!h || !((MfwHdr *) h)->data) return MfwResIllHnd; if (!mfwRemove((MfwHdr *) h)) return MfwResIllHnd; mfwFree((U8 *) ((MfwHdr *) h)->data,sizeof(T_MFW_TD)); mfwFree((U8 *) h,sizeof(MfwHdr)); return MfwResOk; } /* +--------------------------------------------------------------------+ | PROJECT : MMI-Framework (8417) MODULE : MFW_TD | | STATE : code ROUTINE : tdCommand | +--------------------------------------------------------------------+ PURPOSE : handle mfw windows command */ static int tdCommand (U32 cmd, void *h) { switch (cmd) { case MfwCmdDelete: /* delete me */ if (!h) return 0; mfw_td_delete(h); return 1; default: break; } return 0; } /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_td_response_cb | +--------------------------------------------------------------------+ PURPOSE : Response Callback Handler. */ GLOBAL BOOL mfw_td_response_cb (ULONG opc, void * data) { TRACE_FUNCTION ("mfw_td_response_cb"); return FALSE; /* not processed by extension */ } /*SPR 2639, removed alarm callback and added timer callback*/ /* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_TD | | STATE : code ROUTINE: mfw_timer_cb | +--------------------------------------------------------------------+ PURPOSE : timer callback, called every minute to check alarm */ int mfw_timer_cb(MfwEvt e, MfwTim *t) { // char debug[60]; // RAVI TRACE_EVENT("mfw_timer_cb()"); #ifndef WIN32 /* Aug 02, 2006 REF:OMAPS00083404 Prabakar R (a0393213) Description: Removal of clone code: entity GDI Solution: Two similar functions(rtc_get_time_date() and rtc_get_alarm()) are made into one function rtc_get_time_date(). As a result, interface for rtc_get_time_date() has been changed. Change has been done here to be consistent with the new interface. */ #if 0 rtc_get_time_date(¤t_date, ¤t_time,RTC_TIME_TYPE_CURRENT); #else rtc_get_time_date(¤t_date, ¤t_time); #endif timStart(timer_handle);/*restart timer */ /***************************Go-lite Optimization changes Start***********************/ //Aug 16, 2004 REF: CRR 24323 Deepa M.D TRACE_EVENT_P3("current date:%d/%d/%d",current_date.day, current_date.month, current_date.year); TRACE_EVENT_P2("current time:%d/%d",current_time.hour, current_time.minute); TRACE_EVENT_P2("format:%d,PM flag:%d",current_time.format, current_time.PM_flag); TRACE_EVENT_P3("alarm date:%d/%d/%d",alarm_date.day, alarm_date.month, alarm_date.year); TRACE_EVENT_P2("alarm time:%d/%d",alarm_time.hour, alarm_time.minute); TRACE_EVENT_P2("format:%d,PM flag:%d",alarm_time.format, alarm_time.PM_flag); /***************************Go-lite Optimization changes end***********************/ /*if alarm is set*/ if (alarm_date.day != NULL) { if (dates_match(¤t_date, &alarm_date)) { if (times_match(¤t_time, &alarm_time)) { mfw_td_signal(MFW_TD_ALARM, NULL); mfw_td_cancel_alarm(); } else TRACE_EVENT("times don't match"); } else TRACE_EVENT("dates don't match"); } #endif return 1; }