2011-08-30 10 views
5

En UMTS obtengo un número grande devuelto por getCid() (mayor que el valor permitido). ¿Es esta la identidad de celda UTRAN (UC-ID)?UTRAN Identidad de celda devuelta por getCid()

UC-Id = RNC-Id + C-Id 

¿Alguien sabe eso? ¿Cómo obtener el C-Id desde el UC-Id?

Gracias y, Benny

+1

Creo que nadie está realmente entender el núcleo de su pregunta, por favor ser más específico – barmaley

+2

bien, en GSM getCid() devuelve el CellId de la celda. Hasta donde sé en UMTS, el valor que se recibe incluye el identificador del RNC y el identificador de la celda. Esto significa que el número largo (7-9 dígitos) devuelto por getCid() en una red UMTS contiene ambos, pero solo quiero tener el CellId. Creo que el camino es el siguiente: C-Id = UC-Id% 65536 y RnC-Id = (UC-Id) - (C-Id)/65536.O por qué el valor devuelto en UMTS es un número que es más grande que 65536, que es el valor máximo permitido si la documentación de Android es correcta. – Benny

Respuesta

3

tratan (identificador de celda% 65536) que trabajó para mí.

6

El ID de RNC son los primeros 2 bytes del ID de celda de 4 bytes (3GPP 25.401, sección 6.1.5), si el tipo de red es UMTS/HSxPA/HSPA +. "
Tengo acceso a una red de operador y verificado en el sistema y es verdadera y correcta
sobre la base de que por favor ver mi código de cómo se puede conseguir fácilmente RNCID + CID:.
Convertir CID para 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; 
} 


Obtener el RNCID y 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;  
} 


de lo que puede llamar fácilmente como esto:

 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); 


Constantes RNCID_C (1) y CID_C (2) son sólo contants sólo para mí para separar el parámetro que se pasa a través.

2

Si CID es> 65536, no es en realidad el ID de celda, sino una combinación lineal de la CellID real y RNC-ID:

UTRAN_CELL_ID = RNCID x 65536 + CellID 

para extraer los CellID, utilice la operación de módulo:

CellID = UTRAN_CELL_ID % 65536 

para extraer el RNCID, obtener la parte entera:

RNCID = UTRAN_CELL_ID/65536 
+0

RNCID debe ser igual a (UTRAN_CELL_ID - UTRAN_CELL_ID% 65536)/65536 – vladiz

Cuestiones relacionadas