1.. _modem:
2
3Modem modules
4#############
5
6This service provides modules necessary to communicate with modems.
7
8Modems are self-contained devices that implement the hardware and
9software necessary to perform RF (Radio-Frequency) communication,
10including GNSS, Cellular, WiFi etc.
11
12The modem modules are inter-connected dynamically using
13data-in/data-out pipes making them independently testable and
14highly flexible, ensuring stability and scalability.
15
16Modem pipe
17**********
18
19This module is used to abstract data-in/data-out communication over
20a variety of mechanisms, like UART and CMUX DLCI channels, in a
21thread-safe manner.
22
23A modem backend will internally contain an instance of a modem_pipe
24structure, alongside any buffers and additional structures required
25to abstract away its underlying mechanism.
26
27The modem backend will return a pointer to its internal modem_pipe
28structure when initialized, which will be used to interact with the
29backend through the modem pipe API.
30
31.. doxygengroup:: modem_pipe
32
33Modem PPP
34*********
35
36This module defines and binds a L2 PPP network interface, described in
37:ref:`net_l2_interface`, to a modem backend. The L2 PPP interface sends
38and receives network packets. These network packets have to be wrapped
39in PPP frames before being transported via a modem backend. This module
40performs said wrapping.
41
42.. doxygengroup:: modem_ppp
43
44Modem CMUX
45**********
46
47This module is an implementation of CMUX following the 3GPP 27.010
48specification. CMUX is a multiplexing protocol, allowing for multiple
49bi-directional streams of data, called DLCI channels. The module
50attaches to a single modem backend, exposing multiple modem backends,
51each representing a DLCI channel.
52
53.. doxygengroup:: modem_cmux
54
55Modem pipelink
56**************
57
58This module is used to share modem pipes globally. This module aims to
59decouple the creation and setup of modem pipes in device drivers from
60the users of said pipes. See
61:zephyr_file:`drivers/modem/modem_at_shell.c` and
62:zephyr_file:`drivers/modem/modem_cellular.c` for examples of how to
63use the modem pipelink between device driver and application.
64
65.. doxygengroup:: modem_pipelink
66