According to the Android developer documentation, NeighboringCellInfo.getRssi()
is specified as follows:
received signal strength or UNKNOWN_RSSI if unknown For GSM, it is in "asu" ranging from 0 to 31 (dBm = -113 + 2*asu) 0 means "-113 dBm or less" and 31 means "-51 dBm or greater" For UMTS, it is the Level index of CPICH RSCP defined in TS 25.125
Some research revealed that this is probably a typo and should in fact refer to TS 25.133 section 9.1.1.3 (http://www.3gpp.org/DynaReport/25133.htm). Version 10.2.0 of that document essentially states that CPICH_RSCP_LEV_-04
corresponds to -120 dBm <= CPICH RSCP < -119 dBm
and so on, thus the signal level in dBm is obtained by subtracting 116 from the reported level.
The reporting range is from -120 to -25 dBm, which corresponds to levels -5 to +91.
However, in practice I notice that the values returned are way outside that range. I am seeing getRssi()
returning values around -100. I suspect that the function is not returning levels as specified in the document, but dBm.
Has anyone else come across this and can confirm that Android indeed returns dBm rather than a signal level? Or is this an issue with the device used in the tests (a OnePlus One running Cyanogenmod 11 m11 – the community version, not the stock Cyanogenmod 11S with which the phone ships)?