REQUEST
ril.h
在ril.h中定义函数指针RIL_RequestFunc(),RIL_RadioStateRequest(),RIL_Supports(), RIL_Cancel() ,RIL_GetVersion(),
用数据结构RIL_RadioFunctions 对以上函数指针进行包装,
如下:
typedef struct {
int version; /* set to RIL_VERSION */
RIL_RequestFunc onRequest;
RIL_RadioStateRequest onStateRequest;
RIL_Supports supports;
RIL_Cancel onCancel;
RIL_GetVersion getVersion;
} RIL_RadioFunctions;
reference-ril /reference.c
在reference-ril.c 中定义结构体
/*** Static Variables ***/
static const RIL_RadioFunctions s_callbacks = {
RIL_VERSION,
onRequest,
currentState,
onSupports,
onCancel,
getVersion
};
并且实现函数onRequest,currentState,onSupports,onCancel,getVersion.
在函数RIL_Init中,返回参数s_callbacks;
rild /rild.c
在rild中调用函数RIL_Init(),得到s_callbacks;通过RIL_register()函数注册到libril中.
libril /ril.cpp
RIL_register()函数是在这里实现的,目的是得到reference-ril中s_callbacks函数指针,这本地调用。
/
onUnsolicited
ril.h
在这里定义结构体RIL_Env
如下:
struct RIL_Env {
void (*OnRequestComplete)(RIL_Token t, RIL_Errno e,
void *response, size_t responselen);
void (*OnUnsolicitedResponse)(int unsolResponse, const void *data,
size_t datalen);
void (*RequestTimedCallback) (RIL_TimedCallback callback,
void *param, const struct timeval *relativeTime);
};
libril /ril.cpp
在libril中实现函数RIL_onRequestComplete(),RIL_onUnsolicitedResponse(),
RIL_requestTimedCallback(),
rild /rild.c
在这里引进,libril中的函数IL_onRequestComplete(),RIL_onUnsolicitedResponse(),
RIL_requestTimedCallback(),
并且构造成结构RIL_Env
如下:
static struct RIL_Env s_rilEnv = {
RIL_onRequestComplete,
RIL_onUnsolicitedResponse,
RIL_requestTimedCallback
};
然后在rilInit()中将s_rilEnv传递给reference.c
reference-ril /reference.c
reference.c中定义变量static const struct RIL_Env *s_rilenv;
通过RIL_Init得到 s_rilevn 指针,
然后定义这个
#define RIL_onRequestComplete(t, e, response, responselen) s_rilenv->OnRequestComplete(t,e, response, responselen)
#define RIL_onUnsolicitedResponse(a,b,c) s_rilenv->OnUnsolicitedResponse(a,b,c)
#define RIL_requestTimedCallback(a,b,c) s_rilenv->RequestTimedCallback(a,b,c)
进行调用。
在reference-ril.c 中有函数onUnsolicited(),通过mainloop()调用函数at_open(fd, onUnsolicited),传递到atchannel.c中,
在函数at_open() 中,启动readloop()线程,监控mode 设备(/dev/ttyUSB0)
在函数onUnsolicited()中实际上是调用 RIL_onUnsolicitedResponse()实现功能的。