-
Notifications
You must be signed in to change notification settings - Fork 136
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(eppp_link): Added slave/ppp-server example
- Loading branch information
1 parent
c74f1fb
commit 2984e71
Showing
7 changed files
with
180 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# The following five lines of boilerplate have to be in your project's | ||
# CMakeLists in this exact order for cmake to work correctly | ||
cmake_minimum_required(VERSION 3.16) | ||
|
||
include($ENV{IDF_PATH}/tools/cmake/project.cmake) | ||
project(pppos_slave) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
|
||
# Wi-Fi station to PPPoS server | ||
|
||
This example demonstrate using NAPT to bring connectivity from WiFi station to PPPoS server. | ||
|
||
This example expect a PPPoS client to connect to the server and use the connectivity. | ||
The client could be a Linux computer with `pppd` service or another microcontroller with PPP client (or another ESP32 with not WiFi interface) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
idf_component_register(SRCS "station_example_main.c" | ||
INCLUDE_DIRS ".") |
21 changes: 21 additions & 0 deletions
21
components/eppp_link/examples/slave/main/Kconfig.projbuild
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
menu "Example Configuration" | ||
|
||
config ESP_WIFI_SSID | ||
string "WiFi SSID" | ||
default "myssid" | ||
help | ||
SSID (network name) for the example to connect to. | ||
|
||
config ESP_WIFI_PASSWORD | ||
string "WiFi Password" | ||
default "mypassword" | ||
help | ||
WiFi password (WPA or WPA2) for the example to use. | ||
|
||
config ESP_MAXIMUM_RETRY | ||
int "Maximum retry" | ||
default 5 | ||
help | ||
Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent. | ||
|
||
endmenu |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
dependencies: | ||
espressif/eppp_link: | ||
version: "*" | ||
override_path: "../../.." |
132 changes: 132 additions & 0 deletions
132
components/eppp_link/examples/slave/main/station_example_main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
/* | ||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD | ||
* | ||
* SPDX-License-Identifier: Unlicense OR CC0-1.0 | ||
*/ | ||
|
||
#include <string.h> | ||
#include "freertos/FreeRTOS.h" | ||
#include "freertos/task.h" | ||
#include "freertos/event_groups.h" | ||
#include "esp_system.h" | ||
#include "esp_wifi.h" | ||
#include "esp_event.h" | ||
#include "esp_log.h" | ||
#include "nvs_flash.h" | ||
#include "eppp_link.h" | ||
|
||
#include "lwip/err.h" | ||
#include "lwip/sys.h" | ||
|
||
/* FreeRTOS event group to signal when we are connected*/ | ||
static EventGroupHandle_t s_wifi_event_group; | ||
|
||
/* The event group allows multiple bits for each event, but we only care about two events: | ||
* - we are connected to the AP with an IP | ||
* - we failed to connect after the maximum amount of retries */ | ||
#define WIFI_CONNECTED_BIT BIT0 | ||
#define WIFI_FAIL_BIT BIT1 | ||
|
||
static const char *TAG = "sta2pppos"; | ||
|
||
static int s_retry_num = 0; | ||
|
||
static void event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) | ||
{ | ||
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { | ||
esp_wifi_connect(); | ||
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { | ||
if (s_retry_num < CONFIG_ESP_MAXIMUM_RETRY) { | ||
esp_wifi_connect(); | ||
s_retry_num++; | ||
ESP_LOGI(TAG, "retry to connect to the AP"); | ||
} else { | ||
xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); | ||
} | ||
ESP_LOGI(TAG, "connect to the AP fail"); | ||
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { | ||
ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data; | ||
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); | ||
s_retry_num = 0; | ||
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); | ||
} | ||
} | ||
|
||
void wifi_init_sta(void) | ||
{ | ||
s_wifi_event_group = xEventGroupCreate(); | ||
|
||
ESP_ERROR_CHECK(esp_netif_init()); | ||
|
||
ESP_ERROR_CHECK(esp_event_loop_create_default()); | ||
esp_netif_create_default_wifi_sta(); | ||
|
||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); | ||
ESP_ERROR_CHECK(esp_wifi_init(&cfg)); | ||
|
||
esp_event_handler_instance_t instance_any_id; | ||
esp_event_handler_instance_t instance_got_ip; | ||
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, | ||
ESP_EVENT_ANY_ID, | ||
&event_handler, | ||
NULL, | ||
&instance_any_id)); | ||
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, | ||
IP_EVENT_STA_GOT_IP, | ||
&event_handler, | ||
NULL, | ||
&instance_got_ip)); | ||
|
||
wifi_config_t wifi_config = { | ||
.sta = { | ||
.ssid = CONFIG_ESP_WIFI_SSID, | ||
.password = CONFIG_ESP_WIFI_PASSWORD, | ||
}, | ||
}; | ||
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); | ||
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) ); | ||
ESP_ERROR_CHECK(esp_wifi_start() ); | ||
|
||
ESP_LOGI(TAG, "wifi_init_sta finished."); | ||
|
||
/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum | ||
* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */ | ||
EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, | ||
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, | ||
pdFALSE, | ||
pdFALSE, | ||
portMAX_DELAY); | ||
|
||
/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually | ||
* happened. */ | ||
if (bits & WIFI_CONNECTED_BIT) { | ||
ESP_LOGI(TAG, "connected to ap SSID:%s password:%s", | ||
CONFIG_ESP_WIFI_SSID, CONFIG_ESP_WIFI_PASSWORD); | ||
} else if (bits & WIFI_FAIL_BIT) { | ||
ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", | ||
CONFIG_ESP_WIFI_SSID, CONFIG_ESP_WIFI_PASSWORD); | ||
} else { | ||
ESP_LOGE(TAG, "UNEXPECTED EVENT"); | ||
} | ||
} | ||
|
||
void app_main(void) | ||
{ | ||
//Initialize NVS | ||
esp_err_t ret = nvs_flash_init(); | ||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { | ||
ESP_ERROR_CHECK(nvs_flash_erase()); | ||
ret = nvs_flash_init(); | ||
} | ||
ESP_ERROR_CHECK(ret); | ||
|
||
ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); | ||
wifi_init_sta(); | ||
|
||
esp_netif_t *eppp_netif = eppp_listen(); | ||
if (eppp_netif == NULL) { | ||
ESP_LOGE(TAG, "Failed to setup connection"); | ||
return ; | ||
} | ||
ESP_ERROR_CHECK(esp_netif_napt_enable(eppp_netif)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
CONFIG_UART_ISR_IN_IRAM=y | ||
CONFIG_LWIP_IP_FORWARD=y | ||
CONFIG_LWIP_IPV4_NAPT=y | ||
CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=4096 | ||
CONFIG_LWIP_PPP_SUPPORT=y | ||
CONFIG_LWIP_PPP_SERVER_SUPPORT=y | ||
CONFIG_LWIP_PPP_VJ_HEADER_COMPRESSION=n | ||
CONFIG_EPPP_LINK_DEVICE_SPI=y |