Набор команд Hayes (также известный как набор AT-команд ) — это особый язык команд , первоначально разработанный Дейлом Хезерингтоном и Деннисом Хейсом [1] [2] для модема Hayes Smartmodem в 1981 году.
Набор команд состоит из серии коротких текстовых строк, которые можно комбинировать для создания команд для таких операций, как набор номера, завершение вызова и изменение параметров соединения. Подавляющее большинство модемов dial-up используют набор команд Hayes в многочисленных вариациях.
Набор команд охватывал только те операции, которые поддерживались самыми ранними300-битные модемы. Когда потребовались новые команды для управления дополнительными функциями в более скоростных модемах, от каждого из основных поставщиков появилось множество одноразовых стандартов. Они продолжали использовать базовую структуру и синтаксис команд, но добавляли любое количество новых команд, используя какой-либо префиксный символ — &
для Hayes и USRobotics и\
для Microcom . Многие из них были повторно стандартизированы в расширениях Hayes после появления SupraFAXModem 14400 и последовавшей консолидации рынка.
Термин « совместимый с Hayes » был [3] [1] и по состоянию на 2018 год [обновлять]все еще важен в отрасли. [4]
До появления системы досок объявлений (BBS) модемы обычно работали на прямых телефонных линиях , которые начинались и заканчивались известным модемом на каждом конце. Модемы работали либо в режиме «исхода», либо в режиме «ответа», вручную переключаясь между двумя наборами частот для передачи данных. Обычно пользователь, совершающий вызов, переключал свой модем в режим «исхода», а затем набирал номер вручную. Когда удаленный модем отвечал, уже установленный в режим «ответа», телефонная трубка выключалась, и связь продолжалась до тех пор, пока вызывающий абонент не отключался вручную.
Когда требовалась автоматизация, она обычно была нужна только на стороне ответа; например, банку могло потребоваться принимать звонки из нескольких филиалов для обработки в конце дня. Чтобы выполнить эту роль, некоторые модемы включали возможность автоматического снятия трубки телефона, когда он находился в режиме ответа, и освобождения линии, когда другой пользователь вручную отключался. Потребность в автоматическом исходящем наборе номера была значительно менее распространена и обрабатывалась с помощью отдельного периферийного устройства: «номеронабирателя». Он обычно подключался к отдельному порту ввода/вывода на компьютере (обычно порту RS-232 ) и программировался отдельно от самого модема.
Этот метод работы работал удовлетворительно в 1960-х и начале 1970-х годов, когда модемы в основном использовались для соединения немых устройств, таких как компьютерные терминалы (вызов) с интеллектуальными мэйнфреймами (ответ). Однако микрокомпьютерная революция 1970-х годов привела к появлению недорогих модемов, и идея полувыделенной двухточечной связи больше не подходила. Потенциально были тысячи пользователей, которые могли захотеть позвонить любому из тысяч других пользователей, и единственным решением в то время было заставить пользователя звонить вручную.
Компьютерной индустрии требовался способ сообщить модему, какой номер набирать с помощью программного обеспечения. Ранние отдельные дозвонщики имели такую возможность, но только за счет отдельного порта , который мог быть недоступен микрокомпьютеру . Другим решением было бы использование отдельного набора «командных контактов», предназначенных для отправки и получения команд; еще одно решение могло бы использовать сигнальный контакт, указывающий, что модем должен интерпретировать входящие данные как команду. Оба они имели аппаратную поддержку в стандарте RS-232 . Однако многие реализации порта RS-232 на микрокомпьютерах были крайне базовыми, и некоторые исключили многие из этих контактов, чтобы снизить стоимость.
Hayes Communications представила решение в своем Smartmodem 1981 года , используя существующие пины данных без каких-либо изменений. Вместо этого сам модем мог переключаться между одним из двух режимов:
Для переключения из режима данных в командный режим сеансы отправляли строку escape-последовательности из трех знаков плюс ( +++
), за которой следовала пауза около секунды. Пауза в конце escape-последовательности была необходима для уменьшения проблемы, вызванной внутриполосной сигнализацией : если в течение одной секунды от трех знаков плюс были получены какие-либо другие данные, это не была escape-последовательность, и она отправлялась как данные. Для обратного переключения они отправляли команду онлайн , ATO
. При реальном использовании многие команды автоматически переключались в онлайн-режим после завершения, и редко когда пользователь явно использует команду онлайн.
Чтобы избежать лицензирования патента Хейса, некоторые производители реализовали escape-последовательность без временного защитного интервала ( Time Independent Escape Sequence (TIES)). Это имело серьезные последствия для безопасности отказа в обслуживании , поскольку приводило к тому, что модем разрывал соединение, если компьютер когда-либо пытался передать последовательность байтов +++ATH0
в режиме данных. Для любого компьютера, подключенного к Интернету через такой модем, это можно было легко использовать, отправив ему запрос ping of death, содержащий последовательность +++ATH0
в полезной нагрузке. Операционная система компьютера автоматически пыталась ответить отправителю той же полезной нагрузкой, немедленно отключившись от Интернета, поскольку модем интерпретировал бы полезную нагрузку данных ICMP как команду Хейса. [5] Та же ошибка также возникала бы, если бы, например, пользователь компьютера когда-либо пытался отправить электронное письмо, содержащее вышеупомянутую строку.
Набор команд Hayes включает команды для различных операций телефонной линии, таких как набор номера и отбой. Он также включает различные элементы управления для настройки модема, включая набор команд регистров , которые позволяли пользователю напрямую устанавливать различные ячейки памяти в оригинальном модеме Hayes. Набор команд был скопирован в значительной степени дословно, включая значение регистров, почти всеми ранними производителями модемов на 300 бод, которых было довольно много.
Расширение до 1200 и 2400 бод потребовало добавления новых команд, некоторые из которых были снабжены префиксом амперсанда ( &
), чтобы обозначить те, которые предназначены для новой функциональности. Сама Hayes была вынуждена быстро ввести модель 2400 бод вскоре после своей 1200, и наборы команд были идентичны в качестве метода экономии времени. [6] По сути, случайно, это позволило пользователям существующих модемов 1200 бод использовать новые модели Hayes 2400 без изменения своего программного обеспечения. Это усилило использование версий этих команд Hayes. Годы спустя Ассоциация телекоммуникационной промышленности (TIA)/ Альянс электронной промышленности (EIA) официально стандартизировали набор команд 2400 бод как Системы и оборудование передачи данных – Последовательный асинхронный автоматический набор и управление , TIA/EIA-602 .
Однако Hayes Communications не спешила выпускать модемы, поддерживающие более высокие скорости или сжатие, и три другие компании возглавили это: Microcom , US Robotics и Telebit . Каждая из этих трех использовала свои собственные дополнительные наборы команд. К началу 1990-х годов использовалось четыре основных набора команд и несколько версий, основанных на одном из них. Все снова стало проще во время повсеместного внедрения 14.4 иМодемы 28,8 кбит/с в начале 1990-х. Постепенно набор команд, основанный в значительной степени на оригинальном расширенном наборе Hayes с использованием&
команд, стал популярным, а затем и универсальным. Только один другой набор команд остался популярным, набор US Robotics из их популярной линейки модемов.
Следующий текст перечисляет часть набора команд Hayes, также называемых командами AT : «AT» означает «внимание». Каждая строка команды начинается с «AT», и после «AT» может быть объединено несколько отдельных команд.
Набор команд Hayes можно разделить на четыре группы:
Хотя синтаксис набора команд определяет большинство команд с помощью комбинации букв и цифр (L0, L1 и т. д.), использование нуля необязательно. В этом примере "L0" соответствует простому "L". Помните об этом при чтении таблицы ниже.
В режиме данных escape-последовательность может вернуть модем в командный режим. Обычная escape-последовательность — это три знака плюс ("+++"), и для того, чтобы отделить ее от возможных реальных данных, используется защитный таймер: ей должна предшествовать пауза, не должно быть никаких пауз между знаками плюс и за ней должна следовать пауза; по умолчанию "пауза" составляет одну секунду, а "без паузы" — все, что меньше.
Применяются следующие синтаксические определения: [7]
<CR>
Символ возврата каретки — это символ конца командной строки и кода результата, значение которого в десятичном ASCII от 0 до 255 указывается в регистре S3. Значение по умолчанию — 13.<LF>
Символ перевода строки — это символ, распознаваемый как символ перевода строки. Его значение в десятичном ASCII от 0 до 255 указывается в регистре S4. Значение по умолчанию — 10. Символ перевода строки выводится после символа возврата каретки, если используются подробные коды результатов (используется опция V1); в противном случае, если используются коды результатов числового формата (используется опция V0), он не будет отображаться в кодах результатов.<...>
Имя, заключенное в угловые скобки, является синтаксическим элементом. Они не отображаются в командной строке.[...]
Необязательный подпараметр команды или необязательная часть ответа AT-информации заключены в квадратные скобки. Сами скобки не отображаются в командной строке. Если подпараметр не указан в командах AT, имеющих команду Read, новое значение равно его предыдущему значению. В командах AT, которые не хранят значения ни одного из своих подпараметров и, следовательно, не имеют команды Read, которые называются командами типа действия, действие должно быть выполнено на основе рекомендуемой настройки подпараметра по умолчанию.Строка может содержать много команд Hayes, размещенных вместе, чтобы оптимально подготовить модем к набору номера или ответу, например . Большинство модемного программного обеспечения поддерживало пользовательскую строку инициализации , которая обычно представляла собой длинную конкатенированную команду AT, которая отправлялась модему при запуске. [8] Спецификация V.250 требует, чтобы все DCE принимали тело (после «AT») не менее чем из 40 символов конкатенированных команд. [9]AT&F&D2&C1S0=0X4
Ниже представлены два компьютера, компьютер A и компьютер B, оба с подключенными модемами, и пользователь, управляющий модемами с помощью программного обеспечения эмулятора терминала . Программное обеспечение эмулятора терминала обычно позволяет пользователю отправлять команды Hayes напрямую модему и видеть ответы. В этом примере пользователь компьютера A заставляет модем набрать телефонный номер модема B по номеру телефона (212) 555-0100 (междугородний). После каждой команды и ответа отправляется возврат каретки для завершения команды.
Хотя первоначальный набор команд Hayes представлял собой огромный скачок вперед в области модемной связи, со временем возникло много проблем, и почти ни одна из них не была связана с Hayes как таковым :
В результате всего этого многим программам связи в конечном итоге пришлось отказаться от возможности взаимодействовать со всеми «совместимыми с Hayes» модемами, и вместо этого программам пришлось пытаться определить тип модема по его ответам или предоставить пользователю некую опцию, с помощью которой он мог бы вводить любые специальные команды, необходимые для того, чтобы заставить свой модем работать должным образом.
Набор команд Hayes облегчает автоматическое определение скорости передачи данных , поскольку «A» и «T» имеют очень регулярные битовые шаблоны; «A» — это «100 0001» и поэтому имеет бит 1 в начале и конце, а «T» — это «101 0100», который имеет шаблон с (почти) каждым вторым набором битов. [10] Поскольку интерфейс RS-232 передает сначала младший бит , соответствующий шаблон строки с 8-N-1 (восемь битов данных, без бита четности, один стоповый бит) — это 0 10000010 10 00101010 1 (стартовый и стоповый биты выделены курсивом ), который используется в качестве синхрослова .
Следующие команды понимаются практически всеми модемами, поддерживающими набор AT-команд, как старыми, так и новыми.
Примечание: командная строка завершается символом CR (\r)
Хотя символ тильды ~ не является частью набора команд, он обычно используется в последовательностях команд модема. ~ заставляет многие приложения приостанавливать отправку потока команд устройству (обычно на полсекунды), например, после сброса . ~ не отправляется модему. [11]
ITU -T установил стандарт в своих Рекомендациях серии V , V.25 ter , в 1995 году в попытке снова установить стандарт для набора команд. Он был переименован в V.250 в 1998 году с приложением, которое не касалось набора команд Hayes, переименованного в V.251 . Модем, совместимый с V.250, реализует команды A, D, E, H, I, L, M, N, O, P, Q, T, V, X, Z, &C, &D и &F способом, указанным в стандарте. Он также должен реализовывать регистры S и должен использовать регистры S0, S3, S4, S5, S6, S7, S8 и S10 для целей, указанных в стандарте. Он также должен реализовывать любую команду, начинающуюся со знака плюс, "+", за которой следует любая буква от A до Z, только в соответствии с рекомендациями ITU. Производители модемов могут свободно реализовывать другие команды и S-регистры по своему усмотрению, а также добавлять опции к стандартным командам.
ETSI GSM 07.07 (3GPP TS 27.007) определяет команды стиля AT для управления телефоном или модемом GSM . ETSI GSM 07.05 (3GPP TS 27.005) определяет команды стиля AT для управления функцией службы коротких сообщений (SMS) GSM.
Примеры команд GSM: [12] [13]
Модемы GSM/3G обычно поддерживают расширения набора AT-команд ETSI GSM 07.07/3GPP TS 27.007, хотя количество реализованных команд различается.
Большинство производителей USB-модемов, таких как Huawei, Sierra Wireless, Option, также определили собственные расширения для выбора радиорежима (предпочтение GSM/3G) или аналогичные. Некоторые современные высокоскоростные модемы предоставляют виртуальный интерфейс Ethernet вместо использования протокола точка-точка (PPP) для подключения к данным из соображений производительности (подключение PPP используется только между компьютером и модемом, а не по сети). Для настройки требуются расширения AT-команд, специфичные для поставщика. Иногда спецификации для этих расширений находятся в открытом доступе, в других случаях поставщик требует NDA для доступа к ним. [14]
Модемы с функциями голосовой связи или автоответчика поддерживают расширенный набор этих команд для обеспечения возможности воспроизведения и записи цифрового звука.
с партнером