.. _c_api:

C API Documentation
===================


The C API is very simple and consist of these two basic parts:

- :ref:`lifecycle_api`
- :ref:`modem_commands`

The Typical application workflow is to:

- Create a DCE instance (using :cpp:func:`esp_modem_new`)
- Call specific functions to issue AT commands (:ref:`modem_commands`)
- Switch to the data mode (using :cpp:func:`esp_modem_set_mode`)
- Perform desired network operations (using standard networking API, unrelated to ESP-MODEM)
- Optionally switch back to command mode (again :cpp:func:`esp_modem_set_mode`)
- Destroy the DCE handle (sing :cpp:func:`esp_modem_destroy`)

Note the configuration structures for DTE and DCE, needed for creating the DCE instance, is documented in :ref:`api_config`

.. _lifecycle_api:

Lifecycle API
-------------

These functions are used to create, destroy and set modem working mode.

- :cpp:func:`esp_modem_new`
- :cpp:func:`esp_modem_destroy`
- :cpp:func:`esp_modem_set_mode`

.. doxygengroup:: ESP_MODEM_C_API


.. _modem_commands:

Modem commands
--------------

These functions are the actual commands to communicate with the modem using AT command interface.

Note that the functions which implement AT commands returning textual values use plain ``char *``
pointer as the return value. The API expects the output data to point to user allocated space of at least
``CONFIG_ESP_MODEM_C_API_STR_MAX`` (128 by default) bytes, it also truncates the output data to this size.

.. doxygenfile:: dce.h

.. _api_config:

Configuration structures
------------------------


.. doxygengroup:: ESP_MODEM_CONFIG
   :members:
