/**
* 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");
}