Emulador AT

 

El Emulador AT se puede usar para emular el conjunto de comandos AT, también conocido como conjunto de comandos Hayes, y el conjunto de comandos AT de GSM (refiérase a ETSI GSM 07.07 y 3GPP TS 27.007). Los comandos AT se usan típicamente para interactuar con teléfonos, modem y otros dispositivos de comunicación. La mayoría de los modem GSM/3G/LTE/5G soportan comandos AT por medio de una interfaz de puerto serial, por ejemplo: RS232 o USB. A veces, la interfaz AT se implementa sobre TCP o telnet.

Interfaz AT

El Emulador AT puede ser útil para probar diferentes aplicaciones de comunicación, las cuales requieren de un modem físico. Si no se dispone de un modem físico esta herramienta podría emularlo. Puede utilizar el emulador sin riesgo de afectar un dispositivo real. Por lo tanto, el emulador también puede ser una herramienta de pruebas para los comandos AT.

Estas interfaces son soportadas por el emulador: consola y opcionalmente TCP o telnet. La interfaz de consola se puede usar directamente al ejecutar el emulador en la línea de comandos. Para configurar la interfaz de TCP o telnet se debe especificar el puerto TCP dentro del script que ejecuta el emulador. Un emulador de terminal como telnet en Linux/Unix o PuTTY en Windows puede ser usado para conectar con el puerto TCP.

La interfaz TCP tiene un tiempo de espera máximo de 1 minuto. Por lo tanto, se debe ingresar un comando AT al menos cada minuto para mantener activa la conexión. La interfaz de consola no tiene tiempo máximo de espera.

La conexión TCP finaliza al recibir la secuencia de escape Hayes +++ o la secuencia +++AT conocida como TIES (por la sigla en inglés time independent escape sequence) o al superar el tiempo máximo de espera.

El Emulador AT utiliza los siguientes identificadores:

  • IMEI 00100000000123 (Dispositivo de pruebas, según GSMA)
  • IMSI 999999012345678 (Valor reservado para uso interno)
  • ICCID 8999999012345678 (Valor reservado para uso interno)

 

Descomprimir y ejecutar

Simplemente descomprima el Emulador AT en cualquier ubicación:

Contenido del Emulador AT

Se requiere Java 1.5 o posterior. Se recomienda configurar la variable de entorno JRE_HOME o JAVA_HOME apuntando a la ubicación donde se encuentra instalado Java.

En Windows se ejecuta AT.bat para iniciar el emulador. En Linux/Unix se ejecuta AT.sh para iniciar el emulador. Ctrl+C detiene el emulador.

Para configurar la interfaz TCP se debe editar AT.bat o AT.sh y modificar los siguientes parámetros:

  • AT_PORT
  • AT_WORKERS
  • AT_MAXCONN

Únicamente el parámetro AT_PORT es mandatorio. Los parámetros AT_WORKERS y AT_MAXCONN son opcionales y se pueden usar para limitar el número de conexiones TCP simultáneas.

 

Consola y TCP/Telnet

El siguiente ejemplo configura la interfaz AT para reportar resultados detallados, consulta el nombre del proveedor y modelo del modem; luego modifica algunos registros "S" y vuelve a leer dichos valores:

ATV1
ATQ
ATI4
ATS10=255
ATS11=99
ATS10?
ATS11?

Refiérase al conjunto de comandos Hayes para consultar la descripción de los comandos AT y los registros "S".

Es posible combinar múltiples comandos AT en la misma línea, lo cual se conoce como concatenación de comandos AT. Los comandos se deben separar por punto y coma ";" y el prefijo "AT" debe ser omitido para cada comando subsiguiente. El ejemplo anterior se puede transformar en una secuencia concatenada como sigue:

ATV1;Q;I4;S10=255;S11=99;S10?;S11?

Nota: Algunos modem no soportan concatenación de comandos AT o restringen los comandos AT que pueden ser concatenados o limitan el número de estos comandos.

El siguiente ejemplo utiliza los comandos AT de GSM/3G para verificar el nivel de señal, consultar el estado del modem, validar si la línea se encuentra registrada en la red y enviar un SMS de texto:

AT+CSQ
AT&V
AT+CREG?
AT+CMGF=1
AT+CMGS="+1234567"
>Esto es un mensaje de prueba^Z

Según ETSI GSM 07.07 o 3GPP TS 27.007 es mandatorio utilizar Ctrl+Z para marcar el fin del mensaje SMS. Sin embargo, si se utiliza la interfaz de consola para ingresar los comandos AT, la secuencia Ctrl+Z puede generar conflictos. En Unix/Linux Ctrl+Z envía la sesión activa de consola a segundo plano. Se puede ingresar "set +m" antes de ejecutar AT.sh para evitar este comportamiento.

La secuencia Ctrl+Z no produce una transmisión inmediata por medio de la consola. En Windows se debe pulsar Enter luego de Ctrl+Z y en Linux se debe pulsar Ctrl+D luego de Ctrl+Z.

 

Puerto COM Virtual

También es posible acceder al Emulador AT por medio de un puerto COM virtual. En Linux se puede usar socat:

socat pty,link=/dev/virtualcom0,raw tcp:127.0.0.1:2001

Si el Emulador AT escucha en el puerto 2001, entonces los comandos AT podrán ser ingresados por medio del puerto COM virtual /dev/virtualcom0.

También existe una solución gratuita para Windows: com0com.

Puerto COM virtual

Supongamos que los puertos COM virtuales instalados por defecto por com0com son COM18 y COM19:

command> list
       CNCA0 PortName=-
       CNCB0 PortName=-
       CNCA1 PortName=COM#,RealPortName=COM18
       CNCB1 PortName=COM#,RealPortName=COM19

Configuremos AT_PORT con el valor 2001 dentro de AT.bat e iniciemos el Emulador AT. En este caso podemos ejecutar com2tcp apuntando al puerto COM18 como sigue:

com2tcp \\.\COM18 127.0.0.1 2001

Luego de eso la interfaz AT quedará disponible en el puerto COM19. Podrá acceder por medio de PuTTY, Hyper Terminal u otros programas similares.

 

Códigos Fuente Públicos

GitHubLos códigos fuente del Emulador AT están disponibles en nuestro repositorio público en GitHub. Siéntase libre de modificar y recompilar los fuentes. Es permitido cualquier uso, incluyendo el comercial.