代碼邏輯
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消息給到RILthis._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