一、qmi初始化 流程圖
初始化流程:
1、主入口:?
vendor/qcom/proprietary/qcril-hal/qcrild/qcrild/rild.c
int main(int argc, char **argv) {
const RIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **);
rilInit = RIL_Init;
funcs = rilInit(&s_rilEnv, argc, rilArgv);
RIL_register(funcs);
}
2、其中RIL_Init的實現在:
vendor/qcom/proprietary/qcril-hal/modules/android/src/ril_api.cpp
在ril_api.cpp中還定義qcril_request_api:
static const RIL_RadioFunctions qcril_request_api[] = {
{ QCRIL_RIL_VERSION, onRequest, currentState_rid,?
onSupports_rid, onCancel_rid, getVersion_rid }};
static RIL_Env *qcril_response_api[QCRIL_MAX_INSTANCE_ID];
3、最終,注冊到IRadio:
s_vendorFunctions = callbacks;
這邊callbacks實際上就是:
funcs:ril_api.cpp的qcril_request_api[]
這樣就可以和Ril.java通信:
#define CALL_ONREQUEST(a, b, c, d, e)?
s_vendorFunctions->onRequest((a), (b), (c), (d))
?
詳細流程圖:【高清圖,保存后可以放大看】
二、nvReadItem/nvWriteItem 流程圖
詳細流程圖:【高清圖,保存后可以放大看】