Files
esp-protocols/esp_modem/advanced_api.html

302 lines
31 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Advanced esp-modem use cases &#8212; esp-modem documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Internal design" href="internal_design.html" />
<link rel="prev" title="C++ API Documentation" href="cxx_api_docs.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="advanced-esp-modem-use-cases">
<h1>Advanced esp-modem use cases<a class="headerlink" href="#advanced-esp-modem-use-cases" title="Permalink to this headline"></a></h1>
<p>This chapter outlines basic extensibility of the esp-modem component.</p>
<section id="custom-instantiation-with-dce-factory">
<span id="dce-factory"></span><h2>Custom instantiation with DCE factory<a class="headerlink" href="#custom-instantiation-with-dce-factory" title="Permalink to this headline"></a></h2>
<p>It is possible to create a modem handle in many different ways:</p>
<ul class="simple">
<li><p>Build a DCE on top a generic module, user defined module or build the module only (in case the application will only use AT command interface)</p></li>
<li><p>Create the DCE as a shared, unique or a vanilla pointer</p></li>
<li><p>Create a generic DCE or a templated DCE_T of a specific module (this could be one of the supported modules or a user defined module)</p></li>
</ul>
<p>All the functionality is provided by the DCE factory</p>
<dl>
<dt class="sig sig-object cpp">
<span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y"></span><em><span class="pre">group</span></em> <span class="sig-name descname"><span class="pre">ESP_MODEM_DCE_FACTORY</span></span></dt>
<dd><p><a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> modem factory. </p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-enums">Enums</p>
<dl class="cpp enum-class">
<dt class="sig sig-object cpp" id="_CPPv49ModemType">
<span id="_CPPv39ModemType"></span><span id="_CPPv29ModemType"></span><span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y_1ga34f5bd407ce186b43f44b5c8cfbf2fd9"></span><span class="k"><span class="pre">enum</span></span><span class="w"> </span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">ModemType</span></span></span><a class="headerlink" href="#_CPPv49ModemType" title="Permalink to this definition"></a><br /></dt>
<dd><p>Specific modem choice when creating by the <a class="reference internal" href="#classesp__modem_1_1dce__factory_1_1_factory"><span class="std std-ref">Factory</span></a>. </p>
<p><em>Values:</em></p>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N9ModemType13GenericModuleE">
<span id="_CPPv3N9ModemType13GenericModuleE"></span><span id="_CPPv2N9ModemType13GenericModuleE"></span><span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y_1gga34f5bd407ce186b43f44b5c8cfbf2fd9aa8bf3237121049ad32b6caa9e888a248"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">GenericModule</span></span></span><a class="headerlink" href="#_CPPv4N9ModemType13GenericModuleE" title="Permalink to this definition"></a><br /></dt>
<dd><p>Default generic module with the most common commands </p>
</dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N9ModemType7SIM7600E">
<span id="_CPPv3N9ModemType7SIM7600E"></span><span id="_CPPv2N9ModemType7SIM7600E"></span><span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y_1gga34f5bd407ce186b43f44b5c8cfbf2fd9aa0e5dcb06d41510dde0b20f2e59e75a2"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SIM7600</span></span></span><a class="headerlink" href="#_CPPv4N9ModemType7SIM7600E" title="Permalink to this definition"></a><br /></dt>
<dd><p>Derived from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a>, specifics applied to <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_s_i_m7600"><span class="std std-ref">SIM7600</span></a> model </p>
</dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N9ModemType7SIM7070E">
<span id="_CPPv3N9ModemType7SIM7070E"></span><span id="_CPPv2N9ModemType7SIM7070E"></span><span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y_1gga34f5bd407ce186b43f44b5c8cfbf2fd9a17612eb64619563fb0b5c35d046d419d"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SIM7070</span></span></span><a class="headerlink" href="#_CPPv4N9ModemType7SIM7070E" title="Permalink to this definition"></a><br /></dt>
<dd><p>Derived from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a>, specifics applied to <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_s_i_m7070"><span class="std std-ref">SIM7070</span></a> model </p>
</dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N9ModemType7SIM7000E">
<span id="_CPPv3N9ModemType7SIM7000E"></span><span id="_CPPv2N9ModemType7SIM7000E"></span><span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y_1gga34f5bd407ce186b43f44b5c8cfbf2fd9a719215eb78ae5f264bb9af70af9aedaa"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SIM7000</span></span></span><a class="headerlink" href="#_CPPv4N9ModemType7SIM7000E" title="Permalink to this definition"></a><br /></dt>
<dd><p>Derived from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a>, specifics applied to <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_s_i_m7000"><span class="std std-ref">SIM7000</span></a> model </p>
</dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N9ModemType4BG96E">
<span id="_CPPv3N9ModemType4BG96E"></span><span id="_CPPv2N9ModemType4BG96E"></span><span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y_1gga34f5bd407ce186b43f44b5c8cfbf2fd9a80e1af61101ed94123673230a16bdbe0"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">BG96</span></span></span><a class="headerlink" href="#_CPPv4N9ModemType4BG96E" title="Permalink to this definition"></a><br /></dt>
<dd><p>Derived from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a>, specifics applied to BG69 model </p>
</dd></dl>
<dl class="cpp enumerator">
<dt class="sig sig-object cpp" id="_CPPv4N9ModemType6SIM800E">
<span id="_CPPv3N9ModemType6SIM800E"></span><span id="_CPPv2N9ModemType6SIM800E"></span><span class="target" id="group___e_s_p___m_o_d_e_m___d_c_e___f_a_c_t_o_r_y_1gga34f5bd407ce186b43f44b5c8cfbf2fd9a6705b747abfe5514ac06e14ef95ebc44"></span><span class="k"><span class="pre">enumerator</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">SIM800</span></span></span><a class="headerlink" href="#_CPPv4N9ModemType6SIM800E" title="Permalink to this definition"></a><br /></dt>
<dd><p>Derived from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a> with specifics applied to <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_s_i_m800"><span class="std std-ref">SIM800</span></a> model </p>
</dd></dl>
</dd></dl>
</div>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem11dce_factory13FactoryHelperE">
<span id="_CPPv3N9esp_modem11dce_factory13FactoryHelperE"></span><span id="_CPPv2N9esp_modem11dce_factory13FactoryHelperE"></span><span id="esp_modem::dce_factory::FactoryHelper"></span><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory_helper"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">FactoryHelper</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem11dce_factory13FactoryHelperE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dce_factory.hpp&gt;</em></div>
<p>Helper class for creating a user define pointer in a specific way, either as a plain pointer, shared_ptr or unique_ptr. </p>
</dd></dl>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4I0EN9esp_modem11dce_factory7CreatorE">
<span id="_CPPv3I0EN9esp_modem11dce_factory7CreatorE"></span><span id="_CPPv2I0EN9esp_modem11dce_factory7CreatorE"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T_Module</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1dce__factory_1_1_creator"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">Creator</span></span></span><a class="headerlink" href="#_CPPv4I0EN9esp_modem11dce_factory7CreatorE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dce_factory.hpp&gt;</em></div>
<p><a class="reference internal" href="#classesp__modem_1_1dce__factory_1_1_creator"><span class="std std-ref">Creator</span></a> class for building a DCE_T&lt;Module&gt; in a specific way, either from a Module object or by default from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> and netif. </p>
<dl class="field-list simple">
<dt class="field-odd">Throws </dt>
<dd class="field-odd"><p></p></dd>
</dl>
</dd></dl>
<dl class="cpp class">
<dt class="sig sig-object cpp" id="_CPPv4N9esp_modem11dce_factory7FactoryE">
<span id="_CPPv3N9esp_modem11dce_factory7FactoryE"></span><span id="_CPPv2N9esp_modem11dce_factory7FactoryE"></span><span id="esp_modem::dce_factory::Factory"></span><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory"></span><span class="k"><span class="pre">class</span></span><span class="w"> </span><span class="sig-prename descclassname"><span class="n"><span class="pre">esp_modem</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">dce_factory</span></span><span class="p"><span class="pre">::</span></span></span><span class="sig-name descname"><span class="n"><span class="pre">Factory</span></span></span><a class="headerlink" href="#_CPPv4N9esp_modem11dce_factory7FactoryE" title="Permalink to this definition"></a><br /></dt>
<dd><div class="docutils container">
<em>#include &lt;esp_modem_dce_factory.hpp&gt;</em></div>
<p><a class="reference internal" href="#classesp__modem_1_1dce__factory_1_1_factory"><span class="std std-ref">Factory</span></a> class for creating virtual <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> objects based on the configuration of the supplied module. This could also be used to create a custom module or a DCE_T&lt;module&gt;, provided user app derives from this factory. </p>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-functions">Public Functions</p>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4IDpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args">
<span id="_CPPv3IDpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span id="_CPPv2IDpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="sig-name descname"><span class="n"><span class="pre">Args</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory_1a5fd0210522a31e645f28c0b0f23ffb67"></span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">unique_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCEE" title="esp_modem::DCE"><span class="n"><span class="pre">DCE</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">build_unique</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">config</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">cfg</span></span>, <a class="reference internal" href="#_CPPv4IDpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="esp_modem::dce_factory::Factory::build_unique::Args"><span class="n"><span class="pre">Args</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">...</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">args</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4IDpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a default unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> generically, with the chosen module derived from the <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_generic_module"><span class="std std-ref">GenericModule</span></a>. </p>
<dl class="field-list simple">
<dt class="field-odd">Template Parameters</dt>
<dd class="field-odd"><p><strong>Args</strong> Arguments to the builder, i.e. constructor of <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e___t"><span class="std std-ref">esp_modem::DCE_T</span></a> class </p>
</dd>
<dt class="field-even">Parameters</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>cfg</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> configuration structure <a class="reference internal" href="api_docs.html#structesp__modem__dte__config"><span class="std std-ref">esp_modem_dte_config</span></a> </p></li>
<li><p><strong>args</strong> typically a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> object and a netif handle for PPP network </p></li>
</ul>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> of the created <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> on success </p>
</dd>
</dl>
</dd></dl>
</div>
<div class="breathe-sectiondef docutils container">
<p class="breathe-sectiondef-title rubric" id="breathe-section-title-public-static-functions">Public Static Functions</p>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I0DpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args">
<span id="_CPPv3I0DpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span id="_CPPv2I0DpEN9esp_modem11dce_factory7Factory12build_uniqueEPK6configDpRR4Args"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T_Module</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="sig-name descname"><span class="n"><span class="pre">Args</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory_1a2a4686de666658fb89a8d80ce2935bf2"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">unique_ptr</span></span><span class="p"><span class="pre">&lt;</span></span><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCEE" title="esp_modem::DCE"><span class="n"><span class="pre">DCE</span></span></a><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">build_unique</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">config</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">cfg</span></span>, <a class="reference internal" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="esp_modem::dce_factory::Factory::build_unique::Args"><span class="n"><span class="pre">Args</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">...</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">args</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory12build_uniqueENSt10unique_ptrI3DCEEEPK6configDpRR4Args" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a default unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> in a specific way (from the module) </p>
<dl class="field-list simple">
<dt class="field-odd">Template Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>Module</strong> Specific Module used in this <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> </p></li>
<li><p><strong>Args</strong> Arguments to the builder, i.e. constructor of <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e___t"><span class="std std-ref">esp_modem::DCE_T</span></a> class </p></li>
</ul>
</dd>
<dt class="field-even">Parameters</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>cfg</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> configuration structure <a class="reference internal" href="api_docs.html#structesp__modem__dte__config"><span class="std std-ref">esp_modem_dte_config</span></a> </p></li>
<li><p><strong>args</strong> typically a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> object and a netif handle for PPP network </p></li>
</ul>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>unique_ptr <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> of the created <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> on success </p>
</dd>
</dl>
</dd></dl>
<dl class="cpp function">
<dt class="sig sig-object cpp" id="_CPPv4I0DpEN9esp_modem11dce_factory7Factory5buildEP3DCEPK6configDpRR4Args">
<span id="_CPPv3I0DpEN9esp_modem11dce_factory7Factory5buildEPK6configDpRR4Args"></span><span id="_CPPv2I0DpEN9esp_modem11dce_factory7Factory5buildEPK6configDpRR4Args"></span><span class="k"><span class="pre">template</span></span><span class="p"><span class="pre">&lt;</span></span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">T_Module</span></span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="k"><span class="pre">typename</span></span><span class="w"> </span><span class="p"><span class="pre">...</span></span><span class="sig-name descname"><span class="n"><span class="pre">Args</span></span></span><span class="p"><span class="pre">&gt;</span></span><br /><span class="target" id="classesp__modem_1_1dce__factory_1_1_factory_1a2dfb050a53429bb651fb58de5841c04d"></span><span class="k"><span class="pre">static</span></span><span class="w"> </span><span class="k"><span class="pre">inline</span></span><span class="w"> </span><a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem3DCEE" title="esp_modem::DCE"><span class="n"><span class="pre">DCE</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="sig-name descname"><span class="n"><span class="pre">build</span></span></span><span class="sig-paren">(</span><span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="n"><span class="pre">config</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n sig-param"><span class="pre">cfg</span></span>, <a class="reference internal" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory5buildEP3DCEPK6configDpRR4Args" title="esp_modem::dce_factory::Factory::build::Args"><span class="n"><span class="pre">Args</span></span></a><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">&amp;</span></span><span class="p"><span class="pre">...</span></span><span class="w"> </span><span class="n sig-param"><span class="pre">args</span></span><span class="sig-paren">)</span><a class="headerlink" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory5buildEP3DCEPK6configDpRR4Args" title="Permalink to this definition"></a><br /></dt>
<dd><p>Create a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a>. </p>
<dl class="field-list simple">
<dt class="field-odd">Template Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>Module</strong> Specific Module used in this <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> </p></li>
<li><p><strong>Args</strong> Arguments to the builder, i.e. constructor of <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e___t"><span class="std std-ref">esp_modem::DCE_T</span></a> class </p></li>
</ul>
</dd>
<dt class="field-even">Parameters</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>cfg</strong> <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> configuration structure <a class="reference internal" href="api_docs.html#structesp__modem__dte__config"><span class="std std-ref">esp_modem_dte_config</span></a> </p></li>
<li><p><strong>args</strong> typically a <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_t_e"><span class="std std-ref">DTE</span></a> object and a netif handle for PPP network </p></li>
</ul>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> pointer the created <a class="reference internal" href="internal_docs.html#classesp__modem_1_1_d_c_e"><span class="std std-ref">DCE</span></a> on success </p>
</dd>
</dl>
</dd></dl>
</div>
</dd></dl>
</dd></dl>
</section>
<section id="create-custom-module">
<span id="id1"></span><h2>Create custom module<a class="headerlink" href="#create-custom-module" title="Permalink to this headline"></a></h2>
<p>Creating a custom module is necessary if the application needs to use a specific device that is not supported
and their commands differ from any of the supported devices. In this case it is recommended to define a new class
representing this specific device and derive from the <a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem13GenericModuleE" title="esp_modem::GenericModule"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">esp_modem::GenericModule</span></code></a>. In order to instantiate
the appropriate DCE of this module, application could use <a class="reference internal" href="#dce-factory"><span class="std std-ref">the DCE factory</span></a>, and build the DCE with
the specific module, using <a class="reference internal" href="#_CPPv4I0DpEN9esp_modem11dce_factory7Factory5buildEP3DCEPK6configDpRR4Args" title="esp_modem::dce_factory::Factory::build"><code class="xref cpp cpp-func docutils literal notranslate"><span class="pre">esp_modem::dce_factory::Factory::build()</span></code></a>.</p>
<p>Please refer to the implementation of the existing modules.</p>
<p>Please note that the <code class="docutils literal notranslate"><span class="pre">modem_console</span></code> example defines a trivial custom modem DCE which overrides one command,
for demonstration purposes only.</p>
</section>
<section id="create-new-communication-interface">
<h2>Create new communication interface<a class="headerlink" href="#create-new-communication-interface" title="Permalink to this headline"></a></h2>
<p>In order to connect to a device using an unsupported interface (e.g. SPI or I2C), it is necessary to implement
a custom DTE object and supply it into <a class="reference internal" href="#dce-factory"><span class="std std-ref">the DCE factory</span></a>. The DCE is typically created in two steps:</p>
<ul class="simple">
<li><p>Define and create the corresponding terminal, which communicates on the custom interface. This terminal should support basic IO methods defined in <a class="reference internal" href="internal_docs.html#_CPPv4N9esp_modem8TerminalE" title="esp_modem::Terminal"><code class="xref cpp cpp-class docutils literal notranslate"><span class="pre">esp_modem::Terminal</span></code></a> and derive from it.</p></li>
<li><p>Create the DTE which uses the custom Terminal</p></li>
</ul>
<p>Please refer to the implementation of the existing UART DTE.</p>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">esp-modem</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="README.html">Brief intro</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_docs.html">C interface</a></li>
<li class="toctree-l1"><a class="reference internal" href="cxx_api_docs.html">C++ interface</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Advanced use cases</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#custom-instantiation-with-dce-factory">Custom instantiation with DCE factory</a></li>
<li class="toctree-l2"><a class="reference internal" href="#create-custom-module">Create custom module</a></li>
<li class="toctree-l2"><a class="reference internal" href="#create-new-communication-interface">Create new communication interface</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="internal_design.html">Internal design</a></li>
<li class="toctree-l1"><a class="reference internal" href="internal_docs.html">Internal implementation</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="cxx_api_docs.html" title="previous chapter">C++ API Documentation</a></li>
<li>Next: <a href="internal_design.html" title="next chapter">Internal design</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2016 - 2021, Espressif Systems (Shanghai) Co., Ltd.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
|
<a href="_sources/advanced_api.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>