| /** |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * Simulated Icc |
| */ |
| function Icc() { |
| |
| var MCC = '310'; |
| var MNC = '260'; |
| var MSN = '123456789'; |
| var IMEI = '123456789012345'; |
| var IMEISV = '00'; |
| |
| function RilAppStatus(type, state, persoState, aidPtr, appLabelPtr, pin1R, curPin1, curPin2) { |
| this.appType = type; |
| this.appState = state; |
| this.persoSubstate = persoState; |
| this.aid = aidPtr; |
| this.appLabel = appLabelPtr; |
| this.pin1Replaced = pin1R; |
| this.pin1 = curPin1; |
| this.pint2 = curPin2; |
| } |
| |
| function RilCardStatus() { |
| this.cardState = CARDSTATE_PRESENT; |
| this.universalPinState = PINSTATE_UNKNOWN; |
| this.gsmUmtsSubscriptionAppIndex = 0; |
| this.cdmaSubscriptionAppIndex = CARD_MAX_APPS; |
| this.imsSubscriptionAppIndex = CARD_MAX_APPS; |
| this.numApplications = 1; |
| this.applications = new Array(CARD_MAX_APPS); |
| |
| // Initialize application status |
| for (i = 0; i < CARD_MAX_APPS; i++) { |
| var app = new RilAppStatus(APPTYPE_UNKNOWN, APPSTATE_UNKNOWN, PERSOSUBSTATE_UNKNOWN, |
| null, null, 0, PINSTATE_UNKNOWN, PINSTATE_UNKNOWN); |
| this.applications[i] = app; |
| } |
| |
| // set gsm application status. |
| var gsmApp = new RilAppStatus(APPTYPE_SIM, APPSTATE_READY, PERSOSUBSTATE_READY, null, null, |
| 0, PINSTATE_UNKNOWN, PINSTATE_UNKNOWN); |
| this.applications[this.gsmUmtsSubscriptionAppIndex] = gsmApp; |
| } |
| |
| var cardStatus = new RilCardStatus(); |
| |
| // The result returned by the request handlers |
| var result = new Object(); |
| |
| this.rilRequestGetSimStatus = function(req) { // 1 |
| print('Icc: rilRequestGetSimStatus'); |
| |
| var rsp = new Object(); |
| rsp.cardStatus = cardStatus; |
| |
| result.responseProtobuf = rilSchema[packageNameAndSeperator + |
| 'RspGetSimStatus'].serialize(rsp); |
| return result; |
| } |
| |
| this.rilRequestEnterSimPin = function(req) { // 2 |
| print('Icc: rilRequestEnterSimPin req.data.pin=' + req.data.pin); |
| |
| var rsp = new Object(); |
| rsp.retriesRemaining = 3; |
| result.responseProtobuf = rilSchema[packageNameAndSeperator + |
| 'RspEnterSimPin'].serialize(rsp); |
| return result; |
| } |
| |
| this.rilRequestGetImsi = function(req) { // 11 |
| print('Icc: rilRequestGetImsi'); |
| |
| var rsp = new Object(); |
| rsp.strings = new Array(); |
| rsp.strings[0] = MCC + MNC + MSN; |
| result.responseProtobuf = rilSchema[packageNameAndSeperator + |
| 'RspStrings'].serialize(rsp); |
| return result; |
| } |
| |
| this.rilRequestOperator = function(req) { // 22 |
| print('Icc: rilRequestOperator'); |
| |
| var rsp = new Object(); |
| rsp.longAlphaOns = 'Mock-Ril long Alpha Ons'; |
| rsp.shortAlphaOns = 'Mock-Ril'; |
| rsp.mccMnc = MCC + MNC; |
| result.responseProtobuf = rilSchema[packageNameAndSeperator + |
| 'RspOperator'].serialize(rsp); |
| return result; |
| } |
| |
| this.rilRequestGetImei = function(req) { // 38 |
| print('Icc: rilRequestGetImei'); |
| |
| var rsp = new Object(); |
| rsp.strings = new Array(); |
| rsp.strings[0] = IMEI; |
| result.responseProtobuf = rilSchema[packageNameAndSeperator + |
| 'RspStrings'].serialize(rsp); |
| return result; |
| } |
| |
| this.rilRequestGetImeisv = function(req) { // 39 |
| print('Icc: rilRequestGetImeisv'); |
| |
| var rsp = new Object(); |
| rsp.strings = new Array(); |
| rsp.strings[0] = IMEISV; |
| result.responseProtobuf = rilSchema[packageNameAndSeperator + |
| 'RspStrings'].serialize(rsp); |
| return result; |
| } |
| |
| /** |
| * Process the request |
| */ |
| this.process = function(req) { |
| try { |
| // print('Icc E: req.reqNum=' + req.reqNum + ' req.token=' + req.token); |
| |
| // Assume the result will be true, successful and nothing to return |
| result.sendResponse = true; |
| result.rilErrCode = RIL_E_SUCCESS; |
| result.responseProtobuf = emptyProtobuf; |
| |
| try { |
| result = (this.simDispatchTable[req.reqNum]).call(this, req); |
| } catch (err) { |
| print('Icc: Unknown reqNum=' + req.reqNum); |
| result.rilErrCode = RIL_E_REQUEST_NOT_SUPPORTED; |
| } |
| |
| if (result.sendResponse) { |
| sendRilRequestComplete(result.rilErrCode, req.reqNum, |
| req.token, result.responseProtobuf); |
| } |
| |
| // print('Icc X: req.reqNum=' + req.reqNum + ' req.token=' + req.token); |
| } catch (err) { |
| print('Icc X: Exception req.reqNum=' + |
| req.reqNum + ' req.token=' + req.token + ' err=' + err); |
| } |
| } |
| |
| print('Icc: constructor E'); |
| this.simDispatchTable = new Array(); |
| this.simDispatchTable[RIL_REQUEST_GET_SIM_STATUS] = this.rilRequestGetSimStatus; // 1 |
| this.simDispatchTable[RIL_REQUEST_ENTER_SIM_PIN] = this.rilRequestEnterSimPin; // 2 |
| this.simDispatchTable[RIL_REQUEST_GET_IMSI] = this.rilRequestGetImsi; // 11 |
| this.simDispatchTable[RIL_REQUEST_OPERATOR] = this.rilRequestOperator; // 22 |
| this.simDispatchTable[RIL_REQUEST_GET_IMEI] = this.rilRequestGetImei; // 38 |
| this.simDispatchTable[RIL_REQUEST_GET_IMEISV] = this.rilRequestGetImeisv; // 39 |
| print('Icc: constructor X'); |
| } |
| |
| // The simulated sim instance and its associated Worker |
| var simulatedIcc = new Icc(); |
| var simulatedIccWorker = new Worker(function (req) { |
| simulatedIcc.process(req); |
| }); |
| simulatedIccWorker.run(); |
| |
| /** |
| * Optional tests |
| */ |
| if (false) { |
| include("simulated_icc_tests.js"); |
| } |