El conjunto de comandos Hayes (también conocido como conjunto de comandos AT ) es un lenguaje de comandos específico desarrollado originalmente por Dale Heatherington y Dennis Hayes [1] [2] para el Hayes Smartmodem en 1981.
El conjunto de comandos consta de una serie de cadenas de texto cortas que se pueden combinar para generar comandos para operaciones como marcar, colgar y cambiar los parámetros de la conexión. La gran mayoría de los módems de acceso telefónico utilizan el conjunto de comandos Hayes en numerosas variantes.
El conjunto de comandos cubría únicamente aquellas operaciones admitidas por los primerosMódems de 300 bit/s . Cuando se requirieron nuevos comandos para controlar funciones adicionales en módems de mayor velocidad, surgieron una variedad de estándares únicos de cada uno de los principales proveedores. Estos continuaron compartiendo la estructura y sintaxis de comandos básicos, pero agregaron una cantidad ilimitada de comandos nuevos utilizando algún tipo de carácter de prefijo, &
para Hayes y USRobotics , y\
para Microcom , por ejemplo. Muchos de estos se volvieron a estandarizar en las extensiones Hayes después de la introducción del SupraFAXModem 14400 y la consolidación del mercado que siguió.
El término " compatible con Hayes " fue [3] [1] y a partir de 2018 [actualizar]sigue siendo importante dentro de la industria. [4]
Antes de la introducción del sistema de tablón de anuncios (BBS), los módems solían funcionar en líneas telefónicas de marcación directa que empezaban y terminaban con un módem conocido en cada extremo. Los módems funcionaban en modo "originar" o "responder", cambiando manualmente entre dos conjuntos de frecuencias para la transferencia de datos. Por lo general, el usuario que realizaba la llamada cambiaba su módem a "originar" y luego marcaba el número manualmente. Cuando el módem remoto respondía, ya configurado en modo "responder", se apagaba el auricular del teléfono y la comunicación continuaba hasta que la persona que llamaba se desconectaba manualmente.
Cuando se requería automatización, por lo general solo se necesitaba en el lado de respuesta; por ejemplo, un banco podía necesitar recibir llamadas de varias sucursales para procesarlas al final del día. Para cumplir esta función, algunos módems incluían la capacidad de descolgar el teléfono automáticamente cuando estaba en modo de respuesta y de liberar la línea cuando el otro usuario se desconectaba manualmente. La necesidad de marcación saliente automática era considerablemente menos común y se manejaba a través de un dispositivo periférico independiente: un "marcador". Este normalmente se conectaba a un puerto de entrada/salida independiente en la computadora (normalmente un puerto RS-232 ) y se programaba por separado del propio módem.
Este método de funcionamiento funcionó satisfactoriamente en los años 1960 y principios de los 1970, cuando los módems se utilizaban generalmente para conectar dispositivos tontos como terminales de ordenador (marcación saliente) con ordenadores centrales inteligentes (contestación). Sin embargo, la revolución de los microordenadores de los años 1970 condujo a la introducción de módems de bajo coste y la idea de un enlace punto a punto semidedicado ya no era adecuada. Había potencialmente miles de usuarios que podrían querer marcar a cualquiera de los otros miles de usuarios, y la única solución en ese momento era hacer que el usuario marcara manualmente.
La industria informática necesitaba una forma de indicarle al módem qué número marcar mediante software. Los primeros marcadores independientes tenían esta capacidad, pero sólo a costa de un puerto independiente , que un microordenador podría no tener disponible. Otra solución habría sido utilizar un conjunto independiente de "pines de comando" dedicados a enviar y recibir comandos; otra podría haber utilizado un pin de señal que indicara que el módem debería interpretar los datos entrantes como un comando. Ambos tenían soporte de hardware en el estándar RS-232 . Sin embargo, muchas implementaciones del puerto RS-232 en microordenadores eran extremadamente básicas, y algunos eliminaron muchos de estos pines para reducir el coste.
Hayes Communications introdujo una solución en su Smartmodem de 1981 : utilizaba los pines de datos existentes sin realizar ninguna modificación. En su lugar, el módem podía cambiar entre uno de los dos modos siguientes:
Para cambiar del modo de datos al modo de comandos, las sesiones enviaban una cadena de secuencia de escape de tres signos más ( +++
) seguida de una pausa de aproximadamente un segundo. La pausa al final de la secuencia de escape era necesaria para reducir el problema causado por la señalización en banda : si se recibía cualquier otro dato dentro de un segundo de los tres signos más, no era la secuencia de escape y se enviaba como datos. Para volver a cambiar, enviaban el comando en líneaATO
, . En el uso real, muchos de los comandos cambiaban automáticamente al modo en línea después de completarse, y es raro que un usuario use el comando en línea explícitamente.
Para evitar licenciar la patente de Hayes, algunos fabricantes implementaron la secuencia de escape sin el intervalo de guarda de tiempo ( Time Independent Escape Sequence o TIES). Esto tenía una importante implicación de seguridad de denegación de servicio , ya que haría que el módem colgara la conexión si el ordenador alguna vez intentara transmitir la secuencia de bytes +++ATH0
en modo de datos. Para cualquier ordenador conectado a Internet a través de un módem de este tipo, esto podría explotarse fácilmente enviándole una solicitud de ping de muerte+++ATH0
que contuviera la secuencia en la carga útil. El sistema operativo del ordenador intentaría automáticamente responder al remitente con la misma carga útil, desconectándose inmediatamente de Internet, ya que el módem interpretaría la carga útil de datos ICMP como un comando Hayes. [5] El mismo error también se activaría si, por ejemplo, el usuario del ordenador alguna vez intentara enviar un correo electrónico que contuviera la cadena mencionada anteriormente.
El conjunto de comandos Hayes incluye comandos para diversas operaciones de la línea telefónica, como marcar y colgar. También incluye varios controles para configurar el módem, incluido un conjunto de comandos de registro que permitían al usuario configurar directamente las distintas ubicaciones de memoria en el módem Hayes original. El conjunto de comandos fue copiado en gran parte textualmente, incluido el significado de los registros, por casi todos los primeros fabricantes de módems de 300 baudios, de los cuales hubo bastantes.
La expansión a 1200 y 2400 baudios requirió la adición de nuevos comandos, algunos de ellos prefijados con un ampersand ( &
) para denotar aquellos dedicados a una nueva funcionalidad. La propia Hayes se vio obligada a introducir rápidamente un modelo de 2400 baudios poco después de su 1200, y los conjuntos de comandos eran idénticos como un método de ahorro de tiempo. [6] Esencialmente por accidente, esto permitió a los usuarios de los módems de 1200 baudios existentes utilizar los nuevos modelos Hayes 2400 sin cambiar su software. Esto reforzó el uso de las versiones Hayes de estos comandos. Años más tarde, la Asociación de la Industria de las Telecomunicaciones (TIA)/ Alianza de Industrias Electrónicas (EIA) estandarizó formalmente el conjunto de comandos de 2400 baudios como Sistemas y Equipos de Transmisión de Datos - Marcación y Control Automático Asíncrono en Serie , TIA/EIA-602 .
Sin embargo, Hayes Communications tardó en lanzar módems que admitieran velocidades o compresión más altas, y otras tres empresas fueron las que tomaron la delantera: Microcom , US Robotics y Telebit . Cada una de estas tres utilizaba sus propios conjuntos de comandos adicionales. A principios de la década de 1990, había cuatro conjuntos de comandos principales en uso y varias versiones basadas en uno de ellos. Las cosas volvieron a ser más sencillas durante la introducción generalizada de 14.4 yMódems de 28,8 kbit/s&
a principios de los años 90. Poco a poco, un conjunto de comandos basado en gran medida en el conjunto extendido original de Hayes que utilizaba comandos se hizo popular y luego universal. Solo otro conjunto de comandos ha seguido siendo popular, el conjunto US Robotics de su popular línea de módems.
El texto siguiente enumera parte del conjunto de comandos Hayes, también llamados comandos AT : "AT" significa "atención". Cada cadena de comandos tiene como prefijo "AT" y se pueden concatenar varios comandos discretos después de "AT".
El conjunto de comandos Hayes se puede subdividir en cuatro grupos:
Aunque la sintaxis del conjunto de comandos define la mayoría de los comandos mediante una combinación de letras y números (L0, L1, etc.), el uso de un cero es opcional. En este ejemplo, "L0" equivale a una simple "L". Tenga esto en cuenta al leer la tabla siguiente.
Cuando se está en modo de datos, una secuencia de escape puede hacer que el módem vuelva al modo de comandos. La secuencia de escape normal consta de tres signos más ("+++") y, para distinguirla de los posibles datos reales, se utiliza un temporizador de protección: debe ir precedido de una pausa, no debe haber ninguna pausa entre los signos más y debe ir seguido de una pausa; de forma predeterminada, una "pausa" es de un segundo y "sin pausa" es cualquier valor inferior.
Se aplican las siguientes definiciones sintácticas: [7]
<CR>
Carácter de retorno de carro, es el carácter de terminación de la línea de comandos y del código de resultado, cuyo valor, en ASCII decimal entre 0 y 255, se especifica en el registro S3. El valor predeterminado es 13.<LF>
Carácter de salto de línea, es el carácter reconocido como carácter de salto de línea. Su valor, en ASCII decimal entre 0 y 255, se especifica en el registro S4. El valor predeterminado es 10. El carácter de salto de línea se muestra después del carácter de retorno de carro si se utilizan códigos de resultado verbosos (se utiliza la opción V1); en caso contrario, si se utilizan códigos de resultado de formato numérico (se utiliza la opción V0), no aparecerá en los códigos de resultado.<...>
Los nombres entre corchetes angulares son elementos sintácticos. No aparecen en la línea de comandos.[...]
Un subparámetro opcional de un comando o una parte opcional de la respuesta de información AT se incluye entre corchetes. Los corchetes no aparecen en la línea de comandos. Cuando el subparámetro no se proporciona en comandos AT que tienen un comando Read, el nuevo valor es igual a su valor anterior. En los comandos AT que no almacenan los valores de ninguno de sus subparámetros y, por lo tanto, no tienen un comando Read, que se denominan comandos de tipo acción, la acción debe realizarse sobre la base de la configuración predeterminada recomendada del subparámetro.Una cadena puede contener muchos comandos Hayes colocados juntos, de modo de preparar de manera óptima el módem para marcar o responder, por ejemplo . La mayoría del software de módem admitía una cadena de inicialización proporcionada por el usuario , que normalmente era un comando AT largo concatenado que se enviaba al módem al iniciarse. [8] La especificación V.250 requiere que todos los DCE acepten un cuerpo (después de "AT") de al menos 40 caracteres de comandos concatenados. [9]AT&F&D2&C1S0=0X4
A continuación se muestran dos computadoras, la computadora A y la computadora B, ambas con módems conectados, y el usuario que controla los módems con un software emulador de terminal . El software emulador de terminal generalmente permite al usuario enviar comandos Hayes directamente al módem y ver las respuestas. En este ejemplo, el usuario de la computadora A hace que el módem marque el número de teléfono del módem B al número de teléfono (212) 555-0100 (larga distancia). Después de cada comando y respuesta, se envía un retorno de carro para completar el comando.
Si bien el conjunto de comandos Hayes original representó un enorme avance en las comunicaciones basadas en módem, con el tiempo surgieron muchos problemas, casi ninguno de ellos debido a Hayes en sí :
Como resultado de todo esto, eventualmente muchos programas de comunicaciones tuvieron que renunciar a cualquier sensación de poder hablar con todos los módems "compatibles con Hayes" y en su lugar los programas tuvieron que tratar de determinar el tipo de módem a partir de sus respuestas, o proporcionar al usuario alguna opción mediante la cual pudiera ingresar cualquier comando especial necesario para obligar a su módem particular a actuar correctamente.
El conjunto de comandos Hayes facilitó la detección automática de la velocidad en baudios , ya que "A" y "T" tienen patrones de bits que son muy regulares; "A" es "100 0001" y, por lo tanto, tiene un bit 1 al inicio y al final, y "T" es "101 0100", que tiene un patrón con (casi) todos los demás bits establecidos. [10] Dado que la interfaz RS-232 transmite primero el bit menos significativo , el patrón de línea correspondiente con 8-N-1 (ocho bits de datos, ningún bit de paridad, un bit de parada) es 0 10000010 10 00101010 1 (los bits de inicio y parada en cursiva ) que se utiliza como palabra de sincronización .
Los siguientes comandos son entendidos por prácticamente todos los módems que admiten un conjunto de comandos AT, ya sean antiguos o nuevos.
Nota: una cadena de comandos termina con un carácter CR (\r)
Aunque no forma parte del conjunto de comandos, el carácter tilde ~ se utiliza habitualmente en las secuencias de comandos del módem. El ~ hace que muchas aplicaciones pausen el envío del flujo de comandos al dispositivo (normalmente durante medio segundo), por ejemplo, después de un Reset . El ~ no se envía al módem. [11]
La UIT-T estableció una norma en sus Recomendaciones de la Serie V , V.25 ter , en 1995 en un intento de establecer una norma para el conjunto de comandos de nuevo. Se le cambió el nombre a V.250 en 1998 con un anexo que no se refería al conjunto de comandos Hayes, renombrado como V.251 . Un módem compatible con V.250 implementa los comandos A, D, E, H, I, L, M, N, O, P, Q, T, V, X, Z, &C, &D y &F de la manera especificada por la norma. También debe implementar registros S y debe utilizar los registros S0, S3, S4, S5, S6, S7, S8 y S10 para los fines indicados en la norma. También debe implementar cualquier comando que comience con el signo más, "+" seguido de cualquier letra de la A a la Z, solo de acuerdo con las recomendaciones de la UIT. Los fabricantes de módems tienen la libertad de implementar otros comandos y registros S según lo consideren oportuno y pueden agregar opciones a los comandos estándar.
La norma ETSI GSM 07.07 (3GPP TS 27.007) especifica comandos de estilo AT para controlar un teléfono o módem GSM . La norma ETSI GSM 07.05 (3GPP TS 27.005) especifica comandos de estilo AT para gestionar la función de servicio de mensajes cortos (SMS) de GSM.
Ejemplos de comandos GSM: [12] [13]
Los módems GSM/3G generalmente admiten las extensiones del conjunto de comandos ETSI GSM 07.07/3GPP TS 27.007 AT, aunque la cantidad de comandos implementados varía.
La mayoría de los proveedores de módems USB, como Huawei, Sierra Wireless, Option, también han definido extensiones propietarias para la selección del modo de radio (preferencia GSM/3G) o similar. Algunos módems de alta velocidad recientes proporcionan una interfaz Ethernet virtual en lugar de utilizar un protocolo punto a punto (PPP) para la conexión de datos por razones de rendimiento (la conexión PPP solo se utiliza entre la computadora y el módem, no a través de la red). La configuración requiere extensiones de comando AT específicas del proveedor. A veces, las especificaciones para estas extensiones están disponibles abiertamente, otras veces el proveedor requiere un acuerdo de confidencialidad para acceder a ellas. [14]
Los módems con capacidades de voz o contestador automático admiten un superconjunto de estos comandos para permitir la reproducción y grabación de audio digital.
Con un socio .