# Zbiór poleceń modemu w standardzie Hayes

Niniejszy tekst zawiera opis poleceń modemowych w standardzie Hayes. Większość dostępnych na rynku modemów obsługuje dużą część tych poleceń. Jeżeli instrukcja modemu jest niedostępna (lub np. wcale jej nie było) to niniejszy opis na pewno się przyda. Można na przykład dowiedzieć się jak wyłączyć głośnik w modemie: wystarczy wpisać `ATM0` i ..... nareszcie cisza !!!

Ciąg znaków inicjujących pracę modemu, zawiera zbiór poleceń. Jego zadaniem jest przygodowanie modemu do celów komunikacji, ustawiając takie opcje jak: tryb dzwonienia, czasy oczekiwania, cechy sygnału zajętości oraz wiele innych. Współczesne oprogramowanie komunikacyjne ustawia polecenia inicjujące modem, w zależności od opcji konfiguracyjnych ustawianych przez użytkownika w menu, oknach dialogowych, itp.

Przez wiele lat, modemy firmy Hayes były standardem. Jeżeli nowe firmy rozpoczynały produkcję i sprzedaż modemów, to w dużej mierze stosowały się do standardu firmy Hayes. Poniżej znajduje się lista wybranych poleceń standardu Hayes (nazywanych też poleceniami AT). Zbiór poleceń standardu Hayes może być podzielony na cztery grupy:

Polecenia podstawowe

- Duża litera z następującą po niej liczbą, np.: `M1`.

Polecenia rozszerzone

- Znak & (ampersand) oraz duża litera z następującą po niej cyfrą. Jest to rozszerzenie standardowego zestawu poleceń, na przykład `&M1`. Należy zwrócić uwagę, iż polecenie `M1` to nie to samo, co polecenie: `&M1`.

Polecenia specyficzne dla producenta

- Rozpoczynają się albo od ukośnika (\), lub znaku procent (%), Polecenia te są zróżnicowane w modemach różnych producentów, z tego powodu omówione zostaną jedynie niektóre z nich.

Polecenia obsługi rejestrów

- Postaci `S`r`=`n`` gdzie `r` jest numerem rejestru, który ma zostać zmieniony, a `n` jest wartością, którą należy do tego rejestru wpisać.

  Rejestr jest informatycznym określeniem określonej lokalizacji w pamięci. Modemy posiadają wbudowaną niewielką pamięć, do której można zapisywać określone wartości z wykorzystaniem tego zestawu poleceń. Rejestry mogą przechowywać zmienne (informacje alfanumeryczne) które są wykorzystywane przez modem i oprogramowanie komunikacyjne. Na przykład, polecenie: `S7=60` instruuje modem, abyZapisać w rejestrze numer #7 wartość 60.

Chociaż większość poleceń definiowana jest za pomocą kombinacji liter i cyfr (`L0`, `L1` &etc;), to użycie cyfry zero, jest opcjonalne, tzn. w przykładzie polecenie `L0` jest tożsama z poleceniem `L`. Należy o tym pamiętać, podczas czytania poniższej tabeli!

Poniżej znajdują się niektóre z najważniejszych znaków, które powinny pojawić się w ciągu inicjującym modem. Te fragmenty ciągu nie powinny być zmieniane.

`AT`

- Stanowi informację dla modemu, że zostaną przesłane polecenia sterujące. Znaki AT muszą rozpoczynać każdą linię poleceń dla modemu.

`Z`

- Zeruje modem do ustawień standardowych

`,` (przecinek)

- powoduje, iż oprogramowanie oczekuje przez moment. Można wpisać więcej niż jedno polecenie `,` w wierszu. Na przykład zapis: `,,,,` instruuje modem do wprowadzenia przerwy długości 4 sekund (Czas trwania przerwy jest określony przez zawartość rejestru `S8`.

`^M`

- Przesyła kod sterujący oznaczający powrót karetki (CR - Carriage Return )

## Podstawowy zestaw poleceń Hayes'a

w porządku alfabetycznym:

## Polecenia podstawowe

Komenda | Opis | Komentarz
`A0` lub `A` | Odbierz połączenie przychodzące |
`A/` | Powtórz ostatnią poleceń | Nie należy ich poprzedzać ciągiem `AT`. Klawisz Enter z reguły przerywa operację.
`B0` lub `B` | Sposób negocjacji parametrów połączenia | Standard negocjacji V32 Mode/CCITT
`B1` | Sposób negocjacji parametrów połączenia | Standard negocjacji Bell 212A
`B2` | Sposób negocjacji parametrów połączenia | Tryb gadatliwy lub cichy przy odbieraniu
`D` | Zadzwoń | Dzwoni na podany numer i przekazuje sterowanie do aplikacji `P` Wybieranie impulsowe `T` Wybieranie tonowe `W` Poczekaj na drugi sygnał wybierania `,` Przerywa pracę na czas określony w rejestrze `S8` (wartość domyślna to najczęściej 2 sekundy) `;` Po realizacji polecenia dzwoń, pozostań w trybie komend `!` Funkcja szybkiego przełączania (Odłożenie "słuchawki" na pół sekundy, tak jak przy przekierowaniu połączenia). `L` Zadzwoń pod ostatnio wybierany numer
`E0` lub `E` | Brak echa | Nie będzie powtarzać poleceń przekazywanych przez komputer
`E1` | Echo | Modem będzie powtarzać polecenia przekazywane przez komputer (użytkownik będzie widział co pisze w oknie terminala)
`H0` | Ustawienie stanu słuchawki | Opuszczona na widełki
`H1` | Ustawienie stanu słuchawki | Podniesiona
`I0` lub `I` | Żądanie informacji o możliwościach modemu | Jest to polecenie w dużej części zależna od sprzętu, polecenie `I0` z reguły zwraca kod lub liczbę, wyższe numery mogą spowodować przesłanie dużo większej liczby użytecznych informacji o sprzęcie.
`L0` lub `L` | Poziom głośności. Modemy z ręczną regulacją głośności, nie obsługują poniższych opcji. | Wyłączenie głosu lub bardzo cichy dźwięk.
`L1` |  | Cicho
`L2` |  | Średnio głośno
`L3` |  | Głośno lub bardzo głośno
`M0` lub `M` | Wyłączenie głośnika | Często stoduje się też poleceń `M3`, lecz może ona różnie działać w zależności od producenta modemu.
`M1` |  | Głośnik włączony dopóki modem nie wykryje sygnału nośnej (tzn. do chwili pojawienia się dźwięku z drugiego modemu)
`M2` |  | Głośnik jest włączony cały czas, nawet po połączeniu (słyszalne są sygnały przesyłanych danych)
`N0` lub `N` | Szybkość negocjacji parametrów | Negocjuj z wykorzystaniem tylko z prędkości zdefiniowanych w rejestrze `S37`
`N1` |  | Rozpocznij negocjację od największej dostępnej prędkości, większej od wartości zdefiniowanej w rejestrze: `S37`
`O0` lub `O` | Wróć do stanu - Połączony | Należy zwrócić uwagę na poleceń `X1`, jako że wykrywanie sygnału wybierania może być aktywne.
`O1` |  | Wróć do stanu połączony, po zdefiniowanym czasie działania funkcji Retrain
`Q0` lub `Q1` | Tryb cichy | Wyłączony - powoduje wyświetlanie odpowiedzi modemu na polecenia użytkownika (np: `OK`)
`Q1` | Tryb cichy | Włączony - Odpowiedzi modemu na polecenia użytkownika są wyłączone
`S`n`?` |  | Wyświetla zawartość rejestru S modemu, o numerze: `n`
`S`n`=`r`` | Zapisz | Zapisz wartość: `r` w rejestrze S-o numerze: `n`
`V0` lub `V` | Tryb gadatliwy | Kody stanu modemu zwracane w postaci liczbowej
`V1` |  | Kody stanu zwracane przez modem jako słowa w języku angielskim (⪚ `CONNECT`, `BUSY`, `NO CARRIER` &etc;)
`X0` lub `X` | Standard Smartmodem | Kody stanu zgodne ze standardem Hayes Smartmodem 300
`X1` |  | Powoduje zwykle dodanie informacji o prędkości połączenia, do wyświetlanych komunikatów (np: `CONNECT 1200`
`X2` |  | Powoduje uaktywnienie wykrywania sygnału wywołania (wyłączając możliwość "ślepego" dzwonienia) i wyłączenie działania polecenia `AT0`)
`X3` |  | Włącza opcję wykrywania sygnału zajętości
`X4` |  | Włącza opcję wykrywania sygnału zajętości oraz sygnału wybierania
`Z0` lub `Z` | Zerowanie | Zeruje stan modemu i uaktywnia zachowaną konfigurację. Użycie poleceń `Z0`, `Z1` itp. umożliwia korzystanie z różnych profili konfiguracji. Komenda ta działa identycznie jak `&F` dla przywrócenia ustawień fabrycznych w modemach bez pamięci NVRAM (pamięci nieulotnej).

## Rozszerzony zbiór poleceń standardu Hayes

Polecenia rozszerzone

## Rozszerzony zbiór poleceń standardu Hayes

Komenda | Opis | Komentarz
`&B0` lub `&B` | Parametry funkcji Retrain | Wyłączenie automatycznego działania Retrain
`&B1` | Parametry funkcji Retrain | Włączenie automatycznego działania retrain
`&B2` | Parametry funkcji Retrain | Włączenie funkcji auto retrain, jednak modem rozłączy się, jeżeli stan linii nie poprawi się w ciągu okresu ustawionego w rejestrze `S7`
`&C0` or `&C1` | Wykrywanie sygnału nośnej | Sygnał zawsze włączony
`&C1` | Wykrywanie sygnału nośnej | Detekcja nośnej zdalnego modemu (najczęściej jest to wartość domyślna)
`&D0` lub `&D` | Sygnał gotowości terminala (DTR) | Ten sygnał jest ignorowany (Działanie jest uzależnione od sprzętu, należy sprawdzić w dokumentacji sposób reakcji na ten sygnał!)
`&D1` | Sygnał gotowości terminala (DTR) | Po zmianie stanu sygnału DTR (z włączony na wyłączony) modem przechodzi w tryb przyjmowania poleceń (dotyczy tylko niektórych modemów)
`&D2` | Sygnał gotowości terminala (DTR) | Pewne modemy po zmianie stanu sygnału DTR (z włączony na wyłączony) rozłączają się. (Działanie takie preferowane jest jako domyślne)
`&D3` | Sygnał gotowości terminala (DTR) | Powoduje rozłączenie, zerowanie modemu i powrót do trybu poleceń po otrzymaniu sygnału DTR
`&F0` lub `&F` | Ustawienia fabryczne | Typowe wartość domyślne w standardzie Hayes Nieraz wykorzystanie tych ustawień do definiowania ciągów połączeniowych może być przydatne, gdyż ustawienia parametrów `&F1`-`&F3` mogą się różnić między modemami, co może powodować problemy z połączeniami (Jako że nigdy nie wiadomo dokładnie jakiego producenta (modelu) modemu dotyczy polecenie `&F2`) Niejednokrotnie, wiele problemów może być rozwiązanych poprzez zastąpienie skomplikowanego ciągu poleceń, prostym poleceniem `&F2`, jeżeli jednak niezbędne jest utworzenie skoplikowanego ciągu poleceń, najlepiej rozpocząć od prostego: `&F`, unikając stosowania dostosowanych ustawień domyślnych.
`&F1` | Ustawienia fabryczne | Ustawienia fabryczne dopasowane do komputerów kompatybilnych z IBM PC.
`&F2` | Ustawienia fabryczne | Ustawienia fabryczne dla komputerów typu Mac z obsługą programowej negocjacji parametrów połączenia
`&F3` | Ustawienia fabryczne | Ustawienia fabryczne dla komputerów typu Mac ze sprzętową obsługą negocjacji parametrów połączenia
`&G0` lub `&G` | Sygnał Guard Tone | Wyłączenie sygnału Guard Tone
`&K0` lub `&K` | Lokalna kontrola przepływu | Wyłącza lokalną kontrolę przepływu
`&K1` | Lokalna kontrola przepływu | Włącza lokalną sprzętową kontrolę przepływu typu RTS/CTS
`&K2` | Lokalna kontrola przepływu | Włącza programową kontrolę przepływu XON/XOFF
`&K3` | Lokalna kontrola przepływu | Włącza lokalną sprzętową kontrolę przepływu typu RTS/CTS
`&K4` | Lokalna kontrola przepływu | Włącza programową kontrolę przepływu XON/XOFF
`&L0` lub `&L` | Tryb dzwonienia | Wybierz tryb połączenia
`&M0` lub `&M` | Tryb kontroli błędów | Włącz tryb asynchroniczny bez kontroli błędów (tak samo jak polecenie`&Q0`))
`&P0` lub `&P` | Parametry wybierania impulsowego | Stosunek sygnału do przerwy dla U.S./Canada (39% impuls / 61% przerwa)
`&P1` | Parametry wybierania impulsowego | Stosunek sygnału do przerwy dla U.K./Hong Kong (33% impuls / 67% przerwa)
`&Q0` lub `&Q` | Tryb kontroli błędów | Tryb asynchroniczny bez korekcji błędów. Brak buforowania danych. ASB wyłączone.
`&Q5` | Tryb kontroli błędów | Korekcja błędów zgodna ze standardem V.42 (wymaga włączonej kontroli przepływu)
`&Q6` | Tryb kontroli błędów | Tryb asynchroniczny z włączonym ASB (wymaga włączonej kontroli przepływu)
`&Q8` | Tryb kontroli błędów | Alternatywny protokół korekcji błędów (MNP)
`&Q9` | Tryb kontroli błędów | Warunkowa kompresja danych: V.42bis = tak, MNP5 = nie.
`&S0` lub `&S` | Starowanie sygnałem DSR | Zawsze włączony (wartość domyślna)
`&S1` | Starowanie sygnałem DSR | Zachowanie zgodne ze specyfikacją EIA (Sygnał aktywny po uzyskaniu sygnału wybierania, nieaktywny po zerwaniu połączenia)
`&T0` lub `&T` | Test modemu | Działanie uzależnione od typu i producenta modemu. Występuje w niektórych modelach.
`&U0` lub `&U` | Modulacja Trellis (TCM - Trellis code modulation) | Włącz V.32 TCM
`&U1` | Modulacja Trellis (TCM - Trellis code modulation) | Wyłącz V.32 TCM
`&V0` lub `&V1` | Wyświetla aktywne | (i często przechowywane w pamięci) skonfigurowane profile ustawień (lub polecenie `ATI4`
`&W0` lub `&W` | Zapisz profil | W pamięci NVRAM (można stosować polecenia `&W0`, `&W1` itp. dla wielu profili) Część ustawień nie może być zapisana, informacje o nich dostępne są po wywołaniu komend `&V` lub `ATI4`
`&Y0` lub `&Y` | Wybierz konfigurację ładowaną podczas uruchamiania | Załaduj profil numer 0 (wartość domyślna)
`&Y1` | Wybierz konfigurację ładowaną podczas uruchamiania | Załaduj profil numer 1
`&Z`n`=`x`` | Wyzeruj modem i załaduj zachowany profil o numerze `n` | Należy podkreślić, iż wszelkie znaki w linii następujące po komendzie `&Z` są ignorowane

## Polecenia z ukośnikiem i znakiem procent

Komenda | Opis | Komentarz
`\A0` lub `\A` | Maksymalny rozmiar bloku MNP w znakach | maksymalnie 64 znaki
`\A1` | Maksymalny rozmiar bloku MNP w znakach | maksymalnie 128 znaków
`\A2` | Maksymalny rozmiar bloku MNP w znakach | maksymalnie 192 znaki
`\A3` | Maksymalny rozmiar bloku MNP w znakach | maksymalnie 256 znaków
`%C0` lub `%C` | Włączenie/wyłączenie kompresji danych | Wyłączona
`%C1` | Włączenie/wyłączenie kompresji danych | Włączona kompresja MNP5
`%C2` | Włączenie/wyłączenie kompresji danych | Włączona kompresja V.42bis (BTLZ)
`%C3` | Włączenie/wyłączenie kompresji danych | Włączona kompresja MNP5 oraz V.42bis (BTLZ)
`%D0` lub `%D` | Kompresja danych | Rozmiar słownika BLTZ: 512
`%D1` | Kompresja danych | Rozmiar słownika BLTZ: 1024
`%D2` | Kompresja danych | Rozmiar słownika BLTZ: 2048
`%D3` | Kompresja danych | Rozmiar słownika BLTZ: 512
`%E0` lub `%E1` | Metoda wyjścia do trybu poleceń | Wyjście do trybu poleceń wyłączone
`%E1` | Metoda wyjścia do trybu poleceń | Metoda `+++AT` (domyślna)
`%E2` | Metoda wyjścia do trybu poleceń | Metoda: `Break` `AT`
`%E3` | Metoda wyjścia do trybu poleceń | Obie metody równocześnie
`%E4` | Metoda wyjścia do trybu poleceń | Wyłącz wyświetlanie tekstu `OK` po znakach `+++`
`%E5` | Metoda wyjścia do trybu poleceń | Włącz wyświetlanie tekstu `OK` po znakach `+++`
`\J0` lub `\J` | Automatyczne ustawianie szybkości DTE | Wyłączona
`\J1` | Automatyczne ustawianie szybkości DTE | Szybkość portu szeregowego (DTE) jest dopasowywana do szybkości połączenia.
`\N0` lub `\N` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączenie zwykłe (poniżej znajdują się definicje)
`\N1` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączenie bezpośrednie - bez korekcji
`\N2` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączenie niezawodne-automatyczne w standardzie MNP
`\N3` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączenie niezawodne-automatyczne
`\N4` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączenie niezawodne w standardzie V.42bis z detekcją fazy
`\N5` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączenie niezawodne-automatyczne w standardzie V.42bis auto z detekcją fazy
`\N6` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączenie niezawodne w standardzie V.42 z detekcją fazy
`\N7` | Rodzaj zastosowanego algorytmu korekcji błędów | Połączanie niezawodne-automatyczne w standardzie V.42 auto z detekcją fazy

Połączenie bezpośrednie, jest najprostszym rodzajem połączenia bez korekcji błędów lub kompresji danych. Dla tego rodzaju połączenia, prędkość połączenia komputer-modem i modem-modem musi być identyczna.

Zwykłe połącznie wykorzystuje kontrolę przepływu (sprzętową lub programową) buforując dane wysyłane i otrzymywane, co pozwala na przesyłanie danych z prędkością inną niż w relacji komputer<—>modem. Na przykład, komputer wysyła dane z prędkością 57kbps, jednak wykorzystanie kompresji, powoduje iż modem w rzeczywistości przesyła dane z prędkością 28,8kbps. Ten typ połączenia jest wykorzystywany przez większość modemów.

Połączenie niezawodne, jest podobne w połączenia zwykłego, jeżeli jednak z jakichś powodów tryb kompresji danych i korekcji błędów nie może być uruchomiony i utrzymany, połączenie zostaje zerwane. (W tym trybie, modem zapewnia iż każda transmisja będzie niezawodna, jeżeli jest to niemożliwe połączenie musi zostać zerwane)

Podobnie jak wyżej, połączenie niezawodne-automatyczne jest prawie identyczne, różni się jedynie tym iż modem będzie ponawiał próby wynegocjowania algorytmu kompresji lub korekcji błędów, aby powrócić do trybu niezawodnego połączenia. Ten tryb jest najczęściej wykorzystywany.

## Rejestry S

Rejestr | Zakres | Wartość domyślna | Funkcja
`S0` | 0-255 dzwonków | 1-2 | Liczba dzwonków po którym zostanie odebrane połączenie. Nie odpowiadaj jeżeli 0
`S1` | 0-255 dzwonków | 0 | Jeżeli wartość zapisana w rejestrze `S0` jest większa niż 0 to odliczane są dzwonki przed odebranie połączenia.
`S2` | 0-127 ASCII | 43 + | Kod znaku przejścia do trybu poleceń (ESC)
`S2` | >127 |  | brak zdefiniowania kodu ESC
`S3` | 0-127 ASCII | 13 CR | Kod znaku powrotu karetki
`S4` | 0-127 ASCII | 10 LF | Kod znaku przejścia do następnej linii
`S5` | 0-32, 127 ASCII | 8 BS | Kod znaku usuwania
`S6` | 2-255 sekund | 2 | Czas oczekiwania na sygnał wybierania (informacje o wybieraniu "ślepym" znajdują się tutaj: X`n`)
`S7` | 1-255 sekund | 30-60 | Czas oczekiwania na sygnał zdalnego modemu
`S8` | 0-255 sekund | 2 | Długość przerwy określonej przecinkiem w numerze telefonu
`S9` | 1-255 1/10-ta sekundy | 6 | Czas wymagany na wykrycie i rozpoznanie nośnej
`S10` | 1-255 1/10-ta sekundy | 7-14 | Czas pomiędzy utratą nośnej i rozłączeniem
`S11` | 50-255 milisekund | 70-95 | Długość i odsŧępy między sygnałami w wybieraniu tonowym.
`S12` | 0-255 1/50-te sekundy | 50 | Dodatkowa przerwa otaczająca sekwencję `+++`.
`S36` | Określa zachowanie modemu jeżeli połączenie z korekcją błędów nie powiedzie się 0 - Rozłączenie 1 - Ustanowienie połączenia bezpośredniego 3 - Ustanowienie połączenia normalnego 4 - Ustanowienie połączenia typu MNP lub rozłączenie jeżeli jest to niemożliwe 5 - Ustanowienie połączenia typu MNP lub połączenie bezpośrednie jeżeli jest to niemożliwe 7 - Ustanowienie połączenia typu MNP lub połączenie normalne jeżeli jest to niemożliwe | 7 | Szybkość ustawiana przy nieudanej negocjacji
`S37` | 1 = 300 bps 5 = 1200 bps 6 = 2400 bps 7 = 1200/75 bps (tryb v.23) 8 = 4800 bps 9 = 9600 bps 10 = 12000 bps 11 = 14400 bps 12 = 7200 bps | 0 | Prędkość negocjacji parametrów (wartość początkowa przy rozpoczynaniu negocjacji)

Wiele modemów posiada kilkadziesiąt lub kilkaset rejestrów S, jednak tylko kilkanaście pierwszych stanowi nieformalny standard. Można zmieniać ich zawartość za pomocą polecenia: `ATS`n`=`N``, zaś sprawdzać ich aktualne ustawienie za pomocą polecenia: `ATS`n`?` (np: polecenie ``AT` `S10``=70` `S1?`` spowoduje, iż modem będzie oczekiwał 7 sekund na odpowiedź zdalnego modemu, oraz zwróci informację o ostatniej liczbie dzwonków.)