# Набір команд для сумісних з Hayes модемів

У цьому розділі наведено опис набору команд Hayes. Більшість модемів значною мірою підтримують цей набір команд. Ця довідкова інформація може вам знадобитися, якщо ви загубили інструкцію до вашого модема або такої інструкції у вас ніколи не було. Я, наприклад, з її допомогою визначив, як можна вимкнути гучномовець мого модема: `ATM0` — і, нарешті, тиша!

Рядок ініціалізації модема складається з послідовності команд. Ця послідовність готує модем до обміну інформацією, встановлює такі параметри, як режим набору, проміжки очікування, виявлення сигналу «зайнято» тощо. Новітні програми керування модемами встановлюють подібні рядки ініціалізації відповідно до обраних вами пунктів меню, увімкнутих можливостей тощо.

Модеми сумісні з Hayes довгі роки були стандартом. Хоча кількість виробників модемів і сильно зросла, всі вони у загальних рисах продовжують притримуватися стандарту Hayes. Нижче наведено частковий список набору команд Hayes. (Ці команди ще називають AT-командами). Набір команд Hayes можна поділити на чотири групи:

Базовий набір команд

- Велика літера, за якою йде цифра. Наприклад, `M1`.

Розширений набір команд

- Символ & (амперсанд) і велика літера, за якими йде цифра. Це команда розширення базового набору команд. Наприклад, `&M1`. Зауважте, що команда `M1` є зовсім іншою командою, ніж команда `&M1`.

Пропрієтарний набір команд

- Команди, що зазвичай починаються зі зворотної навскісної риски (\), або символу відсотків (%), значення цих команд значно відрізняється у різних виробників модемів. З цих міркувань у нашому списку буде наведено лише декілька з цих команд.

Команди регістрів

- `S`r`=`n``, де `r` — номер регістра, значення у якому слід змінити, а `n` нове значення для цього регістра.

  Регістр — це комп’ютерний термін, що позначає певну адресу у пам’яті. Модеми обладнано пам’яттю незначного обсягу. Цей четвертий набір команд використовується для введення значень у окремі регістри (адреси у пам’яті). Такий регістр зберігатиме окрему змінну (буквенно-цифрову інформацію), яку буде використано модемом і програмним забезпеченням з керування обміном даними. Наприклад, команда `S7=60` наказує вашому комп’ютеру Встановити для регістра #7 значення 60.

Хоча всі команди визначаються за допомогою комбінацій літер з цифрою (`L0`, `L1` тощо), використання нуля є необов’язковим. У нашому прикладі, команда `L0` виконає ту саму дію, що і команда `L`. Пам’ятайте про це, коли будете знайомитися з наведеною нижче таблицею!

Нижче наведено декілька з найважливіших символів, які можуть з’явитися у рядку ініціалізації модема. Зазвичай, ці символи міняти не можна.

`AT`

- Повідомляє модем про те, що далі йтимуть команди. З цієї команди має починатися кожен рядок команд.

`Z`

- Поновлює типовий стан модема.

`,` (a comma)

- наказує вашій програмі на одну секунду призупинити виконання. Можна послідовно використовувати декілька команд `,`. Наприклад, команда`,,,,` призведе до призупинки на чотири секунди. (Тривалістю паузи керує параметр регістра `S8`.)

`^M`

- Надсилає символ повернення каретки на модем. Цей код керування більшість комунікаційного програмного забезпечення транслює як CR

## Набір основних команд Hayes

У алфавітному порядку:

## Набір основних команд Hayes

Команда | Опис | Коментарі
`A0` або `A` | Відповісти на вхідний дзвінок |
`A/` | Повторити останню команду. | Не додавайте перед цими командами команду `AT`. Таке додавання призводить до аварійного завершення роботи.
`B0` або `B` | Обробка вхідних дзвінків | Послідовність відповіді на вхідний дзвінок у режимі V32/CCITT
`B1` | Обробка вхідних дзвінків | Послідовність відповіді на вхідний дзвінок Bell 212A
`B2` | Обробка вхідних дзвінків | Режим відповіді: докладний/короткий
`D` | Набрати номер | Виконати дзвінок за наступним номером з процедурою вітання у режимі започаткування. `P` Імпульсний набір `T` Увімкнути тоновий набір `W` Очікувати на другий гудок `,` Призупинка на проміжок часу, вказаний у регістрі `S8` (зазвичай, 2 секунди) `;` Залишитися у командному режимі після додзвону. `!` Коротке натискання на важіль (повісити слухавку на півсекунди, як під час переведення дзвінка). `L` Набрати останній номер
`E0` або `E` | Без відлуння | Не передавати луну команди на комп’ютер
`E1` | Відлуння | Передавати луну команди на комп’ютер (так, щоб можна було бачити, що набрано)
`H0` | Стан лінії | Лінію зайнято — повісити слухавку
`H1` | Стан лінії | Лінія вільна — слухавку піднято
`I0` або `I` | Запити, відомості або опитування | Результат цієї команди дуже залежить від моделі модема. `I0` зазвичай повертає число або код, команди з вищими номерами часто надають вам кориснішу інформацію.
`L0` або `L` | Гучність динаміка. У модемів з регуляторами гучності таких параметрів немає. | Вимкнути або знизити гучність
`L1` |  | Низька гучність
`L2` |  | Середня гучність
`L3` |  | Висока гучність
`M0` або `M` | Вимкнути гучномовець | Команда `M3` також є типовою, але її значення може бути різним для різних моделей
`M1` |  | Тримати динамік увімкненим, доки не буде визначено віддалений сигнал (тобто до часу, коли можна буде почути інший модем)
`M2` |  | Тримати динамік завжди увімкненим (звуки даних буде чути після CONNECT)
`N0` або `N` | Швидкість під час вітання | Відповідь лише за швидкості, визначеної регістром `S37`
`N1` |  | Відповідь лише на швидкостях більших, за визначену у регістрі `S37`
`O0` або `O` | Повернути режим «На зв’язку» | Див. також `X1`, оскільки може бути задіяно режим визначення гудка.
`O1` |  | Повернути режим «На зв’язку» після послідовності відновлення вирівнювання
`Q0` або `Q1` | «Мовчазний» режим | Вимкнено — показувати коди результатів команди, користувач бачитиме наслідок виконання команди (наприклад `OK`)
`Q1` | «Мовчазний» режим | Увімкнено — коди результатів буде придушено, користувач не бачитиме наслідків виконання команд.
`S`n`?` |  | Вивести вміст S-регістра `n`
`S`n`=`r`` | Зберегти | Зберегти значення `r` у S-регістрі `n`
`V0` або `V` | Докладний режим | Числові коди результатів
`V1` |  | Коди результатів англійською (наприклад `CONNECT`, `BUSY`, `NO CARRIER` тощо)
`X0` або `X` | Smartmodem | Коди результатів, сумісні з Hayes Smartmodem 300
`X1` |  | Зазвичай, додає швидкість з’єднання до базових кодів результатів (наприклад `CONNECT 1200`)
`X2` |  | Зазвичай, додає визначення способу додзвону (запобігаючи додзвону «наосліп», і іноді запобігаючи `AT0`)
`X3` |  | Зазвичай, додає визначення сигналу «зайнято»
`X4` |  | Зазвичай, додає як визначення сигналу «зайнято», так і визначення способу додзвону
`Z0` або `Z` | Скинути | Поновлює у модемі збережені налаштування. Щоб визначити декілька профілів, скористайтеся командами `Z0`, `Z1` тощо. Ця команда аналогічна до команди `&F` для типових даних виробника на модемах без NVRAM (постійної пам’яті)

## Розширений набір команд Hayes

Команди з амперсандом

## Розширений набір команд Hayes

Команда | Опис | Коментарі
`&B0` або `&B` | Параметри повторення | Вимкнути функцію автоматично повторення
`&B1` | Параметри повторення | Увімкнути функцію автоматичного повторення
`&B2` | Параметри повторення | Увімкнути автоматичне повторення, але роз’єднатися, якщо у зв’язку не буде покращення через проміжок часу, визначений регістром `S7`
`&C0` або `&C1` | Визначення сигналу-носія | Сигнал завжди увімкнено
`&C1` | Визначення сигналу-носія | Вказує на сигнал-носій віддаленого модема (типове значення)
`&D0` або `&D` | Готовність термінала даних (DTR) | Ігнорування сигналу (залежить від моделі модема, вам слід переглянути підручник модема щодо цієї команди!)
`&D1` | Готовність термінала даних (DTR) | Якщо DTR переходить з режиму «увімкнено» до режиму «вимкнено», модем переходитиме у режим команд (лише деякі модеми)
`&D2` | Готовність термінала даних (DTR) | Деякі модеми вішають слухавку під час переходу між режимами DTR (це типова основна поведінка)
`&D3` | Готовність термінала даних (DTR) | Повісити слухавку, скинути параметри модема до типового стану і повернутися у режим команд після зміни режиму DTR
`&F0` або `&F` | Типові параметри виробника | Загальні типові значення, сумісні з Hayes. Зазвичай, непогано скористатися цією командою у вашому рядку ініціалізації, оскільки параметри команд `&F1`-`&F3` можуть відрізнятися залежно від моделі модема, а отже можуть стати причиною проблем зі з’єднанням. (Оскільки ви не знатимете, що саме змінюватиме команда `&F2` у виробника X.) З іншого боку, варто спробувати інші параметри, вказані нижче, — значну кількість проблем може бути розв’язано заміною складного рядка ініціалізації простою командою `&F2` або подібною. Але, якщо ви створюєте рядок ініціалізації від початку, краще використати у ньому просту команду `&F`, і не використовувати змінену форму типових значень.
`&F1` | Типові значення виробника | Типові значення виробника, зашиті до сумісних з IBM PC модемів
`&F2` | Типові значення виробника | Типові значення виробника для модемів Mac з програмним встановленням зв’язку
`&F3` | Типові значення виробника | Типові значення виробника для модемів Mac з апаратним встановленням зв’язку
`&G0` або `&G` | Захисні тонові сигнали | Вимкнути захисні тонові сигнали
`&K0` або `&K` | Локальне керування потоком | Вимкнути локальне керування потоком
`&K1` | Локальне керування потоком | Увімкнути апаратне RTS/CTS локальне керування потоком
`&K2` | Локальне керування потоком | Увімкнути програмне XON/XOFF локальне керування потоком
`&K3` | Локальне керування потоком | Увімкнути апаратне RTS/CTS локальне керування потоком
`&K4` | Локальне керування потоком | Увімкнути програмне XON/XOFF локальне керування потоком
`&L0` або `&L` | Режим набору | Вибір режиму набору
`&M0` або `&M` | Режим контролювання помилок | Обрати асинхронний не-EC режим (те саме, що `&Q0`)
`&P0` або `&P` | Співвідношення набір-пауза для імпульсного набору | Імпульсний набір у США або Канаді, використовується співвідношення 39% / 61%
`&P1` | Співвідношення набір-пауза для імпульсного набору | Імпульсний набір у Великобританії або Гонконзі, використовується співвідношення 33% / 67%
`&Q0` або `&Q` | Режим контролювання помилок | Асинхронний не-EC режим без буферизації даних. ASB вимкнено.
`&Q5` | Режим контролювання помилок | Вибрати EC- операцію V.42 (потрібне керування потоком)
`&Q6` | Режим контролювання помилок | Асинхронний режим з ASB (потрібне керування потоком)
`&Q8` | Режим контролювання помилок | Обрати альтернативний протокол EC (MNP)
`&Q9` | Режим контролювання помилок | Умовне стискання даних: V.42bis = так, MNP5 = ні.
`&S0` або `&S` | Вибір дії DSR | Завжди увімкнено (типово)
`&S1` | Вибір дії DSR | Відповідно до специфікації EIA (активне слідкування за сигналом-носієм до його втрати.)
`&T0` або `&T` | Виконати самоперевірку | У деяких з моделей модемів виконання певного набору тестів
`&U0` або `&U` | Ґратчасте кодування | Увімкнути TCM V.32
`&U1` | Ґратчасте кодування | Вимкнути TCM V.32
`&V0` або `&V1` | Переглянути активні | (і часто збережені) налаштування профілю (або `ATI4`)
`&W0` або `&W` | Зберегти профіль | У NVRAM (`&W0`, `&W1` тощо для декількох профілів). Деякі параметри неможливо зберегти. Ці параметри часто не показуються у виводі `&V` або `ATI4`
`&Y0` або `&Y` | Обрати налаштування, які завантажуватимуться під час вмикання | Завантажити профіль 0 (типовий)
`&Y1` | Обрати налаштування, які завантажуватимуться під час вмикання | Завантажити профіль 1
`&Z`n`=`x`` | «Тепле» скидання параметрів і завантаження збереженого за номером `n` профілю | Зауважте, що всі елементи у рядку команди після `&Z` буде проігноровано

## Команди зі зворотною навскісною рискою і команди з відсотком

Команда | Опис | Коментарі
`\A0` або `\A` | Максимальний розмір у символах блоку MNP | не більше 64 символів
`\A1` | Максимальний розмір у символах блоку MNP | не більше 128 символів
`\A2` | Максимальний розмір у символах блоку MNP | не більше 192 символів
`\A3` | Максимальний розмір у символах блоку MNP | не більше 256 символів
`%C0` або `%C` | Увімкнути або вимкнути режим стискання даних | Вимкнено
`%C1` | Увімкнути або вимкнути режим стискання даних | Увімкнено MNP5
`%C2` | Увімкнути або вимкнути режим стискання даних | Увімкнено V.42bis (BTLZ)
`%C3` | Увімкнути або вимкнути режим стискання даних | Увімкнено MNP5 і V.42bis (BTLZ)
`%D0` або `%D` | Стискання даних | Розмір словника 512 BLTZ
`%D1` | Стискання даних | Розмір словника 1024 BLTZ
`%D2` | Стискання даних | Розмір словника 2048 BLTZ
`%D3` | Стискання даних | Розмір словника 4096 BLTZ
`%E0` або `%E1` | Метод Escape | ESCAPE DISABLED
`%E1` | Метод Escape | Метод `+++AT` (типовий)
`%E2` | Метод Escape | Метод `Break` команди `AT`
`%E3` | Метод Escape | Увімкнути обидва методи (BOTH)
`%E4` | Метод Escape | Вимкнути відгук `OK` у відповідь на `+++`
`%E5` | Метод Escape | Увімкнути відгук `OK` у відповідь на `+++`
`\J0` або `\J` | Автоматичне узгодження швидкості DTE | Вимкнено
`\J1` | Автоматичне узгодження швидкості DTE | Швидкість DTE узгоджується зі швидкістю сигналу-носія.
`\N0` або `\N` | Тип з'єднання | Звичайне з’єднання (див. нижче щодо визначень)
`\N1` | Тип з'єднання | Пряме з’єднання
`\N2` | Тип з'єднання | З’єднання MNP з автоматичним забезпеченням надійності
`\N3` | Тип з'єднання | З’єднання з автоматичним забезпеченням надійності
`\N4` | Тип з'єднання | Надійне з’єднання V.42bis з визначенням фази
`\N5` | Тип з'єднання | З’єднання з автоматичним забезпеченням надійності V.42bis з визначенням фази
`\N6` | Тип з'єднання | Надійне з’єднання V.42 з визначенням фази
`\N7` | Тип з'єднання | З’єднання з автоматичним забезпеченням надійності V.42 з визначенням фази

Пряме з’єднання — це просте безпосереднє з’єднання без будь-якого контролю над помилками або стискання даних. У цьому випадку швидкості комп’ютер-модем і модем-комп’ютер мають бути однаковими.

За звичайного з’єднання використовується керування потоком (програмне або апаратне) для буферизації даних, які надсилаються або отримуються, отже модем може передавати дані на швидкості, яка відрізнятиметься від швидкості, з якою надсилатиме або отримуватиме ці дані комп’ютер. Наприклад, комп’ютер може надсилати дані на швидкості 57 кб/с, але, з використанням стискання, модем може надсилати дані на швидкості 28,8 кб/с. Цей режим використовується для більшості з модемів.

Надійне з’єднання є різновидом звичайного з’єднання; якщо з певних причин стискання даних або виправлення помилок не може бути увімкнене або не може підтримуватися, з’єднання буде розірвано. (По суті, такий модем намагається переконатися, що всі з’єднання є надійними, або вішає слухавку, якщо з’єднання не є надійним.)

Аналогічно, з’єднання з автоматичним забезпеченням надійності дуже подібне на надійне з’єднання, але модем намагається повторно встановити з’єднання, якщо з’єднання не є надійним. Знову ж таки, цей режим роботи використовується у більшості модемів.

## S-регістри

Зареєструватись | Діапазон | Типовий | Функція
`S0` | 0-255 дзвінків | 1-2 | Відповісти за досягнення кількості дзвінків. Не відповідати, якщо 0
`S1` | 0-255 дзвінків | 0 | якщо значення `S0` більше за 0, за допомогою цього регістра буде підраховано вхідні дзвінки.
`S2` | 0-127 ASCII | 43 + | Символ переходу до режиму команд
`S2` | >127 |  | без ESC
`S3` | 0-127 ASCII | 13 CR | Символ повернення каретки
`S4` | 0-127 ASCII | 10 LF | Символ переведення рядка
`S5` | 0-32, 127 ASCII | 8 BS | Символ забою
`S6` | 2-255 секунд | 2 | Час очікування гудка (сліпий набір, див. X`n`)
`S7` | 1-255 секунд | 30-60 | Час очікування на віддалений сигнал-носій
`S8` | 0-255 секунд | 2 | Час призупинки, що використовується під час набору
`S9` | 1-255 десятих секунди | 6 | Час визначення сигналу носія, потрібний для розпізнавання
`S10` | 1-255 десятих секунди | 7-14 | Час між втратою сигналу-носія і розривом з’єднання
`S11` | 50-255 мілісекунд | 70-95 | Тривалість і проміжки між тоновими сигналами під час тонового набору
`S12` | 0-255 п’ятидесятих секунди | 50 | Захисний інтервал навколо командної послідовності `+++`
`S36` | Резервні параметри, якщо буде перервано зв’язок виправлення помилок: 0 — Роз’єднатися 1 — Встановити пряме з’єднання 3 — Встановити звичайне з’єднання 4 — За можливості встановити MNP-з’єднання, у іншому випадку, роз’єднатися. 5 — За можливості, встановити MNP-з’єднання, у іншому випадку, встановити пряме з’єднання. 7 — За можливості, встановити MNP-з’єднання, у іншому випадку, встановити звичайне з’єднання. | 7 | Обробка невдалих спроб зв’язку
`S37` | 1 = 300 б/с 5 = 1200 б/с 6 = 2400 б/с 7 = 1200/75 б/с (режим v.23) 8 = 4800 б/с 9 = 9600 б/с 10 = 12000 б/с 11 = 14400 б/с 12 = 7200 б/с | 0 | Початкова швидкість (встановлення зв’язку)

Багато модемів мають десятки, навіть сотні S-регістрів, але лише декілька перших регістрів стандартизовано. Змінити значення у цих регістрах можна за допомогою команди на зразок `ATS`n`=`N``, а отримати значення у регістрі — за допомогою команди `ATS`n`?` (наприклад, команда ``AT` `S10``=70` `S1?`` накаже модемові не класти слухавку сім секунд, якщо він не чутиме відповіді модема на іншому боці каналу зв’язку, а потім повернути кількість дзвінків, які було зареєстровано телефоном.)