* 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);
};
* @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 */
struct UserCallbackInfo *p_next;
} UserCallbackInfo;
-
/*******************************************************************/
RIL_RadioFunctions s_callbacks = {0, NULL, NULL, NULL, NULL, NULL};
#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[] = {
*/
static UserCallbackInfo *
internalRequestTimedCallback (RIL_TimedCallback callback, void *param,
- const struct timeval *relativeTime)
+ const struct timeval *relativeTime)
{
struct timeval myRelativeTime;
UserCallbackInfo *p_info;
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));
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 *
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;
}
// 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();
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();