Comandos AT

1. Introducción.

Los comandos AT son instrucciones codificadas que conforman un lenguaje de comunicación entre el hombre y un terminal modem.
En un principio, el juego de comandos AT fue desarrollado en 1977 por Dennis Hayes como un interfaz de comunicación con un modem para así poder configurarlo y proporcionarle instrucciones, tales como marcar un número de teléfono. Más adelante, con el avance del baudio, fueron las compañías Microcomm y US Robotics las que siguieron desarrollando y expandiendo el juego de comandos hasta universalizarlo.
Los comandos AT se denominan así por la abreviatura de attention .

Aunque la finalidad principal de los comandos AT es la comunicación con modems, la telefonía móvil GSM también ha adoptado como estandar este lenguaje para poder comunicarse con sus terminales. De esta forma, todos los teléfonos móviles GSM poseen un juego de comandos AT específico que sirve de interfaz para configurar y proporcionar instrucciones a los terminales. Este juego de instrucciones puede encontrarse en la documentación técnica de los terminales GSM y permite acciones tales como realizar llamadas de datos o de voz, leer y escribir en la agenda de contactos y enviar mensajes SMS, además de muchas otras opciones de configuración del terminal.

Queda claro que la implementación de los comandos AT corre a cuenta del dispositivo GSM y no depende del canal de comunicación a través del cual estos comandos sean enviados, ya sea cable de serie, canal Infrarrojos, Bluetooth, etc. De esta forma, es posible distinguir distintos teléfonos móviles del mercado que permiten la ejecución total del juego de comandos AT o sólo parcialmente. Por ejemplo, Nokia 6820 no permite la ejecución de comandos AT relativos al manejo de la memoria de agenda de contactos y llamadas pero sí que permite acceder al servicio SMS; Nokia 6600 (basado en Symbian) no permite la ejecución de comandos AT relativos a la gestión de la agenda ni de SMSs.

1.1. Notación de los comandos AT

El envío de comandos AT requiere la siguiente estructura:

· Petición:


<CR> … Carriage return

· Respuesta correcta:


<CR> … Carriage return
<LF> … Line feed

· Respuesta incorrecta:


<CR> … Carriage return
<LF> … Line feed

1.2. El juego de comandos AT específico para telefonía móvil GSM

Puedes encontrar una referencia simplificada del juego de comandos AT en http://www.activexperts.com/activsms/atcommands/nokia/

Todos los comandos AT han sido testeados con éxito utilizando un Nokia 8310.

Notación empleada:
Comando AT: [Definición técnica]
– Funcionalidad del comando
– Sintaxis: Petición | Respuesta
– Respuesta obtenida al testear el comando con Nokia 8310

## Comandos de Llamada ##

ATD: [Dial Command]
– Inicia una llamada telefónica
– Sintaxis:  ATD64612345 para una llamada de Datos.
ATD64612345; para una llamada de Voz. (Importante la notación ‘;’)
ATD>»Gospel»; para llamar al contacto almacenado en la agenda con el texto asociado Gospel.

## Comandos de Operador ##

AT+CCFC: [Call Forwarding Number]
– Gestiona el Desvío de Llamadas. Permite redireccionar llamadas entrantes a otro número de teléfono.
– Sintaxis: AT+CCFC=<razón>,<modo>,<número>,<tipo>,<clase>,[<subaddr>,<satype>,[<time>]]
<razón> Razón por la cual entra en acción el desvío de llamada.
0 – incondicional
1 – si teléfono ocupado
2 – si no obtiene respuesta
3 – si inalcanzable
4 – todos los desvíos de llamadas
5 – todos los desvíos de llamadas condicionales
<modo> Estado del desvío de llamada.
0 – desahabilitado
1 – habilitado
2 – query status
3 – registro
4 – erasure (borrado)
<número> Cadena de texto con el número de teléfono destino del desvío de llamada. Se especifica en el formato indicado en el campo <type>
<tipo> Tipo de código de dirección de teléfono:
145 – para código internacional +
129 – en otro caso
<clase> Código que representa la clase de información que contiene la llamada a desviar.
1 – voz
2 – datos
4 – fax
7 – cualquier clase (por defecto)
<time> Tiempo en segundos a esperar antes de desviar la llamada.
1..30 (por defecto, 20)
<status> Estado de la opción desvío de llamadas. (Sólo en respuesta AT)
0 – no activo
1 – activo
– Ejemplo: Implementación del comando en Blooover: «AT+CCFC=0,3,»+4913377001″,145,7r»
Vemos que utiliza los siguientes parámetros:
<razón> = 0, incondicional
<modo> = 3, registro
<número> = +4913377001
<tipo> = 145, formato de código internacional
<clase> = 7, cualquier clase de información a desviar

## Comandos de Control del Teléfono ##

AT+CPAS: [Phone Activity Status]

1) AT+CPAS=?
– Muestra la implementación del comando.
– Sintaxis: AT+CPAS=? | +CPAS: (lista de estados soportados)
0 – Ready (Encendido pero inactivo)
1 – Unavailable (No disponible)
2 – Unknown (Desconocido)
3 – Ringing (Llamada entrante en proceso)
4 – Call in progress (Llamada saliente en proceso)
5 – Asleep (Dormido)
– Respuesta: +CMGD: (0,2,3,4)

2) AT+CPAS
– Informa del estado de actividad del teléfono.
– Sintaxis: AT+CPAS | +CPAS: <estado>
– Respuesta: +CPAS: 0, en estado normal de inactividad.
+CPAS: 3, si el teléfono atacado está sonando a causa de una llamada entrante.

AT+CBC: [Battery Charge]
– 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+CGMI: [Request Manufacturer Identification]
– Petición de identificación del Fabricante (Marca del teléfono).
– Sintaxis: AT+CGMM | <fabricante>
– Respuesta: Nokia Mobile Phones

AT+CGMM: [Request Model Identification]
– Petición de identificación del modelo de teléfono.
– Sintaxis: AT+CGMM | <modelo>
– Respuesta: Nokia 8310

AT+CGSN: [Request Product Serial Number Identification]
– Petición de identicación del número de serie del producto.
– Sintaxis: AT+CGSN | <IMEI>
– Respuesta: 1234567890etc

AT+CSQ: [Signal Quality]
– 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+CPBS: [Select Phone Book Memory Storage]

1) AT+CPBS?
– Informa de los dispositivos de memoria que soporta el teléfono para almacenar las distintas listas de contactos.
– Sintaxis: AT+CPBS? | +CPBS: «XX», donde «XX» se sustituye por el dispositivo de almacenamiento:
«SM»  – SIM phonebook list [Lista de contactos de la agenda SIM]
«TA»  – TA phonebook list [Lista de contactos del terminal]
«LD»  – SIM last dialing list [Lista de números marcados]
«DC»  – Dialled call list [Lista de llamadas realizadas]
«RC»  – ME received calls list [Lista de llamadas recibidas]
«MC»  – ME missed call list [Lista de llamadas perdidas]
«EN»  – Emergency number list [Lista de números de emergencia]
«FD»  – SIM fix dialing list
«MT»  – ME + SIM conbined list
«ON»  – SIM o ME own number list
– Respuesta: +CPBS: «SM»

2) AT+CPBS=»XX»
– Selecciona por defecto uno de los dispositivos de memoria que soporta el teléfono para almacenar las distintas listas de contactos.
– Sintaxis: AT+CPBS=»XX», donde «XX» se sustituye por el dispositivo de almacenamiento:
«SM»  – SIM phonebook list [Lista de contactos de la agenda SIM]
«TA»  – TA phonebook list [Lista de contactos del terminal]
«LD»  – SIM last dialing list [Lista de números marcados]
«DC»  – Dialled call list [Lista de llamadas realizadas]
«RC»  – ME received calls list [Lista de llamadas recibidas]
«MC»  – ME missed call list [Lista de llamadas perdidas]
«EN»  – Emergency number list [Lista de números de emergencia]
«FD»  – SIM fix dialing list
«MT»  – ME + SIM conbined list
«ON»  – SIM o ME own number list

AT+CPBR: [Read Phone Book Entry]

1) AT+CPBR=?
– Informa del tamaño de la agenda de contactos.
– Sintaxis: AT+CPBR=? | +CPBR: <(1-n)>,<nlen>,<tlen>
<(1-n)> indica el rango de índices que la agenda puede contener.
<nlen> indica la longitud máxima permitida para un número de teléfono.
<tlen> indica la longitud máxima permitida para el texto asociado a ese número (nombre del contacto).
– Respuesta: +CPBR: (1-150),48,14

2) AT+CPBR=<indice>
– 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.
<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»

Nota: Para leer todas las entradas de la agenda, basta con preguntar por el tamaño de la agenda, almacenarlo en una variable int PhoneBookSize y lanzar un bucle FOR preguntando por cada índice:
for (int n = 1; n <= PhoneBookSize; n++)
{
Enviar(«AT+CPBR=%d», n);
}

Combinación de AT+CPBS;+CPBR [Leer una entrada de una lista de contactos seleccionada]
– Primero elegimos la lista de contactos a la que queremos acceder, y luego leemos una entrada por su índice.
Sintaxis: AT+CPBS=»XX»;+CPBR=<índice>, donde «XX» se sustituye por el dispositivo de almacenamiento:
«SM»  – SIM phonebook list [Lista de contactos de la agenda SIM]
«TA»  – TA phonebook list [Lista de contactos del terminal]
«LD»  – SIM last dialing list [Lista de números marcados]
«DC»  – Dialled call list [Lista de llamadas realizadas]
«RC»  – ME received calls list [Lista de llamadas recibidas]
«MC»  – ME missed call list [Lista de llamadas perdidas]
«EN»  – Emergency number list [Lista de números de emergencia]
«FD»  – SIM fix dialing list
«MT»  – ME + SIM conbined list
«ON»  – SIM o ME own number list
– Ejemplo de Respuesta a AT+CPBS=»DC»;+CPBR=2: +CPBR: 1,»646123456″,129,»Pepito» (Visualizamos el último contacto al que hemos llamado).
AT+CPBS=»MC»;+CPBR=1: +CPBR: 1,»646987654″,129,»Jaimito» (Visualizamos la última llamada perdida).

AT+CPBF: [Find Phone Book Entries]
– Devuelve la entrada de la agenda de contactos cuyo texto asociado a un número contiene la cadena alfanumérica proporcionada.
– Sintaxis: AT+CPBF=»textoaencontrar» | +CPBR: <índice>, <número>, <tipo>, <texto>
«textoaencontrar» es case-sensitive, así que cuidado con el uso de mays.
<índice> indica el índice de la agenda de contactos.
<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+CPBF=»Pepito»: +CPBF: 19, «646987654»,129,»Pepito»

AT+CPBW: [Write Phone Book Entry]
– Escribe una entrada en la agenda de contactos.
– Sintaxis:    AT+CPBW = <índice>, <número>, <tipo>, <texto>
<índice> indica el índice de la agenda de contactos donde se creará la entrada de contacto. Si no se proporciona índice, se añade la entrada en el primer hueco libre.
<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.
Nota: Si únicamente se proporciona el campo del índice (omitiendo el resto de campos), la entrada de la agenda asociada a ese índice se borrará.
– Ejemplo para crear un nuevo contacto: AT+CPBW=,»696224466″,129,»Jaimito»

## Comandos de SMS ##

[Próximamente…]

2.  Aplicaciones prácticas de los comandos AT.

Normalmente, es posible conectarse a un teléfono móvil GSM a través de un cable de serie o infrarrojos, y establecer una sesión de comandos AT.

Como se puede observar en la siguiente captura, establecemos comunicación con el teléfono móvil y enviamos por consola los comandos AT. Para cada comando AT, el teléfono móvil nos responde con el resultado de la ejecución del comando y con un OK.

Fuente: http://bluehack.elhacker.net/proyectos/comandosat/comandosat.html

Una respuesta a “Comandos AT”

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *