Skip to content

What the modem does

The modem's signal processing is open source, in dsp/ (C++, behind the C interface of Smart Link's original binary-only library that Smart Link's slmodemd was written for, dsp/dsplibs.h); it builds on any architecture. It implements V.8 and V.34 (up to 33600 bps), V.8 bis before V.8 (AT+A8E=1,1,,1, docs/dsp/v8bis.md) and with it V.70's voice and data together (+DSVD=1: a data channel and a G.729 Annex A voice channel, with Annex B's silence compression, over V.76's multiplexer, the voice to a SmartUSB56's handset or a --dsvd-audio command, docs/v70.md), V.32bis (14400 bps), V.32, V.26 ter (2400 bps duplex, AT+MS=V26T) and V.26 bis (2400 bps one way with the 75 bps backward channel, AT+MS=V26B, docs/dsp/v26.md), V.22bis, V.22 and Bell 212A (with the point of sale terminals' fast connect, ATS49=1), V.29 FastPOS (AT+MS=V29FP, half duplex 9600 bit/s for card terminals, docs/dsp/fastpos.md), V.23, V.21 and Bell 103, V.18 text telephones (the 5-bit TTY mode, DTMF, EDT, Bell 103, Minitel's V.23, the V.21 text telephones, V.18's own mode between two V.18 modems and automoding, and 5-bit telex and RTTY with their own rates and tones), Contact ID alarm reports (SIA DC-05: AT+MS=CONTACTID answers as a central station's receiver, each event a line to the DTE, or calls as an alarm panel), fixed-line SMS (ETSI ES 201 912: AT+MS=SMS answers and passes each text message to the DTE, or calls and sends the DTE's), class 1, 2 and 2.0 fax (V.17, V.29, V.27ter and V.21 HDLC; the built-in fax machine sends and takes T.85 JBIG pages, T.42 JPEG colour and grey-scale pages, T.43 lossless colour pages, T.44 mixed raster content pages, and T.434 binary files, with error correction), call progress, caller ID and voice. It implements V.90 only as the digital modem (on an 8000 Hz G.711 line), with V.92's quick connect, PCM upstream (up to 36000 bps upstream in the tests) and its rate renegotiation, and V.91 between two digital modems (up to 62667 bps both ways). On a bare copper pair rather than a telephone line, its own wideband mode V.wb (AT+MS=VWB, DMT at 96 kHz for pico-serial's WB stick, which dmodemd --usb drives) carries up to about 149000 bps each way (docs/dsp/vwb.md). On a leased line or a dry pair in the voice band (AT&L1 for 2-wire, AT&L2 for 4-wire), every modulation runs with no dial tone or ringing, V.29, V.33, V.27ter, V.26 and Bell 201, 202 and 208 run as 4-wire leased-line modems on a continuous carrier, V.91 runs symmetric PCM (up to 62667 bps both ways) on a 4-wire digital circuit with no V.8 (AT&L2+MS=V91), and V.54's loop tests with V.52's self-test (AT&T) and V.13's simulated carrier (S48) are there (docs/leased.md). On a clear 64 kbit/s digital channel, an ISDN B-channel's data call, AT+MS=CLEAR runs at 64000 bps both ways with no modulation: dmodemd takes such calls over SIP in CLEARMODE (RFC 4040), and the Asterisk module takes ISDN data calls (a digital bearer, chan_dahdi's) the same way (docs/isdn.md). See docs/dsp/ for details and docs/testing.md for the tests. Between the data pumps and the DTE, link/ is the data link layer: V.42 error correction (LAPM, with its detection phase), MNP 2 to 4 (V.42's alternative procedure) for modems without LAPM, V.44, V.42bis and MNP 5 compression (and zstd between two D-Modems), and plain asynchronous characters, or instead V.80's synchronous access mode for DTEs that frame their own data, such as H.324 terminals (docs/link.md). core/ is the modem core in C++ (the AT commands, S-registers, result codes, the call's state machine and its timers), with the behaviour of Smart Link's slmodemd core; slmodemd, libdmodem and modem_test run on it (docs/core.md).