114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Copyright (C) 2010 The Android Open Source Project 314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Licensed under the Apache License, Version 2.0 (the "License"); 514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * you may not use this file except in compliance with the License. 614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * You may obtain a copy of the License at 714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * http://www.apache.org/licenses/LICENSE-2.0 914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 1014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Unless required by applicable law or agreed to in writing, software 1114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * distributed under the License is distributed on an "AS IS" BASIS, 1214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * See the License for the specific language governing permissions and 1414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * limitations under the License. 1514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 1614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 1714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 1814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * @fileoverview Mock Radio Interface Layer (RIL) used for testing 1914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 2014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * The following routines are defined in c++: 2114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 2214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Print a string to android log 2314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * print(string) 2414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 2514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Read a file to a string. 2614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * String readFileToString(String fileName) 2714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 2814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Read a file to a Buffer. 2914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Buffer readFileToBuffer(String fileName) 3014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 3114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Send an response unsolicited response to the framework. 3214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * sendRilUnsolicitedResponse(Number responseNum, Buffer responseProtobuf) 3314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 3414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Send a completion request to the framework. 3514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * sendRilRequestComplete(Number rilErrCode, Number reqNum, 3614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * String token, Buffer responseProtobuf) 3714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 3814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Send a complete request to the controller. 3914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * sendCtrlRequestComplete(Number ctrlStatus, Number reqNum, 4014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * String token, Buffer responseProtobuf) 4114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 4214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Include the javascript file. 4314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * include(string) 4414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 4514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * The following objects are defined in c++ 4614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 4714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Buffer is defined in node_buffer and provides a wrapper 4814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * for a buffer that can be shared between c++ and js. 4914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Buffer(length) 5014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Buffer::length() 5114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Buffer::data() 5214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 5314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Schema is defined in protobuf_v8 and converts between 5414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * a buffer and an object. A protobuf descriptor, ril.desc 5514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * and ctrl.desc, is used to drive the conversation. 5614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Object Schema::parse(Buffer protobuf) 5714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Buffer Schema::serialize(object) 5814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 5914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Worker is a thread which receives messages to be handled. 6014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * It is passed a function which is called once for each 6114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * message as it arrives. Call the add method to queue up 6214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * requests for the worker function to process. 6314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Object Worker(function (req)) 6414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Worker::add(req); 6514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 6614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 6714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 6814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Globals 6914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 7014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 7114171dca025273fb64b239c1ec86ed7d4b677343Xia Wanginclude("ril_vars.js"); 7214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 7314171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar NULL_RESPONSE_STRING = '*magic-null*'; 7414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 7514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// The state of the radio, needed by currentState() 7614171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar gRadioState = RADIOSTATE_UNAVAILABLE; 7714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 7814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// The state of the screen 7914171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar gScreenState = 0; 8014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 8114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// The base band version 8214171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar gBaseBandVersion = 'mock-ril 0.1'; 8314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 8414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// define a global variable to access the global object 8514171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar globals = this; 8614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 8714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// Empty Protobuf, defined here so we don't have 8814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// to recreate an empty Buffer frequently 8914171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar emptyProtobuf = new Buffer(); 9014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 9114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// Get the ril description file and create a schema 9214171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar packageNameAndSeperator = 'ril_proto.'; 9314171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar rilSchema = new Schema(readFileToBuffer('ril.desc')); 9414171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar ctrlSchema = new Schema(readFileToBuffer('ctrl.desc')); 9514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 9614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 9714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Print properties of an object 9814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 9914171dca025273fb64b239c1ec86ed7d4b677343Xia Wangfunction printProperties(obj, maxDepth, depth) { 10014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (typeof maxDepth == 'undefined') { 10114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang maxDepth = 1; 10214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 10314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (typeof depth == 'undefined') { 10414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang depth = 1; 10514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 10614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (depth == 1) { 10714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('printProperties:'); 10814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 10914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang for (var property in obj) { 11014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang try { 11114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if ((typeof obj[property] == 'object') 11214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang && (depth < maxDepth)) { 11314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang printProperties(obj[property], maxDepth, depth+1); 11414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } else { 11514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print(depth + ': ' + property + '=' + obj[property] + 11614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang ' type=' + typeof obj[property]); 11714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 11814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } catch (err) { 11914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('err=' + err) 12014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 12114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 12214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang} 12314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 12414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang// Test printProperties 12514171dca025273fb64b239c1ec86ed7d4b677343Xia Wangif (false) { 12614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang var myObject = { 'field1' : '1', 'field2' : '2', 'hello' : [ 'hi', 'there' ] }; 12714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang printProperties(myObject, 3); 12814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang} 12914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 13014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 13114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Include the components 13214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 13314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 13414171dca025273fb64b239c1ec86ed7d4b677343Xia Wanginclude("simulated_radio.js"); 13514171dca025273fb64b239c1ec86ed7d4b677343Xia Wanginclude("simulated_icc.js"); 13614171dca025273fb64b239c1ec86ed7d4b677343Xia Wanginclude("ctrl_server.js"); 13714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 13814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 13914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Construct a new request which is passed to the 14014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Worker handler method. 14114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 14214171dca025273fb64b239c1ec86ed7d4b677343Xia Wangfunction Request(reqNum, token, protobuf, schema, schemaName) { 14314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang this.reqNum = reqNum; 14414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang this.token = token; 14514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang try { 14614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang this.data = schema[packageNameAndSeperator + schemaName].parse(protobuf); 14714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } catch (err) { 14814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang // not a valid protobuf in the request 14914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang this.data = null; 15014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 15114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang} 15214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 15314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 15414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Dispatch incoming requests from RIL to the appropriate component. 15514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 15614171dca025273fb64b239c1ec86ed7d4b677343Xia Wangfunction onRilRequest(reqNum, token, requestProtobuf) { 15714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang try { 15814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang //print('onRilRequest E: reqNum=' + reqNum + ' token=' + token); 15914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 16014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang /** 16114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Validate parameters 16214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 16314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang rilErrCode = RIL_E_SUCCESS; 16414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (typeof reqNum != 'number') { 16514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('onRilRequest: reqNum is not a number'); 16614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang rilErrCode = RIL_E_GENERIC_FAILURE; 16714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 16814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (typeof token != 'number') { 16914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('onRilRequest: token is not a number'); 17014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang rilErrCode = RIL_E_GENERIC_FAILURE; 17114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 17214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (typeof requestProtobuf != 'object') { 17314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('onRilRequest: requestProtobuf is not an object'); 17414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang rilErrCode = RIL_E_GENERIC_FAILURE; 17514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 17614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (rilErrCode != RIL_E_SUCCESS) { 17714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang sendRilRequestComplete(rilErrCode, reqNum, token); 17814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang return 'onRilRequest X: invalid parameter'; 17914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 18014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 18114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang try { 18214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang //print('onRilRequest: get entry from dispatchTable reqNum=' + reqNum); 18314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang entry = dispatchTable[reqNum]; 18414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang if (typeof entry == 'undefined') { 18514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang throw ('entry = dispatchTable[' + reqNum + '] was undefined'); 18614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } else { 18714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang req = new Request(reqNum, token, requestProtobuf, rilSchema, entry.schemaName); 18814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang for(i = 0; i < entry.components.length; i++) { 18914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang entry.components[i].add(req); 19014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 19114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 19214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } catch (err) { 19314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('onRilRequest: Unknown reqNum=' + reqNum + ' err=' + err); 19414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang sendRilRequestComplete(RIL_E_REQUEST_NOT_SUPPORTED, reqNum, token); 19514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 19614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang // print('onRilRequest X: reqNum=' + reqNum + ' token=' + token); 19714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } catch (err) { 19814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('onRilRequest X: Exception err=' + err); 19914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang return('onRilRequest X: Exception err=' + err); 20014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang } 20114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang return 'onRilRequest X'; 20214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang} 20314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 20414171dca025273fb64b239c1ec86ed7d4b677343Xia Wangfunction onUnsolicitedTick(tick) { 20514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print('onUnsolicitedTick EX tick=' + tick); 20614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang return 3; 20714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang} 20814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 20914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 21014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Dispatch table for requests 21114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 21214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Each table entry is index by the RIL_REQUEST_xxxx 21314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * and contains an array of components this request 21414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * is to be sent to and the name of the schema 21514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * that converts the incoming protobuf to the 21614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * appropriate request data. 21714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * 21814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * DispatchTable[RIL_REQUEST_xxx].components = Array of components 21914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * DisptachTable[RIL_REQUEST_xxx].Entry.schemaName = 'Name-of-schema'; 22014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 22114171dca025273fb64b239c1ec86ed7d4b677343Xia Wangvar dispatchTable = new Array(); 22214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 22314171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_GET_SIM_STATUS] = { // 1 22414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedIccWorker], 22514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'schemaName' : 'ReqGetSimStatus', 22614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 22714171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_ENTER_SIM_PIN] = { // 2 22814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedIccWorker], 22914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'schemaName' : 'ReqEnterSimPin', 23014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 23114171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_GET_CURRENT_CALLS] = { // 9 23214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 23314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 23414171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_DIAL] = { // 10 23514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 23614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'schemaName' : 'ReqDial', 23714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 23814171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_GET_IMSI] = { // 11 23914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedIccWorker], 24014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 24114171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_HANGUP] = { // 12 24214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 24314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'schemaName' : 'ReqHangUp', 24414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 24514171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND] = { // 13 24614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 24714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 24814171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND] = { // 14 24914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 25014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 25114171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE] = { // 15 25214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 25314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 25414171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_CONFERENCE] = { // 16 25514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 25614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 2572b7b0f7d61dd1ee99722e27b51810fe51de92f0fXia WangdispatchTable[RIL_REQUEST_LAST_CALL_FAIL_CAUSE] = { // 18 2582b7b0f7d61dd1ee99722e27b51810fe51de92f0fXia Wang 'components' : [simulatedRadioWorker], 2592b7b0f7d61dd1ee99722e27b51810fe51de92f0fXia Wang}; 26014171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_SIGNAL_STRENGTH] = { // 19 26114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 26214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 2632c1fb3a4e7aa8039bdefacceec98aa43cfe5784cWink SavilledispatchTable[RIL_REQUEST_VOICE_REGISTRATION_STATE] = { // 20 26414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 26514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 2662c1fb3a4e7aa8039bdefacceec98aa43cfe5784cWink SavilledispatchTable[RIL_REQUEST_DATA_REGISTRATION_STATE] = { // 21 26714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 26814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 26914171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_OPERATOR] = { // 22 27014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedIccWorker], 27114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 27214171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_GET_IMEI] = { // 38 27314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedIccWorker], 27414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 27514171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_GET_IMEISV] = { // 39 27614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedIccWorker], 27714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 278bf40f252c66f13c51fb113c343e1728f8a86662aXia WangdispatchTable[RIL_REQUEST_ANSWER] = { // 40 279bf40f252c66f13c51fb113c343e1728f8a86662aXia Wang 'components' : [simulatedRadioWorker], 280bf40f252c66f13c51fb113c343e1728f8a86662aXia Wang}; 28114171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE] = { // 45 28214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 28314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 28414171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC] = { // 46 28514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 28614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 28714171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_BASEBAND_VERSION] = { // 51 28814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 28914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 29014171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_SEPARATE_CONNECTION] = { // 52 29114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 29214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'schemaName' : 'ReqSeparateConnection', 29314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 29414171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_SET_MUTE ] = { // 53 29514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 29614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'schemaName' : 'ReqSetMute', 29714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 29814171dca025273fb64b239c1ec86ed7d4b677343Xia WangdispatchTable[RIL_REQUEST_SCREEN_STATE] = { // 61 29914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'components' : [simulatedRadioWorker], 30014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'schemaName' : 'ReqScreenState', 30114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang}; 30214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 30314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 30414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Start the mock rill after loading 30514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 30614171dca025273fb64b239c1ec86ed7d4b677343Xia Wangfunction startMockRil() { 30714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print("startMockRil E:"); 30814171dca025273fb64b239c1ec86ed7d4b677343Xia Wang setRadioState(RADIOSTATE_SIM_READY); 30914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang // send the signal strength after 5 seconds, wait until mock ril is started 31014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang simulatedRadioWorker.addDelayed({ 31114171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 'reqNum' : CMD_UNSOL_SIGNAL_STRENGTH}, 5000); 31214171dca025273fb64b239c1ec86ed7d4b677343Xia Wang print("startMockRil X:"); 31314171dca025273fb64b239c1ec86ed7d4b677343Xia Wang} 31414171dca025273fb64b239c1ec86ed7d4b677343Xia Wang 31514171dca025273fb64b239c1ec86ed7d4b677343Xia Wang/** 31614171dca025273fb64b239c1ec86ed7d4b677343Xia Wang * Optional tests 31714171dca025273fb64b239c1ec86ed7d4b677343Xia Wang */ 31814171dca025273fb64b239c1ec86ed7d4b677343Xia Wangif (false) { 31914171dca025273fb64b239c1ec86ed7d4b677343Xia Wang include("mock_ril_tests.js"); 32014171dca025273fb64b239c1ec86ed7d4b677343Xia Wang} 321