Bug 1168064 - B2G RIL: filter out cell info with unknown values. r=echen

This commit is contained in:
Jessica Jong 2015-06-05 10:13:52 +08:00
parent 3e07d1ad24
commit 66184baaf1
3 changed files with 291 additions and 113 deletions

View File

@ -46,8 +46,7 @@ const NS_DATA_CALL_ERROR_TOPIC_ID = "data-call-error";
const kPrefRilDebuggingEnabled = "ril.debugging.enabled";
const INT32_MAX = 2147483647;
const UNKNOWN_RSSI = 99;
const UNKNOWN_VALUE = Ci.nsICellInfo.UNKNOWN_VALUE;
XPCOMUtils.defineLazyServiceGetter(this, "gMobileConnectionMessenger",
"@mozilla.org/ril/system-messenger-helper;1",
@ -155,7 +154,26 @@ MobileCallForwardingOptions.prototype = {
serviceClass: Ci.nsIMobileConnection.ICC_SERVICE_CLASS_NONE
}
function NeighboringCellInfo() {}
function NeighboringCellInfo(aOptions) {
this.networkType = aOptions.networkType;
this.gsmLocationAreaCode = (aOptions.gsmLocationAreaCode !== undefined &&
aOptions.gsmLocationAreaCode >= 0 &&
aOptions.gsmLocationAreaCode <= 65535) ?
aOptions.gsmLocationAreaCode : UNKNOWN_VALUE;
this.gsmCellId = (aOptions.gsmCellId !== undefined &&
aOptions.gsmCellId >= 0 &&
aOptions.gsmCellId <= 65535) ?
aOptions.gsmCellId : UNKNOWN_VALUE;
this.wcdmaPsc = (aOptions.wcdmaPsc !== undefined && aOptions.wcdmaPsc >= 0 &&
aOptions.wcdmaPsc <= 511) ?
aOptions.wcdmaPsc : UNKNOWN_VALUE;
this.signalStrength = (aOptions.signalStrength !== undefined &&
((aOptions.signalStrength >= 0 &&
aOptions.signalStrength <= 31) ||
(aOptions.signalStrength >= -120 &&
aOptions.signalStrength <= -25))) ?
aOptions.signalStrength : UNKNOWN_VALUE;
}
NeighboringCellInfo.prototype = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsINeighboringCellInfo]),
classID: NEIGHBORINGCELLINFO_CID,
@ -165,16 +183,28 @@ NeighboringCellInfo.prototype = {
interfaces: [Ci.nsINeighboringCellInfo]
}),
isValid: function() {
return !(this.gsmLocationAreaCode == UNKNOWN_VALUE &&
this.gsmCellId == UNKNOWN_VALUE &&
this.wcdmaPsc == UNKNOWN_VALUE &&
this.signalStrength == UNKNOWN_VALUE);
},
// nsINeighboringCellInfo
networkType: null,
gsmLocationAreaCode: -1,
gsmCellId: -1,
wcdmaPsc: -1,
signalStrength: UNKNOWN_RSSI
gsmLocationAreaCode: UNKNOWN_VALUE,
gsmCellId: UNKNOWN_VALUE,
wcdmaPsc: UNKNOWN_VALUE,
signalStrength: UNKNOWN_VALUE
};
function CellInfo() {}
function CellInfo(aOptions) {
this.type = aOptions.type;
this.registered = aOptions.registered;
this.timestampType = aOptions.timestampType;
this.timestamp = aOptions.timestamp;
}
CellInfo.prototype = {
// nsICellInfo
@ -185,7 +215,28 @@ CellInfo.prototype = {
timestamp: 0
};
function GsmCellInfo() {}
function GsmCellInfo(aOptions) {
CellInfo.call(this, aOptions);
// Cell Identity
this.mcc = (aOptions.mcc !== undefined && aOptions.mcc >= 0 &&
aOptions.mcc <= 999) ? aOptions.mcc : UNKNOWN_VALUE;
this.mnc = (aOptions.mnc !== undefined && aOptions.mnc >= 0 &&
aOptions.mnc <= 999) ? aOptions.mnc : UNKNOWN_VALUE;
this.lac = (aOptions.lac !== undefined && aOptions.lac >= 0 &&
aOptions.lac <= 65535) ? aOptions.lac : UNKNOWN_VALUE;
this.cid = (aOptions.cid !== undefined && aOptions.cid >= 0 &&
aOptions.cid <= 65535) ? aOptions.cid : UNKNOWN_VALUE;
// Signal Strength
this.signalStrength = (aOptions.signalStrength !== undefined &&
aOptions.signalStrength >= 0 &&
aOptions.signalStrength <= 31) ?
aOptions.signalStrength : UNKNOWN_VALUE;
this.bitErrorRate = (aOptions.bitErrorRate !== undefined &&
aOptions.bitErrorRate >= 0 && aOptions.bitErrorRate <= 7)
? aOptions.bitErrorRate : UNKNOWN_VALUE;
}
GsmCellInfo.prototype = {
__proto__: CellInfo.prototype,
QueryInterface: XPCOMUtils.generateQI([Ci.nsICellInfo,
@ -197,17 +248,47 @@ GsmCellInfo.prototype = {
interfaces: [Ci.nsIGsmCellInfo]
}),
isValid: function() {
return !(this.mcc == UNKNOWN_VALUE && this.mnc == UNKNOWN_VALUE &&
this.lac == UNKNOWN_VALUE && this.cid == UNKNOWN_VALUE &&
this.signalStrength == UNKNOWN_VALUE &&
this.bitErrorRate == UNKNOWN_VALUE);
},
// nsIGsmCellInfo
mcc: INT32_MAX,
mnc: INT32_MAX,
lac: INT32_MAX,
cid: INT32_MAX,
signalStrength: UNKNOWN_RSSI,
bitErrorRate: UNKNOWN_RSSI
mcc: UNKNOWN_VALUE,
mnc: UNKNOWN_VALUE,
lac: UNKNOWN_VALUE,
cid: UNKNOWN_VALUE,
signalStrength: UNKNOWN_VALUE,
bitErrorRate: UNKNOWN_VALUE
};
function WcdmaCellInfo() {}
function WcdmaCellInfo(aOptions) {
CellInfo.call(this, aOptions);
// Cell Identity
this.mcc = (aOptions.mcc !== undefined && aOptions.mcc >= 0 &&
aOptions.mcc <= 999) ? aOptions.mcc : UNKNOWN_VALUE;
this.mnc = (aOptions.mnc !== undefined && aOptions.mnc >= 0 &&
aOptions.mnc <= 999) ? aOptions.mnc : UNKNOWN_VALUE;
this.lac = (aOptions.lac !== undefined && aOptions.lac >= 0 &&
aOptions.lac <= 65535) ? aOptions.lac : UNKNOWN_VALUE;
this.cid = (aOptions.cid !== undefined && aOptions.cid >= 0 &&
aOptions.cid <= 268435455) ? aOptions.cid : UNKNOWN_VALUE;
this.psc = (aOptions.psc !== undefined && aOptions.psc >= 0 &&
aOptions.psc <= 511) ? aOptions.psc : UNKNOWN_VALUE;
// Signal Strength
this.signalStrength = (aOptions.signalStrength !== undefined &&
aOptions.signalStrength >= 0 &&
aOptions.signalStrength <= 31) ?
aOptions.signalStrength : UNKNOWN_VALUE;
this.bitErrorRate = (aOptions.bitErrorRate !== undefined &&
aOptions.bitErrorRate >= 0 && aOptions.bitErrorRate <= 7)
? aOptions.bitErrorRate : UNKNOWN_VALUE;
}
WcdmaCellInfo.prototype = {
__proto__: CellInfo.prototype,
QueryInterface: XPCOMUtils.generateQI([Ci.nsICellInfo,
@ -219,18 +300,57 @@ WcdmaCellInfo.prototype = {
interfaces: [Ci.nsIWcdmaCellInfo]
}),
isValid: function() {
return !(this.mcc == UNKNOWN_VALUE && this.mnc == UNKNOWN_VALUE &&
this.lac == UNKNOWN_VALUE && this.cid == UNKNOWN_VALUE &&
this.psc == UNKNOWN_VALUE && this.signalStrength == UNKNOWN_VALUE &&
this.bitErrorRate == UNKNOWN_VALUE);
},
// nsIWcdmaCellInfo
mcc: INT32_MAX,
mnc: INT32_MAX,
lac: INT32_MAX,
cid: INT32_MAX,
psc: INT32_MAX,
signalStrength: UNKNOWN_RSSI,
bitErrorRate: UNKNOWN_RSSI
mcc: UNKNOWN_VALUE,
mnc: UNKNOWN_VALUE,
lac: UNKNOWN_VALUE,
cid: UNKNOWN_VALUE,
psc: UNKNOWN_VALUE,
signalStrength: UNKNOWN_VALUE,
bitErrorRate: UNKNOWN_VALUE
};
function LteCellInfo() {}
function LteCellInfo(aOptions) {
CellInfo.call(this, aOptions);
// Cell Identity
this.mcc = (aOptions.mcc !== undefined && aOptions.mcc >= 0 &&
aOptions.mcc <= 999) ? aOptions.mcc : UNKNOWN_VALUE;
this.mnc = (aOptions.mnc !== undefined && aOptions.mnc >= 0 &&
aOptions.mnc <= 999) ? aOptions.mnc : UNKNOWN_VALUE;
this.cid = (aOptions.cid !== undefined && aOptions.cid >= 0 &&
aOptions.cid <= 268435455) ? aOptions.cid : UNKNOWN_VALUE;
this.pcid = (aOptions.pcid !== undefined && aOptions.pcid >= 0 &&
aOptions.pcid <= 503) ? aOptions.pcid : UNKNOWN_VALUE;
this.tac = (aOptions.tac !== undefined && aOptions.tac >= 0 &&
aOptions.tac <= 65535) ? aOptions.tac : UNKNOWN_VALUE;
// Signal Strength
this.signalStrength = (aOptions.signalStrength !== undefined &&
aOptions.signalStrength >= 0 &&
aOptions.signalStrength <= 31) ?
aOptions.signalStrength : UNKNOWN_VALUE;
this.rsrp = (aOptions.rsrp !== undefined && aOptions.rsrp >= 44 &&
aOptions.rsrp <= 140) ? aOptions.rsrp : UNKNOWN_VALUE;
this.rsrq = (aOptions.rsrq !== undefined && aOptions.rsrq >= 3 &&
aOptions.rsrq <= 20) ? aOptions.rsrq : UNKNOWN_VALUE;
this.rssnr = (aOptions.rssnr !== undefined && aOptions.rssnr >= -200 &&
aOptions.rssnr <= 300) ? aOptions.rssnr : UNKNOWN_VALUE;
this.cqi = (aOptions.cqi !== undefined && aOptions.cqi >= 0 &&
aOptions.cqi <= 15) ? aOptions.cqi : UNKNOWN_VALUE;
this.timingAdvance = (aOptions.timingAdvance !== undefined &&
aOptions.timingAdvance >= 0 &&
aOptions.timingAdvance <= 2147483646) ?
aOptions.timingAdvance : UNKNOWN_VALUE;
}
LteCellInfo.prototype = {
__proto__: CellInfo.prototype,
QueryInterface: XPCOMUtils.generateQI([Ci.nsICellInfo,
@ -242,22 +362,64 @@ LteCellInfo.prototype = {
interfaces: [Ci.nsILteCellInfo]
}),
isValid: function() {
return !(this.mcc == UNKNOWN_VALUE && this.mnc == UNKNOWN_VALUE &&
this.cid == UNKNOWN_VALUE && this.pcid == UNKNOWN_VALUE &&
this.tac == UNKNOWN_VALUE && this.signalStrength == UNKNOWN_VALUE &&
this.rsrp == UNKNOWN_VALUE && this.rsrq == UNKNOWN_VALUE &&
this.rssnr == UNKNOWN_VALUE && this.cqi == UNKNOWN_VALUE &&
this.timingAdvance == UNKNOWN_VALUE);
},
// nsILteCellInfo
mcc: INT32_MAX,
mnc: INT32_MAX,
cid: INT32_MAX,
pcid: INT32_MAX,
tac: INT32_MAX,
signalStrength: UNKNOWN_RSSI,
rsrp: INT32_MAX,
rsrq: INT32_MAX,
rssnr: INT32_MAX,
cqi: INT32_MAX,
timingAdvance: INT32_MAX
mcc: UNKNOWN_VALUE,
mnc: UNKNOWN_VALUE,
cid: UNKNOWN_VALUE,
pcid: UNKNOWN_VALUE,
tac: UNKNOWN_VALUE,
signalStrength: UNKNOWN_VALUE,
rsrp: UNKNOWN_VALUE,
rsrq: UNKNOWN_VALUE,
rssnr: UNKNOWN_VALUE,
cqi: UNKNOWN_VALUE,
timingAdvance: UNKNOWN_VALUE
};
function CdmaCellInfo() {}
function CdmaCellInfo(aOptions) {
CellInfo.call(this, aOptions);
// Cell Identity
this.networkId = (aOptions.networkId !== undefined &&
aOptions.networkId >= 0 && aOptions.networkId <= 65535) ?
aOptions.networkId : UNKNOWN_VALUE;
this.systemId = (aOptions.systemId !== undefined && aOptions.systemId >= 0 &&
aOptions.systemId <= 32767) ?
aOptions.systemId : UNKNOWN_VALUE;
this.baseStationId = (aOptions.baseStationId !== undefined &&
aOptions.baseStationId >= 0 &&
aOptions.baseStationId <= 65535) ?
aOptions.baseStationId : UNKNOWN_VALUE;
this.longitude = (aOptions.longitude !== undefined &&
aOptions.longitude >= -2592000 &&
aOptions.longitude <= 2592000) ?
aOptions.longitude : UNKNOWN_VALUE;
this.latitude = (aOptions.latitude !== undefined &&
aOptions.latitude >= -1296000 &&
aOptions.latitude <= 1296000) ?
aOptions.latitude : UNKNOWN_VALUE;
// Signal Strength
this.cdmaEcio = (aOptions.cdmaEcio !== undefined &&
aOptions.cdmaEcio >= 0) ? aOptions.cdmaEcio : UNKNOWN_VALUE;
this.evdoDbm = (aOptions.evdoDbm !== undefined &&
aOptions.evdoDbm >= 0) ? aOptions.evdoDbm : UNKNOWN_VALUE;
this.evdoEcio = (aOptions.evdoEcio !== undefined &&
aOptions.evdoEcio >= 0) ? aOptions.evdoEcio : UNKNOWN_VALUE;
this.evdoSnr = (aOptions.evdoSnr !== undefined &&
aOptions.evdoSnr >= 0 && aOptions.evdoSnr <= 8) ?
aOptions.evdoSnr : UNKNOWN_VALUE;
}
CdmaCellInfo.prototype = {
__proto__: CellInfo.prototype,
QueryInterface: XPCOMUtils.generateQI([Ci.nsICellInfo,
@ -269,18 +431,27 @@ CdmaCellInfo.prototype = {
interfaces: [Ci.nsICdmaCellInfo]
}),
isValid: function() {
return !(this.networkId == UNKNOWN_VALUE && this.systemId == UNKNOWN_VALUE &&
this.baseStationId == UNKNOWN_VALUE &&
this.longitude == UNKNOWN_VALUE &&
this.latitude == UNKNOWN_VALUE && this.cdmaDbm == UNKNOWN_VALUE &&
this.cdmaEcio == UNKNOWN_VALUE && this.evdoDbm == UNKNOWN_VALUE &&
this.evdoEcio == UNKNOWN_VALUE && this.evdoSnr == UNKNOWN_VALUE);
},
// nsICdmaCellInfo
networkId: INT32_MAX,
systemId: INT32_MAX,
baseStationId: INT32_MAX,
longitude: INT32_MAX,
latitude: INT32_MAX,
cdmaDbm: INT32_MAX,
cdmaEcio: INT32_MAX,
evdoDbm: INT32_MAX,
evdoEcio: INT32_MAX,
evdoSnr: INT32_MAX
networkId: UNKNOWN_VALUE,
systemId: UNKNOWN_VALUE,
baseStationId: UNKNOWN_VALUE,
longitude: UNKNOWN_VALUE,
latitude: UNKNOWN_VALUE,
cdmaDbm: UNKNOWN_VALUE,
cdmaEcio: UNKNOWN_VALUE,
evdoDbm: UNKNOWN_VALUE,
evdoEcio: UNKNOWN_VALUE,
evdoSnr: UNKNOWN_VALUE
};
function MobileConnectionProvider(aClientId, aRadioInterface) {
@ -1069,26 +1240,26 @@ MobileConnectionProvider.prototype = {
let cellInfo;
switch (srcCellInfo.type) {
case RIL.CELL_INFO_TYPE_GSM:
cellInfo = new GsmCellInfo();
cellInfo = new GsmCellInfo(srcCellInfo);
break;
case RIL.CELL_INFO_TYPE_WCDMA:
cellInfo = new WcdmaCellInfo();
cellInfo = new WcdmaCellInfo(srcCellInfo);
break;
case RIL.CELL_INFO_TYPE_LTE:
cellInfo = new LteCellInfo();
cellInfo = new LteCellInfo(srcCellInfo);
break;
case RIL.CELL_INFO_TYPE_CDMA:
cellInfo = new CdmaCellInfo();
cellInfo = new CdmaCellInfo(srcCellInfo);
break;
}
if (!cellInfo) {
if (!cellInfo || !cellInfo.isValid()) {
continue;
}
this._updateInfo(cellInfo, srcCellInfo);
cellInfoList.push(cellInfo);
}
aCallback.notifyGetCellInfoList(count, cellInfoList);
aCallback.notifyGetCellInfoList(cellInfoList.length, cellInfoList);
}.bind(this));
},
@ -1105,11 +1276,13 @@ MobileConnectionProvider.prototype = {
let count = aResponse.result.length;
for (let i = 0; i < count; i++) {
let srcCellInfo = aResponse.result[i];
let cellInfo = new NeighboringCellInfo();
this._updateInfo(cellInfo, srcCellInfo);
neighboringCellIds.push(cellInfo);
let cellInfo = new NeighboringCellInfo(srcCellInfo);
if (cellInfo && cellInfo.isValid()) {
neighboringCellIds.push(cellInfo);
}
}
aCallback.notifyGetNeighboringCellIds(count, neighboringCellIds);
aCallback.notifyGetNeighboringCellIds(neighboringCellIds.length,
neighboringCellIds);
}.bind(this));
},

View File

@ -22,20 +22,22 @@ interface nsICellInfoListCallback : nsISupports
void notifyGetCellInfoListFailed(in DOMString error);
};
[scriptable, uuid(86667898-c9ab-44ee-8a9a-026916b3183e)]
[scriptable, uuid(a9a34341-5a33-4e0a-98e1-13e7ea4228be)]
interface nsICellInfo : nsISupports
{
const long CELL_INFO_TYPE_GSM = 1;
const long CELL_INFO_TYPE_CDMA = 2;
const long CELL_INFO_TYPE_LTE = 3;
const long CELL_INFO_TYPE_GSM = 1;
const long CELL_INFO_TYPE_CDMA = 2;
const long CELL_INFO_TYPE_LTE = 3;
const long CELL_INFO_TYPE_WCDMA = 4;
const long TIMESTAMP_TYPE_UNKNOWN = 0;
const long TIMESTAMP_TYPE_ANTENNA = 1;
const long TIMESTAMP_TYPE_MODEM = 2;
const long TIMESTAMP_TYPE_OEM_RIL = 3;
const long TIMESTAMP_TYPE_UNKNOWN = 0;
const long TIMESTAMP_TYPE_ANTENNA = 1;
const long TIMESTAMP_TYPE_MODEM = 2;
const long TIMESTAMP_TYPE_OEM_RIL = 3;
const long TIMESTAMP_TYPE_JAVA_RIL = 4;
const long UNKNOWN_VALUE = 0x7FFFFFFF;
/**
* Network type. One of the CELL_INFO_TYPE_* constants.
*/
@ -57,204 +59,207 @@ interface nsICellInfo : nsISupports
readonly attribute long long timestamp;
};
[scriptable, uuid(6345967c-61fc-45a1-8362-39e9261df052)]
[scriptable, uuid(cc476ded-350f-4c25-9a57-6a876e32f092)]
interface nsIGsmCellInfo : nsICellInfo
{
/**
* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown.
* 3-digit Mobile Country Code, 0..999, UNKNOWN_VALUE if unknown.
*/
readonly attribute long mcc;
/**
* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown.
* 2 or 3-digit Mobile Network Code, 0..999, UNKNOWN_VALUE if unknown.
*/
readonly attribute long mnc;
/**
* 16-bit Location Area Code, 0..65535, INT_MAX if unknown.
* 16-bit Location Area Code, 0..65535, UNKNOWN_VALUE if unknown.
*/
readonly attribute long lac;
/**
* 16-bit GSM Cell Identity described in TS 27.007, 0..65535, INT_MAX if unknown.
* 16-bit GSM Cell Identity described in TS 27.007, 0..65535,
* UNKNOWN_VALUE if unknown.
*/
readonly attribute long cid;
/**
* Valid values are 0-31 as defined in TS 27.007 8.5, 99 if unknown.
* Valid values are 0-31 as defined in TS 27.007 8.5, UNKNOWN_VALUE if unknown.
*/
readonly attribute long signalStrength;
/**
* Bit error rate 0-7 as defined in TS 27.007 8.5, 99 if unknown.
* Bit error rate 0-7 as defined in TS 27.007 8.5, UNKNOWN_VALUE if unknown.
*/
readonly attribute long bitErrorRate;
};
[scriptable, uuid(19693f98-943d-45e7-a3e8-25373228ce6b)]
[scriptable, uuid(aa52647b-38dd-487c-be36-b46ed2e99554)]
interface nsIWcdmaCellInfo : nsICellInfo
{
/**
* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown.
* 2 or 3-digit Mobile Network Code, 0..999, UNKNOWN_VALUE if unknown.
*/
readonly attribute long mcc;
/**
* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown.
* 2 or 3-digit Mobile Network Code, 0..999, UNKNOWN_VALUE if unknown.
*/
readonly attribute long mnc;
/**
* 16-bit Location Area Code, 0..65535, INT_MAX if unknown.
* 16-bit Location Area Code, 0..65535, UNKNOWN_VALUE if unknown.
*/
readonly attribute long lac;
/**
* 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455,
* INT_MAX if unknown.
* UNKNOWN_VALUE if unknown.
*/
readonly attribute long cid;
/**
* 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511,
* INT_MAX if unknown.
* UNKNOWN_VALUE if unknown.
*/
readonly attribute long psc;
/**
* Valid values are 0-31 as defined in TS 27.007 8.5, 99 if unknown.
* Valid values are 0-31 as defined in TS 27.007 8.5, UNKNOWN_VALUE if unknown.
*/
readonly attribute long signalStrength;
/**
* Bit error rate 0-7 as defined in TS 27.007 8.5, 99 if unknown.
* Bit error rate 0-7 as defined in TS 27.007 8.5, UNKNOWN_VALUE if unknown.
*/
readonly attribute long bitErrorRate;
};
[scriptable, uuid(76b4a35d-7e45-42bc-a2e0-bc07a6434db3)]
[scriptable, uuid(60a38ca7-ca62-4384-aa07-eac7d4893786)]
interface nsICdmaCellInfo : nsICellInfo
{
/**
* Network Id, 0..65535, INT_MAX if unknown.
* Network Id, 0..65535, UNKNOWN_VALUE if unknown.
*/
readonly attribute long networkId;
/**
* CDMA System Id, 0..32767, INT_MAX if unknown.
* CDMA System Id, 0..32767, UNKNOWN_VALUE if unknown.
*/
readonly attribute long systemId;
/**
* Base Station Id, 0..65535, INT_MAX if unknown.
* Base Station Id, 0..65535, UNKNOWN_VALUE if unknown.
*/
readonly attribute long baseStationId;
/**
* Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
* It is represented in units of 0.25 seconds and ranges from -2592000 to
* 2592000, INT_MAX if unknown.
* 2592000, UNKNOWN_VALUE if unknown.
*/
readonly attribute long longitude;
/**
* Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0.
* It is represented in units of 0.25 seconds and ranges from -1296000 to
* 1296000, INT_MAX if unknown.
* 1296000, UNKNOWN_VALUE if unknown.
*/
readonly attribute long latitude;
/**
* Valid values are positive integers, INT_MAX if unknown. This value is the
* actual RSSI value multiplied by -1.
* Valid values are positive integers, UNKNOWN_VALUE if unknown. This value is
* the actual RSSI value multiplied by -1.
*/
readonly attribute long cdmaDbm;
/**
* Valid values are positive integers, INT_MAX if unknown. This value is the
* actual Ec/Io multiplied by -10. -1 if unknown.
* Valid values are positive integers, UNKNOWN_VALUE if unknown. This value is
* the actual Ec/Io multiplied by -10.
*/
readonly attribute long cdmaEcio;
/**
* Valid values are positive integers, INT_MAX if unknown. This value is the
* actual Evdo RSSI value multiplied by -1.
* Valid values are positive integers, UNKNOWN_VALUE if unknown. This value is
* the actual Evdo RSSI value multiplied by -1.
*/
readonly attribute long evdoDbm;
/**
* Valid values are positive integers, INT_MAX if unknown. This value is the
* actual Evdo Ec/Io multiplied by -10.
* Valid values are positive integers, UNKNOWN_VALUE if unknown. This value is
* the actual Evdo Ec/Io multiplied by -10.
*/
readonly attribute long evdoEcio;
/**
* Valid values are 0-8, INT_MAX if unknown. 8 is the highest signal to noise
* ratio.
* Valid values are 0-8, UNKNOWN_VALUE if unknown. 8 is the highest signal to
* noise ratio.
*/
readonly attribute long evdoSnr;
};
[scriptable, uuid(122937d9-1ee5-45e0-a360-5959d578bc31)]
[scriptable, uuid(e7b3e826-bb85-49b2-a2f1-70af46c47733)]
interface nsILteCellInfo : nsICellInfo
{
/**
* 3-digit Mobile Country Code, 0..999, INT_MAX if unknown.
* 3-digit Mobile Country Code, 0..999, UNKNOWN_VALUE if unknown.
*/
readonly attribute long mcc;
/**
* 2 or 3-digit Mobile Network Code, 0..999, INT_MAX if unknown.
* 2 or 3-digit Mobile Network Code, 0..999, UNKNOWN_VALUE if unknown.
*/
readonly attribute long mnc;
/**
* 28-bit Cell Identity, 0..268435455, INT_MAX if unknown.
* 28-bit Cell Identity, 0..268435455, UNKNOWN_VALUE if unknown.
*/
readonly attribute long cid;
/**
* Physical cell id, 0..503, INT_MAX if unknown.
* Physical cell id, 0..503, UNKNOWN_VALUE if unknown.
*/
readonly attribute long pcid;
/**
* 16-bit tracking area code, 0..65535, INT_MAX if unknown.
* 16-bit tracking area code, 0..65535, UNKNOWN_VALUE if unknown.
*/
readonly attribute long tac;
/**
* Valid values are 0-31 as defined in TS 27.007 8.5, 99 if unknown.
* Valid values are 0-31 as defined in TS 27.007 8.5, UNKNOWN_VALUE if unknown.
*/
readonly attribute long signalStrength;
/**
* The current Reference Signal Receive Power in dBm multipled by -1.
* Range: 44 to 140 dBm, INT_MAX if unknown.
* Range: 44 to 140 dBm, UNKNOWN_VALUE if unknown.
*/
readonly attribute long rsrp;
/**
* The current Reference Signal Receive Quality in dB multiplied by -1.
* Range: 3 to 20 dB, INT_MAX if unknown.
* Range: 3 to 20 dB, UNKNOWN_VALUE if unknown.
*/
readonly attribute long rsrq;
/**
* The current reference signal signal-to-noise ratio in 0.1 dB units.
* Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB), INT_MAX if unknown.
* Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB), UNKNOWN_VALUE if
* unknown.
*/
readonly attribute long rssnr;
/**
* The current Channel Quality Indicator. Range: 0 to 15, INT_MAX if unknown.
* The current Channel Quality Indicator. Range: 0 to 15, UNKNOWN_VALUE if
* unknown.
*/
readonly attribute long cqi;
/**
* Timing advance in micro seconds for a one way trip from cell to device.
* Approximate distance can be calculated using 300m/us * timingAdvance.
* Range: 0 to 0x7FFFFFFE, INT_MAX if unknown.
* Range: 0 to 0x7FFFFFFE, UNKNOWN_VALUE if unknown.
*/
readonly attribute long timingAdvance;
};

View File

@ -36,15 +36,15 @@ interface nsINeighboringCellInfo: nsISupports
* Mobile Location Area Code (LAC) for GSM networks.
*
* Possible ranges from 0x0000 to 0xffff.
* -1 if the LAC is unknown.
* nsICellInfo.UNKNOWN_VALUE if the LAC is unknown.
*/
readonly attribute long gsmLocationAreaCode;
/**
* Mobile Cell ID for GSM networks.
*
* Possible ranges from 0x00000000 to 0xffffffff.
* -1 if the cell id is unknown.
* Possible ranges from 0x0000 to 0xffff.
* nsICellInfo.UNKNOWN_VALUE if the cell id is unknown.
*/
readonly attribute long long gsmCellId;
@ -52,7 +52,7 @@ interface nsINeighboringCellInfo: nsISupports
* Primary Scrambling Code (PSC) for WCDMA networks.
*
* Possible ranges from 0x0000 to 0x01ff.
* -1 if the psc is unknown.
* nsICellInfo.UNKNOWN_VALUE if the psc is unknown.
*/
readonly attribute long wcdmaPsc;
@ -61,7 +61,7 @@ interface nsINeighboringCellInfo: nsISupports
* For WCDMA networks, signalStrength is the CPICH Received Signal Code Power,
* ranging from -120 to -25.
*
* 99 if signalStrength is unknown.
* nsICellInfo.UNKNOWN_VALUE if signalStrength is unknown.
*/
readonly attribute long signalStrength;
};