OSDN Git Service

Add timer delete support to rild
authorNaveen Kalla <nkalla@codeaurora.org>
Tue, 22 Jun 2010 01:54:47 +0000 (18:54 -0700)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Fri, 15 Apr 2011 10:24:31 +0000 (18:24 +0800)
Change-Id: Ia862f4cac116bf1ee98788c004860cdb2c70f356

include/telephony/ril.h
libril/ril.cpp
libril/ril_event.cpp
libril/ril_event.h
rild/rild.c

index 1cbdfad..54700ce 100644 (file)
@@ -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 */
index f31c516..b5c0e9f 100644 (file)
@@ -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 *
index e40e72b..c24c655 100644 (file)
@@ -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;
     }
 
index 7ba231b..2b9980a 100644 (file)
@@ -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();
 
index 0cf7c05..c14cbfb 100644 (file)
@@ -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();