Bug 892498 - [User Story] [Suplementary Services] Permanent MMI codes: support calling line identification restriction (+CLIR). r=ferjm

This commit is contained in:
Jose Antonio Olivera Ortega 2013-07-22 12:01:03 +02:00
parent 5b8d5a0af2
commit 8dfdf5a8b5
2 changed files with 106 additions and 2 deletions

View File

@ -2513,6 +2513,11 @@ CALL_BARRING_PROGRAM_TO_FACILITY[CALL_BARRING_PROGRAM_OUTGOING_INTERNATIONAL_EXC
CALL_BARRING_PROGRAM_TO_FACILITY[CALL_BARRING_PROGRAM_ALL_INCOMING] = ICC_CB_FACILITY_BAIC;
CALL_BARRING_PROGRAM_TO_FACILITY[CALL_BARRING_PROGRAM_INCOMING_ROAMING] = ICC_CB_FACILITY_BIC_ROAM;
// CLIR constants. Must be in sync with nsIDOMMozMobileConnection interface
this.CLIR_DEFAULT = 0;
this.CLIR_INVOCATION = 1;
this.CLIR_SUPPRESSION = 2;
// MMI procedure as defined in TS.22.030 6.5.2
this.MMI_PROCEDURE_ACTIVATION = "*";
this.MMI_PROCEDURE_DEACTIVATION = "#";
@ -2605,6 +2610,12 @@ this.MMI_SM_KS_SERVICE_DISABLED = "smServiceDisabled";
this.MMI_SM_KS_SERVICE_REGISTERED = "smServiceRegistered";
this.MMI_SM_KS_SERVICE_ERASED = "smServiceErased";
this.MMI_SM_KS_SERVICE_INTERROGATED = "smServiceInterrogated";
this.MMI_SM_KS_SERVICE_NOT_PROVISIONED = "smServiceNotProvisioned";
this.MMI_SM_KS_CLIR_PERMANENT = "smClirPermanent";
this.MMI_SM_KS_CLIR_DEFAULT_ON_NEXT_CALL_ON = "smClirDefaultOnNextCallOn";
this.MMI_SM_KS_CLIR_DEFAULT_ON_NEXT_CALL_OFF = "smClirDefaultOnNextCallOff";
this.MMI_SM_KS_CLIR_DEFAULT_OFF_NEXT_CALL_ON = "smClirDefaultOffNextCallOn";
this.MMI_SM_KS_CLIR_DEFAULT_OFF_NEXT_CALL_OFF = "smClirDefaultOffNextCallOff";
/**
* CDMA PDU constants

View File

@ -2465,6 +2465,27 @@ let RIL = {
}
return;
// CLIR (non-temporary ones)
case MMI_SC_CLIR:
options.mmiServiceCode = MMI_KS_SC_CLIR;
options.procedure = mmi.procedure;
switch (options.procedure) {
case MMI_PROCEDURE_INTERROGATION:
this.getCLIR(options);
return;
case MMI_PROCEDURE_ACTIVATION:
options.clirMode = CLIR_INVOCATION;
break;
case MMI_PROCEDURE_DEACTIVATION:
options.clirMode = CLIR_SUPPRESSION;
break;
default:
_sendMMIError(MMI_ERROR_KS_ERROR);
return;
}
this.setCLIR(options);
return;
// Call barring
case MMI_SC_BAOC:
case MMI_SC_BAOIC:
@ -2476,8 +2497,6 @@ let RIL = {
case MMI_SC_BA_MT:
// Call waiting
case MMI_SC_CALL_WAITING:
// CLIR
case MMI_SC_CLIR:
_sendMMIError(MMI_ERROR_KS_NOT_SUPPORTED);
return;
}
@ -4983,6 +5002,70 @@ RIL[REQUEST_GET_CLIR] = function REQUEST_GET_CLIR(length, options) {
options.n = Buf.readUint32(); // Will be TS 27.007 +CLIR parameter 'n'.
options.m = Buf.readUint32(); // Will be TS 27.007 +CLIR parameter 'm'.
if (options.rilMessageType === "sendMMI") {
// TS 27.007 +CLIR parameter 'm'.
switch (options.m) {
// CLIR not provisioned.
case 0:
options.statusMessage = MMI_SM_KS_SERVICE_NOT_PROVISIONED;
break;
// CLIR provisioned in permanent mode.
case 1:
options.statusMessage = MMI_SM_KS_CLIR_PERMANENT;
break;
// Unknown (e.g. no network, etc.).
case 2:
options.success = false;
options.errorMsg = MMI_ERROR_KS_ERROR;
break;
// CLIR temporary mode presentation restricted.
case 3:
// TS 27.007 +CLIR parameter 'n'.
switch (options.n) {
// Default.
case 0:
// CLIR invocation.
case 1:
options.statusMessage = MMI_SM_KS_CLIR_DEFAULT_ON_NEXT_CALL_ON;
break;
// CLIR suppression.
case 2:
options.statusMessage = MMI_SM_KS_CLIR_DEFAULT_ON_NEXT_CALL_OFF;
break;
default:
options.success = false;
options.errorMsg = GECKO_ERROR_GENERIC_FAILURE;
break;
}
break;
// CLIR temporary mode presentation allowed.
case 4:
// TS 27.007 +CLIR parameter 'n'.
switch (options.n) {
// Default.
case 0:
// CLIR suppression.
case 2:
options.statusMessage = MMI_SM_KS_CLIR_DEFAULT_OFF_NEXT_CALL_OFF;
break;
// CLIR invocation.
case 1:
options.statusMessage = MMI_SM_KS_CLIR_DEFAULT_OFF_NEXT_CALL_ON;
break;
default:
options.success = false;
options.errorMsg = GECKO_ERROR_GENERIC_FAILURE;
break;
}
break;
default:
options.success = false;
options.errorMsg = GECKO_ERROR_GENERIC_FAILURE;
break;
}
}
this.sendDOMMessage(options);
};
RIL[REQUEST_SET_CLIR] = function REQUEST_SET_CLIR(length, options) {
@ -4990,6 +5073,16 @@ RIL[REQUEST_SET_CLIR] = function REQUEST_SET_CLIR(length, options) {
if (!options.success) {
options.errorMsg = RIL_ERROR_TO_GECKO_ERROR[options.rilRequestError];
}
if (options.success && (options.rilMessageType === "sendMMI")) {
switch (options.procedure) {
case MMI_PROCEDURE_ACTIVATION:
options.statusMessage = MMI_SM_KS_SERVICE_ENABLED;
break;
case MMI_PROCEDURE_DEACTIVATION:
options.statusMessage = MMI_SM_KS_SERVICE_DISABLED;
break;
}
}
this.sendDOMMessage(options);
};