Conversando con varios Ingenieros que usaban aplicativos existentes gratuitos para revisión o visualización de Interfaz Aire de Sistemas Móviles, me comunicaron su incomodidad o discomfort sobre varios aplicativos, ya que en muchos casos mostraban números mal calculados o no había un switching correcto de información de Mobility Managament al momento de analizar LAC, CID e identificadores de Estaciones… y mi comentario final fue que si es que no van a adquirir una solución profesional… deberían desarrollar sus propias herramientas en las cuales puedan confiar… su propio aplicativo.
Leyendo y viendo tutoriales fue que me aventuré a desarrollar mi propio aplicativo de Modo Ingeniería, Scanner Android. Scanner Android 1.5 es un aplicativo que usa listeners definidos y métodos sobreescritos con hilos que hacen pooling a diferentes variables que cambian en tiempo real, como la potencia recibido, la recepción de vecinos, el tipo de Red (UMTS que cambia a HSPA+), el modo Conectado o Idle, etc. Hasta esta versión 1.5 revisa parámetros en 3G y 4G, y muy básicos de 2G.
Y así, sumergiéndome en el Android Studio (IDE) empecé a estudiar Android Telephony, como quién lo hace por hobby. Android Telephony es un paquete que aparece desde el API level 1 (Application Programming Interface) y que viene siendo actualizado hasta hoy con el fin de poder obtener variables de la interfaz aire, así como datos relevantes usados en Mobility Management, Radio Resource, identificación de usuario e información genérica de la red. Con equipos target con Android 4.3 o 4.4; se pueden utilizar clases y métodos soportados hasta el API 18 o 19.
Fue imposible, y sería imposible desarrollar algo así sin recordar los prinicipios de Programación Orientada a Objetos, polimorfismo, herencia, ect, etc, por lo que agradezco a los profesores Henry Del Aguila y Enrique Larios, las lecciones que volvieron a mi mente casi 10 años después de haberlas llevado… Fue una apasionante aventura de semana y media, aprender a hacer un app.
Descripción del Aplicativo:
Scanner Android 1.5 despliega en pantalla los parámetros leídos de acuerdo a la red.
Adicionalmente cuenta con una opción en un menú desplegable para cambiar la configuración de la Red Móvil de Android y regresar al aplicativo sin la necesidad de salir.
Algunos Hallazgos en mi camino:
– Los teléfonos Samsung no son los mejores amigos al desarrollar una aplicativo que obtiene información de los dispositivos. Los métodos definían mensajes y valores de error específicos (99 = Not found) que aparecían constantemente. Varios desarrolladores han tenido problemas con Samsung Galaxy S1, S2 y S5, en donde la potencia y la lista de vecinos no es accesible.
– Algunas variables importantes no están definidas. El Ec/Io, por ejemplo para 3G, no cuenta con un método propio. Ensayé en base a teoría un algoritmo para calcularlo, pero debido a que se cuentan solo con los CPICHs de los PSCs vecinos, calculé el RSCP Ec/Io, número que probado con el Ec/Io propio es muy similar, pero que llega a 0 en algunos casos en lectura de vecinos. Si bien no es exacto, es un válida referencia (creo)
– Hacer un lector profesional de 2G es aún más complicado. Las variables de Layer 1 son muy low level y no son hasta ahora accesibles por el API. No se puede saber cual es el TimeSlot Asignado, ni si el Frequency Hopping está activo, ni cual es la TRX, o el BCCHs. Por eso es que aplicativos existentes como NetMonitor y GNet-Tracker sólo muestran en 2G el CID y los vecinos.
– Los parámetros de 4G LTE se muestran en modo string todos juntos, por lo hay que crear un método formateador de substrings para tener todos los parámetros en variable separadas operables… No lo hice… me faltó tiempo… quizás lo termine más adelante, así que la vista de 4G no es muy elegante, pero muestra la información necesaria.
– La intensidad de la Lista de vecinos llegan en dBm para 3G y en nivel ASU para 2G. Para convertir de ASU a dBM debe duplicarse y restarle 113 (int potenciaendBm = asulevel*2-113;) El aplicativo Netmonitor aplica la fórmula para todas las redes, por lo que se pueden apreciar potencias erradas de -220 dBm.
– La SIM de Movistar no retorna el valor del MSISDN… no se por qué.. en todo caso deberían bloquear el IMSI, pero ese si lo envían.
Finalmente, en la última revisión del app, traté de colocar todos los try{} y catch{} necesarios, aún así ante cambio brusco de red, puede generarse una excepción que detenga el aplicativo, aún así este es inofensivo al sistema operativo como tal.
Scanner Android 1.5
Requerimiento: Android 4.3
Descarguenlo y pruébenlo AQUÍ
ACTUALIZACION 04/03/2015:
Lanzo aquí la versión 1.6, que cuenta con valores depurados para 4G LTE, unidades, y las mejoras sugeridas. Gracias a todos por su feedback.
– Es importante notar que no existen métodos para tomar los valores limpios, estos deben crearse apartir del .toString de CellSignalStrenghtLte
– La versión 1.6 cuenta con las unidades de todos los valores para correcta referencia. Encontre que algunos aplicativos existentes solo desplegan el valor sin colocar las unidades lo que puede llevar a malas interpretaciones o creer que se muestran valores errados.
– RSSI Referencial se calcula como la diferencia entre RSRP y RSRQ, considerando N=1 (bloques de referencia). Gracias a Edgar Velarde por la ayuda al entender esta diferencia.
– El app ya no gira, esta diseñado para modo “portrait”.
Scanner Android 1.6
Requerimiento: Android 4.3
Descarguenlo y pruébenlo AQUÍ
Saludos y espero su feedback!
ACTUALIZACION 18/03/2015:
Lanzo aquí la primera versión comercial del App. Scanner Android es Ahora Mobile TrackAIR y está disponible en Google Play.
Mobile TRackAIR 1.1 (a.k.a Scanner Android 2.0)
Requerimiento: Android 4.3
Descarguenlo y pruébenlo AQUÍ
Hola David.Me gusta tu programa. Andaba buscando uno que midiera el ec/io, pues lo necesito para mi trabajo(comunicaciones) . Yo uso el programa mobileUncle tools en Android. Que para procesadores MTK da un monton de datos de la señal 3g (entre otras cosas). Tambien marca el ec/io (RSCP-RSSI). Las comunicaciones con un ecio por debajo de -11 db no son válidas. Hay variaciones entre el ecio que marca tu app y la de mobileuncle. Lo he probado con varios mobiles android y rooteados. Mi duda es la siguiente: tu haces la medida de una forma indirecta con las celdas vecinas. No se como lo medirá el mobileUncle, ya que con geteciocdma del TelephonyManager no lo mide. Sabrias tu indicarme como lo puede medir este programa.
Enhobuena por tu trabajo.
Hola Tasio, muchas gracias por tus comentarios. Efectivamente el Ec/Io no es exacto, ya que se requerirían todas potencias vecinas y acceder todo el tiempo al Rake reciever… cosa para la cuál no hay un método. Yo calculé el “RSCP Ec/Io”, número que probado con el Ec/Io es muy similar, pero que llega a 0 en algunos casos en lectura de vecinos. Si bien no es exacto, es un válida referencia (creo). Lo que hago básicamente es sacar la potencia de todas las celdas vecinas detectadas en un determinado punto en el tiempo, ya que por teoría al estar en la misma gran portadora de 5Mhz todas se interfieren y hago una fórmula logaritimica del Carrier (la señal del propio móvil) contra todos los interferentes (incuyendose la potencia de la misma celda). Este es el número que muestro. Basicamente uso un arreglo, luego lo corro y sumo para obtener subtotales y luego convierto para que se muestre. Quizás este procesador que mencionas muestre otros valores, pero si es android java me sorprende porque hasta donde yo sé no existen esos métodos hasta la release actual… ¿será codigo propietario propio de mobileuncle? En teoria, habria que entrar hasta la potencia de la señal misma, así que o hace eso con una simulación y asumiendo cosas o lo mide directamente sabiendo a que registros de la memoria de Android entrar. Definitivamente la información debe estar (o los componentes para calcularse) sólo habría que saber a dónde entrar. Como mencione para 4G, la data está pero no necesiariamente formateada, bonita, y obtenible por un método get. Para mediciones profesionales, sugiero vayas con Nemo Handy u otros aplicativos 100% propietarios. Saludos y gracias por comentar!