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