Fabrice Bellard's linmodem made to build on modern Linux https://osmocom.org/projects/linmodem/wiki
Go to file
Harald Welte 14bfba54a7 fix compilation with modern gcc-11
This addresses missing 'extern'' declarations in header filesr

/usr/bin/ld: lmsim.o:/space/home/laforge/projects/git/linmodem/v34priv.h:179: multiple definition of `trellis_trans_16'; lm.o:/space/home/laforge/projects/git/linmodem/v34priv.h:179: first defined here
2021-12-29 23:41:35 +01:00
.gitignore Add .sw files to .gitignore file 2018-01-01 16:11:08 +01:00
CHANGES Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
COPYING Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
Makefile Add nodisplay.c stubs to permit compiling without USE_X11 2014-07-20 19:44:40 -07:00
README Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
README.arch Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
README.x11 Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
atparser.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
display.c HACK: switch X from 16bit to 24bit visual 2018-01-01 16:11:30 +01:00
display.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
dsp.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
dsp.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
dtmf.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
dtmf.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
fsk.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
fsk.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
lm.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
lm.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
lmreal.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
lmsim.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
lmsoundcard.c fix various compiler warnings 2019-12-30 03:16:43 +01:00
lmstates.h lmstates.h: Don't use #pragma once 2019-12-30 03:14:08 +01:00
nodisplay.c Add nodisplay.c stubs to permit compiling without USE_X11 2014-07-20 19:44:40 -07:00
serial.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v8.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v8.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
v21.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v21.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
v22.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v22.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
v23.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v23.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
v34.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v34.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
v34eq.c fix various compiler warnings 2019-12-30 03:16:43 +01:00
v34gen.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v34phase2.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v34priv.h fix compilation with modern gcc-11 2021-12-29 23:41:35 +01:00
v90.c fix various compiler warnings 2019-12-30 03:16:43 +01:00
v90.h use '#pragma once' in all header files 2018-01-01 16:11:25 +01:00
v90gen.c Initial import of linmodem-0.2.5.tgz 2014-07-20 18:28:02 -07:00
v90priv.h fix compilation with modern gcc-11 2021-12-29 23:41:35 +01:00

README

Here is the generic Linux Modem. This modem is totally software,
it means that all the DSP stuff is done by the main CPU, as in some so
called "winmodems". See the main project page at
http://www.enst.fr/~bellard/linmodem.html. 

Linmodem is also a research project. It contains all the necessary
stuff to test new digital communication algorithms. The line simulator
and the X11 interface can be used to simulate a complete communication
chain.

Linmodem is the first modem to integrate a graphical user interface
which show the data transmitted graphically (QAM constellation, real
time FFT of the received signal, etc...) and which will allow you to
monitor the line quality.

What's done:
-----------

- V34 modulator (sampling rate of 8000 Hz)
- V34 demodulator (sampling rate of 8000 Hz), but no echo cancellor.
- Algebraic part of V90.
- DTMF dialing/receive.
- V8 protocol.
- V21 modulation & demodulation
- V23 modulation & demodulation
- sample code to test the protocol.
- sample code to test V21, V22, V23, V34 and V90 independently from the modem.
- a basic phone line simulator (with echos & typical line
  amplitude/phase distortion).
- an X11 interface (see README.x11)
- soundcard interface.
- AT command parser & sample tty simulator.
- asynchronous protocol.

See the homepage of the project at
http://www.enst.fr/~bellard/linmodem.html to know what are the tasks
you could do.

Read the file README.arch to know the details of the
implementation. Next versions will contain the first draft on the
algorithms which are implemented.

Testing:
-------

Yes, you can already hear the modem !

compile everything, then type: 

lm -sv

You will see a lot of debug stuff. Then you can press Control C to
stop the call. If you play the files 'ans.sw' and 'cal.sw' on your
soundcard (16 bit, signed 8kHz), you will hear the DTMF pulses, the V8
negociation, and a sample V21 connection. The X11 interface allows you
to see the signals exchanged.

Data pump testing:
-----------------

With the option '-m modulation_name', you can test the V21, V22, V23,
V34 and V90 data pumps.  You can understand what's going on in this
test only if you have a basic knowledge of the modulations.

The X11 interface can be used to monitor all the main data pump
parameters, except for V90 which is not yet completely integrated in
the tests (see README.x11).

Real modems:
-----------

Linmodem won't contain any
hardware modem to support modems directly, but it will use kernel
drivers which give a unified API to every driver (see README.arch to
have an idea of the API)

Some test code is included in lmreal.c to work with the LTModem stuff
available at http://www.close.u-net.com/ltmodem.html. However, it was
not tested so don't expect it to work in this version.

Soundcard testing:
-----------------

If you have two PCs connected by soundcards (connect line in -> line
out), you may try the soundcard support of linmodem (not tested now,
but should work):

'lm -tv' launches linmodem on your soundcard (device '/dev/dsp'). Then
you can type 'ATDTxxx' to compose a number and launch a connection. On
the other PC, type 'ATA' to receive the connection. It should work in
V23 (or V21 if you change the defaults modulations in lm.c).

With 'lm -t', linmodem simulates a serial line on '/dev/ttyz0'. You
can use minicom or any other terminal emulator to send AT commands.

Enjoy :-)

Fabrice Bellard - bellard@email.enst.fr - http://www.enst.fr/~bellard