开发者

UTRAN Cell Identity returned by getCid()

开发者 https://www.devze.com 2023-03-31 11:56 出处:网络
In UMTS I get a large number returned by getCid() (larger than the allowed value). Is this the UTRAN Cell开发者_开发技巧 Identity (UC-ID)?

In UMTS I get a large number returned by getCid() (larger than the allowed value). Is this the UTRAN Cell开发者_开发技巧 Identity (UC-ID)?

UC-Id = RNC-Id + C-Id

Does someone knows that? How to get the C-Id from the UC-Id?

Thanks and Best, Benny


The RNC id is the first 2 bytes of the 4 byte Cell Id (3GPP 25.401, section 6.1.5), if the network type is UMTS/HSxPA/HSPA+."
I have access to an operator network and I checked in the system and it's true and correct.
Based on that please see my code how you can easily get RNCID + CID:
Convert CID to ByteArray:

    public static byte[] convertByteArray__p(int p_int){
    byte[] l_byte_array = new byte[4];
    int MASK_c = 0xFF;
    for (short i=0; i<=3; i++){
        l_byte_array[i] = (byte) ((p_int >> (8*i)) & MASK_c);
    }
    return l_byte_array;
} 


Get the RNCID and CID:

    public int getRNCID_or_CID__p(byte[] p_bytes, short p_which){
    int MASK_c = 0xFF;
    int l_result = 0;   
    if (p_which == Constants.CID_C) {
        l_result = p_bytes[0] & MASK_c ;
        l_result = l_result + ((p_bytes[1] & MASK_c ) << 8);
    } else if (p_which == Constants.RNCID_C){
        l_result = p_bytes[2] & MASK_c ;
        l_result = l_result + ((p_bytes[3] & MASK_c ) << 8);
    } else { 
        g_FileHandler.putLog__p('E', "getRNCID_or_CID__p invalid parameter");
    }
    return l_result;     
}


Than you can easily call like this:

        byte[] l_byte_array = new byte[4];
        l_byte_array = convertByteArray__p(l_cid);
        int l_RNC_ID   = getRNCID_or_CID__p(l_byte_array,Constants.RNCID_C);
        int l_real_CID = getRNCID_or_CID__p(l_byte_array,Constants.CID_C);


Constants RNCID_C(1) and CID_C(2) are only contants just for me to seperate which parameter will be passed through.


If CID is > 65536, it's not actually the cell-ID, but a linear combination of the real cell-ID and RNC-ID:

UTRAN_CELL_ID = RNCID x 65536 + CellID

To extract the cellID, use the modulo operation:

CellID = UTRAN_CELL_ID % 65536

To extract the RNCID, get the integer part:

RNCID = UTRAN_CELL_ID / 65536


try (cell id % 65536) it worked for me.


This is more simple than this. Cell ID is in the low register of the value getCid() returns, the RNC is the high register of this value (http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html#getCid()). So:

getCid() == RNC << 16 | CID

CID = getCid() & 0xffff

RNC = (getCid() >> 16) & 0xffff

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号