Yo y mis juguetes 3G
Es verdad, hay que confesarlo. Tengo un problema con los aparatos… No puedo estar quieto con ellos.
Hace menos de un mes acabó cayendo en mis manos un lector de tinta electrónica Sony PRS.900. El aparato en sí está bastante bien. Una pantalla de 7′, pantalla táctil (aunque admito todo tipo de críticas acerca de los reflejos que produce) e incluso 3G que permanece el 99,999% del tiempo desactivado porque no sirve para nada excepto para comprar libros en la tienda online de Sony. Para más INRI, el aparato es “Sold in USA”, por lo que el 3G sólo funciona en el país yankee.
Para hablar acerca de editoriales, libros, precios, gobiernos o de por qué hay bestsellers en Amazon Reino Unido que cuestan un 40% lo que cuestan en la Fnac, ya hay otras páginas. Yo he venido aquí a hablar de mi libro… o sea, de mi problema… o sea, de dejar quieto un aparato sin meterle la zarpa, actualización, firmware, flash, update o una sarta de bits que le provoquen convulsiones y deje de funcionar como debía.
Desde el principio el tema que más me picó fue el tema del 3G. Tener un aparato que funciona al 99% está bien, pero saber que nunca vas a poder usar ese 1% es terrible. Eso sí, conseguir que funcione ese 1% aunque jamás necesites utilizarlo es la bomba. Por tanto, había que conseguir que funcionase el 3G.
Como primer paso, busqué lo que había disponible sobre el aparato. Encontré unos firmwares de unos rusos muy listos (o desesperados) que habían traducido el interfaz a la lengua de las muñecas Matroskas. Genial, la parte dificil estaba hecha. Más si habían metido fuentes cirílicas. Para lo que me interesaba: la gente ya sabía “flashear” un dispositivo de estos.
El Sony PRS-900 contiene un sistema Linux (LinuxLink) de TimeSys. El sistema contiene un sistema de ficheros de tipo cramfs y con algunos pequeños tutoriales, es razonablemente sencillo cambiarlo. El mayor problema es que para flashearlo es necesario un equipo con windows (hay que hacer llamadas a una DLL de windows para entrar en modo recovery).
Pim Pam Pum, lector flasheado. Si había funcionado la primera vez con un firmware ruso, la siguiente podía funcionar con un firmware Made in Spain. Así, descomprimí la imagen cramfs y me puse a mirarle las tripas al aparato. Por dentro del directorio /opt/sony/ebook/application… se encuentra la mayor parte del software que ve el usuario. Parece una aplicación bastante flexible, que supongo que será la piedra angular de Sony para sus lectores. Muy probablemente, un sólo software podrán utilizarlo para el PRS-300, PRS-500, PRS-505, etc ya que afecta a todo el dispositivo; desde el cambio de hora, hasta las características soportadas por el dispositivo, pasando por la configuración del APN del 3G (uhmmm
).
Me propuse cambiar ese valor para “esquivar” el APN que tienen en consorcio Sony y AT&T en Estados Unidos, y lo cambié por el de movistar (junto con una SIM). Además, quité la configuración del proxy que también estaba presente, ya que parece que la tienda que muestra el PRS-900 es a través de un navegador web reducido.
Hechos los cambios, nueva imagen, y a flashear. Fracaso total. El lector no conectaba y lloraba pidiendo que le quitase esa SIM del infierno.
Los rusos listos también habían encontrado el modo de pruebas de hardware del equipo. Gracias a una pequeña combinación de botones, se puede acceder a todo un menu interno del aparato para probar pantalla, calibrarla, y/o acceder a otra información o configuraciones. Lo mejor de todo es que algunas de las opciones mostraban un volcado de los registros del aparato. Click. Volcado a la SD. A investigar…
En los logs del sistema (nada parecido a un log Unix), aparecen 3 tipos de archivos. Los que están en formato binario puro (ya si eso les voy pidiendo el manual a Sony…), los que traducen el formato binario a un formato legible, aunque mediante códigos (o llamo a un egiptólogo para que me lo descifre por asociaciones), y por último, los que muestran esos códigos traducidos a cosas más humanas.
Como ejemplo:
0, Wed 31 Dec 1969 19:00:08, 883687, CM, Call API, Create Instance, 0, 0, 0
1, Wed 31 Dec 1969 19:00:09, 36165, log, start, 0, 0, 0, 0
2, Wed 31 Dec 1969 19:00:09, 43897, pm, stateChangeLockReq, Run, 0, 0, 0
3, Wed 31 Dec 1969 19:00:09, 69969, pm, doStateChange, Off, Run, 0, 0
4, Wed 31 Dec 1969 19:00:09, 70066, pm, deviceStateChange, Start, Run, 0, 0
5, Wed 31 Dec 1969 19:00:09, 71506, pm, deviceStateChange, Finish, Run, 0, 0
6, Sat 10 Jan 2009 03:30:36, 116727, subCPU, send, system, bootFinish, 0, 0
7, Sat 10 Jan 2009 03:30:36, 124550, subCPU, send, key, onOff, 822083584, 0
8, Sat 10 Jan 2009 03:30:36, 134396, subCPU, send, touchpanel, onOff, 822083584, 0
9, Sat 10 Jan 2009 03:30:36, 144468, subCPU, send, touchpanel, sampling, 50331648, 0
10, Sat 10 Jan 2009 03:30:36, 154418, subCPU, send, touchpanel, breaktime, 16777216, 0
11, Sat 10 Jan 2009 03:30:36, 164455, subCPU, send, LED, LED, 0, 0
12, Sat 10 Jan 2009 03:30:36, 174444, subCPU, send, battery, queryLevel, 0, 0
Bastante aceptable…
Ahora era cuestión de investigar qué narices estaba pasando con el módulo 3G
CM, Received UR, [*EMRDY: 1]
CM, State, Radio Off, 0, 0, 0
CM, Sent ATCom, ATE0, OK, 0, 0
CM, Sent ATCom, AT+CMEE=1, OK, 0, 0
CM, Sent ATCom, AT+CPIN?, OK, 0, 0
CM, Info, Sleep Mode, Can Sleep, 0, 0
WAN, getInfo, 0, 0, 0, 0
WAN, stateChange, partialOn, 2, 2, 8
CM, Sent ATCom, AT+CGSN, OK, 0, 0
CM, Call API, Get Info, 0, 0, 0
WAN, getInfo, 0, 0, 0, 0
WAN, lock, 1, 0, 0, 0
CM, Sent ATCom, AT+CRSM=176,12258,0,0,10, OK, 0, 0
WAN, unlock, 0, 0, 0, 0
WAN, lock, 1, 0, 0, 0
Call API, Stop, 0, 0, 0
WAN, stop, 0, 0, 0, 0
WAN, stateChange, waitStop, 2, 2, 7
CM, Sent ATCom, AT+CFUN=0, OK, 0, 0
A grosso modo, lo que se ve es que el dispositivo despierta (*EMRDY: 1), oculta el eco local (ATE0), activa los errores numéricos del módulo (AT+CMEE=1) y consulta si necesita PIN (como lo tenía desactivado, todo sin problemas). Después, solicita el número de serie del aparato (normalmente se hace para mostrarlo en algún menú para información del usuario), y llega a un punto en el que lee de forma binaria la SIM, haciendo:
AT+CRSM=176,12258,0,0,10
comando que lee el número de identificación de la SIM (ICCID). Tras esta lectura (teoricamente fructuosa), se ve mucho “Stop” y un AT+CFUN=0 que acaba apagando el módulo de telefonía.
Hasta este punto, es común tanto para la SIM de Movistar como para la de AT&T.
Si seguimos indagando, parece que con la SIM de AT&T, el módulo ya no sigue progresando. Recibe notificaciones para intentar despertarse de nuevo y seguir conectando, pero no hay más comandos AT, sino sólo estos intentos en vano. Sin embargo, con la SIM de Movistar, se puede ver:
CM, Received UR, [*EMRDY: 1]
CM, State, Radio Off, 0, 0, 0
CM, Sent ATCom, ATE0, OK, 0, 0
CM, Sent ATCom, AT+CMEE=1, OK, 0, 0
CM, Sent ATCom, AT+CPIN?, OK, 0, 0
CM, Sent ATCom, AT+CREG=1, OK, 0, 0
CM, Sent ATCom, AT+CGREG=1, OK, 0, 0
CM, Sent ATCom, AT*E2CFUN=1, OK, 0, 0
CM, Sent ATCom, AT+CFUN=1, OK, 0, 0
CM, Received UR, [*E2CFUN: 1, 1, 0
CM, State, No Service, 0, 0, 0
CM, Sent ATCom, AT*EIAD=0, OK, 0, 0
CM, Sent ATCom, AT*EIAC=1, OK, 0, 0
CM, Sent ATCom, AT+CSCS=IRA, OK, 0, 0
CM, Sent ATCom, AT*EIAPSW=1,1, OK, 0, 0
CM, Sent ATCom, AT*EIAAUW=1,1, OK, 0, 0
WAN, stateChange, on, 2, 2, 4
CM, Received UR, [*ESTKSMENU: mo
CM, Received UR, [+CREG: 1]
CM, Received UR, [+CGREG: 1]
CM, State, Attached, 0, 0, 0
WAN, notifyState, registered, 0, 0, 0
CM, Received UR, [*EMWI: 1, 0]
CM, Received UR, [+PACSP0]
CM, Sent ATCom, AT*E2OTR=1, OK, 0, 0
CM, Sent ATCom, AT+CIND?, ERROR, 100, 0
CM, Sent ATCom, AT+CIND?, ERROR, 100, 0
CM, Sent ATCom, AT+CIND?, ERROR, 100, 0
CM, Info, Sleep Mode, Can Sleep, 0, 0
CM, Sent ATCom, AT*ERINFO=1, OK, 0, 0
CM, Sent ATCom, AT*ERINFO?, OK, 0, 0
CM, Sent ATCom, AT*E2NAP=1, OK, 0, 0
CM, Sent ATCom, AT*ENAP=1,1, OK, 0, 0
CM, Info, Sleep Mode, Can not Sleep, 0, 0
WAN, notifyState, error, 0, 0, 0
CM, Received UR, [*E2NAP: 2]
CM, Sent ATCom, AT*E2CFUN=1, OK, 0, 0
WAN, stateChange, waitOff, 7, 2, 6
CM, Sent ATCom, AT+CFUN=4, OK, 0, 0
CM, Sent ATCom, AT*E2OTR=0, OK, 0, 0
WAN, unlock, 0, 0, 0, 0
CM, Sent ATCom, AT*ERINFO=0, OK, 0, 0
CM, Received UR, [*E2NAP: 0]
CM, Error, Connection, 0, 0, 0
CM, Received UR, [+CREG: 4]
CM, Received UR, [*E2CFUN: 1, 4, 0
CM, State, Radio Off, 0, 0, 0
CM, Sent ATCom, AT+CFUN=0, OK, 0, 0
CM, Info, Adjust State, Radio Off, 0, 0
CM, State, Module Off, 0, 0, 0
Se puede analizar con calma todos los comandos. Aproximadamente el formato es:
accion,comando,parametros_recibidos
o
accion,comando,respuesta,codigo_de_error
Básicamente, se activan notificaciones, sensores de temperatura, se reinician los contextos de conexión a internet, se crean nuevos (incluso con mis datos cambiados del APN), así todo correcto hasta que se llega al a línea:
CM, Sent ATCom, AT+CIND?, ERROR, 100, 0
La cual quiere decir: AT+CIND Indicator control (ver. 5) – Check the current status of indicators and states in the phone, for example, check if a charger is connected, check the current state for a call setup, and so on. Comprueba ciertos estados internos del teléfono y ¿como respuesta?, da un ERROR. Cagada. Como error CME asociado a esta respuesta el número 100… Miramos la tabla de errores, y ¿qué encontramos? Error 100: Unknown. Doble cagada con tirabuzón.
En resumen, cabe la posibilidad de que el dispositivo esté bloqueado para SIMs de AT&T. Puede que incluso esté bloqueado para que sólo funcione con la SIM que venía con el lector. Puede que se hagan comprobaciones en el software, además de en el módulo de telefonía, para saber si el aparato debe funcionar en España… Al menos hay una cosa a agradecer, el módulo no es CDMA, lo cual sería posible que funcionase en redes GSM europeas (de hecho, eso dice en las hojas de especificación, aunque la página de Sony diga lo contrario). Pero ahora… pueden ser tantas cosas que el siguiente paso es incierto. Una opción podría ser tratar de conseguir un módulo Ericsson F3507G liberado de operadoras, para ver si únicamente está bloqueado. No es una locura, pero tampoco es barato. También se podría intentar colocar otro módulo distinto de otro fabricante, aunque entonces implicaría perder toda la integración del software (y tener que compilar un módulo del kernel como mínimo, o un kernel nuevo)… muy arriesgado.
Quizá también podría estar quietecito por una vez con estos aparatos, pero… entonces no tendría el problema que me ha hecho escribir el post
Referencias: Información sobre el módulo del lector, una pequeña introducción sobre los comandos soportados, Manual de comandos AT GX64 y la lista de comandos AT para teléfonos Sony Ericsson