From 9ccb204dbf05c7ecb3d66629fef05b4ac5a648ff Mon Sep 17 00:00:00 2001 From: Naveen Kalla Date: Mon, 21 Jun 2010 18:54:47 -0700 Subject: [PATCH 1/1] Add timer delete support to rild Change-Id: Ia862f4cac116bf1ee98788c004860cdb2c70f356 --- include/telephony/ril.h | 19 ++++++++++++++++--- libril/ril.cpp | 29 ++++++++++++++++++++++------- libril/ril_event.cpp | 12 +++++++++++- libril/ril_event.h | 3 +++ rild/rild.c | 6 ++++-- 5 files changed, 56 insertions(+), 13 deletions(-) diff --git a/include/telephony/ril.h b/include/telephony/ril.h index 1cbdfad..54700ce 100644 --- a/include/telephony/ril.h +++ b/include/telephony/ril.h @@ -3490,8 +3490,14 @@ struct RIL_Env { * soon as possible */ - void (*RequestTimedCallback) (RIL_TimedCallback callback, + void* (*RequestTimedCallback) (RIL_TimedCallback callback, void *param, const struct timeval *relativeTime); + + + /** + * Remove user-specified callback function + */ + void (*RemoveTimedCallback) (void *callbackInfo); }; @@ -3555,8 +3561,15 @@ void RIL_onUnsolicitedResponse(int unsolResponse, const void *data, * @param relativeTime a relative time value at which the callback is invoked */ -void RIL_requestTimedCallback (RIL_TimedCallback callback, - void *param, const struct timeval *relativeTime); +void* RIL_requestTimedCallback (RIL_TimedCallback callback, + void *param, const struct timeval *relativeTime); + +/** + * Remove user-specified callback function + * @param callbackInfo Pointer returned to the caller when timer was scheduled + */ + +void RIL_removeTimedCallback(void *callbackInfo); #endif /* RIL_SHLIB */ diff --git a/libril/ril.cpp b/libril/ril.cpp index f31c516..b5c0e9f 100644 --- a/libril/ril.cpp +++ b/libril/ril.cpp @@ -142,7 +142,6 @@ typedef struct UserCallbackInfo { struct UserCallbackInfo *p_next; } UserCallbackInfo; - /*******************************************************************/ RIL_RadioFunctions s_callbacks = {0, NULL, NULL, NULL, NULL, NULL}; @@ -240,8 +239,9 @@ extern "C" void RIL_onUnsolicitedResponse(int unsolResponse, void *data, #endif static UserCallbackInfo * internalRequestTimedCallback - (RIL_TimedCallback callback, void *param, - const struct timeval *relativeTime); + (RIL_TimedCallback callback, void *param, const struct timeval *relativeTime); + +static void internalRemoveTimedCallback(void *callbackInfo); /** Index == requestNumber */ static CommandInfo s_commands[] = { @@ -2862,7 +2862,7 @@ error_exit: */ static UserCallbackInfo * internalRequestTimedCallback (RIL_TimedCallback callback, void *param, - const struct timeval *relativeTime) + const struct timeval *relativeTime) { struct timeval myRelativeTime; UserCallbackInfo *p_info; @@ -2871,7 +2871,6 @@ internalRequestTimedCallback (RIL_TimedCallback callback, void *param, p_info->p_callback = callback; p_info->userParam = param; - if (relativeTime == NULL) { /* treat null parameter as a 0 relative time */ memset (&myRelativeTime, 0, sizeof(myRelativeTime)); @@ -2888,11 +2887,27 @@ internalRequestTimedCallback (RIL_TimedCallback callback, void *param, return p_info; } +static void +internalRemoveTimedCallback(void *callbackInfo) +{ + UserCallbackInfo *p_info; + p_info = (UserCallbackInfo *)callbackInfo; + LOGI("remove timer callback event"); + if(p_info) { + ril_timer_delete(&(p_info->event)); + free(p_info); + } +} -extern "C" void +extern "C" void * RIL_requestTimedCallback (RIL_TimedCallback callback, void *param, const struct timeval *relativeTime) { - internalRequestTimedCallback (callback, param, relativeTime); + return internalRequestTimedCallback (callback, param, relativeTime); +} + +extern "C" void +RIL_removeTimedCallback (void *callbackInfo) { + internalRemoveTimedCallback(callbackInfo); } const char * diff --git a/libril/ril_event.cpp b/libril/ril_event.cpp index e40e72b..c24c655 100644 --- a/libril/ril_event.cpp +++ b/libril/ril_event.cpp @@ -312,13 +312,23 @@ void ril_timer_add(struct ril_event * ev, struct timeval * tv) dlog("~~~~ -ril_timer_add ~~~~"); } +// Remove event from timer list +void ril_timer_delete(struct ril_event *tev) +{ + dlog("~~~~timer event delete=%x",(unsigned int)tev); + MUTEX_ACQUIRE(); + removeFromList(tev); + MUTEX_RELEASE(); +} + // Remove event from watch or timer list void ril_event_del(struct ril_event * ev) { - dlog("~~~~ +ril_event_del ~~~~"); + dlog("~~~~ +ril_event_del event= %x ~~~~", (unsigned int)ev); MUTEX_ACQUIRE(); if (ev->index < 0 || ev->index >= MAX_FD_EVENTS) { + MUTEX_RELEASE(); return; } diff --git a/libril/ril_event.h b/libril/ril_event.h index 7ba231b..2b9980a 100644 --- a/libril/ril_event.h +++ b/libril/ril_event.h @@ -47,6 +47,9 @@ void ril_timer_add(struct ril_event * ev, struct timeval * tv); // Remove event from watch list void ril_event_del(struct ril_event * ev); +// Remove event from timer list +void ril_timer_delete(struct ril_event * ev); + // Event loop void ril_event_loop(); diff --git a/rild/rild.c b/rild/rild.c index 0cf7c05..c14cbfb 100644 --- a/rild/rild.c +++ b/rild/rild.c @@ -52,14 +52,16 @@ extern void RIL_onRequestComplete(RIL_Token t, RIL_Errno e, extern void RIL_onUnsolicitedResponse(int unsolResponse, const void *data, size_t datalen); -extern void RIL_requestTimedCallback (RIL_TimedCallback callback, +extern void* RIL_requestTimedCallback (RIL_TimedCallback callback, void *param, const struct timeval *relativeTime); +extern void RIL_removeTimedCallback(void *callbackInfo); static struct RIL_Env s_rilEnv = { RIL_onRequestComplete, RIL_onUnsolicitedResponse, - RIL_requestTimedCallback + RIL_requestTimedCallback, + RIL_removeTimedCallback }; extern void RIL_startEventLoop(); -- 2.11.0