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.
3.4.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
<LF> ... Line feed
· Respuesta incorrecta:
<CR> ... Carriage return
<LF> ... Line feed
<LF> ... Line feed
3.4.2. El juego de comandos AT específico para telefonía móvil GSM
Código:
GSM AT COMMAND SET
Call Control
ATA Answer Command
ATD Dial Command
ATH Hang Up Call
ATL Monitor Speaker Loudness
ATM Monitor Speaker Mode
ATO Go On-Line
ATP Set Pulse Dial as Default
ATT Set Tone Dial as Default
AT+CSTA Select Type of Address
AT+CRC Cellular Result Codes
Data Card Control Commands
ATI Identification
ATS Select an S-register
ATZ Recall Stored Profile
AT&F Restore Factory Settings
AT&V View Active Configuration
AT&W Store Parameters in Given Profile
AT&Y Select Set as s Powerup Option
AT+CLCK Facility Lock Command
AT+COLP Connected Line Identification Presentation
AT+GCAP Request Complete Capabilities List
AT+GMI Request Manufacturer Identification
AT+GMM Request Model Identification
AT+GMR Request Revision Identification
AT+GSN Request Product Serial Number Identification
Phone Control Commands
AT+CBC Battery Charge
AT+CGMI Request Manufacturer Identification
AT+CGMM Request Model Identification
AT+CGMR Request Revision Identification
AT+CGSN Request Product Serial Number Identification
AT+CMEE Report Mobile Equipment Error
AT+CPAS Phone Activity Status
AT+CPBF Find Phone Book Entries
AT+CPBR Read Phone Book Entry
AT+CPBS Select Phone Book Memory Storage
AT+CPBW Write Phone Book Entry
AT+CSCS Select TE Character Set
AT+CSQ Signal Quality
Computer Data Card Interface Commands
ATE Command Echo
ATQ Result Code Suppression
ATV Define Response Format
ATX Response Range Selection
AT&C Define DCD Usage
AT&D Define DTR Usage
AT&K Select Flow Control
AT&Q Define Communications Mode Option
AT&S Define DSR Option
AT+ICF DTE-DCE Character Framing
AT+IFC DTE-DCE Local Flow Control
AT+IPR Fixed DTE Rate
ServiceAT+CLIP Calling Line Identification Presentation
AT+CR Service Reporting Control
AT+DR Data Compression Reporting
AT+ILRR DTE-DCE Local Rate Reporting
Network Communication Parameter Commands
ATB Communications Standard Option
AT+CBST Select Bearer Service Type
AT+CEER Extended Error Report
AT+CRLP Radio Link Protocol
AT+DS 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 Select Message Service
AT+CPMS Preferred Message Storage
AT+CMGF Message Format
AT+CSCA Service Centre Address
AT+CSMP Set Text Mode Parameters
AT+CSDH Show Text Mode Parameters
AT+CSCB Select Cell Broadcast Message Types
AT+CSAS Save Settings
AT+CRES Restore Settings
AT+CNMI New Message Indications to TE
AT+CMGL List Messages
AT+CMGR Read Message
AT+CMGS Send Message
AT+CMSS Send Message from Storage
AT+CMGW Write Message to Memory
AT+CMGD Delete Message
SMS PDU Mode
AT+CMGL List Messages
AT+CMGR Read Message
AT+CMGS Send Message
AT+CMGW Write Message to Memory
3.4.3. Documentación de los comandos AT más interesantes
Todos los comandos 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,7\r"
Vemos que utiliza los siguientes parámetros:
<razón> = 0, incondicional
<modo> = 3, registro
<número> = +4913377001 (German Windows XP Activation Hotline)
<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...]
3.4.4. Documentación técnica
http://us.share.geocities.com/unrayodesoul/bluehack/AT_Command_Set_For_Nokia_GSM_And_WCDMA_Products_v1_1_en.pdf
http://us.share.geocities.com/unrayodesoul/bluehack/AT_Command_Set_For_Nokia_GSM_Products.pdf
3.5. Aplicaciones prácticas de los comandos AT
3.5.1 Interacción 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.
3.5.2 Aplicación práctica de intercambio de comandos AT por Infrarrojos con un teléfono móvil
Para ilustrar el siguiente ejemplo, vamos a presentar un proyecto de Daniel Strigl @ codeproject.com. Se trata de una herramienta que permite la comunicación por Infrarrojos entre un PC/Pocket PC y un teléfono móvil.
Infrared Communication with your Mobile Phone by Daniel Strigl
http://codeproject.com/ce/irdamobile.asp
El programa implementa mediante comandos AT las siguientes operaciones:
- Obtener el fabricante del móvil: AT+CGMI
- Obtener el modelo del móvil: AT+CGMM
- Obtener la lista de contactos de la agenda:
Varios comandos AT:
· AT+CPBS="SM" //Selecciona el dispositivo de almacenamiento
· AT+CPBR=? //Obtiene el tamaño de la agenda y lo guarda en int nPhoneBookSize
· for (int n = 1; n <= nPhoneBookSize; n++)
{
AT+CPBR=n //Obtiene el contacto de índice n
}
En la página oficial del proyecto podéis encontrar tanto el desarrollo para PC (Windows) como para Pocket PC ARM(Windows Mobile). Para poder descargarse tanto los fuentes como los binarios es necesario estar registrado (gratuitamente) en www.codeproject.com
3.5.1.1. El diseño de la aplicación.
La aplicación consta de los siguientes campos:
3.5.1.2. La aplicación en acción.
Los pasos para ejecutar la aplicación son:
1) Activar la comunicación IrD en el teléfono móvil.
2) Alinear los puertos infrarrojos de la Pocket PC y del teléfono móvil.
3) Seleccionar el puerto de transmisión. En nuestro caso, deberíamos seleccionar el puerto COM3, que es el especificado para comunicaciones IrD en Pocket PC.
4) Pulsar Read... para que comience la comunicación.
5) Al momento, la aplicación irá recibiendo la marca y modelo del teléfono móvil, así como los contactos de la agenda uno por uno.