####[ How-Do-I Documents ]###################################### Sub : Modem Initialisation Strings HDI #003 How-Do-I write modem initialisation strings ? All these strings people talk to me about remains a big puzzle ! ################################################################ Index 1 Introduction 2 The Hayes Command Set 3 Why Hayes initialisation strings 4 Where are they used 5 Basic Command Set 6 Extended Command Set 7 Proprietory Command Set 8 Register Command Set 9 How to make an init string 10 Kudos and Brickbats ################################################################# 1 Introduction 1.1 All modems are configurable. They have processors in them and a wee bit of programmed sequences accessable through external commands to internal registers. This way your communication requirements can be fine tuned for your specific line, be it to connect to an ISP, let some one dial in, send a fax, or voice comn. 2 The Hayes Command Set 2.1 Here is a description of the Hayes Command Set. Most of the modem follow this set ... and is virtually uni- versal today. 2.2 Modem manuals today, by and large are rather skimpy ... and even if detailed, you probably will never find it at the hour of need ... or someone borrowed it, and you forgot who ... 2.3 You want to turn your modem speaker off. Is it ATM0 ??? You need a place to search it up ... well, its here. 2.4 This document is by no means a comprehensive list, but it gives the essential things as a ready reference. 3 Why Hayes initialisation strings 3.1 The modem initialization string consists of a series of commands. It prepares the modem for communications ... setting up features such as dialing mode, detection of busy signal and a host of ther things. 3.2 The set of strings and conventions were developed by a hardware firm (Hayes), and became a de-facto standard for subsequent manufacturers. These strings are either original or derived from the original Hayes modem set. For many years Hayes modems have been the standard. As the players in the field increased for reasons of being "compatible" they adhered to most of the Hayes commands (similar to IBM compatibility for PCs, and Epson compa- tibility to printers). 4 Where are they used ? 4.1 This is a familiar territory ... obviously, with dial- ing software, and the term init string is known to even a newbie. These strings are quite unique, they are NOT case sensitive, but to make the string humanly readable, and avoid any ambiguity here are some guidlines, which would be easier to follow: o use UPPER case o use backslash "\" seperators between adjacent commands since proprietory commands are usually preceded by a "\" and, this is equivalent to typing each command on a new line. Example: AT&F\E0\V1\&C1\&D2\S95=47\S10=250\X3\L3 4.1.1 [Note : This is the classical teaching. Most modems now days accept a jumbled string ... even under such a situ- ation, at least a space seperator should be maintained for better readability and maintenance. The above string with spaces would be : AT&F E0 V1 &C1 &D2 S95=47 S10=250 X3 L3] ... Legibility makes a difference. ALL modems do accept "\" seperators though ...] 4.2 This type of habit makes the entry neat, and there are no chances of errors ... But what does the above mean ? Well, that is what the whole HDI is about ... 4.3 Broadly speaking, the Hayes Command Set can be divided in to 4 groups: o Basic Command Set o Extended Command Set o Proprietary Command Set o Register Commands 5 Basic Command Set 5.1 These deal with call negotiations, dialing, speaker and such hardware related attributes .. These are always in UPPER case, and followed by a digit (e.g. A0, M1 etc). 5.2 These are the most commonly used command strings. The full set in alphabetical order is placed below: ################################################################ The Basic Hayes Command Set - Alphabetical Command - Description - Comments ################################################################ A0 or A Answer incoming call A/ Repeat last command. (Don't preface with AT. Enter usually aborts.) Remarks : Not frequently used. For answering incoming calls use the string noted later ... ################################################################ B0 or B Call negotiation V32 Mode/CCITT ans Seq B1 Call negotiation Bell 212A Answer Seq B2 Call negotiation Verbose/Quiet On Answer Remarks : Not frequently used. ################################################################ D Dial Dial the following number and then handshake. Dial Modifiers (These are common but most modems may have more.) P - Pulse dial T - Touch Tone dial W - Wait for second dial tone , - Pause for time specified in register S8 (default 2 seconds) ; - Remain in command mode after dialing ! - Flash switch-hook (Hang up for a half second as in transferring a call) L - Dial last number Remarks : Either ATDP or ATDT is invariably used, though for most modems these days, ATDT is the factory set default. The other options are rarely used. ################################################################# E0 or E No Echo Will not echo commands to the computer E1 Echo Will echo commands to the computer. Remarks : It is always better to set this to E1 so one can see what is being typed. In most modems E1 is default. ################################################################ H0 or H Hook status On hook - hang up H1 Hook status Off hook - phone picked up Remarks : Not frequently used in init strings. Used by communi- cation software, or through your programs/ scripts. ################################################################# I0 or I Inquiry, Information, (This command is very model or interrogation specific.I0 usually returns a number or code, which can be used for specifically for your model) Remarks : For model specific programming. Not frequently used. ################################################################ L0 or L Speaker Loudness Off or low volume L1 Speaker Loudness Low volume L2 Speaker Loudness Medium volume L3 Speaker Loudness Loud or high volume Remarks : The level of loudness depends upon the model, and you need to find the optimal level of loudness for your own modem [Note: Modems with built-in volume control knobs may not have these options.] ################################################################ M0 or M Speaker Off (Some modems use M3) M1 Speaker Off Speaker on until remote carrier detected M2 Speaker On Speaker is always on (data sounds are heard after CONNECT) Remarks : The default for most modems is M2. To switch off all sounds from your modem use M0 (or M3 for some modems which will be stated in your user manual, or found out after trial and error) ################################################################# N0 or N Handshake Speed Handshake only at speed in S37 register N1 Handshake Speed Handshake at highest speed larger than S37 Remarks : The default is N0 for most modems, and the default hand shake speed (2400 bauds usually) is adequate under most conditions for initial handshake ... A higher speed may cause handshake failure with poorer lines. ################################################################# O0 or O Return Online O0 see also X1 as dial tone detection may be active O1 Return Online Return Online after an equalizer retrain sequence Remarks : Not normally used. This conflicts with dial tone detect which is normally set. The default for most modems is O1 ################################################################# Q0 or Q Quiet mode Off - Displays result codes user sees command responses (e.g. OK) Q1 Quiet mode On - Result codes are supp- ressed, user does not see responses Remarks : The default is suppression of responses (Q1) for most modems. if the full responses are required, it is best to set it on with Q0 in the init string. It is a common folly that people mistake display quietness with volume level of the modem speakers, and think that placing Q0 will achieve silence/ quiteness ! ################################################################# Sn? Store (Query) Query contents of S-regi- ster n Sn=r Store Store value r in S-regi- ster n Remarks : This is a programmers tool, and NOT needed for init strings. A brief writeup on S-registers is given later. It is beyond the scope of this HDI into go into all S- register specifics, and there are a lot of variations here between modems. ################################################################# V0 or V Verbal? Numeric result codes V1 Verbal? English result codes (e.g. CONNECT, BUSY, NO CARRIER etc.) Remarks : The default for most modems is V1, but there is no harm in setting this explicitly in the init string. Nobody will be in a position to interpret a number as BUSY and another as NO CARRIER ! It needs to be verbal (V1). ################################################################# X0 or X Smartmodem Hayes Smartmodem 300 compa- tible result codes X1 Smartmodem Adds connection speed to basic result codes (e.g. CONNECT 1200) X2 Smartmodem Adds dial tone detection (preventing blind dial) X3 Smartmodem Adds busy signal detection X4 Smartmodem Adds both busy signal and dial tone detection Remarks : The default is X0, and anything above that will result in the connect speed being displayed. If you just want a dial tone detection (not recommended through EPABX), X2 is adequate. Normally this feature is NOT needed and detection of BUSY signal (X3) suffices. The X4 option merely combines X2 and X3 together, not normally used. ################################################################# Z0 or Z Reset Reset modem to stored configuration (Z0, Z1 etc. for multiple profiles) (Same as &F (factory default) on modems with out NVRAM (non volatile memory) Remarks : This is not commonly used these days since most modems these days come with NVRAM and days of volatile RAM are over. The &F commands act for both and are preferred over Z commands. ################################################################# 5.3 So far so good ... we have just covered the basic Hayes modem commands and there are still more to go ... 6 Extended Command Set 6.1 This set encompasses areas like test, detect, error control and similar things. All these commands have an "&" (ampersand) prefix, a capital character followed by a numerical digit ... This is an extension of the basic command set. For example, "&Q0". [Note that "Q1" of the basic set (quite mode) is not the same as "&Q0" (no data buffering)]. 6.2 These are the most commonly used command strings of the extended set. The set in alphabetical order is below: ################################################################ The Extended Hayes Command Set - Alphabetical Command - Description - Comments ################################################################ &B0 or &B Retrain Parameters Disable auto retrain function &B1 Retrain parameters Enable auto retrain function &B2 Retrain parameters Enable auto retrain, but dis- connect if no line improvement over period dictated by S7 (wait time for remote carrier) Remarks : The wait time for remote carrier is set in S7 register which may vary from 0-255 sec. This setting is factory set, and can be set by hand as well. The default here is B1 or enable auto-retrain, depending upon the line. If disabled, it disconnect wothout retrain trial. This parameter is not normally set in init strings. ################################################################# &C0 or &C Carrier detect signal always on &C1 Carrier Detect Indicates remote carrier Remarks : The default is &C1. The LED comes on with the presence of the remote carrier. No point having the signal all the time. No harm putting it in the init string as a safety measure. ################################################################# &D0 or &D Data Terminal Ready Signal ignored (DTR) &D1 DTR If DTR goes from On to Off the some modem goes into command mode &D2 DTR Some modems hang upon DTR On to Off transition. &D3 DTR Hang up, reset modem and return to command mode upon DTR Remarks : Once the data terminal is established, there is no need for the modem to remain in command mode. &D2 should be the default (and it is so for most modems) for digital communication. This can be set in your init string. ################################################################# &F0 or &F Factory defaults Generic Hayes defaults. &F1 Factory Defaults Factory defaults tailored to an IBM-PC compatible user &F2 Factory Defaults Factory defaults for a Mac w/software handshaking &F3 Factory Defaults Factory defaults for a Mac w/hardware handshaking Remarks : This is usually a good thing to use in your init string, since the &F1-&F3 settings can vary among modems, and they may actually be the cause of connection problems. If you are making an init string, it is advisable to start with &F, and reset to factory settings before you start adding to it ... This does NO harm anywhere ! In other words ALWAYS begin with "AT&F ...." ################################################################# &K0 or &K Local flow control Disable local flow control &K1 Local flow cotrol Enable RTS/CTS hardware local flow control &K2 Local flow control Enable XON/XOFF software local flow control &K3 Local flow control Enable RTS/CTS hardware local flow control &K4 Local Flow Control Enable XON/XOFF software local flow control Remarks : The default for most modems is &K1 (hardware flow con- trol). Note &K3 and &K4 merely duplicate &K1 and &K2. In some modems they are set that way. Check your modem manual, to see if yours has that quirk ! Can be stated explicitly in init string. ################################################################# &P0 or &P Pulse dialing ratio U.S./Canada pulse dialing 39% make/ 61% break ratio &P1 Pulse Dialing Ratio U.K./Hong Kong pulse dialing 33% make/ 67% break ratio Remarks : Usually not required to be set. Most modems can adjust automatically to both. Pulse dial exchanges in India follow &P1 method (UK/HK) ################################################################## &Q0 or &Q Error Control mode Asynchronous non-EC more. No data buffering. ASB disabled. &Q5 Error Control mode Select V.42 EC operation (requires flow control) &Q6 Error Control Mode Asynchronous mode with ASB (requires flow control) &Q8 Error Control mode Select alternate EC protocol (MNP) &Q9 Error Control mode Conditional data compression: V.42bis = yes, MNP5 = no Remarks : This is model/hardware specific.Please check your modem manual for quirks. The usual default is &Q0. ################################################################# &S0 or &S DSR Action Select Always on (default) &S1 DSR Action Select Follows EIA specification (Active following carrier tone and until carrier is lost) Remarks : Default is &S0 for all modems, and does not need any change unless your modem recommends it (see manual). ################################################################# &Y0 or &Y Select Configuration Load profile 0 (default) Loaded at power up &Y1 -do- Load profile 1 Remarks : These are modem specific. Some modems cater for differ- ent profiles to be executed at power up. If your modem caters for such things, this may be of some use. ################################################################# 6.3 Half the job done ... extended set of commands ( common ones at least have been covered ... now to proprietory set .... 7 Proprietory Command Set 7.1 This set has no fixed rules. It is different in diff- erent models ... and therefore do not follow any laid down standards. These commands are usually started by either a backslash ("\"), or a percent sign ("%"). These commands vary so widely among modem manufacturers, that only the commonly used ones are stated here. Look up the manual that came with your modem for ones specific for your modem. 7.2 These are the most commonly used command strings of the proprietory set. The set in alphabetical order is below: 7.3 Needless to say, unless specifically advocated in your modem manual, none of these are actually required to be put in your init string. ################################################################# The Proprietory Hayes Command Set - Alphabetical Command - Description - Comments ################################################################# \A0 or \A Character maximum 64 character maximum MNP block size \A1 -do- 128 character maximum \A2 -do- 192 character maximum \A3 -do- 256 character maximum ################################################################## %C0 or %C Data Compression Disabled Enable/Disable %C1 -do- MNP5 Enabled %C2 -do- V.42bis (BTLZ) Enabled %C3 -do- MNP5 & V.42bis (BTLZ) Enabled ################################################################# %D0 or %D Data compression 512 BLTZ dictionary size %D1 -do- 1024 BLTZ dictionary size %D2 -do- 2048 BLTZ dictionary size %D3 -do- 4096 BLTZ dictionary size ################################################################# %E0 or %E Escape method ESCAPE DISABLED %E1 -do- +++AT method (default) %E2 -do- <BREAK>AT method %E3 -do- BOTH methods enabled %E4 -do- Disable "OK" to +++ %E5 -do- Enable "OK" to +++ ################################################################ \J0 or \J DTE Auto Rate Disabled Adjustment J1 -do- DTE rate is adjusted to match carrier rate. ################################################################# \N0 or \N Connection type Normal connection (see below for definitions) \N1 -do- Direction connection \N2 -do- MNP Auto-reliable connection \N3 -do- Auto-reliable connection \N4 -do- V.42bis reliable link with phase detection \N5 -do- V.42bis auto-reliable link with phase detection \N6 -do- V.42 reliable link with phase detection \N7 -do- V.42 auto-reliable link with phase detection ################################################################# 8 Register Command Set 8.1 A register in computer parliance has something to do with a specific physical location in memory. All modems have some amount of memory on board. This set of modem commands is to change these physical values so that the modem momn software can utilise the set values. e.g. the command S7=40 will set register #78 to 60 (and wait time for remote carrier will be set to 40 seconds). 8.2 The number of S Registers in a modem is not fixed, and varies from model to model. Some have dozens of such "S" registers, but only the first few are standard. The syn- tax for changing a register value is ATSn=N ... and the current value is examined with ATSn? 8.3 These are the more commonly used command strings of the register set. The set in alphabetical order is below: ################################################################# The Register Hayes Command Set - Alphabetical S-Registers: Reg Range Default Function ################################################################# S0 0-255 rings 1-2 Answer on ring number Don't answer if 0 S1 0-255 rings 0 If S0>0 this register counts incoming rings Remarks : These can be used for incoming calls for a dial-in box e.g. For a Hayes modem with a fixed 115200 bps interface to the machine this init string invoked through agetty turns off modem echo and result codes, makes modem/ computer DCD track modem/ modem DCD, makes a DTR drop cause a dis-connection and turn on auto-answer after 1 ring : Add to /etc/inittab: /sbin/agetty -w -I 'ATE0Q1&D2&C1S0=1\015' 115200 ttyS1 S2 0-127 ASCII 43 + Escape to command mode character S2 >127 no ESC S3 0-127 ASCII 13 CR Carriage return character S4 0-127 ASCII 10 LF Line feed character S5 0-32,127 ASCII 8 BS Backspace character S6 2-255 seconds 2 Dial tone wait time (blind dialing, see Xn) S7 1-255 seconds 30-60 Wait time for remote carrier S8 0-255 seconds 2 Comma pause time used in dialing S9 1-255 1/10 sec. 6 Carrier detect time required for recognition S10 1-255 1/10 sec. 7-14 Time between loss of carrier and hangup [e.g. "AT S10=70 S1?" would tell the modem not to hang up for seven seconds should it not hear the answering modem, and return the number of times the phone last rang] S11 50-255 millisec. 70-95 Duration and spacing of tones when tone dialing S12 0-255 1/50 sec. 50 Guard time for pause around +++ command sequence S36 Fallback options when error correction link fails: 0 - Disconnect 1 - Establish Direct connection 3 - Establish Normal connection 4 - Establish MNP connection if possible else Disconnect 5 - Establish MNP connection if possible else Direct connection 7 - Establish a MNP connection if possible, else Normal connection S37 1 = 300 bps (Initial Handshake) 5 = 1200 bps 6 = 2400 bps 7 = 1200/75 bps (v.23 mode) 8 = 4800 bps 9 = 9600 bps 10 = 12000 bps 11 = 14400 bps 12 = 7200 bps ################################################################# 9 How to make an init string 9.1 Having gone through the details above would have given yopu a fair amount of insight. The process is quite easy and rational, and you can make it yourself. The basic & the extended set of commands are usually adequate and these are common for all modems. For proprietory and "S" register commands, you would have to go through your modem manual ... there are too many quirks here ! 9.2 The common denominator 9.2.1 These are the standard tokens used in init strings: AT = tells the modem that modem commands follow. This must begin each line of commands. Z = resets the modem to default state , (comma) = makes your software pause for a second. You can use more than one , in a row. For example, ",,,," tells the software to pause four seconds. (The duration of the pause is governed by the setting of register S8). ^M = sends "Carriage Return" to the modem. This is a control code that most communication software translate as a "carriage return." 9.3 General guidelines are as follows: o ALWAYS start by setting to default ( viz. AT&F ) [ Note: Although most commands are defined by a letter- number combination (L0, L1, etc.), the use of a zero is optional. &F is the same as &F0]. o Add only things that are necessary, and no more. o See what are the characteristics that you want, and cross-check with the list above ... just fill that ! o Some common ones are: M0 .... Modem speaker off (M3 in some) M2 .... Modem speaker always on L1 .... Soft modem sound L3 .... Loud modem sound E1 .... Echo commands to the computer Q0 .... Display result codes V1 .... Verbose, non-numeric codes X3 .... Add BUSY signal detection &C1 ... Indicates when remote carrier registered &D2 ... Hang on DTR On to Off &P1 ... If on PULSE dial exchange &Q0 ... No data buffering 9.4 By now, I hope it was possible to clarify some of the concepts involved in writing modem init strings. It is not possible to remember the various options available and it is aleays better to have the specifics tucked away somewhere, from where details can be found. It is with these two motives, that this HDI has been made. ################################################################# 10 Kudos and Brickbats 10.1 This document is released under GNU/ GPL licence. You are free to use and distribute this without any encumberances 10.2 Any kudos and brickbats should be directed at: USM Bish <bish@nde.vsnl.net.in> 30 Sep 2001