Skip to content

Commit f806d88

Browse files
committed
feat(modem): Add iperf test of PPP netif
1 parent 909e8d9 commit f806d88

File tree

9 files changed

+586
-0
lines changed

9 files changed

+586
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# The following five lines of boilerplate have to be in your project's
2+
# CMakeLists in this exact order for cmake to work correctly
3+
cmake_minimum_required(VERSION 3.5)
4+
5+
set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/system/console/advanced/components
6+
$ENV{IDF_PATH}/examples/common_components/iperf
7+
"../..")
8+
9+
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
10+
project(pppd_test)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
idf_component_register(SRCS "NetworkDCE.cpp"
2+
"cmd_pppclient.c"
3+
"pppd_iperf_main.c")
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
3+
*
4+
* SPDX-License-Identifier: Unlicense OR CC0-1.0
5+
*/
6+
#include "cxx_include/esp_modem_dte.hpp"
7+
#include "esp_modem_config.h"
8+
#include "cxx_include/esp_modem_api.hpp"
9+
#include "cxx_include/esp_modem_dce_factory.hpp"
10+
#include <memory>
11+
#include <utility>
12+
13+
using namespace esp_modem;
14+
using namespace esp_modem::dce_factory;
15+
16+
class NetModule;
17+
typedef DCE_T<NetModule> NetDCE;
18+
19+
/**
20+
* @brief Custom factory which can build and create a DCE using a custom module
21+
*/
22+
class NetDCE_Factory: public Factory {
23+
public:
24+
template <typename T, typename ...Args>
25+
static DCE_T<T> *create(const config *cfg, Args &&... args)
26+
{
27+
return build_generic_DCE<T>(cfg, std::forward<Args>(args)...);
28+
}
29+
};
30+
31+
/**
32+
* @brief This is a null-module, doesn't define any AT commands, just passes everything to pppd
33+
*/
34+
class NetModule: public ModuleIf {
35+
public:
36+
explicit NetModule(std::shared_ptr<DTE> dte, const esp_modem_dce_config *cfg):
37+
dte(std::move(dte)) {}
38+
39+
bool setup_data_mode() override
40+
{
41+
return true;
42+
}
43+
44+
bool set_mode(modem_mode mode) override
45+
{
46+
return true;
47+
}
48+
49+
static esp_err_t init(esp_netif_t *netif)
50+
{
51+
// configure
52+
esp_modem_dte_config_t dte_config = ESP_MODEM_DTE_DEFAULT_CONFIG();
53+
dte_config.uart_config.baud_rate = 921600; // check also 460800
54+
esp_modem_dce_config dce_config = ESP_MODEM_DCE_DEFAULT_CONFIG("");
55+
56+
// create DTE and minimal network DCE
57+
auto uart_dte = create_uart_dte(&dte_config);
58+
dce = NetDCE_Factory::create<NetModule>(&dce_config, uart_dte, netif);
59+
return dce == nullptr ? ESP_FAIL : ESP_OK;
60+
}
61+
62+
static void deinit()
63+
{
64+
delete dce;
65+
}
66+
static void start()
67+
{
68+
dce->set_data();
69+
}
70+
static void stop()
71+
{
72+
dce->exit_data();
73+
}
74+
75+
private:
76+
static NetDCE *dce;
77+
std::shared_ptr<DTE> dte;
78+
};
79+
80+
NetDCE *NetModule::dce = nullptr;
81+
82+
extern "C" esp_err_t modem_init_network(esp_netif_t *netif)
83+
{
84+
return NetModule::init(netif);
85+
}
86+
87+
extern "C" esp_err_t modem_start_network()
88+
{
89+
NetModule::start();
90+
return ESP_OK;
91+
}
92+
93+
extern "C" void modem_stop_network()
94+
{
95+
NetModule::stop();
96+
}

0 commit comments

Comments
 (0)