Redes de Área Local e Interconexión de Redes Práctica 5 Control PC de un móvil mediante comandos Hayes (AT+) 1.- Introducción El auge de los últimos años en la telefonía celular permite que hoy en día cualquier usuario pueda comunicarse y conectar con Internet desde prácticamente cualquier punto de nuestra geografía. Los móviles actuales (2.5G, 3G) no solo dan servicio de telefonía, son también agendas, reproductores multimedia, cámara de fotos… y permiten el acceso a Internet a velocidades hasta hace poco reservadas a líneas ADSL. Una utilidad de los móviles actuales poco conocida es la posibilidad que tienen de ser utilizados como módem. Pueden ser usados para transmitir datos de un PC a Internet o a otro móvil utilizando la red celular. Los móviles GSM (denominados de segunda generación o 2G) funcionan como módems de 9.6 Kbps. Una velocidad lenta para los requerimientos actuales, pero suficiente para mandar “pequeños mensajes de texto” o SMS (Small Message System). Más actuales, los móviles 2.5G (GPRS) pueden funcionar como módems de 40Kbps de bajada y 9.6Kbps de subida de datos y los móviles 3G (UMTS) pueden funcionar como módems de hasta 2Mbps en condiciones ideales de funcionamiento. 1 Los profesores agradecen la colaboración de Vicente Sancho Guijarro en la realización de la práctica. Redes de Área Local e Interconexión de Redes – DISCA - UPV 2.- Objetivos de la práctica La práctica tiene por objetivo el control módem de un móvil desde un ordenador personal mediante comandos Hayes. Estos comandos pueden ser enviados al móvil desde el PC mediante un cable, conexión IrDA o mediante enlace inalámbrico BlueTooth. Utilizaremos esta última opción. Como ejercicio práctico se propone configurar un PC al que se le conecta un sensor/alarma por la puerta paralelo y un móvil (modem) por la puerta BlueTooth. Hay que desarrollar un programa que detecte si salta la alarma del sensor y entonces mandar un SMS a través del módem. Atención: La realización de esta práctica requiere el uso de un teléfono móvil. Para algunos ejercicios, no todos, se requiere que el móvil pueda acceder a la red celular (para hacer una llamada, para mandar un SMS, etc.). Estos accesos a la red celular, algunos al menos, tienen un coste económico que DEBE SER ASUMIDO POR EL ALUMNO propietario del móvil. Dado que el laboratorio de redes no proporciona móviles con acceso a la red celular, el alumno es libre de decidir si quiere o no hacer los ejercicios propuestos. Una alternativa razonable, si no se quiere asumir ningún coste económico por error de programación, es utilizar el móvil habiéndole quitado el módulo SIM del operador telefónico (no todos los teléfonos móviles son operativos cuando se les quita el SIM). 2 Redes de Área Local e Interconexión de Redes – DISCA - UPV 3.- Conexión PC-móvil y verificación 1. Arranque Windows XP e instale el adaptador BlueTooth en el PC. XP indicará “Nuevo Hardware encontrado… listo para utilizarse”. 2. Active el BlueTooth en el móvil y seleccione la opción “Teléfono visible”. 3. En el PC; Inicio Æ Configuración Æ Panel de Control Æ Dispositivos BlueTooth. En la pestaña “Dispositivos” pulsar agregar. El PC iniciará un escaneado para ver cuales dispositivos están en sus inmediaciones. Esto puede llevar un par de minutos. Seleccione <su móvil> y pulse siguiente. 4. El asistente para agregar dispositivos BlueTooth le preguntará si quiere/debe utilizar una clave de paso para poder vincular el dispositivo al PC. Utilice una clave de paso. Puede usar la opción “Deseo elegir mi propia clave”. Utilice una clave de al menos 8 dígitos y no utilice secuencias triviales como “12345678”. Tenga en cuenta que en el laboratorio sus compañeros hacen la misma práctica. 5. El móvil le pedirá que introduzca la clave de paso para la vinculación con el PC. Tiene un tiempo limitado para meter la clave (unos 30 segundos). Si todo va bien, el móvil se vincula al PC y este le informa de los puertos serie (COM) asignados al móvil. 3 Redes de Área Local e Interconexión de Redes – DISCA - UPV No todos los móviles tienen la capacidad de actuar como “modem estándar con vínculo BlueTooth”, que es en nuestro caso el servicio requerido. Y tampoco todos los móviles, aunque den el servicio de “modem estándar”, aceptan todos los comandos Hayes. 6. Para ver si nuestro móvil tiene propiedades de módem: Inicio Æ Configuración Æ Panel de Control Æ Opciones de teléfono y módem. Vamos a la pestaña de Modem. Podemos ver si aparece listado nuestro modem y a que puerta está vinculado. Pulsando en el botón Propiedades y seleccionando la pestaña Diagnóstico podemos pulsar el botón Consultar módem. Esto manda una secuencia de comandos al módem e informa al usuario si los comandos son soportados por el modem. 7. Para verificar la conexión PC-módem utilizaremos el hyperterminal de Windows. Inicio Æ Programas Æ Accesorios Æ Comunicaciones Æ Hyperterminal. Este programa se limita a sacar por la puerta serie lo que tecleemos. Debemos indicar como puerta serie la COMxx de salida asignada al móvil. (ver punto 5). También podemos seleccionar Módem estándar con vínculo BlueTooth del menú desplegable. (ver imagen). 4 Redes de Área Local e Interconexión de Redes – DISCA - UPV 8. Teclee “AT” (sin comillas) y pulse <intro>. El modem debe contestar OK. Puede ser que al pulsar sobre el teclado no tenga eco en la pantalla. Pruebe a teclear “ATE1” <intro> . El modem volverá a contestar OK y activará el “modo ECHO-on”. A partir de ahora podrá ver en la pantalla lo que va tecleando. Si tiene problemas con la comunicación con el móvil a través de esa puerta serie, puede probar alguna de estas opciones: a. Intente utilizar el otro puerto COM que se asignó a su móvil. Inténtelo también con “modem estándar con vinculo BlueTooth” b. En Archivo Æ Propiedades vaya al menú desplegable en Conectarse usando y seleccione “Modem estándar con vínculo BlueTooth”. En la misma ventana de diálogo, pulse el botón Configurar… y seleccione como velocidad del puerto 9600 bit/seg. Vuelva a configurar como puerto serie el COM saliente. Intente ahora el comando AT c. Si el hyperterminal se cuelga en alguna de las pruebas, es muy probable que la puerta COM se quede bloqueada. Re-arranque Windows. 5 Redes de Área Local e Interconexión de Redes – DISCA - UPV 4.- Comandos Hayes La mayoría de los módems (tanto telefónicos como celulares) se controlan y responden a caracteres enviados a través del puerto serie. El lenguaje de comandos para módem más extendido es de los comandos Hayes. Todos los comandos Hayes empiezan con la secuencia AT. La excepción es el comando A/. Tecleando A/ se repite el último comando introducido. El código AT consigue la atención del módem. Lo que venga a continuación es el comando que el modem debe ejecutar. Por ejemplo, los comandos: AT+CGMI AT+CGSN AT+CIMI Identity) Pide al móvil que identifique el fabricante Pide al móvil el número de serie Pide al móvil el IMSI (International Mobile Subscriber (no es el IMEI, el IMEI puede obtenerlo tecleando en el móvil *#06#) Ejercicio-1 Pruebe los comandos anteriores tecleándolos en el hyperterminal. Pruebe, además, los comandos: AT+CSQ - Devuelve el estado de calidad de la señal de cobertura. - Sintaxis: AT+CSQ | +CSQ: <rssi>,<ber> <rssi> = 0 indica -113 dBm o menos = 1 indica -111 dBm = 2..30 indica -109..-53 dBm = 31 indica -51dBm o más = 99 indica desconocido <ber> = 99 indica porcentaje desconocido - Respuesta: +CSQ: 13,99 AT+CBC - Devuelve el estado de carga de la batería. - Sintaxis: AT+CBC | +CBC: <bcs>, <bcl> <bcs> = 0 indica que el teléfono está conectado a una batería. <bcl> = 0 indica que el teléfono tiene la batería agotada. = 1..100 indica el porcentaje de carga que aún queda por agotar. - Respuesta: +CBC:0,56 AT+CPBR=<indice inicial> [,<indice final>] - Leer una entrada de la agenda de contactos. - Sintaxis: AT+CPBR=<indice inicial> [,<indice final>] | +CPBR: <índice>, <número>, <tipo>, <texto> <índice> indica el índice de la agenda de contactos. 6 Redes de Área Local e Interconexión de Redes – DISCA - UPV <número> indica el número de teléfono almacenado en el índice. <tipo> indica el tipo de tipo de número de teléfono. Por defecto, 129 o 145 si incluye el prefijo internacional +. <text> indica el texto asociado al número de teléfono, normalmente, el nombre del contacto. - Respuesta a AT+CPBR=8: +CPBR: 8,"646123456",129,"Gospel" Ejercicio-2 Atención: El comando a continuación hará que el móvil realice una llamada telefónica. Si no se descuelga el terminal llamado, este ejercicio no supondrá coste económico alguno. En cualquier caso es responsabilidad del propietario del móvil realizar o no este ejercicio. Para el ejercicio se requiere que el móvil esté conectado a una red celular (por lo tanto, debe tener el SIM instalado) ATD<numero> - Inicia una llamada telefónica al número indicado. - Sintaxis: ATD123456789 para una llamada de Datos. ATD123456789; para una llamada de Voz. (Importante la notación ';') ATD>"Pepe"; para llamar al contacto almacenado en la agenda con el texto asociado Pepe. Ejercicio-3 Atención. Los comandos a continuación harán que el móvil mande un SMS. El envío de SMSs no es gratuito. El coste depende del operador de telefonía celular. (Coste típico 0,15€). Es responsabilidad del propietario del móvil realizar o no este ejercicio. No todos los móviles aceptan estos comandos. Este ejercicio está probado en un Nokia 6600 y debería funcionar bien al menos en móviles de este fabricante. Con Siemens (modelo SL-55) el ejercicio no funcionó. AT+CMGF=1 {modo texto} AT+CMGS="<num. Teléfono>" {incluya las comillas} > escriba el texto del SMS y termine con <CTRL-Z> 7 Redes de Área Local e Interconexión de Redes – DISCA - UPV 5.- Ejemplo de aplicación práctica Todas las librerías, programas, y código fuente para la realización de este ejercicio se encuentran en la web de la asignatura. El objetivo es desarrollar una aplicación que compruebe el estado de un pin concreto del puerto paralelo de un equipo informático. Cuando este pin se ponga a alto nivel deberá mandar un comando por Bluetooth a un teléfono móvil para que éste realice una llamada. La solución a este problema podría servir, por ejemplo, para implementar un sistema de alarma, en el cual un sensor estuviera conectado al puerto paralelo y pusiera un pin del puerto paralelo a alto nivel cuando éste se activara. Al activarse el sensor, el teléfono móvil conectado por Bluetooth al ordenador podría llamar a un número, o bien, mandar un mensaje (SMS) al número que le indiquemos para avisarnos de la activación del sensor. La aplicación LPT1XP Para simular el sensor y hacerlo más cómodo de activar, se ha utilizado una aplicación en la cual podemos modificar el estado de los pines de nuestro puerto paralelo sin necesidad de manipularlo físicamente o de conectar algún periférico a él. Dicha aplicación se llama LPT1XP y tiene licencia freeware, la cual está descrita en el fichero Licencia.txt que acompaña a la aplicación. Está escrita en Visual Basic y viene acompañada por su código fuente. Para el desarrollo de esta aplicación se ha usado la librería la librería io.dll, que es la misma que se usará en la aplicación a desarrollar, por lo que nos puede servir de ejemplo del uso de esta librería en otro lenguaje de programación como es Visual Basic. 8 Redes de Área Local e Interconexión de Redes – DISCA - UPV Pantalla principal de LPT1XP Como muestra la figura, podemos ver el estado de los puertos que componen el puerto paralelo. Los marcados en verde se corresponden con el puerto de entrada de datos. Podemos cambiar el estado de dichos pines simplemente pulsando sobre ellos. En la barra de botones nos aparecen tres botones. El primero de ellos, el del círculo rojo con un aspa roja en su interior, sirve para cerrar el programa. Con el botón de en medio podemos cambiar la visión del puerto paralelo, pudiendo conmutar entre la visión del conector hembra y la del conector macho. En la barra de estado nos aparece cual estamos viendo actualmente. Por último, si pulsamos el botón de la interrogación nos aparecerá ayuda sobre el funcionamiento del puerto paralelo mostrándonos su funcionamiento interno, así como los nombres que se le da a cada uno de los pines. Explicación de la solución Para la implementación de la solución se ha optado por usar el lenguaje C usando para ello la plataforma MS Visual C++ 6.0. Los ficheros de código adjuntados son los siguientes: • io.h / io.cpp Se trata de una librería usada para la comunicación con los puertos paralelos y serie desde Windows. En este caso se ha usado únicamente para la comunicación con el puerto paralelo. Para el correcto funcionamiento de la librería, el fichero io.dll debe ubicarse en el directorio C:\Windows\System\ ó bien en la misma carpeta que el ejecutable. Se requieren permisos de administrador para la primera ejecución de esta librería. • serial.h / serial.cpp Con la ayuda de esta librería se ha accedido al puerto serie virtual (BlueTooth serializado) que está enlazado al teléfono móvil de una manera fácil. Esta librería puede ser usada tanto desde Windows como desde Linux. • StdAfx.h / StdAfx.cpp 9 Redes de Área Local e Interconexión de Redes – DISCA - UPV Esta librería es requerida por io.h y es utilizada durante el precompilado. • Principal.cpp Este fichero contiene el código de la aplicación que a continuación pasaremos a comentar. Para empezar, se han cargado las librerías necesarias. Las dos primeras ya se han comentado antes y nos dan la interfaz necesaria para poder comunicarnos con los puertos serie y paralelo de nuestro equipo. La libraría stdio.h es la estándar de entrada/salida y la usamos principalmente para poder mostrar mensajes por pantalla (printf). #include "io.h" #include "serial.h" #include <stdio.h> Seguidamente definimos las constantes que usaremos. La primera se corresponde con la dirección base del puerto paralelo, la cual suele ser 0x378. La segunda constante es el nombre del puerto virtual creado para la comunicación Bluetooth. En este caso el puerto era el COM4, pero se deberá cambiar al nombre del puerto asociado al móvil en cada caso, el cual será de la forma COMx. #define PORTADDRESS 0x378 #define PUERTOBT "COM4" Ya dentro de la función main, nos disponemos a abrir la comunicación con el puerto paralelo. Para ello llamamos a LoadIODLL(), la cual simplemente carga la librería io.dll, y a isDriverInstalled(), la cual comprueba que el controlador (driver) del puerto paralelo está instalado para que podamos acceder correctamente a él. Si estas dos funciones fallaran, devolverían un 0, por lo que se nos devolvería un error por pantalla y saldría del programa. if(LoadIODLL() == 0 && IsDriverInstalled() == 0) { printf("\n**ERROR** No se ha podido inicializar el driver."); getchar(); exit(1); } Si todo ha ido bien, ya podemos leer del puerto paralelo. Para ello usamos la función GetPortBit, la cual recibe como parámetros la dirección base del puerto (PORTADDRESS) y el número de bit de entrada a leer, devolviendo el valor de dicho bit. Devolverá 0 si está activo y -1 si no lo está. En este caso hemos puesto que compruebe el primer bit de entrada (D0). Nótese que esta comprobación se ejecuta continuamente, ya que está dentro de un bucle, el cual sólo ejecuta esa comprobación. Cuando se active el bit saldrá del bucle y seguirá avanzando en el código. printf("Esperando a que se active la entrada 1 del puerto paralelo..."); while(GetPortBit(PORTADDRESS,0) == 0); printf("\nPuerto 0 *ACTIVO*\n"); Una vez ha llegado la activación del bit que interesa, se tiene que abrir el puerto serie dedicado a la conexión Bluetooth y mandar el comando AT 10 Redes de Área Local e Interconexión de Redes – DISCA - UPV correspondiente. Para abrir el puerto se ha creado un objeto de tipo CSerial, cuya clase está definida en serial.h. En el constructor de dicha clase hay que pasarle dos argumentos. El primero es el nombre del puerto, el cual lo hemos definido en la constante PUERTOBT, y la velocidad del puerto. Al ser una conexión Bluetooth, le podemos poner una velocidad de 115200 bps (B115200). Una vez abierto el puerto, se llama al método Write del objeto que acabamos de crear pasándole como argumento la cadena a mandar. En este caso mandamos el comando ATD123; que se encarga de llamar al número 123. De esta forma el móvil se pondrá a llamar al número 123. printf("\nLlamando..."); CSerial puerto = CSerial(PUERTOBT,B115200); puerto.Write("\nATD123;\r"); Para probar el programa deberemos arrancar primero la aplicación LPT1XP y desactivar todas las entradas del puerto paralelo (D0-D7) ya que por defecto aparecen activadas. Una vez hecho esto ya podemos ejecutar el código explicado. Éste se quedara a la espera de que activemos la entrada D0. Para activarla pinchamos sobre ella (2ª de la fila superior empezando por la derecha) en el programa LPT1XP. Una vez activa observamos que nuestro programa ha salido del bucle y está mandando el comando AT al móvil. 11 Redes de Área Local e Interconexión de Redes – DISCA - UPV Apéndice-A: Comandos Hayes de Nokia NOKIA GSM AT COMMAND SET Call Control ATA ATD ATH ATL ATM ATO ATP ATT AT+CSTA AT+CRC Answer Command Dial Command Hang Up Call Monitor Speaker Loudness Monitor Speaker Mode Go On-Line Set Pulse Dial as Default Set Tone Dial as Default Select Type of Address Cellular Result Codes Data Card Control Commands ATI ATS ATZ AT&F AT&V AT&W AT&Y AT+CLCK AT+COLP AT+GCAP AT+GMI AT+GMM AT+GMR AT+GSN Identification Select an S-register Recall Stored Profile Restore Factory Settings View Active Configuration Store Parameters in Given Profile Select Set as s Powerup Option Facility Lock Command Connected Line Identification Presentation Request Complete Capabilities List Request Manufacturer Identification Request Model Identification Request Revision Identification Request Product Serial Number Identification Phone Control Commands AT+CBC AT+CGMI AT+CGMM AT+CGMR AT+CGSN AT+CMEE AT+CPAS AT+CPBF AT+CPBR AT+CPBS AT+CPBW AT+CSCS AT+CSQ Battery Charge Request Manufacturer Identification Request Model Identification Request Revision Identification Request Product Serial Number Identification Report Mobile Equipment Error Phone Activity Status Find Phone Book Entries Read Phone Book Entry Select Phone Book Memory Storage Write Phone Book Entry Select TE Character Set Signal Quality Computer Data Card Interface Commands ATE ATQ ATV ATX AT&C AT&D Command Echo Result Code Suppression Define Response Format Response Range Selection Define DCD Usage Define DTR Usage 12 Redes de Área Local e Interconexión de Redes – DISCA - UPV AT&K AT&Q AT&S AT+ICF AT+IFC AT+IPR Select Flow Control Define Communications Mode Option Define DSR Option DTE-DCE Character Framing DTE-DCE Local Flow Control Fixed DTE Rate Service AT+CLIP AT+CR AT+DR AT+ILRR Calling Line Identification Presentation Service Reporting Control Data Compression Reporting DTE-DCE Local Rate Reporting Network Communication Parameter Commands ATB AT+CBST AT+CEER AT+CRLP AT+DS Communications Standard Option Select Bearer Service Type Extended Error Report Radio Link Protocol Data Compression Miscellaneous Commands A/ Re-Execute Command Line AT? Command Help AT*C Start SMS Interpreter AT*T Enter SMS Block Mode Protocol AT*V Activate V.25bis Mode AT*NOKIATEST Test Command AT+CESP Enter SMS Block Mode Protocol SMS Commands SMS Text Mode AT+CSMS AT+CPMS AT+CMGF AT+CSCA AT+CSMP AT+CSDH AT+CSCB AT+CSAS AT+CRES AT+CNMI AT+CMGL AT+CMGR AT+CMGS AT+CMSS AT+CMGW AT+CMGD Select Message Service Preferred Message Storage Message Format Service Centre Address Set Text Mode Parameters Show Text Mode Parameters Select Cell Broadcast Message Types Save Settings Restore Settings New Message Indications to TE List Messages Read Message Send Message Send Message from Storage Write Message to Memory Delete Message SMS PDU Mode AT+CMGL AT+CMGR AT+CMGS AT+CMGW List Messages Read Message Send Message Write Message to Memory 13 Redes de Área Local e Interconexión de Redes – DISCA - UPV Apéndice B: Capacidad de mandar/recibir SMS con comandos AT+ 14 Redes de Área Local e Interconexión de Redes – DISCA - UPV Apéndice C: Referencias • http://www.activexperts.com/files/activsms/manual.htm#CHAP_GSMOUT SMS and Pager Toolkit by ActiveXperts Software para añadir capacidades de manejo de SMS a aplicaciones VBasic.NET, C#.NET, Visual C++, ASP.NET, PHP, Java,… • http://foro.elhacker.net/index.php?topic=161120.0 Comandos AT para Nokia 8310. Algunos son específicos de este móvil y sólo funcionan en él, pero la mayoría son genéricos y funcionan en la mayoría de los móviles con BlueTooth. • http://www.solocodigo.com/index.php?opt=viewitem&id=339&type=1&n ode=27 Programa LPT1XP 15