代码逻辑
APN创建
在 DataCallManager.jsm中,会对所有apnsetting创建一个datacall,其中会包含dataprofile的成员(通过apn参数来创建),在之后的流程用于直接发送到modem建立PDN。
PDN建立
1、DataCallManager.jsm -dcInterface.setupDataCall
//RILNetworkInterface.connect()->DataCall.connect->DataCall.setup()
setup(){
dcInterface.setupDataCall(
radioTechnology,
this.dataProfile,
//...
//此处是把建立的datacall(this)中dataprofile属性值发送到RIL,在log中可以通过:“> RIL_REQUEST_SETUP_DATA_CALL”来查看需要建立datacall的dataprofile值。
dataInfo.roaming,
this.dataCallHandler.dataCallSettings.roamingEnabled,
{
QueryInterface: ChromeUtils.generateQI([Ci.nsIDataCallCallback]),
notifySetupDataCallSuccess: aDataCall => {
//回调函数,返回datacall建立结果
this.onSetupDataCallResult(aDataCall);
},
notifyError: aErrorMsg => {
this.onSetupDataCallResult({ errorMsg: aErrorMsg });
},
}
);
this.state = NETWORK_STATE_CONNECTING;
},
2、/gecko/dom/system/gonk/radio/DataCallInterfaceService.jsm
DataCallInterfaceService的setupDataCall
// nsIDataCallInterface
setupDataCall: function(aRadioTechnology, aProfile, aIsRoaming, aAllowRoaming,
aCallback) {
//发送setupdatacall消息给到RIL
this._radioInterface.sendWorkerMessage("setupDataCall", {
radioTechnology: aRadioTechnology,
profile: aProfile,
isRoaming: aIsRoaming,
allowRoaming: aAllowRoaming
}, (aResponse) => {
if (aResponse.errorMsg) {
aCallback.notifyError(aResponse.errorMsg);
} else {
//如果没有error,返回datacall建立成功
let dataCall = new DataCall(aResponse.dcResponse);
aCallback.notifySetupDataCallSuccess(dataCall);
}
});
},
3、/gecko/dom/system/gonk/radio/RadioInterfaceLayer.jsm
RadioInterfaceLayer.jsm - sendWorkerMessage
完成以下接口操作后,setup datacall的请求已经通过RIL消息发给了mode